主要内容

imfindcircles

使用圆形霍夫变换求圆

描述

中心= imfindcircles (一个半径找到图像中的圆一个谁的半径近似等于半径.输出,中心,是一个两列矩阵,其中包含x, y)图像中圆心的坐标。

中心半径) = imfindcircles (一个radiusRange查找半径在指定范围内的圆radiusRange.额外的输出参数,半径,包含每个圆心所对应的估计半径中心

例子

中心半径度规) = imfindcircles (一个radiusRange也返回一个列向量,度规,包含每个圆的累加器数组峰值的大小(按降序排列)。的行中心半径对应于的行度规

例子

___) = imfindcircles (___名称,值指定一个或多个附加选项名称,值Pair参数,使用前面的任何语法。

例子

全部折叠

这个例子展示了如何找到图像中的所有圆,以及如何保留和显示最强的圆。

将灰度图像读入工作区并显示它。

一个= imread (“coins.png”);imshow (A)

图中包含一个坐标轴。轴包含一个image类型的对象。

求所有有半径的圆r范围内的像素[15,30]。

[centers, radii, metric] = imfindcircles(A,[15 30]);

根据度量值保留五个最强的圆。

: centersStrong5 =中心(1:5);radiiStrong5 =半径(1:5);metricStrong5 =度量(1:5);

在原始图像上画出五个最强的圆周长。

viscircles (centersStrong5 radiiStrong5,“EdgeColor”“b”);

图中包含一个坐标轴。轴包含三个对象的类型线,图像。

将图像读入工作区并显示它。

一个= imread (“circlesBrightDark.png”);imshow (A)

图中包含一个坐标轴。轴包含一个image类型的对象。

定义半径范围。

Rmin = 30;征求= 65;

找出图像中半径范围内所有明亮的圆圈。

[centersBright, radiiBright] = imfindcircles(A,[Rmin Rmax],“ObjectPolarity”“光明”);

找出图像中所有半径范围内的黑圈。

[centersDark, radiiDark] = imfindcircles(A,[Rmin Rmax],“ObjectPolarity”“黑暗”);

在亮圈的边缘画蓝线。

viscircles (centersBright radiiBright,“颜色”“b”);

图中包含一个坐标轴。轴包含三个对象的类型线,图像。

在黑色圆圈的边缘画红色虚线。

viscircles (centersDark radiiDark,“线型”“——”);

图中包含一个坐标轴。轴包含线条、图像等5个对象。

输入参数

全部折叠

输入图像是用于检测圆形物体的图像,指定为灰度、真彩色或二值图像。

数据类型:||int16|uint8|uint16|逻辑

圆半径是你想要检测的圆形物体的近似半径,指定为一个正数。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

要检测的圆形对象的半径范围,指定为形式为正整数的2元素向量[rmin做),在那里rmin小于征求

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

名称-值对的观点

指定可选的逗号分隔的对名称,值参数。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:“ObjectPolarity”、“光明”指定黑暗背景上明亮的圆形物体。

对象极性,指定为逗号分隔对,由“ObjectPolarity”和表中的一个值。

“光明” 圆形物体比背景更亮。
“黑暗” 圆形物体比背景颜色深。

计算方法是用来计算累加器数组的技术,指定累加器数组由逗号分隔对组成“方法”和表中的一个值。

“PhaseCode” 阿瑟顿和Kerbyson[1]相位编码方法。这是默认值。
“二级” 该方法用于两阶段圆霍夫变换[2][3]

例子:“方法”、“PhaseCode”指定阿瑟顿和克尔拜森的相位编码方法。

灵敏度因子为圆形霍夫变换累加器阵列的灵敏度,指定为逗号分隔对组成“敏感”和一个在[0,1]范围内的数字。随着敏感度的增加,imfindcircles检测更多圆形物体,包括微弱和部分模糊的圆形。较高的灵敏度值也会增加错误检测的风险。

边缘梯度阈值设置梯度阈值,用于确定图像中的边缘像素,指定为逗号分隔对组成“EdgeThreshold”和一个在[0,1]范围内的数字。指定0将阈值设置为零梯度大小。指定1将阈值设置为最大梯度大小。imfindcircles当你将阈值设置为一个较低的值时,可以检测到更多的圆形物体(有弱边和强边)。当您增加阈值时,它检测到的边缘较弱的圆更少。默认情况下,imfindcircles使用该函数自动选择边缘梯度阈值graythresh

例子:“EdgeThreshold”,0.5设置边缘梯度阈值为0.5

输出参数

全部折叠

圆心坐标,返回为aP——- - - - - -2矩阵包含x-圆心在第一列中的坐标和y-第二列的坐标。行数,P,为检测到的圆数。中心是根据圆的强度排序的。

数据类型:

圆心的估计半径,返回为列向量。处的半径值半径(j)对应于圆心为的圆中心(j,:)

数据类型:

圆强度是圆中心的相对强度,以矢量形式返回。的价值度量(j)对应于有半径的圆半径(j)集中在中心(j,:)

数据类型:

提示

  • 的准确性imfindcircles是有限时的价值半径(或rmin)小于等于5。

  • 如果使用(默认),半径估计步骤通常会更快。“PhaseCode”方法,而不是“二级”

  • 两种计算方法,“PhaseCode”“二级”它们探测同心圆的能力有限。同心圆的结果会因输入图像的不同而不同。

  • imfindcircles没有找到圆心在图像域外的圆。

  • imfindcircles对二值(逻辑)图像进行预处理以提高结果的准确性。它使用该功能将真彩色图像转换为灰度图像rgb2gray在处理之前。

算法

imfindcircles使用基于圆形霍夫变换(CHT)的算法在图像中寻找圆。这种方法之所以被使用,是因为它在噪声、遮挡和变化光照存在时具有鲁棒性。

CHT不是一个严格指定的算法,而是有许多不同的方法可以采取在它的实现。然而,总的来说,有三个共同的基本步骤。

  1. 累加器数组的计算

    高梯度的前景像素被指定为候选像素,并允许在累加器数组中进行“投票”。在经典的CHT实现中,候选像素在它们周围形成一个固定半径的完整圆的模式中投票。图1a显示了一个候选像素位于一个实际圆(实心圆)和候选像素的经典CHT投票模式(虚线圆)的示例。

    经典CHT投票模式

  2. 中心估计

    属于图像圆的候选像素的选票倾向于在圆中心对应的累加器数组bin处累积。因此,通过检测累加器阵列的峰值来估计圆心。图1b显示了一个示例,候选像素(实点)位于一个实际的圆(实圆)上,它们的投票模式(虚线圆)在实际圆的中心重合。

  3. 半径估计

    如果同一个累加器数组用于多个半径值,就像通常在CHT算法中做的那样,则必须作为单独的步骤来估计被检测圆的半径。

imfindcircles提供了两种在图像中寻找圆的算法:相位编码(默认)和两阶段。两者都有一些共同的计算步骤,但也都有自己独特的方面。

两种算法的共同计算特征如下:

  • 使用二维累加器阵列

    经典的Hough变换需要一个三维阵列来存储多个半径的选票,这导致了大量的存储需求和较长的处理时间。相位编码和两级方法都通过对所有半径使用一个二维累加器阵列来解决这个问题。尽管这种方法需要额外的半径估计步骤,但总体计算负载通常较低,特别是在大半径范围内工作时。这是现代CHT实现中广泛采用的实践。

  • 使用边缘像素

    总体内存需求和速度很大程度上取决于候选像素的数量。为了限制它们的数量,将输入图像的梯度大小设置为阈值,以便在计票时只包含梯度高的像素。

  • 使用边缘方向信息

    另一种优化性能的方法是限制候选像素的可用容器数量。这是通过利用局部可用的边缘信息,只允许沿梯度方向的有限区间内投票来实现的(图2)。

    投票方式:多半径,沿梯度方向

r最小值 最低搜索半径
r马克斯 最大的搜索半径
r实际 候选像素所在圆的半径
c最小值 半径为r的圆心最小值
c马克斯 半径为r的圆心马克斯
c实际 半径为r的圆心实际

两种方法均采用函数法imfindcircles在计算圆半径的方式上有根本的不同。

  • 两级

    利用估计的圆心和图像信息明确估计半径。该技术基于计算径向直方图[2][3]

  • Phase-Coding

    相位编码的关键思想[1]是在累加器数组中使用复数值,将半径信息编码在数组项的相位中。边缘像素投出的选票不仅包含关于可能的中心位置的信息,还包含与中心位置相关联的圆的半径的信息。与必须使用径向直方图明确估计半径的两阶段方法不同,在相位编码中,半径可以通过简单地从估计的累加器阵列中心位置解码相位信息来估计。

兼容性的考虑

全部展开

行为在R2019a中改变

参考文献

t.j.阿瑟顿,D.J.克尔比森。"大小不变圆检测"图像及视觉计算.第17卷,第11期,1999年,795-803页。

袁国强,. j。普林斯,J.伊林沃思和J.基特勒。《霍夫变换求圆方法的比较研究》。图像及视觉计算.第8卷第1期,1990年,71-77页。

[3] E.R.戴维斯机器视觉:理论,算法,实用性.第十章。第3版。摩根考夫曼出版社,2005年。

扩展功能

介绍了R2012a