解释Hough变换

我只是冒险,走向计算机视觉的第一步。 我试图自己实施霍夫变换,但我只是没有得到全面的情况。 我读了维基百科条目,甚至是理查德·杜达(Richard Duda)和彼得·哈特(Peter Hart)的原始“用霍夫变换来检测图片中的线条和曲线”,但没有帮助。

有人可以用更友好的语言向我解释吗?

在矩形坐标中考虑一条线比较常见,即y = mx + b 。 正如维基百科文章所述,一条线也可以用极坐标表示。 Hough变换利用了表示的变化(无论如何,线条也可以应用于圆,椭圆等)。

Hough变换的第一步是将图像缩减为一组边。 Canny边缘检测器是常用的select。 由此产生的边缘图像作为霍夫过程的input。

总而言之,将边缘图像中“点亮”的像素转换为极坐标forms,即它们的位置用方向θ和距离r来表示,而不是xy 。 (图像的中心通常被用作这种坐标变换的参考点。)

霍夫变换本质上是一个直方图。 映射到相同theta和r的边缘像素被假定为在图像中定义一条线。 为了计算出现的频率, thetar被离散化(分成多个分箱)。 一旦所有边缘像素都被转换为极坐标forms,分析箱就可以确定原始图像中的线条。

通常查找N个最频繁的参数 – 或者将参数阈值设置为忽略小于某些n的计数。

我不确定这个答案比你最初提出的来源更好 – 是否有一个特定的点,你坚持?

下面是关于Hough变换如何在图像中检测线条的非常基本的视觉解释:

在这里输入图像说明

Hough变换是找出表示一条线(或一个圆或许多其他事物)的最可能的值的一种方法。

你给霍夫变换input一行的图片。 这张图片将包含两种types的像素:一部分是线条的一部分,另一部分是背景的一部分。

对于作为线的一部分的每个像素,计算所有可能的参数组合。 例如,如果坐标(1,100)处的像素是该线的一部分,那么该线可以是梯度(m)= 0和y截距(c)= 100的线的一部分。它也可以是m = 1,c = 99的一部分; 或者m = 2,c = 98; 或者m = 3,c = 97; 等等。 你可以求解直线方程y = mx + c来find所有可能的组合。

每个像素给每个参数(m和c)一个投票,可以解释它。 所以你可以想象,如果你的行有1000个像素,那么m和c的正确组合将有1000票。

具有最多选票的m和c的组合是作为该行的参数返回的。

这里有另外一个观点(在电视节目“数字”的试播节目中使用过):想象一下喷泉般的草坪洒水器是在草坪上的某个地方,把水滴滴落在自己周围。 现在喷水灭了,但滴水仍然存在。 想象一下,把每一滴水变成自己的喷水器,它本身在四面八方喷出水滴,因为水滴不知道它来自哪个方向。 这会使地面上的水分散很多,只是会有一滴水从一滴滴落到地面。 那个地方是原来的洒水车的地方。

对(例如)行检测的应用是相似的。 图像中的每个点都是原始的液滴之一; 当它作为一个喷头时,它会发送自己的水滴标记所有可能通过该点的线。 大量的二次液滴着陆的地方代表了通过大量图像点的线的参数 – VOILA! 行检测!