imfindcircles
使用圆形 Hough 变换查找圆
语法
说明
[
查找半径在 centers
,radii
] = imfindcircles(A
,radiusRange
)radiusRange
指定范围内的圆。附加输出参数 radii
包含与 centers
中每个圆心对应的估计半径。
[
还返回列向量 centers
,radii
,metric
] = imfindcircles(A
,radiusRange
)metric
,其中包含每个圆的累加器数组峰值的幅值(按降序排列)。centers
和 radii
的行对应于 metric
的行。
[___] = imfindcircles(___,
支持任何上述语法,且可使用一个或多个名称-值参数指定其他选项。Name=Value
)
示例
输入参数
输出参数
提示
当
radius
(或rmin
)的值小于或等于 5 时,imfindcircles
的准确度会受到限制。如果使用
"PhaseCode"
方法(默认值)而不是"TwoStage"
,半径估计步骤通常会更快。"PhaseCode"
和"TwoStage"
这两种计算方法检测同心圆的能力有限。同心圆的结果可能因输入图像而异。imfindcircles
找不到圆心位于图像区域之外的圆形。对于真彩色图像,
imfindcircles
在处理之前会先用rgb2gray
函数将图像转换为灰度图像。对于二值 (logical
) 图像和整数类型图像,在处理之前会用im2single
函数转换为single
数据类型。为了提高二值图像结果的准确度,imfindcircles
还使用imfilter
作为预处理步骤来应用高斯平滑。
算法
imfindcircles
使用基于圆形 Hough 变换 (CHT) 的算法在图像中寻找圆形。之所以使用这种方法,是因为当存在噪声、遮挡和变化的光照条件时该方法表现稳健。
CHT 并非严格指定的算法,在其实现中可采用许多不同方法。然而,有三个重要步骤是所有方法共有的。
累加器数组计算
高梯度的前景像素指定为候选像素,并允许在累加器数组中“投票”。在经典 CHT 实现中,候选像素在围绕像素构成一个固定半径全圆的模式中投票。在图 1a 所示的示例中显示了一个实际圆(实线圆)上的候选像素以及该候选像素的经典 CHT 投票模式(虚线圆)。
经典 CHT 投票模式
中心估计
属于同一个图像圆的各候选像素的投票趋于在对应于该圆中心的累加器数组 bin 中累加。因此,可通过检测累加器数组中的峰值来估计圆心。在图 1b 所示的示例中显示一个实际圆(实线圆)上的各候选像素(实心点)以及它们的投票模式(虚线圆),这些模式在实际圆的中心处重合。
半径估计
如果同一累加器数组用于多个半径值(这是 CHT 算法中的常见做法),则必须以单独的步骤来估计检测到的圆的半径。
imfindcircles
提供两种在图像中寻找圆的算法:相位编码(默认值)和两阶段算法。两者有一些共同的计算步骤,但也各有特色。
这两种算法共有的计算功能如下:
二维累加器数组的使用
经典 Hough 变换需要三维数组来存储多个半径的投票,这需要很大的存储空间和很长的处理时间。相位编码方法和两阶段方法都通过对所有半径使用同一个二维累加器数组来解决此问题。虽然这样做需要额外的半径估计步骤,但总体计算负载通常较低,尤其是在处理大半径范围时。这是目前 CHT 实现中广泛采用的做法。
边缘像素的使用
整体内存要求和速度很大程度上取决于候选像素的数量。为了限制其数量,请为输入图像的梯度幅值设置阈值,以便在计票中只包括高梯度的像素。
边缘方向信息的使用
通过限制候选像素可用的 bin 的数量,也可以优化性能。这是通过使用局部可用的边缘信息来实现的,它只允许在沿梯度方向的有限区间内投票(图 2)。图中点 cmin 和 cmax 之间的投票区间的宽度由 rmin 和 rmax 定义的半径范围确定。
投票模式:多个半径,沿梯度方向
rmin | 最小搜索半径 |
rmax | 最大搜索半径 |
ractual | 候选像素所属的圆的半径 |
cmin | 半径为 rmin 的圆心 |
cmax | 半径为 rmax 的圆心 |
cactual | 半径为 ractual 的圆心 |
函数 imfindcircles
使用的两种 CHT 方法在计算圆半径的方式上有根本的不同。
参考
[1] T.J Atherton, D.J. Kerbyson. "Size invariant circle detection." Image and Vision Computing. Volume 17, Number 11, 1999, pp. 795-803.
[2] H.K Yuen, .J. Princen, J. Illingworth, and J. Kittler. "Comparative study of Hough transform methods for circle finding." Image and Vision Computing. Volume 8, Number 1, 1990, pp. 71–77.
[3] E.R. Davies, Machine Vision: Theory, Algorithms, Practicalities. Chapter 10. 3rd Edition. Morgan Kauffman Publishers, 2005.