imfindcircles

imfindcircles
imfindcircles

imfindcircles

发现采用圆形Hough变换圆

展开所有页面

句法

?中心= imfindcircles(A,半径)

?[中心,半径] = imfindcircles(A,radiusRange)

?[中心,半径,公制] = imfindcircles(A,radiusRange)的例子

?[中心,半径,公制] = imfindcircles(____,名称,值)的例子

描述

中心= imfindcircles(一,半径)发现图像中的圆圈一个,其半径约等于半径。输出,中心,是包含

一个两列的矩阵的x,y的圆的坐标上的图象在中心。

[ 中心,半径] = imfindcircles(一,radiusRange)发现与圆的半径由指定的范围radiusRange。

附加的输出的参数,半径,包含对应于每个圆心估计半径的中心。

例子[ 中心,半径,公制] = imfindcircles(一,radiusRange)也返回一个列向量,度量,包含累加器

数组的峰值每个圆圈的大小(按降序排列)。的各行的中心和半径对应的行度量。

例子[ 中心,半径,公制] = imfindcircles(____,名称,值)指定额外的选项与一个或多个名称,值对

参数,使用任何以前的语法。

示例

折叠所有

检测最强的五圈中的图片

检测图像中的明亮和黑眼圈

输入参数折叠所有

一个 -输入图像的灰度图像|真彩色图像|二值图像

输入图像是在其中以检测圆形物体,指定为灰度,真彩,或二值图像的图像。

数据类型:单| 双| INT16 | UINT8 | UINT16 | 逻辑

半径 -圆弧半径的标量数值

圆的半径是你要检测的圆形物体,指定为任意数值类型的标量的大致半径。

数据类型:单| 双| INT8 | INT16 | int32类型| 的

Int64 | UINT8 | UINT16 | UINT32 | UINT64

radiusRange -半径范围的整数两个元素的向量

半径的范围要检测的圆形物体,指定为两个元素的向量,[RMIN RMAX]任何数字类型的整数。

数据类型:单| 双| INT8 | INT16 | int32类型| 的

Int64 | UINT8 | UINT16 | UINT32 | UINT64

名称 - 值对参数

可选的指定用逗号分隔的双名,值的论点。名称是参数名和值是对应的值。名称必须出现在单引号

('' )。你可以以任何顺序为指定多个名称和值对参数名1,值1,...,NAMEN,值N。

例如:'ObjectPolarity','光明'指定在一个黑暗的背景明亮的圆形物体。

“ObjectPolarity' -对象极性'光明'(默认)| '暗'

对象极性指示圆形物体是否比背景更亮或更暗,指定为以逗号分隔的对包括'ObjectPolarity' ,要么

是文本字符串下表中的。

'方法' -计算方法“PhaseCode'(默认)| “双级”

计算方法是用于计算累加器阵列的技术中,指定为逗号分隔的一对组成的“方法”,要么是文本字符串,

下表中的。

“灵敏度” -灵敏度因子0.85(预设)| 0和1之间的非负标

敏感性因素是圆形Hough变换累加器阵列,指定为以逗号分隔的一对组成的敏感性'灵敏度'和一个非负的

标值范围为[0,1] 。当你增加的敏感性因素,imfindcircles检测更多的圆形物体,包括弱,部分模糊

的圆圈。更高的灵敏度值也增加误检测的危险性。

例如:'灵敏度',0.3设置灵敏度系数为0.3。

'EdgeThreshold' -边缘梯度阈值0和1之间的非负标

边缘梯度阈值设定为确定图像中边缘像素的梯度阈值,指定为逗号分隔的一对组成的“EdgeThreshold'和范围内的非负标量值[0,1] 。指定0到阈值设置为零梯度幅值。指定1到阈值设置为最大梯度幅值。imfindcircles检测更多的圆形物体(既弱和强边缘)当您设定的阈值较低值。它可以检测弱边缘较少

的圈子,你提高阈值的值。默认情况下,imfindcircles选择自动使用该函数的边缘梯度阈值graythresh。例如:“EdgeThreshold',0.5套的边缘梯度阈值0.5。

输出参数

折叠所有

中心 -坐标圈的中心两列的矩阵

该圆的中心的坐标,返回作为一个P -由- 2矩阵包含x中的第一列和该圆的中心的坐标y-坐标中的

第二列。的行数,P,是检测到的圆的数目。中心是基于圆的强度排序。

半径 -估计半径列向量

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

公制 -圈的优势列向量

圈的优势是为圆心的相对优势,返回作为载体。在值指标(十)对应于与半径的圆的半径(J)集中在中心(J,:)。

