Matlab图像分割

您所在的位置:网站首页 图像轮廓提取matlab Matlab图像分割

Matlab图像分割

2024-05-27 04:39| 来源: 网络整理| 查看: 265

实例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