主要内容

activecontour

利用主动轮廓(蛇)区域生长技术将图像分割成前景和背景

描述

活跃的轮廓技术,也叫,是一种迭代的区域增长图像分割算法。使用主动轮廓算法,您可以在图像上指定初始曲线,然后使用activecontour函数使曲线向物体边界演化。

例子

BW= activecontour (一个面具分割图像一个进入前景(对象)和背景区域使用活动轮廓。

面具参数是一个二值图像,它指定活动轮廓的初始状态。中对象区域的边界(白色)面具定义用于轮廓演化的初始轮廓位置,以分割图像。输出图像BW是一个二值图像,其中前景为白色(逻辑为真),背景为黑色(逻辑为假)。

为了获得更快更准确的分割结果,指定一个接近目标边界的初始轮廓位置。

BW= activecontour (一个面具n通过演化轮廓的最大值来分割图像n迭代。

例子

BW= activecontour (一个面具方法指定用于分割的活动轮廓方法“Chan-Vese”“边缘”.对于RGB图像,方法必须为“Chan-Vese”

BW= activecontour (一个面具n方法通过演化轮廓的最大值来分割图像n使用指定的迭代方法

BW= activecontour (___名称,值指定控制分段的各个方面的名值对参数。

例子

全部折叠

读取并显示灰度图像。

I = imread(“coins.png”);imshow (I)标题(原始图像的

图中包含一个axes对象。标题为Original Image的axes对象包含一个Image类型的对象。

指定一个围绕感兴趣的对象的初始轮廓。显示轮廓。

mask = 0 (size(I));掩码(25:end-25,25:end-25) = 1;imshow(面具)标题(“初始轮廓位置”

图中包含一个axes对象。标题为“初始轮廓位置”的axis对象包含一个类型为image的对象。

方法分割图像activecontour函数。默认情况下,该函数通过100次迭代进行分割。

bw = activecontour(I,mask);

显示结果。在100次迭代之后,由于原始轮廓不接近对象边界,对象没有从背景中完全分割出来。

imshow (bw)标题(“分割图像,100次迭代”

图中包含一个axes对象。标题为segments ented Image, 100 Iterations的axis对象包含一个类型为Image的对象。

要继续发展细分,增加迭代的次数。经过300次迭代之后,对象从背景中完全分割出来。

bw = activecontour(I,mask,300);imshow (bw)标题(“分割图像,300次迭代”

图中包含一个axes对象。标题为segments ented Image, 300 Iterations的axis对象包含一个类型为Image的对象。

读取并显示灰度图像。

I = imread(“toyobjects.png”);imshow(我)

方法绘制接近感兴趣对象的初始轮廓drawrectangle函数。绘制轮廓后,创建蒙版使用createMask函数。

R = drawrectangle;

mask = createMask(r);

方法分割图像“边缘”方法和200次迭代。

bw = activecontour(I,mask,200,“边缘”);

在原始图像上以红色显示最终轮廓。

持有;visboundaries (bw,“颜色”“r”);

在原始图像上显示分割结果。前景中的对象是蓝色的。

图imshow (labeloverlay(我,bw));

加载三维体积图像数据,去除单一维度。

D =负载(“mri.mat”);A =挤压(D.D);

为初始种子点创建二维蒙版。

种子级别= 10;种子= A(:,:,种子级别)> 75;图imshow(种子)

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

创建一个空的3-D种子蒙版,把种子点放进去。

mask = 0 (size(A));mask(:,:,seedLevel) =种子;

使用活动轮廓执行分割,指定种子蒙版。

bw = activecontour(A,mask,300);

显示三维分割图像。

图;P = patch(等值面(double(bw)));p.FaceColor =“红色”;p.EdgeColor =“没有”;Daspect ([1 1 27/128]);camlight;照明冯氏

图中包含一个axes对象。axes对象包含一个patch类型的对象。

输入参数

全部折叠

图像要分割,指定为2-D数字矩阵或3-D数字数组。

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

分割开始演化的初始轮廓,指定为大小相同的二值图像一个.对于二维和三维灰度图像,大小为面具必须匹配图像的大小一个.对于彩色和多通道图像,面具必须是一个二维逻辑数组,其中前两个维度与图像的前两个维度匹配一个

您可以使用ROI对象以交互方式创建掩码。方法绘制一个多边形ROIdrawpolygon函数,然后从ROI创建掩码createMask函数。

数据类型:逻辑

分段演化中要执行的最大迭代次数,指定为正整数。activecontour当活动轮廓达到最大迭代次数时,停止其演化。activecontour如果当前迭代中的轮廓位置与最近五个迭代中的一个中的轮廓位置相同,也会停止演化。

如果初始轮廓位置(由面具)远离对象边界,则指定较大的值n以达到预期的分割结果。

数据类型:

用于分割的主动轮廓法,具体为“Chan-Vese”“边缘”.基于Chan-Vese区域的能量模型描述在[1].文中描述了类似于测地线活动轮廓的基于边缘的模型[2]

对于RGB图像,方法必须为“Chan-Vese”

数据类型:字符|字符串

名称-值参数

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

例子:“SmoothFactor”,1.5

分割区域边界的平滑程度或规律性,用逗号分隔的一对表示“SmoothFactor”一个正数。较高的值产生更平滑的区域边界,但也可以平滑更精细的细节。较低的值在区域边界上产生更多的不规则(更少的平滑),但允许捕捉更精细的细节。默认平滑度值为0“Chan-Vese”方法和1“边缘”方法。

例子:“SmoothFactor”,1.5

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

轮廓向外增长或向内收缩的趋势,用逗号分隔的对表示“ContractionBias”和一个数值标量。正值使轮廓向内收缩(收缩)。负值使轮廓向外生长(扩展)。此参数不能保证轮廓收缩或扩展。即使这个参数的值为正,轮廓线也有可能扩大。但是,通过指定偏置,与无偏置轮廓相比,扩展速度会变慢。该参数的典型值在-1到1之间。默认的收缩偏差为0“Chan-Vese”方法和0.3“边缘”方法。

例子:“ContractionBias”,0.4

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

输出参数

全部折叠

分割后的图像,作为与输入图像相同大小的二值图像返回一个.前景为白色(逻辑为真),背景为黑色(逻辑为假)。

提示

  • activecontour中使用区域的边界面具作为进化开始的轮廓的初始状态。口罩上的洞会导致不可预知的结果。使用imfill填补任何区域的空洞面具

  • 如果一个区域触及图像边界,那么activecontour在进一步处理之前,从该区域删除一个单像素层,以便该区域不接触图像边界。

  • 要获得更快更准确的结果,请指定接近所需对象边界的初始轮廓位置,特别是对于“边缘”方法。

  • “边缘”方法,活动轮廓自然偏向向内收缩(塌陷)。在没有任何图像梯度的情况下,活动轮廓会自行收缩。相反,对于“Chan-Vese”方法,其中轮廓是无偏的,轮廓可以根据图像特征自由收缩或扩展。

  • 实现了精确的分割“边缘”方法,指定位于对象边界之外的初始轮廓。活动轮廓带“边缘”方法在默认情况下偏向于收缩。

  • 如果目标区域具有显著不同的灰度强度,则“Chan-Vese”方法[1]可能无法分割图像中的所有对象。例如,如果图像包含比背景更亮的物体和一些比背景更暗的物体,则“Chan-Vese”方法通常只分割出黑暗或明亮的物体。

算法

activecontour使用稀疏场水平集方法,类似于[3],用于实现主动轮廓演化。

参考文献

[1]陈廷芳,l.a. Vese,无边的活动轮廓.《IEEE图像处理汇刊》,第10卷,第2期,第266-277页,2001。

V. Caselles, R. Kimmel, G. Sapiro,测地线活动轮廓.国际计算机视觉杂志,第22卷,第1期,第61-79页,1997。

r·t·惠特克,基于距离数据的三维重建的水平集方法.国际计算机视觉杂志,第29卷,第3期,第203-231页,1998。

在R2013a中介绍