imfindcircles
使用圆形霍夫变换找到圆
语法
描述
[
查找半径在指定范围内的圆中心
,半径
) = imfindcircles (一个
,radiusRange
)radiusRange
.附加的输出参数,半径
中每个圆心对应的估计半径中心
.
例子
输入参数
输出参数
提示
的准确性
imfindcircles
的价值是有限的半径
(或rmin
)小于或等于5。如果使用(默认值),半径估计步骤通常会更快。
“PhaseCode”
方法,而不是“二级”
.两种计算方法,
“PhaseCode”
而且“二级”
检测同心圆的能力有限。同心圆的结果会因输入图像的不同而不同。imfindcircles
不会在图像的区域外找到圆心的圆。imfindcircles
使用函数将真彩色图像转换为灰度rgb2gray
在处理之前。二进制(逻辑
)和整数类型的图像转换为数据类型单
使用im2single
函数在处理之前。为了提高二值图像结果的准确性,imfindcircles
还应用高斯平滑使用imfilter
作为预处理步骤。
算法
imfindcircles
使用基于圆形霍夫变换(CHT)的算法在图像中寻找圆。使用这种方法是因为它在噪声、遮挡和变化的光照存在下的鲁棒性。
CHT并不是一个严格指定的算法,相反,在它的实现中可以采用许多不同的方法。然而,所有方法都有三个共同的重要步骤。
累加器数组的计算
高梯度的前景像素被指定为候选像素,并允许在累加器数组中投“票”。在一个经典的CHT实现中,候选像素在它们周围的模式中投票,形成一个固定半径的圆。图1a显示了一个位于实际圆(实心圆)和候选像素的经典CHT投票模式(虚线圆)上的候选像素的示例。
经典的CHT投票模式
中心估计
属于图像圆的候选像素的投票倾向于在圆中心对应的累加器数组库中累积。因此,通过检测累加器阵列中的峰值来估计圆的圆心。图1b显示了一个位于实际圆(实心圆)上的候选像素(实心点)的示例,以及它们的投票模式(虚线圆),这些模式与实际圆的中心重合。
半径估计
如果相同的累加器阵列用于多个半径值,就像在CHT算法中通常做的那样,被检测圆的半径必须作为单独的步骤来估计。
imfindcircles
提供在图像中查找圆的两种算法:相位编码(默认)和两阶段算法。两者都有一些共同的计算步骤,但每一个都有自己独特的方面。
两种算法共有的计算特征如下:
二维蓄能器阵列的使用
经典的霍夫变换需要一个三维阵列来存储多个半径的选票,这导致了较大的存储需求和较长的处理时间。相位编码和两阶段方法都通过对所有半径使用一个二维累加器阵列来解决这个问题。尽管这种方法需要额外的半径估计步骤,但总体计算负载通常较低,特别是在大半径范围内工作时。这是现代CHT实现中广泛采用的实践。
边缘像素的使用
总体的内存需求和速度很大程度上取决于候选像素的数量。为了限制它们的数量,输入图像的梯度大小被阈值,以便只有高梯度的像素被包含在计票中。
边缘方向信息的使用
通过限制候选像素可用的箱的数量,还可以优化性能。这是通过使用局部可用的边缘信息来实现的,只允许沿着梯度方向在有限的区间内进行投票(图2)。投票区间的宽度,在点之间c最小值而且c马克斯图中,由定义的半径范围决定r最小值而且r马克斯.
投票方式:多半径,沿梯度方向
r最小值 | 最低搜索半径 |
r马克斯 | 最大的搜索半径 |
r实际 | 候选像素所在圆的半径 |
c最小值 | 半径为r的圆心最小值 |
c马克斯 | 半径为r的圆心马克斯 |
c实际 | 半径为r的圆心实际 |
两种CHT方法所采用的函数imfindcircles
在计算圆半径的方式上有根本的不同。
参考文献
t.j.阿瑟顿,D.J.科尔比森。“大小不变圆检测。”图像与视觉计算.1999年第17卷第11期,第795-803页。
[2]袁国强,j.h。普林,J.伊林沃思和J.基特勒。“Hough变换找圆方法的比较研究”。图像与视觉计算.第8卷,1990年第1期,第71-77页。
[3] E.R.戴维斯机器视觉:理论,算法,实践.第十章。第3版。摩根·考夫曼出版社,2005年。