使用圆形霍夫变换求圆
[
查找半径在指定范围内的圆中心
,半径
) = imfindcircles (一个
,radiusRange
)radiusRange
.额外的输出参数,半径
,包含每个圆心所对应的估计半径中心
.
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.戴维斯机器视觉:理论,算法,实用性.第十章。第3版。摩根考夫曼出版社,2005年。