matlab 分水岭法,分水岭算法Matlab实现——三种方法 | 学步园
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实现——三种方法 | 学步园相关推荐
- mysql 注册驱动_Mysql注册驱动三种方法 | 学步园
考量了许久,决定把最近学的jdbc坐下总结,慢慢来吧,一天总结一小点,既然拖了那么久. 好,下面开始总结.(这里以mysql数据库为例) 首先就要说的是jdbc中注册驱动,首先导入对应的包,例如mys ...
- python socket接收图像 数据_python中socket接受数据的三种方法 | 学步园
原位置:http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/408859 Description: An issue with socket ...
- python中pca算法_Python使用三种方法实现PCA算法
主成分分析(PCA) vs 多元判别式分析(MDA) PCA和MDA都是线性变换的方法,二者关系密切.在PCA中,我们寻找数据集中最大化方差的成分,在MDA中,我们对类间最大散布的方向更感兴趣. 一句 ...
- m基于效用函数的联合资源分配matlab仿真,对比PF,CUBP以及DUBP三种方法
目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 表示基站n到用户m是否连接. 1.1 C-CUBP 主要涉及到的公式有: 1.2 C-DUBP 主要 ...
- 全景图矫正 matlab,全景图的后期水平矫正的三种方法
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区. 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 三维全景是不是水平的,在转动浏览时是会看得出来的,拍摄时如果没有调好水平,整图呈歪斜状 ...
- java map string stu_Java Map遍历的三种方式 | 学步园
最近经常碰到Map遍历的问题,在网上查找资料后,记录下,权当备忘~~~~~~ 这里给出了三种遍历的方式,注释中已说明各自方式的优点. package edu.hrbeu.cloud.testIterM ...
- matlab判断向量组线性相关性的三种方法
求行列式法 det 初等行变换法 rref 求秩法 rank ;表示列向量,,表示行向量 format rat v1 = [-9;7;3]; v2 = [3;34;-24]; v3 = [-6;-4; ...
- MATLAB笔记:打开数据文件的三种方法+读取数据文件的两种方法+保存数据文件的两种方法
1.打开数据文件 1.1 直接打开文件 PATHNAME = 'C:\Users\s55\Desktop\dat'; FILENAME = '\data_1.dat'; str0=strcat(PAT ...
- java base64 编码 类_java base64编码和解码的三种方式 | 学步园
方式一:使用commons-codec.jar /** * @param bytes * @return */ public static byte[] decode(final byte[] byt ...
最新文章
- Jackson 通过自定义注解来控制json key的格式
- 彻底理解JavaScript中回调函数 (推荐)
- linux cp复制软连接
- pr文字转语音有插件吗_文字转语音软件深度解析
- python send 案例_python使用rabbitmq实例三,交换机
- python模拟抛硬币_python实现简单随机模拟——抛呀抛硬币
- Android 系统 (39)---OTA后启动第三方APP出现APP Crash
- spring 安全模块在jsp中误用引起的问题
- QuickWAP 2.x注册方法和购买注意事项
- 好用的在线JSON编辑与格式化工具
- OpenCV学习——摄像头人脸识别
- (10.1.3.4)UI设计,扁平化还是拟物化?
- ⨯ Get “https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-3.0.4.
- ERWIN中的一对多标识关系和一对多非标识关系
- 构建Delaunay三角网的VB源程序
- IE8 设置图片大小,没有效果
- Lesson 018 —— python 集合
- 错误提示:“ReferenceError: require is not defined in ES module scope, you can use impor”解决方法
- 测试信号处理-模拟滤波器概述
- iPhone越狱后导致无法快充的问题,iPhone X无法18瓦快充
热门文章
- C++实现进程通信(管道pipe)
- Java筑基10-封装继承多态(重点)
- 论文笔记:Pointing Novel Objects in Image Captioning
- iPhone 小技巧/实用功能
- Python数据处理课程设计-房屋价格预测-代码
- 戴尔服务器r620引导盘,戴尔R620服务器WINDOWS操作系统无引导盘安装方法.ppt
- sendcloud php 群发,laravel5.5 使用sendcloud发送邮件
- 打地鼠游戏(使用Qt)
- Java基础数组——以三种方法打印古诗《清平调》
- 写专利的一点小小心得