如何对霍夫变换图像进行去霍夫处理?

信息处理 图像处理 matlab 阈值 霍夫变换
2022-01-15 15:09:46

我正在使用Rosetta Code中的代码来创建 Hough 变换。我现在想找到图像中的所有线条。为此,我需要霍夫空间中每个峰的 ρ 和 θ 值。五边形的示例输出如下所示:

霍夫空间

如何为霍夫空间中可见的每个“热点”找到单个 [θ,ρ] 坐标?

4个回答

您正在查找峰的坐标,然后使用轴将其缩放为 [θ,ρ] 坐标。

根据数据的嘈杂程度、预期的错误峰值数量以及您拥有的时间,有几种方法可以做到这一点。最简单的方法是选择一个真正的峰值水平,切割低于该水平的所有数据,然后在每个峰值上做一个重心以获得它的中心。

您还可以腐蚀/调整图像,直到每个峰值都是一个像素。

File Exchange 上的此代码将帮助您找到所有局部最大值。 http://www.mathworks.com/matlabcentral/fileexchange/14498-local-maxima-minima

如果您对要查找的行数(在本例中为五行)有所了解,则只需选择 Hough 分数最高的五个局部最大值。

您可以定位给定半径的局部最大值。例如,您扫描 Hough 图像,仅当它们在3×3窗户。

第二步可以将峰值位置细化为亚像素精度。这可以通过抛物线拟合来完成。

假设霍夫图像中的值为f(x)在哪里x是二维位置。现在你想找到一个校正向量p最大化f(x+p). 这可以用泰勒展开来写:

f(x+p)f(x)+pTf(x)+12pTf(x)+p

校正向量为

p=f(x)1f(x)

可以通过有限差分从霍夫图像计算导数。

请注意,是一个 Hessian 矩阵,是一个 2 向量(水平和垂直梯度),因此也是一个 2 向量,指定子像素移位以获得局部最大化器的准确位置。f(x)2×2f(x)p

上述等式有时可能会产生超过 1 个像素的偏移。在这种情况下,最大化器邻域不具有抛物线形状,您可能不想进行校正,甚至应该放弃候选最大化器。

Gerig 和 Klein 在 80 年代中期开发了一种非常好的技术。它是一个反向映射过程,它分析霍夫空间以识别与每个边缘点关联的最可能的点,然后构造第二个霍夫空间,其中边缘点到参数的映射是一对一的,而不是一对多的。是通常的第一阶段。我没有提到手,但请查看 Illingworth 和 Kittler 的开创性 Hough 评论论文(大约 1987 年?)