主要内容

imfindcircles

发现使用圆形圈哈夫变换

描述

中心= imfindcircles (一个,半径)发现圈子里的形象一个约等于半径的吗半径。输出,中心,是一个两列矩阵包含(x, y)图像中的圆中心的坐标。

(中心,半径)= imfindcircles (一个,radiusRange)发现圆的半径范围规定radiusRange。额外的输出参数,半径,包含估计对应于每个圆中心的半径中心

例子

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

例子

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

例子

全部折叠

这个例子展示了如何在一个图像,找到各界以及如何保留和显示最强的圈子。

读一个灰度图像到工作区中显示它。

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

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

找到所有的圈半径r像素范围内(15、30)。

(中心、半径、指标)= imfindcircles (A,[15] 30日);

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

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

画五个最强圆周边的原始图像。

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

图包含一个坐标轴对象。坐标轴对象包含3线类型的对象,形象。

图像读入工作区和显示它。

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

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

定义半径范围内。

Rmin = 30;征求= 65;

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

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

找到所有的黑眼圈图像半径范围内。

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

画蓝线边缘的明亮的圆。

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

图包含一个坐标轴对象。坐标轴对象包含3线类型的对象,形象。

画红色虚线边缘的黑眼圈。

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

图包含一个坐标轴对象。坐标轴对象包含5线类型的对象,形象。

输入参数

全部折叠

指定输入图像中检测圆形物体,灰度,真彩(RGB)或二进制图像。

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

圆半径,或近似半径的圆形对象你想检测,指定为一个正数。

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

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

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

名称-值参数

指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

例子:中心= imfindcircles(半径,ObjectPolarity =明亮)指定的圆形物体在一个黑暗的背景。

R2021a之前,用逗号来分隔每一个名称和值,并附上的名字在报价。

例子:中心= imfindcircles(半径,“ObjectPolarity”、“明亮”)指定的圆形物体在一个黑暗的背景。

对象极性,表中指定的值。

“光明” 圆形的对象是比背景。
“黑暗” 圆形的物体比背景更暗。

计算方法计算累加器数组,指定的值在表中。

“PhaseCode” 阿瑟顿和Kerbyson[1]phase-coding方法。
“二级” 两级循环霍夫变换的方法[2],[3]

例子:“方法”、“PhaseCode”指定了阿瑟顿和Kerbyson phase-coding方法。

圆形霍夫变换的敏感性因素累加器数组,指定为一个数字在区间[0,1]。当你增加敏感性因素,imfindcircles检测到更多的圆形物体,包括薄弱,部分被遮挡的圈子。更高的灵敏度值也增加错误检测的风险。

边缘图像中确定边缘像素的梯度阈值,指定为一个数字在区间[0,1]。指定0向零梯度大小设置阈值。指定1设置阈值为最大梯度大小。imfindcircles检测多个圆形对象(弱和强边缘)当你设置阈值降到一个较低的值。它与弱边缘检测少圈你增加阈值的值。默认情况下,imfindcircles选择边缘梯度阈值自动使用函数graythresh

例子:“EdgeThreshold”, 0.5

输出参数

全部折叠

圆的中心坐标,作为一个返回P——- - - - - -2矩阵包含x坐标在第一列和圆的中心y在第二列坐标。的行数,P圆检测的数量。中心排序是基于强度的圆圈,从最弱。

数据类型:

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

数据类型:

圆的优势提供的相对优势圆中心,作为一个列向量返回。的价值度量(j)对应于圆半径半径(j)集中在中心(j,:)

数据类型:

提示

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

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

  • 两种计算方法,“PhaseCode”“二级”有限的能力来检测同心圆。同心圆的结果取决于输入图像。

  • imfindcircles没有发现圈子中心域以外的形象。

  • imfindcircles使用函数转换真彩图像灰度rgb2gray在处理之前。二进制(逻辑)和图像转换成整数类型的数据类型使用im2single函数在处理之前。提高结果的准确性二进制图像,imfindcircles也适用于高斯平滑imfilter作为一个预处理步骤。

算法

imfindcircles使用一个圆形霍夫变换(十)算法为基础发现圆图像。使用这种方法由于其鲁棒性的噪声、遮挡和不同的照明。

指定的本不是一个严格的算法,而有许多不同的方法,可以实施。然而,有三个重要的步骤是常见的所有方法。

  1. 累加器数组的计算

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

    古典CHT投票模式

    累加器数组为候选人投票模式点躺在一个圆的边缘

  2. 中心估计

    候选人的选票像素属于图像圆趋向于沉在累加器数组本对应的圆的中心。因此,圆中心估计通过检测蓄电池阵列的峰值。图1 b显示了一个示例的候选像素(实心点)躺在一个实际的圆(实心圆),和他们的投票模式(虚线圆圈),同时在实际圆的中心。

  3. 半径估计

    如果相同的累加器数组用于一个以上的半径值,一般是在本算法,发现圆的半径必须估计作为一个单独的步骤。

imfindcircles提供了两种算法寻找圈图片:phase-coding(默认)和两级。分享一些常见的计算步骤,但每个人都有自己独特的方面。

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

  • 使用二维累加器数组

    经典霍夫变换需要一个三维数组用于存储多个半径的选票,导致存储需求大,处理时间长。phase-coding和两阶段方法解决这个问题通过使用一个二维累加器数组的半径。虽然这种方法需要一个附加的步骤半径估计,整个计算负载通常是低,尤其是当工作在一个大的半径范围。这是一个广泛采用的实践在现代CHT实现。

  • 使用边缘像素

    总体内存需求和速度强烈由候选像素的数量。限制他们的数量,输入图像阈值的梯度大小,因此只有像素的高梯度都包含在计算选票。

  • 使用边缘方向信息

    性能优化也是通过限制垃圾箱用于候选像素的数量。这是通过使用本地可用的边缘信息只允许在一个有限的投票间隔沿梯度方向(图2),投票区间的宽度之间的点c最小值c马克斯在图中,是由定义的半径范围r最小值r马克斯

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

    图形表示像素间隔允许投票的候选人。投票时间间隔的方向垂直于圆的边缘点的候选人。

r最小值 最低搜索半径
r马克斯 最大的搜索半径
r实际 圆的半径,候选像素属于
c最小值 圆心的半径r最小值
c马克斯 圆心的半径r马克斯
c实际 圆心的半径r实际

两本函数使用的方法imfindcircles从根本上不同的方法计算了圆半径。

  • 两级

    使用估计圆半径是明确估计中心以及图像信息。这项技术是基于计算径向直方图[2][3]

  • Phase-Coding

    半径估计从复杂的累加器数组中的值,半径信息编码阶段的数组中的条目[1]。选票的边缘像素包含信息不仅是可能的中心位置也对圆的半径与中心位置有关。不同半径的两阶段方法必须显式地使用径向直方图估计,在phase-coding半径可以由简单的解码估计估计的相位信息中心在累加器数组中的位置。

引用

[1]T。J阿瑟顿,D.J. Kerbyson。“大小不变的圆检测。”图像和视觉计算。11号卷17日,1999年,页795 - 803。

[2]H。K袁,.。Princen、j·伊林沃思和j .难应付的。“圆的霍夫变换方法比较研究发现。”图像和视觉计算。1号卷8日,1990年,页71 - 77。

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

扩展功能

版本历史

介绍了R2012a

全部展开