Image processing 解释霍夫变换

Image processing 解释霍夫变换,image-processing,geometry,computer-vision,hough-transform,pattern-recognition,Image Processing,Geometry,Computer Vision,Hough Transform,Pattern Recognition,我只是在冒险,向计算机视觉迈出了第一小步。我试着自己实现Hough变换,但我就是不了解全部情况。我读了维基百科的条目,甚至读了理查德·杜达和彼得·哈特最初的“使用霍夫变换检测图片中的线条和曲线”,但没有起到任何作用 有人能用更友好的语言给我解释一下吗?通常认为直线是直角坐标系,即y=mx+b。正如维基百科的文章所说,线条也可以用极坐标表示。Hough变换利用了这种表示形式的变化(不管怎样,对于直线。讨论也可以应用于圆、椭圆等) Hough变换的第一步是将图像缩小为一组边。Canny边缘检测器是一

我只是在冒险,向计算机视觉迈出了第一小步。我试着自己实现Hough变换,但我就是不了解全部情况。我读了维基百科的条目,甚至读了理查德·杜达和彼得·哈特最初的“使用霍夫变换检测图片中的线条和曲线”,但没有起到任何作用


有人能用更友好的语言给我解释一下吗?

通常认为直线是直角坐标系,即y=mx+b。正如维基百科的文章所说,线条也可以用极坐标表示。Hough变换利用了这种表示形式的变化(不管怎样,对于直线。讨论也可以应用于圆、椭圆等)

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

总之,边缘图像中“照亮”的像素被转换为极坐标形式,即它们的位置用方向θ和距离r表示,而不是用x和y表示。(图像中心通常用作此坐标更改的参考点。)

Hough变换本质上是直方图。假设映射到相同θ和r的边缘像素定义图像中的一条线。为了计算发生频率,θ和r被离散化(划分为若干个存储单元)。将所有边缘像素转换为极坐标形式后,将分析箱子以确定原始图像中的线条

通常会查找N个最频繁的参数-或忽略计数小于某些N的阈值参数


我不确定这个答案是否比您最初提供的来源更好-您是否有一个特别的点被卡住了?

Hough变换是一种寻找最可能的值的方法,这些值表示一条线(或一个圆,或许多其他东西)

将线的图片作为输入提供给Hough变换。此图片将包含两种类型的像素:一种是线条的一部分,另一种是背景的一部分

对于作为线条一部分的每个像素,计算所有可能的参数组合。例如,如果坐标(1100)处的像素是该线的一部分,则该像素可能是梯度(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的组合是作为行的参数返回的

这里有一个非常基本的、直观的解释,说明Hough变换如何检测图像中的线条:


这里有另一个视角(电视剧《数字》试播插曲中使用的视角):想象一下,早些时候,草坪上的某个地方有一个类似喷泉的草坪洒水器,在其周围喷射出水滴。现在洒水器不见了,但水滴依然存在。想象一下,把每一滴水都变成自己的洒水器,自己在自己周围喷射出水滴——向各个方向喷射,因为水滴不知道它来自哪个方向。这将使大量的水稀薄地散布在地面上,除非有一个地方,所有水滴都会同时撞击大量的水。那个地方就是原来的喷水器所在的地方


(例如)线路检测的应用类似。图像中的每个点都是一个原始液滴;当它充当洒水器时,它会发出自己的水滴,标记可能通过该点的所有线条。大量次级液滴降落的位置表示通过大量图像点的直线的参数-瞧!检测到线路

你的回答很好。它再次证明了我在别处读到的东西。下面Ray H提供的答案也告诉了我一些我难以想象的事情:所有可能的参数组合都是计算出来的。因此,我的头脑变得更加清晰,只需通过不同的方式来听。有一个很酷的javascript工具,可以在一个很好的例子中查看投票空间!可能需要一点,您提到了沿边绘制线,并将这些边显示为点,这很好,但事实上这些线只是与该边相切。@mlai,您创建了此图像吗?如果可以,我可以用它来写硕士论文,如果不行,你能告诉我你从哪里得到的,我喜欢它?!?!Thanks@ScottAlistair谢谢是的,我自己做的。请随意为你的论文使用它。精彩的解释。这是难以置信的mlai,谢谢你把它放在一起。