实例1:使用主动轮廓(snake)将图像分割成前景和背景
实例2:基于边缘‘edge’方法的主动轮廓图像分割
实例3:基于区域‘Chan-Vese
’方法的主动轮廓图像分割(可交互式创建多边形遮罩)
本例程的配套完整源码和图片素材下载
主动轮廓方法,也称为 snake,是一种迭代式区域增长图像分割算法。使用主动轮廓算法,您可以在图像上指定初始曲线,然后使用 activecontour
函数使曲线向对象边界演化。
BW
= activecontour(A
,mask
,n
)
使用主动轮廓将图像 A
分割成前景(对象)和背景区域。mask
参数是一个指定主动轮廓初始状态的二值图像。mask
中对象区域(白色)的边界定义轮廓演化的初始轮廓位置,以用于分割图像。输出图像 BW
是一个二值图像,前景为白色(逻辑 true),背景为黑色(逻辑 false)。要获得更快、更准确的分割结果,请指定靠近所需对象边界的初始轮廓位置。通过最多迭代 n
次的轮廓演化来分割图像。
%%使用主动轮廓分割图像%%
close all; %关闭当前所有图形窗口,清除工作空间所有变量
clear all;
clc;
%%读取并显示灰度图像
I = imread('coins.png');%读取图像
figure,imshow(I)%显示图像
title('Original Image')%添加标签
%%指定关注对象周围的初始轮廓。显示该轮廓
mask = zeros(size(I));%初始化一个与I图像一样大小的值都为0的图像mask
%mask(Y1:Y2,X1:X2),(X1,Y1)为矩形左上角,(X1,Y2)为矩形右下角
mask(25:end-25,25:end-25) = 1;%调整mask区域,x轴为(25~X_max_size-25),y轴为(25~Y_max_size-25)的区域赋值为1(纯白)
figure,imshow(mask)%显示mask图像
title('Initial Contour Location')%添加标签
%%使用默认方法的300次迭代对图像进行分割
bw = activecontour(I,mask,300);%调用activecontour函数
figure, imshow(bw);%显示分割图像
title('Segmented Image');%添加标签
输入初始图像I 设定初始轮廓图像mask 默认100次迭代分割结果图像bw 300次迭代分割结果图像bw
%%使用主动轮廓和交互式掩膜分割图像%%
close all;%关闭当前所有图形窗口,清除工作空间所有变量
clear all;
clc;
I = imread('toyobjects.png');%读取图像
imshow(I)%显示图像
hold on
title('Original Image');%添加标签
%%指定靠近要分割对象的初始轮廓位置
mask = false(size(I));%初始化一个与I图像一样大小的值都为0的图像mask
%mask(Y1:Y2,X1:X2),(X1,Y1)为矩形左上角,(X1,Y2)为矩形右下角
mask(50:150,40:170) = true;%调整mask区域,x轴为(40~170),y轴为(50~150)的区域赋值为1(纯白)
%figure,imshow(mask)%显示mask图像
visboundaries(mask,'Color','b');%在原始图像上以蓝色显示初始轮廓
%%使用'edge'方法分割图像并设置200次迭代
bw = activecontour(I, mask, 200, 'edge');
%%在原始图像上以红色显示最终轮廓
visboundaries(bw,'Color','r');
title('Initial contour (blue) and final contour (red)');%添加标签
%%显示分割图像
figure, imshow(bw)
title('Segmented Image');%添加标签
输入初始图像I 初始轮廓图像mask ‘edge’方法分割结果轮廓图像 分割二值图像bw
Chan-Vese
’方法的主动轮廓图像分割(可交互式创建多边形遮罩)%平滑因子 'SmoothFactor' -分割区域的边界的平滑或规律性的程度 1.5
%收缩偏置'ContractionBias'-轮廓向外增长或向内收缩的趋势
%正值使轮廓向内收缩(收缩)。负值使轮廓线向外扩展(扩展)。 0.4
I = imread('toyobjects.png');%读取图像
imshow(I)%显示
title('Original Image')%添加标签
str = 'Click to select initial contour location. Double-click to confirm and proceed.';
title(str,'Color','b','FontSize',12);
disp(sprintf('\nNote: Click close to object boundaries for more accurate result.'))
%%交互式地指定初始轮廓
%鼠标左键每单击一处确定选取轮廓多边形一个顶点,双击完成选取
mask = roipoly;%用鼠标画多边形的函数
figure, imshow(mask)%显示轮廓
title('Initial MASK');%添加标签
%%分割图像,设置最大迭代200次
maxIterations = 200;
bw = activecontour(I, mask, maxIterations, 'Chan-Vese');%调用activecontour函数
figure, imshow(bw)%显示分割图像
title('Segmented Image');%添加标签
输入初始图像I 交互式地指定初始轮廓图像mask 初始轮廓mask ‘Chan-Vese’方法分割结果图像bw
注:
1、分割的输入图像I需要指定为灰度图像
2、分割开始演化的初始轮廓mask,需指定为与I相同大小的二值图像
3、在分割演化过程中执行的最大迭代次数n,指定为数值标量。如果当前迭代中的轮廓位置与最近5次迭代的轮廓位置之一相同,或者达到最大迭代次数,则activecontour停止活动轮廓的演化。如果初始轮廓位置(由掩模中的区域边界指定)远离目标边界,则可能需要指定较高的n值来实现预期的分割结果。
4、主动轮廓的方法主要有‘Chan-Vese'
(default默认) (基于区域的能量模型)和 'edge'(
基于边缘的模型)两种
5、输出
分割图像bw,作为与输入图像I相同大小的二值图像返回。前景为白色(逻辑为真),背景为黑色(逻辑为假)。
[1] T. F. Chan, L. A. Vese, Active contours without edges. IEEE Transactions on Image Processing, Volume 10, Issue 2, pp. 266-277, 2001
[2] V. Caselles, R. Kimmel, G. Sapiro, Geodesic active contours. International Journal of Computer Vision, Volume 22, Issue 1, pp. 61-79, 1997.
[3] R. T. Whitaker, A level-set approach to 3d reconstruction from range data. International Journal of Computer Vision, Volume 29, Issue 3, pp.203-231, 1998.