今天,我们将学习如何借助称为霍夫变换的技术来检测图像中的直线和圆。在开始对图像应用霍夫变换之前,我们需要了解霍夫空间是什么,我们将通过示例的方式来学习。
1、参数空间
当我们处理图像时,我们可以想象图像是在某些x和y坐标上的2d矩阵,在此之下,一条线可以描述为 y = mx + b
但是在参数空间(我们将其称为霍夫空间)中,我可以代表与mvs 相同的线b,因此图像空间上线的特征将是m-b霍夫空间中该位置的单点。
但是,我们有一个问题,使用y = mx + b,由于斜率是无限的,因此我们无法表示垂直线。因此,我们需要一种更好的参数化方法,即极坐标(rho和theta)。
2、霍夫空间
(1)rho:描述直线到原点的距离;(2)theta:描述与水平面的夹角;
但是,一个非常重要的问题是,当我们围绕一条线取多个点并转换为霍夫空间时,会发生什么。
图像空间上的单个点转换为霍夫空间上的曲线,其特殊之处在于,图像空间上一条线之间的点将由具有单个接触点的多条曲线表示。这将是我们的目标,找到一组曲线相交的点。
3、什么是霍夫变换?
霍夫变换是一种特征提取方法,用于检测图像中的简单形状,例如圆形,直线等。简单特性是根据参数的形状表示得出的。简单形状仅由几个参数表示,例如,一条线可以由其斜率和截距表示,或者可以由x,y和半径表示。在我们的示例中,霍夫变换将负责处理图像上的点并计算霍夫空间中的值。用于进行转换并随后找到相交曲线的算法有点复杂,因此不在本文讨论范围之内。但是,我们将看一下该算法的实现,它是OpenCV库的一部分。
4、使用OpenCV检测线
在OpenCV中,使用Hough变换检测线中的功能被实现HoughLines和HoughLinesP(概率Hough变换)。我们将专注于后者。该函数需要以下参数:
(1)image:8位单通道二进制源图像。该图像可以通过该功能进行修改。
(2)lines:行的输出向量。每条线由4个元素的向量(x_1,y_1,x_2,y_2)表示,其中(x_1,y_1)和(x_2,y_2)是每个检测到的线段的终点。
(3)rho:累加器的距离分辨率(以像素为单位)。
(4)theta:累加器的角度分辨率(以弧度为单位)。
(5)threshold:累加器阈值参数。仅返回那些获得足够投票的行
(6)minLineLength:最小行长。短于此的线段将被拒绝。
(7)maxLineGap:同一条线上的点之间允许链接的最大间隙。太复杂?一个例子更容易理解:
结果如下:
非常重要的一点是,我们实际上使用仅边缘图像作为Hough变换的参数,否则该算法将无法按预期工作。
5、使用OpenCV检测圆圈
该过程与行的过程大致相同,除了这次我们将使用与OpenCV库不同的函数。即now HoughCircles,它接受以下的参数:
(1)image:8位单通道灰度输入图像。
(2)circles:找到的圆的输出向量。每个向量都被编码为3元素浮点向量(x,y,radius)。
(3)circle_storage:在C函数中,这是一个存储器存储,其中将包含找到的圆的输出序列。
(4)method:使用的检测方法。当前,唯一实现的方法是CV_HOUGH_GRADIENT,基本上是21HT
(5)dp:累加器分辨率与图像分辨率的反比。例如,如果dp = 1,则累加器具有与输入图像相同的分辨率。如果dp = 2,则累加器的宽度和高度是其一半。
(6)minDist:检测到的圆心之间的最小距离。如果参数太小,则除了真实的圆圈外,还可能会错误地检测到多个邻居圆圈。如果太大,可能会错过一些圆圈。
(7)param1:第一个方法特定的参数。对于CV_HOUGH_GRADIENT,它是传递给Canny()边缘检测器的两个阈值中的较高阈值(较低的阈值是较小的两倍)。
(8)param2:第二个方法特定的参数。在CV_HOUGH_GRADIENT的情况下,它是检测阶段圆心的累加器阈值。它越小,可能会检测到更多的假圆圈。与较大的累加器值相对应的圆将首先返回。
(9)minRadius:最小圆半径。
(10)maxRadius:最大圆半径。
请记住,参数必须有所不同,因为我们无法用与用于线相同的参数化描述圆,而是需要使用像的方程(x – x0)^^2 + (y – y0)^^2 = r^^2:
请注意,与之前的示例相比,此处我们未应用任何边缘检测功能。这是因为该函数HoughCircles具有内置的canny检测。检测结果:
6、结尾
霍夫变换是一种用于检测图像中简单形状的出色技术,它具有多种应用,从医学应用(例如X射线,CT和MRI分析)到自动驾驶汽车。如果你想了解有关Hough空间的更多信息,建议你自己实际操作一遍运行代码,自己尝试不同的配置,并查看OpenCV官方文档以获取更多的信息。谢谢阅读!
声明:本文部分素材转载自互联网,如有侵权立即删除 。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
暂无评论内容