Matlab图像分割---使用主动轮廓 (snake) 方法进行图像分割

实例1:使用主动轮廓(snake)将图像分割成前景和背景

实例2:基于边缘‘edge’方法的主动轮廓图像分割

实例3:基于区域‘Chan-Vese’方法的主动轮廓图像分割(可交互式创建多边形遮罩)

本例程的配套完整源码和图片素材下载

主动轮廓方法,也称为 snake,是一种迭代式区域增长图像分割算法。使用主动轮廓算法,您可以在图像上指定初始曲线然后使用 activecontour 函数使曲线向对象边界演化。

activecontour函数

BW = activecontour(A,mask,n) 

使用主动轮廓将图像 A 分割成前景(对象)和背景区域mask 参数是一个指定主动轮廓初始状态的二值图像。mask 中对象区域(白色)的边界定义轮廓演化的初始轮廓位置,以用于分割图像输出图像 BW 是一个二值图像,前景为白色(逻辑 true),背景为黑色(逻辑 false)。要获得更快、更准确的分割结果,请指定靠近所需对象边界的初始轮廓位置。通过最多迭代 n 次的轮廓演化来分割图像。

实例1:使用主动轮廓(snake)将图像分割成前景和背景

%%使用主动轮廓分割图像%%
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');%添加标签

      Matlab图像分割---使用主动轮廓 (snake) 方法进行图像分割_第1张图片       Matlab图像分割---使用主动轮廓 (snake) 方法进行图像分割_第2张图片      Matlab图像分割---使用主动轮廓 (snake) 方法进行图像分割_第3张图片          Matlab图像分割---使用主动轮廓 (snake) 方法进行图像分割_第4张图片

               输入初始图像I                    设定初始轮廓图像mask         默认100次迭代分割结果图像bw    300次迭代分割结果图像bw

实例2:基于边缘‘edge’方法的主动轮廓图像分割

%%使用主动轮廓和交互式掩膜分割图像%%
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');%添加标签

Matlab图像分割---使用主动轮廓 (snake) 方法进行图像分割_第5张图片  Matlab图像分割---使用主动轮廓 (snake) 方法进行图像分割_第6张图片  Matlab图像分割---使用主动轮廓 (snake) 方法进行图像分割_第7张图片  Matlab图像分割---使用主动轮廓 (snake) 方法进行图像分割_第8张图片

             输入初始图像I                          初始轮廓图像mask            ‘edge’方法分割结果轮廓图像                分割二值图像bw

实例3:基于区域‘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');%添加标签

    Matlab图像分割---使用主动轮廓 (snake) 方法进行图像分割_第9张图片  Matlab图像分割---使用主动轮廓 (snake) 方法进行图像分割_第10张图片   Matlab图像分割---使用主动轮廓 (snake) 方法进行图像分割_第11张图片 Matlab图像分割---使用主动轮廓 (snake) 方法进行图像分割_第12张图片

               输入初始图像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.

你可能感兴趣的:(图像分割,matlab,主动轮廓)