Matlab图像分割 |
您所在的位置:网站首页 › 图像轮廓提取matlab › Matlab图像分割 |
实例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');%添加标签
输入初始图像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');%添加标签
输入初始图像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');%添加标签
输入初始图像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. |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |