Hao*_*est 44 geometry pattern-recognition image-processing computer-vision hough-transform
我只是喜欢冒险,迈出了我的第一步,迈向计算机视觉.我试图自己实现霍夫变换,但我只是没有全面了解.我阅读了维基百科条目,甚至是原始的"使用霍夫变换检测图片中的线条和曲线",由理查德·杜达和彼得·哈特,但没有帮助.
有人可以帮助用更友好的语言向我解释吗?
Thr*_*986 39
想到矩形坐标中的直线,即y = mx + b,这种情况更为常见.正如维基百科文章所述,一条线也可以用极性形式表达.Hough变换利用了这种表示的变化(无论如何,对于行.讨论也可以应用于圆,椭圆等).
霍夫变换的第一步是将图像缩小为一组边缘.Canny边缘检测器是常见的选择.生成的边缘图像用作霍夫过程的输入.
总而言之,边缘图像中"点亮"的像素被转换为极性形式,即,使用方向θ和距离r-而不是x和y来表示它们的位置.(图像的中心通常用作坐标变化的参考点.)
霍夫变换本质上是直方图.映射到相同θ和r的边缘像素被假定为在图像中定义线.为了计算出现频率,将theta和r离散化(划分为多个箱).一旦将所有边缘像素转换为极性形式,就分析箱以确定原始图像中的线.
通常寻找N个最常见的参数 - 或阈值参数,使得小于某些n的计数被忽略.
我不确定这个答案是否比你最初提出的来源更好 - 是否有一个特定点你坚持下去?
Ray*_*yat 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的组合是作为该线的参数返回的.