文档

activecontour

使用活动轮廓(蛇)将图像分割为前景和背景

语法

bw = activecontour(A,mask)
bw = activecontour(A,mask,n)
bw = activecontour(A,mask,method)
bw = activecontour(A,mask,n,method)
Bw = activecontour(___、名称、值)

描述

例子

bw= activecontour (一个面具分割图像一个进入前景(对象)和背景区域使用活动轮廓。采用主动轮廓算法,也称,您可以在图像上指定移动以查找对象边界的曲线。的activecontour函数使用迭代过程进化分割,默认情况下,activecontour执行100次迭代。

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

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

bw= activecontour (一个面具n分割图像通过演变轮廓的最大n迭代。

例子

bw= activecontour (一个面具方法指定用于分割的活动轮廓方法“Chan-Vese”“边缘”

例子

bw= activecontour (一个面具n方法分割图像通过演变轮廓的最大n使用指定的方法

bw= activecontour (___名称,值指定控制分段的各个方面的参数。参数名可以缩写,大小写无关紧要。

例子

全部折叠

类的默认设置来分割图像activecontour函数。

读取灰度图像并显示它。

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

指定初始轮廓并显示它。

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

使用默认方法分割图像,并进行300次迭代。

bw = activecontour(I,mask,300);

显示结果。

图imshow(bw)标题(“分割图像”

读取图像并显示它。

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

指定靠近待分割对象的初始轮廓位置。

mask = false(size(I));掩码(50:150,40:170)= true;

在原始图像上以蓝色显示初始轮廓。

visboundaries(面具,“颜色”“b”);

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

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

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

visboundaries (bw,“颜色”“r”);标题(初始轮廓线(蓝色)和最终轮廓线(红色));

显示分段图像。

图,imshow(bw)标题(“分割图像”);

将图像读入工作区并显示它。显示指示以指定初始轮廓位置。

I = imread(“toyobjects.png”);imshow(I) str =点击选择初始轮廓位置。双击确认并继续。”;标题(str,“颜色”“b”“字形大小”12);disp (sprintf (“\nNote:请靠近物体边界以获得更准确的结果。”))

交互式地指定初始轮廓。

面膜= roipoly;图,imshow(掩码)标题(“初始面具”);

分割图像,指定200次迭代。

maxIterations = 200;bw = activecontour(I, mask, maxIterations,“Chan-Vese”);显示分段图像图,imshow(bw)标题(“分割图像”);

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

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

为初始种子点创建2-D蒙版。

seedLevel = 10;seed = A(:,:,seedLevel) > 75;图imshow(种子)

创建一个空的3-D种子蒙版,并将种子点放入其中。

mask = 0 (size(A));mask(:,:,seedLevel) = seed;

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

bw = activecontour(A,mask,300);

显示三维分割图像。

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

输入参数

全部折叠

图像要分割,指定为非稀疏的2-D或3-D数字数组。

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

分割开始演变的初始轮廓线,指定为大小相同的二值图像一个

对于二维和三维灰度图像,大小为面具必须匹配图像的大小一个.对于彩色和多通道图像,面具必须是一个二维逻辑数组,其中前两个维度与图像的前两个维度匹配一个

数据类型:逻辑

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

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

数据类型:

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

数据类型:字符|字符串

名称-值对参数

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

例子:bw = activecontour(I, mask, 200, 'edge','SmoothFactor',1.5);

全部折叠

分段区域边界的平滑或规则程度,用逗号分隔的对表示,由“SmoothFactor”和一个正的标量。较高的值产生更平滑的区域边界,但也可以平滑更精细的细节。较低的值在区域边界上产生更多的不规则(更少的平滑),但允许捕获更精细的细节。默认的平滑度值取决于所选择的方法。

例子:bw = activecontour(I, mask, 200, 'edge','SmoothFactor',1.5);

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

轮廓向外增长或向内收缩的趋势,指定为由逗号分隔的对组成“ContractionBias”一个标量。正值使轮廓向内收缩(收缩)。负值使轮廓向外生长(扩展)。此参数不能保证轮廓收缩(或扩展)。即使这个参数的值为正值,轮廓线实际上也可能会扩展。但是,通过指定偏置,与无偏置轮廓相比,可以减慢展开速度。该参数的典型值在-1到1之间。

例子:bw = activecontour(I, mask, 200, 'edge','ContractionBias',0.4);

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

输出参数

全部折叠

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

提示

  • activecontour中使用区域的边界面具作为轮廓的初始状态从进化开始的地方。面具有洞的区域会导致不可预测的结果。使用imfill来填补这些区域的空洞面具

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

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

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

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

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

算法

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

参考文献

[1] t.f. Chan, 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中引入

这个话题有用吗?