使用圆形霍夫变换求圆
[
在指定的范围内找到带半径的圆圈中心
,radii.
) = imfindcircles (一个
,Radiusrange.
)Radiusrange.
.额外的输出参数,radii.
,包含每个圆心所对应的估计半径中心
.
[
也返回一个列向量,中心
,radii.
,公制
) = imfindcircles (一个
,Radiusrange.
)公制
,包含每个圆的累加器数组峰值的大小(按降序排列)。的行中心
和radii.
对应于行公制
.
imfindcircles.
使用基于圆形霍夫变换(CHT)的算法在图像中寻找圆。这种方法之所以被使用,是因为它在噪声、遮挡和变化光照存在时具有鲁棒性。
CHT不是一个严格指定的算法,而是有许多不同的方法可以采取在它的实现。然而,总的来说,有三个共同的基本步骤。
累加器数组的计算
高梯度的前景像素被指定为候选像素,并且被允许在累加器阵列中投入“投票”。在经典的CHT实现中,候选像素在它们周围的模式中投票,它们形成固定半径的完整圆圈。图1A示出了位于实际圆(实心圆圈)和候选像素的经典CHT投票模式(虚线)的候选像素的示例。
古典CHT投票模式
中心估计
属于图像圆的候选像素的选票倾向于在圆中心对应的累加器数组bin处累积。因此,通过检测累加器阵列的峰值来估计圆心。图1b显示了一个示例,候选像素(实点)位于一个实际的圆(实圆)上,它们的投票模式(虚线圆)在实际圆的中心重合。
半径估计
如果相同的累加器阵列用于多于一个半径值,则通常在CHT算法中常见,必须估计检测到的圆的半径作为单独的步骤。
imfindcircles.
提供两个用于在图像中查找圈子的两种算法:相位编码(默认)和两阶段。两者都分享了一些常见的计算步骤,但每个都有自己的独特方面。
两种算法的共同计算特征如下:
使用二维累加器阵列
经典的Hough变换需要一个三维阵列来存储多个半径的选票,这导致了大量的存储需求和较长的处理时间。相位编码和两级方法都通过对所有半径使用一个二维累加器阵列来解决这个问题。尽管这种方法需要额外的半径估计步骤,但总体计算负载通常较低,特别是在大半径范围内工作时。这是现代CHT实现中广泛采用的实践。
使用边缘像素
总体内存需求和速度很大程度上取决于候选像素的数量。为了限制它们的数量,将输入图像的梯度大小设置为阈值,以便在计票时只包含梯度高的像素。
使用边缘方向信息
另一种优化性能的方法是限制候选像素的可用容器数量。这是通过利用局部可用的边缘信息,只允许沿梯度方向的有限区间内投票来实现的(图2)。
投票方式:多半径,沿梯度方向
r闵 | 最小搜索半径 |
r最大限度 | 最大的搜索半径 |
r实际 | 候选像素所在圆的半径 |
c闵 | 半径为r的圆心闵 |
c最大限度 | 半径为r的圆心最大限度 |
c实际 | 半径为r的圆心实际 |
两种方法均采用函数法imfindcircles.
在计算圆半径的方式上有根本的不同。
t.j.阿瑟顿,D.J.克尔比森。"大小不变圆检测"图像和视觉计算.第17卷,第11号,1999,第795-803页。
袁国强,. j。普林斯,J.伊林沃思和J.基特勒。《霍夫变换求圆方法的比较研究》。图像和视觉计算.第8卷第1期,1990年,71-77页。
[3] e.r.戴维斯,机器视觉:理论,算法,实用性.第10章第3版。摩根Kauffman出版商,2005年。