更多关于

折叠所有

温馨提示

?指定一个相对较小的radiusRange更好的精度。一个好的经验法则是选择radiusRange这样RMAX <3 * RMIN和(RMAX-R最小)<100。

?的准确性imfindcircles是有限的,当值半径(或RMIN)小于10。

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

?二者计算方法,'PhaseCode'和'双级'在它们的检测同心圆能力的限制。结果为同心圆可以根据输入图像而异。

?imfindcircles没有找到圆与图像外域的中心。

?imfindcircles预处理的二进制(逻辑)的图像,以提高结果的准确性。它可以转换真彩色图像使用功能为灰度rgb2gray之前处理它们。

算法

功能imfindcircles采用了圆形Hough变换(CHT)基于算法寻找圈子里的图像。使用这种方式,因为它在噪声,遮挡和光照变化的存在鲁棒性。

海底隧道是不是一个严格指定的算法,而有一些可以采取在其实施不同的方法。不过,总的来说,有哪些是共同所有三个基本步骤。

1.累加器阵列计算。

高梯度的前景像素被指定作为候选像素,并允许投“票”累加器数组中。在经典的中华电信执行,候选像素身边模式,形成一个固定半径的一个完整的圆投票。图1a示出一个候选像素趴在一个实际的圆(实心圆)和经典CHT投票图案(虚线圆圈)的候选像素的一个例子。

图1:传统的CHT投票模式

2.中心估计

属于一个图像中的圆候选象素的票往往积聚在相应于圆的圆心的累加器阵列箱。因此,圆的中心被检测的峰值的累加器阵列中的估计。图1b示出了候选像素(实心圆点)躺在实际圆(实心圆),和他们的投票模式(虚线圆圈),其在实际的圆心重合的例子。

3.半径估计

如果相同的累加器阵列用于多于一个半径值,如通常在海底的算法完成的,所检测到的圆的半径必须被估计为单独的步骤。

功能imfindcircles提供了两种算法寻找圈子中的影像:相位编码(默认)和两阶段。双方都有一些共同的计算步骤,但每个人都有自己独特的方面,也是如此。

通过这两种算法共有的计算功能如下:

?使用二维累加器阵列:

经典的霍夫变换,需要一个三维阵列,用于存储票为多个半径,这导致大的存储要求和较长的处理时间。

无论是相位编码和两阶段方法通过使用一个单一的2-D累加器阵列的所有半径解决这个问题。虽然这种方法需要半径估算的一个额外的步骤,总的计算量通常较低,过大的半径范围内工作时尤其如此。这是现代中华电信实现中广泛采用的做法。

?利用边缘像素

整体内存需求和速度强烈地受到考生的像素数管辖。以限制其数量,将输入图像的梯度大小阈值是使得高梯度的像素仅被包含在计算票数。

?利用边缘方向信息:

另一种方式来优化性能是限制箱提供给候选像素的数量。这是通过利用本地可用的边缘信息,以在沿所述梯度的方向(图2)在有限的时间间隔只允许投票来完成。

图2:投票模式:多重半径,沿梯度方向

?分钟最小半径搜索

?最大最大搜索半径

?实际该候选人像素所属的圆的半径为

?分钟的半径为r的圆的中心分

?最大的半径为r的圆的中心最大

?实际半径的圆R为中心实际

按功能采用两种方法隧imfindcircles根本区别在于由圆弧半径进行计算的方式。

?两阶段

半径明确利用估计随着图像信息估计的圆心。该技术是基于计算径向直方图,见参考文献1和2进行了详细的解释。

?相位编码

在第一阶段编码的核心思想是累加器数组编码在数组项的相位半径的信息,在使用复杂的值。投边缘像素的选票不仅包含对可能的中心位置,但也即将与中心位置关联的圆的半径的信息。不同的两阶段方法,其中,半径必须明确地使用径向直方图,在相位编码的半径可以通过简单地从累加器阵列中的推测中心位置进行解码的相位信息来估计来估计。(见参考文献3)。

参考文献

[1] TJ阿瑟顿,DJ Kerbyson。“大小不变的圆形检测。”图像与视觉计算。第17卷,第11号,1999年,页795-803。

[2]香港元朗,。J. Princen,J.伊林沃思,和J. Kittler。“霍夫的比较研究变换来进行圆形发现的方法。”图像与视觉计算。第8卷,第1号,1990,页71-77。

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

另请参阅

霍夫| houghlines| houghpeaks| viscircles

相关主题
相关文档
最新文档