我正在使用Rosetta Code中的代码来创建 Hough 变换。我现在想找到图像中的所有线条。为此,我需要霍夫空间中每个峰的 ρ 和 θ 值。五边形的示例输出如下所示:
如何为霍夫空间中可见的每个“热点”找到单个 [θ,ρ] 坐标?
我正在使用Rosetta Code中的代码来创建 Hough 变换。我现在想找到图像中的所有线条。为此,我需要霍夫空间中每个峰的 ρ 和 θ 值。五边形的示例输出如下所示:
如何为霍夫空间中可见的每个“热点”找到单个 [θ,ρ] 坐标?
您正在查找峰的坐标,然后使用轴将其缩放为 [θ,ρ] 坐标。
根据数据的嘈杂程度、预期的错误峰值数量以及您拥有的时间,有几种方法可以做到这一点。最简单的方法是选择一个真正的峰值水平,切割低于该水平的所有数据,然后在每个峰值上做一个重心以获得它的中心。
您还可以腐蚀/调整图像,直到每个峰值都是一个像素。
File Exchange 上的此代码将帮助您找到所有局部最大值。 http://www.mathworks.com/matlabcentral/fileexchange/14498-local-maxima-minima
如果您对要查找的行数(在本例中为五行)有所了解,则只需选择 Hough 分数最高的五个局部最大值。
您可以定位给定半径的局部最大值。例如,您扫描 Hough 图像,仅当它们在窗户。
第二步可以将峰值位置细化为亚像素精度。这可以通过抛物线拟合来完成。
假设霍夫图像中的值为在哪里是二维位置。现在你想找到一个校正向量最大化. 这可以用泰勒展开来写:
校正向量为
可以通过有限差分从霍夫图像计算导数。
请注意,是一个 Hessian 矩阵,是一个 2 向量(水平和垂直梯度),因此也是一个 2 向量,指定子像素移位以获得局部最大化器的准确位置。
上述等式有时可能会产生超过 1 个像素的偏移。在这种情况下,最大化器邻域不具有抛物线形状,您可能不想进行校正,甚至应该放弃候选最大化器。
Gerig 和 Klein 在 80 年代中期开发了一种非常好的技术。它是一个反向映射过程,它分析霍夫空间以识别与每个边缘点关联的最可能的点,然后构造第二个霍夫空间,其中边缘点到参数的映射是一对一的,而不是一对多的。是通常的第一阶段。我没有提到手,但请查看 Illingworth 和 Kittler 的开创性 Hough 评论论文(大约 1987 年?)