MATLBA基础图像处理算法之区域分割技术

区域分割主要包括区域生长法和分水岭分割法。

1、区域生长是一种串行区域分割的图像分割方法。区域生长的基本思想是将具有相似性质的像素集合起来构成区城。区城增长方法根据同一物体区城内像素的相似性质来聚集象素点的方法,从初始区城(如小邻城或单个象素)开始,将相邻的具有同样性质的象素或其它区城归并到日前的区域中从而逐步增长区域,直至没有可以归并的点或其它小区域为止。区域内象素的相似性度量可以包括平均灰度值、纹理、颜色等信息。

步骤:鼠标点击选取生长点;3*3 8-邻域生长;生长准则:图像与生长点灰度差小于阈值;

生长点压入栈中,直到栈中没有元素时停止

I=imread(camera.png); if isinteger(I)%如果I为整数 I=im2double(I); end I = rgb2gray(I);%灰度化 figure imshow(I) [M,N]=size(I); [y,x]=getpts; %单击取点后,按enter结束(getpts是采集用户在当前的figure上使用鼠标的点击点的座标。同时可以采用双击,回车来结束点击。用<-后退和del键来取消上一点击) x1=round(x);%四舍五入取整 y1=round(y); seed=I(x1,y1); %获取中心像素灰度值 J=zeros(M,N); J(x1,y1)=1; count=1; %待处理点个数 threshold=0.15; %阈值=0.15 while count>0 count=0; for i=1:M %遍历整幅图像 for j=1:N if J(i,j)==1 %点在“栈”内 if (i-1)>1&(i+1)<M&(j-1)>1&(j+1)<N %3*3邻域在图像范围内 for u=-1:1 %8-邻域生长 for v=-1:1 if J(i+u,j+v)==0&abs(I(i+u,j+v)-seed)<=threshold J(i+u,j+v)=1; count=count+1; %记录此次新生长的点个数 end end end end end end end end subplot(1,2,1),imshow(I); title("original image") subplot(1,2,2),imshow(J); title("segmented image")

2、分水岭算法借鉴了形态学理论,是一种较新的基于区域的图像分割算法。在该方法中,将一幅图像看成一个地形图,灰度值对应地形的高度值,高灰度值对应着山峰,低灰度值对应着山谷水总是朝地势低的地方流动,直到某个局部低洼处,这个低洼处就是盆地。最终所有的水都会处于不同的盆地,盆地之间的山春称为分水岭。

I = imread(camera.png); T = graythresh(I); %采用OTSU算法来获取全局阈值 J = im2bw(I, T); %要求的是二值图像 J = watershed(J, 8); %采用八连通区域 figure; subplot(121), imshow(I); subplot(122), imshow(J);
经验分享 程序员 微信小程序 职场和发展