以下是关于如何使用霍夫变换在图像中检测直线的非常基础和直观的解释:
通常更常用直角坐标系中的y = mx + b来表示一条直线。正如维基百科文章所述,一条直线也可以用极坐标形式表示。霍夫变换利用这种表示方式(对于直线而言,至少是这样的。讨论也可以适用于圆,椭圆等)。
霍夫变换的第一步是将图像缩减为一组边缘。Canny算子是一个常见的选择。得到的边缘图像被用作霍夫过程的输入。
总结一下,边缘图像中的“亮点”被转换为极坐标形式,即使用方向theta和距离r来表示它们的位置,而不是x和y。(通常使用图像中心点作为坐标系变换的参考点。)
霍夫变换本质上是一个直方图。映射到相同theta和r的边缘像素被假定为定义了图像中的一条直线。为了计算出现的频率,theta和r被离散化(分成若干个箱)。一旦所有的边缘像素都被转换为极坐标形式,就可以分析这些箱来确定原始图像中的直线。
通常查找N个最常见的参数,或阈值化参数,使计数小于某个n的值被忽略。
我不确定这个答案是否比你最初提供的来源更好 - 你卡在哪个具体点了吗?
Hough变换是一种寻找最有可能表示一条直线(或圆、或其他形状)的值的方法。
将一张包含线条和背景两种像素的图片作为输入给Hough变换。在该图片中,线条上的像素与背景的像素是不同的。
对于每个属于线条的像素,都会计算出所有可能的参数组合。例如,如果坐标为(1,100)的像素是线条的一部分,则它可以构成斜率(m)=0,截距(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组合将被返回作为直线的参数。