资源描述:
《基于matlab的图像分割技术》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、利用阀值法对图像进行分割:>>f=imread('peppers.png');>>f=rgb2gray(f);>>f=im2double(f);>>t=0.5*(min(f(:))+max(f(:)));>>done=false;>>while~doneg=f>=t;tn=0.5*(mean(f(g))+mean(f(~g)));done=abs(t-tn)<0.1;t=tn;end;>>display('Threshold(t)-Iterative');Threshold(t)-Iterative>>tt=0.4691
2、>>r=im2bw(f,t);>>subplot(2,2,1);imshow(f);>>subplot(2,2,2);imshow(r);>>xlabel('迭代法全局阀值分割');>>th=graythresh(f);>>thth=0.3961>>s=im2bw(f,th);>>subplot(2,2,3);imshow(s);>>xlabel('全局阀值Otsu分割');>>se=strel('disk',10);>>ft=imtophat(f,se);>>thr=graythresh(ft);>>thrthr=0.
3、1098>>lt=im2bw(ft,thr);>>subplot(2,2,4);imshow(lt);>>xlabel('局部阀值分割');用迭代法对图像进行分割:>>i=imread('eight.tif');>>zmax=max(max(i));>>zmin=min(min(i));>>tk=(zmax+zmin)/2;>>bcal=1;>>isize=size(i);>>while(bcal)ifg=0;ibg=0;fg=0;bg=0;forj=1:isize(1)fork=1:isize(2)tmp=i(j,k)
4、;if(tmp>=tk)ifg=ifg+1;fg=fg+double(tmp);elseibg=ibg+1;bg=bg+double(tmp);end;end;end;zo=fg/ifg;zb=bg/ibg;tktmp=uint8((zo+zb)/2);if(tktmp==tk)bcal=0;elsetk=tktmp;end;end;>>disp(strcat('迭代后阀值',num2str(tk)));迭代后阀值165>>newi=im2bw(i,double(tk)/255);>>subplot(1,2,1);ims
5、how(i);>>subplot(1,2,2);imshow(newi);>>xlabel('迭代法');用Otsu法进行阀值选择:>>i=imread('coins.png');>>subplot(1,2,1);imshow(i);>>bw=im2bw(i,graythresh(getimage));>>subplot(1,2,2);imshow(bw);使用分水岭算法对图像进行分割:>>c1=-10;>>c2=-c1;>>dist=sqrt(2*(2*c1)^2);>>rad=dist/2*1.4;>>li=[flo
6、or(c1-1.2*rad)ceil(c2+1.2*rad)];>>[x,y]=meshgrid(li(1):li(2));>>bw1=sqrt((x-c1).^2+(y-c1).^2)<=rad;>>bw2=sqrt((x-c2).^2+(y-c2).^2)<=rad;>>bw=bw1
7、bw2;>>subplot(1,3,1);imshow(bw);>>d=bwdist(~bw);>>subplot(1,3,2);imshow(d,[]);>>d=-d;>>d(~bw)=-Inf;>>l=watershed(d);>>
8、rgb=label2rgb(l,'jet',[.5.5.5]);>>subplot(1,3,3);imshow(rgb);使用分水岭算法:>>c1=-10;>>c2=-c1;>>dist=sqrt(3*(2*c1)^2);>>rad=dist/2*1.4;>>li=[floor(c1-1.2*rad)ceil(c2+1.2*rad)];>>[x,y,z]=meshgrid(li(1):li(2));>>bw1=sqrt((x-c1).^2+(y-c1).^2+(z-c1).^2)<=rad;>>bw2=sqrt((x-c
9、2).^2+(y-c2).^2+(z-c2).^2)<=rad;>>bw=bw1
10、bw2;>>figure;isosurface(x,y,z,bw,0.5);axisequal;>>set(gcf,'color','w');>>xlim(li);ylim(li);zlim(li);>>view(3);camlight