网站大量收购独家精品文档,联系QQ:2885784924

3种不同的分水岭分割方法以及三种方法的比较.doc

3种不同的分水岭分割方法以及三种方法的比较.doc

  1. 1、本文档共2页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3种不同的分水岭分割方法以及三种方法的比较

程序代码: (代码标记??[code]...[/code]??) clear,clc %三种方法进行分水岭分割 %读入图像 filename=Fig1021(a)(small-blobs).tif; f=imread(filename); Info=imfinfo(filename); if Info.BitDepth8 ? ?f=rgb2gray(f); end figure,mesh(double(f));%显示图像,类似集水盆地 %方法1:一般分水岭分割,从结果可以看出存在过分割问题 b=im2bw(f,graythresh(f));%二值化,注意应保证集水盆地的值较低(为0),否则就要对b取反 d=bwdist(b); ? ? ? ? ? ? %求零值到最近非零值的距离,即集水盆地到分水岭的距离 ? ? l=watershed(-d); ? ? ? ? %matlab自带分水岭算法,l中的零值即为风水岭 w=l==0; ? ? ? ? ? ? ? ? ?%取出边缘 g=b~w; ? ? ? ? ? ? ? ? ?%用w作为mask从二值图像中取值 figure subplot(2,3,1),imshow(f); subplot(2,3,2),imshow(b); subplot(2,3,3),imshow(d); subplot(2,3,4),imshow(l); subplot(2,3,5),imshow(w); subplot(2,3,6),imshow(g); %方法2:使用梯度的两次分水岭分割,从结果可以看出还存在过分割问题(在方法1的基础上改进) h=fspecial(sobel);%获得纵方向的sobel算子 fd=double(f); g=sqrt(imfilter(fd,h,replicate).^2+imfilter(fd,h,replicate).^2);%使用sobel算子进行梯度运算 l=watershed(g);%分水岭运算 wr=l==0; ? ? ? g2=imclose(imopen(g,ones(3,3)),ones(3,3));%进行开闭运算对图像进行平滑 l2=watershed(g2);%再次进行分水岭运算 wr2=l2==0; f2=f; f2(wr2)=255; figure subplot(2,3,1),imshow(f); subplot(2,3,2),imshow(g); subplot(2,3,3),imshow(l); subplot(2,3,4),imshow(g2); subplot(2,3,5),imshow(l2); subplot(2,3,6),imshow(f2); %方法3:使用梯度加掩模的三次分水岭算法(在方法2的基础上改进) h=fspecial(sobel);%获得纵方向的sobel算子 fd=double(f); g=sqrt(imfilter(fd,h,replicate).^2+imfilter(fd,h,replicate).^2);%使用sobel算子进行梯度运算 l=watershed(g);%分水岭运算 wr=l==0; rm=imregionalmin(g); ?%计算图像的区域最小值定位,该函数仅仅是用来观察为何分水岭算法产生这么多集水盆地 im=imextendedmin(f,2);%上面仅是产生最小值点,而该函数则是得到最小值附近的区域,此处的附近是相差2的区域 fim=f; ? ? ? ? ? ? ? ? ? fim(im)=175; ? ? ? ? ? ? ?%将im在原图上标识出,用以观察 lim=watershed(bwdist(im));%再次分水岭计算 em=lim==0; g2=imimposemin(g,im|em);%在梯度图上标出im和em,im是集水盆地的中心,em是分水岭 l2=watershed(g2); ? ? ? %第三次分水岭计算 f2=f; f2(l2==0)=255; ? ? ? ? ?%从原图对分水岭进行观察 figure subplot(3,3,1),imshow(f); subplot(3,3,2),imshow(g); subplot(3,3,3),imshow(l); subplot(3,3,4),imshow(im); subplot(3,3,5),imshow(fim); subplot(3,3,6),imshow(lim); subplot(3,3,7),imshow(g2); subplot(3,3,8),imshow(l2) subplot(3,3,9),imshow(f2);

您可能关注的文档

文档评论(0)

cuotian + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档