资源描述
,青衣,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,青衣,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,分水岭分割算法的实现与分析,11053413 李小泷,分水岭算法实现步骤:先把图片转化为灰度梯度级图像,在图像梯度空间内逐渐增加一个灰度阈值,每当它大于一个局部极大值时,就把当时的二值图像,(,只区分陆地和水域,即大于灰度阈值和小于灰度阈值两部分,),与前一个时刻,(,即灰度阈值上一个值的时刻,),的二值图像进行逻辑异或,(XOR),操作,从而确定出灰度局部极大值的位置。根据所有灰度局部极大值的位置集合就可确定分水岭。,rgb=imread(pears.png);%,读取原图像,imshow(rgb),title(,原图,),I=rgb2gray(rgb);%转化为灰度图像,figure;subplot(121)%显示一行两列第1张,imshow(I),title(原图灰度图像),hy=fspecial(sobel);%sobel,算子,hx=hy;,Iy=imfilter(double(I),hy,replicate);%,滤波求,y,方向边缘,Ix=imfilter(double(I),hx,replicate);%,滤波求,x,方向边缘,gradmag=sqrt(Ix.2+Iy.2);%,求摸,subplot(122);imshow(gradmag,),%,显示梯度,title(gradmag),梯度级,),先做,sobel,算子用于边缘提取,然后转化为梯度级图像,L=watershed(gradmag);%,直接应用分水岭算法,Lrgb=label2rgb(L);%,转化为彩色图像,figure;imshow(L,rgb,),%,显示分割后的图像,title(,分割梯度级图像,(Lrgb),Watershed,是,matlab,自带的函数,调用这个函数后,可直接应用分水岭分割算法,图像依稀可以看到物体的轮廓,但效果不佳,。,为使分水岭分割算法的效果更好,可分别对图像前景和背景进行标记:本例中使用形态学重建技术对前景对象进行标记,首先使用开操作,开操作之后可以去掉一些很小的目标,title(,开操作之后的图像,(Io),Ie=imerode(I,se);%,对图像进行腐蚀,Iobr=imreconstruct(Ie,I);%,形态学重建,subplot(122);imshow(Iobr),%,显示重建后的图像,title(,打开重建,(Iobr),se=strel(disk,20);%,圆形结构元素,Io=imopen(I,se);%,形态学开操作,figure;subplot(121),imshow(Io),%,显示执行开操作后的图像,Ioc=imclose(Io,se);%,形态学关操作,figure;subplot(121),imshow(Ioc),%,显示关操作后的图像,title(,关操作,(Ioc),Iobrd=imdilate(Iobr,se);%,对图像进行膨胀,Iobrcbr=imreconstruct(imcomplement(Iobrd),.,imcomplement(Iobr);%,形态学重建,Iobrcbr=imcomplement(Iobrcbr);%,图像求反,subplot(122);imshow(Iobrcbr),%,显示重建求反后的图像,title(,重建求反后的图像,(Iobrcbr),fgm=imregionalmax(Iobrcbr);%,局部极大值,figure;imshow(fgm),%,显示重建后局部极大值图像,title(,重建后局部极大值图像,(fgm),I2=I;,I2(fgm)=255;%,局部极大值处像素值设为,255,figure;imshow(I2),%,在原图上显示极大值区域,title(,原图上的极大值区域,(I2),se2=strel(ones(5,5);%,结构元素,fgm2=imclose(fgm,se2);%,关操作,fgm3=imerode(fgm2,se2);%,腐蚀,fgm4=bwareaopen(fgm3,20);%,开操作,I3=I;,I3(fgm4)=255;%,前景处设置为,255,figure;subplot(121),imshow(I3)%,显示修改后的极大值区域,title(,修改后的极大值区域,),此时再进行分水岭变换并显示得到的效果。,bw=im2bw(Iobrcbr,graythresh(Iobrcbr);%,转化为二值图像,subplot(122);imshow(bw),%,显示二值图像,title(,开关重建之后的阈值图像,),D=bwdist(bw);%,计算距离,DL=watershed(D);%,分水岭变换,bgm=DL=0;%,求取分割边界,figure;imshow(bgm),%,显示分割后的边界,title(bgm),分水岭法分割线,),gradmag2=imimposemin(gradmag,bgm|fgm4);%,置最小值,L=watershed(gradmag2);%,分水岭变换,I4=I;,I4(imdilate(L=0,ones(3,3)|bgm|fgm4)=255;%,前景及边界处置,255,figure;subplot(121),imshow(I4)%,突出前景及边界,title(,突出前景及边界,),Lrgb=label2rgb(L,jet,w,shuffle);%,转化为伪彩色图像,subplot(122);imshow(Lrgb)%,显示伪彩色图像,title(,分水岭伪彩色图像,),将以上参数改为,0.4,0.5,0.6,0.7,后的图片效果,就是色彩的浓淡产生了变化,figure;imshow(I),hold on,himage=imshow(Lrgb);%,在原图上显示伪彩色图像,set(himage,AlphaData,0.3);,title(,原图像上的,Lrgb,处理,),以下是对其他图片做分水岭算法得到的效果,欢迎指导,
展开阅读全文