如何将坐标分布对齐到完美对齐?
Posted
技术标签:
【中文标题】如何将坐标分布对齐到完美对齐?【英文标题】:How can I Align a Distribution of Coordinates to a Perfect Alignment? 【发布时间】:2013-05-28 06:31:09 【问题描述】:例如,我有一组方向相同的坐标:
垂直投影坐标:8,15; 9,27; 10,40; 7,55; 5,68。
水平投影坐标:8,27; 20,28; 36,26; 51,25; 64,27;
如何对齐垂直投影和水平投影中的坐标,以便所有垂直投影坐标都有一个 X 值,例如:8,15; 8,27; 8,40; 8,55; 8,68。并且对于水平投影具有相同的 Y 值,例如:8,28; 20,28; 36,28; 51,28; 64,28?
我已经检测到图像中每个点的坐标,但坐标并没有完全对齐(参见上面的坐标示例)。
这就是为什么,我真的需要任何建议,如何将检测到的点对齐到每条线的完美对齐(如颜色突出显示)。
我听说过主成分分析,但如果我使用 PCA,我不知道从哪里开始,因为几乎没有对齐坐标的好例子。
如果有其他好的推荐,我真的希望有人愿意分享。
任何帮助将不胜感激。谢谢
【问题讨论】:
你想如何对齐坐标?通过轴的平均值?也许你应该使用线性回归:en.wikipedia.org/wiki/Linear_regression 单次运行可以有很多行吗?还是仅将坐标对齐在一行中? 线性回归用于寻找最能描述坐标“对齐”的线性函数。我不确定这是否是您需要的,这由您决定。也许你应该更好地描述你在问题中需要什么。 亲爱的@BagelzoneHa'bonè,请阅读我编辑的问题,我真的需要任何建议如何在一次运行中对齐这些坐标。谢谢 【参考方案1】:嗯,由于您使用 OpenCV,您可能会对这种基于像素级矩阵操作的方法感兴趣:
1) 创建二值图片(黑/白),因此您初始化一张黑色图片(或只是所需大小的零矩阵)。
2) 由于您已经得到未排序的点(因此矩阵索引),您可以执行 for 循环。因此,对于每个点,您都将二进制图像中像素的颜色更改为白色。如果你必须注意内存,你可以使用稀疏矩阵。
3) 要获得 x 或 y 中的排序列表,您只需遍历二进制图像的相应行/列并返回每个白色像素的列/行。
因此,您最终会得到一个漂亮的二进制图像和您的排序点。
编辑:由于您想在一个组件中进行一些平均,这可以通过布尔表达式来处理,以便您将所需范围内的一个坐标设置为特定值。第二种解决方案是,在提取点之前旋转输入图像。在 OpenCV 中已经实现了旋转,你只需要找出角度。
干杯 TL
【讨论】:
实际上,我在提取点之前已经进行了旋转(倾斜校正),但我仍然得到了一个不完全对齐的点坐标。 您是否通过 findChessboardCorner 和 calibrateCamera 校准了您的相机?我这样做是为了补偿镜头造成的误差。结果,如果我不扭曲使用相同相机系统拍摄的任何其他照片,我最终会得到完美的线条。由于您原始帖子中的数据点,我认为您受到桶形失真的影响。以上是关于如何将坐标分布对齐到完美对齐?的主要内容,如果未能解决你的问题,请参考以下文章
2万字 + 50 张图,细说 JVM 内存分布内存对齐压缩指针!
均匀分布,对齐的水平导航链接:如何删除空白中的垂直空间:内容后