OpenCV学习(55)

图像变换(9):一,霍夫圆变换;二,霍夫梯度法的原理;三,霍夫梯度法的缺点

1.霍夫圆变换

霍夫圆变换的基本原理和上面讲的霍夫线变化大体上是很类似的,只是点对应的二维极径极角空间被三维的圆心点x、y和半径r空间取代。说“大体上类似”的原因是,如果完全用相同的方法的话,累加平面会被三维的累加容器所代替一一在这三维中,一维是x,一维是y,另外一维是圆的半径r。这就意味着需要大量的内存而且执行效率会很低,速度会很慢。
对直线来说,一条直线能由参数极径极角(r,0))表示.而对圆来说,我们需要三个参数来表示一个圆,也就是:
OpenCV学习(55)

,

OpenCV学习(55)

二、霍夫梯度法原理

霍夫梯度法的原理如下:
(1)首先对图像应用边缘检测,比如用canny边缘检测。
(2)然后,对边缘图像中的每一个非零点,考虑其局部梯度,即用Sobel()函数计算x和y方向的Sobel一阶导数得到梯度。
(3)利用得到的梯度,由斜率指定的直线上的每一个点都在累加器中被累加,这里的斜率是从一个指定的最小值到指定的最大值的距离。
(4)同时,标记边缘图像中每一个非О像素的位置。
(5)然后从二维累加器中这些点中选择候选的中心,这些中心都大于给定阈值并且大于其所有近邻。这些候选的中心按照累加值降序排列,以便于最支持像素的中心首先出现。
(6)接下来对每一个中心,考虑所有的非О像素。
(7)这些像素按照其与中心的距离排序。从到最大半径的最小距离算起,选择非О像素最支持的一条半径。
(8)如果一个中心收到边缘图像非О像素最充分的支持,并且到前期被选择的中心有足够的距离,那么它就会被保留下来。
这种实现可以使算法更有效地执行,也许更重要的是,有助于解决 3D 累加器中产生大量噪声并使结果不稳定的稀疏分布问题。
没有人是完美的,也没有黄金是完美的。同样,这个算法并不完美,还有很多不足之处需要指出。

三、霍夫梯度法的缺点
(1)在霍夫梯度法中,我们使用Sobel导数来计算局部梯度,那么随之而来的假设是,它可以视作等同于一条局部切线,这并不是一个数值稳定的做法。在大多数情况下,这样做会得到正确的结果,但或许会在输出中产生一些噪声。
(2)在边缘图像中的整个非О像素集被看做每个中心的候选部分。因此,如果把累加器的阈值设置偏低,算法将要消耗比较长的时间。此外,因为每一个中心只选择一个圆,如果有同心圆,就只能选择其中的一个。
(3)因为中心是按照其关联的累加器值的升序排列的,并且如果新的中心过于接近之前已经接受的中心的话,就不会被保留下来。且当有许多同心圆或者是近似的同心圆时,霍夫梯度法的倾向是保留最大的一个圆。可以说这是一种比较极端的做法,因为在这里默认Sobel导数会产生噪声,若是对于无穷分辨率的平滑图像而言的话,这才是必须的。

版权声明:本文为博主m0_53123717原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/m0_53123717/article/details/123191343

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2022年3月2日 下午3:37
下一篇 2022年3月2日 下午3:53

相关推荐