clear,clc%三种方法进行分水岭分割

%读入图像

filename='sar1.bmp';

f=imread(filename);

Info=imfinfo(filename);

if Info.BitDepth>8

f=rgb2gray(f);

end

figure,

mesh(double(f));%显示图像,类似集水盆地

%方法1:一般分水岭分割,从结果可以看出存在过分割问题

b=im2bw(f,graythresh(f));%二值化,注意应保证集水盆地的值较低(为0),否则就要对b取反

d=bwdist(b);             %求零值到最近非零值的距离,即集水盆地到分水岭的距离

l=watershed(-d);         %matlab自带分水岭

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;

figuresubplot(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;          %从原图对分水岭进行观察

figuresubplot(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);

matlab 分水岭法,分水岭算法Matlab实现——三种方法 | 学步园相关推荐

  1. mysql 注册驱动_Mysql注册驱动三种方法 | 学步园

    考量了许久,决定把最近学的jdbc坐下总结,慢慢来吧,一天总结一小点,既然拖了那么久. 好,下面开始总结.(这里以mysql数据库为例) 首先就要说的是jdbc中注册驱动,首先导入对应的包,例如mys ...

  2. python socket接收图像 数据_python中socket接受数据的三种方法 | 学步园

    原位置:http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/408859 Description: An issue with socket ...

  3. python中pca算法_Python使用三种方法实现PCA算法

    主成分分析(PCA) vs 多元判别式分析(MDA) PCA和MDA都是线性变换的方法,二者关系密切.在PCA中,我们寻找数据集中最大化方差的成分,在MDA中,我们对类间最大散布的方向更感兴趣. 一句 ...

  4. m基于效用函数的联合资源分配matlab仿真,对比PF,CUBP以及DUBP三种方法

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 表示基站n到用户m是否连接. 1.1 C-CUBP 主要涉及到的公式有: 1.2 C-DUBP 主要 ...

  5. 全景图矫正 matlab,全景图的后期水平矫正的三种方法

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区. 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 三维全景是不是水平的,在转动浏览时是会看得出来的,拍摄时如果没有调好水平,整图呈歪斜状 ...

  6. java map string stu_Java Map遍历的三种方式 | 学步园

    最近经常碰到Map遍历的问题,在网上查找资料后,记录下,权当备忘~~~~~~ 这里给出了三种遍历的方式,注释中已说明各自方式的优点. package edu.hrbeu.cloud.testIterM ...

  7. matlab判断向量组线性相关性的三种方法

    求行列式法 det 初等行变换法 rref 求秩法 rank ;表示列向量,,表示行向量 format rat v1 = [-9;7;3]; v2 = [3;34;-24]; v3 = [-6;-4; ...

  8. MATLAB笔记:打开数据文件的三种方法+读取数据文件的两种方法+保存数据文件的两种方法

    1.打开数据文件 1.1 直接打开文件 PATHNAME = 'C:\Users\s55\Desktop\dat'; FILENAME = '\data_1.dat'; str0=strcat(PAT ...

  9. java base64 编码 类_java base64编码和解码的三种方式 | 学步园

    方式一:使用commons-codec.jar /** * @param bytes * @return */ public static byte[] decode(final byte[] byt ...

最新文章

  1. Jackson 通过自定义注解来控制json key的格式
  2. 彻底理解JavaScript中回调函数 (推荐)
  3. linux cp复制软连接
  4. pr文字转语音有插件吗_文字转语音软件深度解析
  5. python send 案例_python使用rabbitmq实例三,交换机
  6. python模拟抛硬币_python实现简单随机模拟——抛呀抛硬币
  7. Android 系统 (39)---OTA后启动第三方APP出现APP Crash
  8. spring 安全模块在jsp中误用引起的问题
  9. QuickWAP 2.x注册方法和购买注意事项
  10. 好用的在线JSON编辑与格式化工具
  11. OpenCV学习——摄像头人脸识别
  12. (10.1.3.4)UI设计,扁平化还是拟物化?
  13. ⨯ Get “https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-3.0.4.
  14. ERWIN中的一对多标识关系和一对多非标识关系
  15. 构建Delaunay三角网的VB源程序
  16. IE8 设置图片大小,没有效果
  17. Lesson 018 —— python 集合
  18. 错误提示:“ReferenceError: require is not defined in ES module scope, you can use impor”解决方法
  19. 测试信号处理-模拟滤波器概述
  20. iPhone越狱后导致无法快充的问题,iPhone X无法18瓦快充

热门文章

  1. C++实现进程通信(管道pipe)
  2. Java筑基10-封装继承多态(重点)
  3. 论文笔记:Pointing Novel Objects in Image Captioning
  4. iPhone 小技巧/实用功能
  5. Python数据处理课程设计-房屋价格预测-代码
  6. 戴尔服务器r620引导盘,戴尔R620服务器WINDOWS操作系统无引导盘安装方法.ppt
  7. sendcloud php 群发,laravel5.5 使用sendcloud发送邮件
  8. 打地鼠游戏(使用Qt)
  9. Java基础数组——以三种方法打印古诗《清平调》
  10. 写专利的一点小小心得