解释霍夫变换

时间:2011-01-17 03:17:21

标签: image-processing geometry computer-vision hough-transform pattern-recognition

我只是喜欢冒险并且迈出了我的第一个宝宝迈向计算机视觉。我试图自己实现霍夫变换,但我只是没有全面了解。我阅读了维基百科条目,甚至是原始的“使用霍夫变换检测图片中的线条和曲线”,由理查德·杜达和彼得·哈特,但没有帮助。

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

4 个答案:

答案 0 :(得分:117)

这是一个非常基本的视觉解释,说明霍夫变换如何用于检测图像中的线条:

enter image description here

答案 1 :(得分:36)

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

霍夫变换的第一步是将图像缩小为一组边。 Canny边缘检测器是常见的选择。生成的边缘图像用作Hough过程的输入。

总而言之,边缘图像中“点亮”的像素被转换为极性形式,即,它们的位置使用方向 theta 和距离 r 来表示 - 而不是 x y 。 (图像的中心通常用作坐标变化的参考点。)

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

通常会查找 N 最常见的参数 - 或者对参数进行阈值处理,使得小于某些 n 的计数被忽略。

我不确定这个答案是否比您最初提供的来源更好 - 是否有一点特别值得您坚持下去?

答案 2 :(得分:15)

霍夫变换是一种寻找代表一条线(或一个圆或许多其他东西)的最可能值的方法。

你给霍夫变换一条线的图片作为输入。该图片将包含两种类型的像素:一部分是线条的一部分,另一部分是背景的一部分。

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

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

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

答案 3 :(得分:1)

这是另一个视角(在电视节目 Numbers 的试播集中使用的一个视角):想象一下,喷泉般的草坪洒水器早些时候在草坪上的某处,抛出水滴本身。现在洒水器已经消失,但水滴仍然存在。想象一下,将每个水滴转变为自己的喷水器,它本身会在各个方向上喷出水滴 - 因为水滴并不知道它来自哪个方向。这将在地面上稀疏地分散大量的水,除了会有一个地方,一次有大量的水从所有的水滴中击中。那个地方是原始洒水车的地方。

对(例如)线检测的应用是类似的。图像中的每个点都是原始液滴之一;当它充当喷水器时,它会发出自己的水滴,标记可能通过该点的所有线路。大量二次液滴着陆的地方代表穿过大量图像点的线的参数 - VOILA!检测到线!