close all;

%%

%Step 1: 彩***像->灰度图像

rgb = imread('pears.png');

I = rgb2gray(rgb);

figure;subplot(121)

imshow(I)

%Step 2: 利用梯度实现图像的分割

%使用sobel算子进行边缘检测,

text(732,501,'Image courtesy of Corel','FontSize',7,'HorizontalAlignment','right')

hy = fspecial('sobel');

hx = hy';

Iy = imfilter(double(I), hy, 'replicate');%实现线性空间滤波函数,一种采用滤波处理的影像增强方法。其理论基础是空间卷积和空间相关。目的是改善影像质量,包括去除高频噪声与干扰,及影像边缘增强、线性增强以及去模糊等。

Ix = imfilter(double(I), hx, 'replicate');

gradmag = sqrt(Ix.^2 + Iy.^2);%求模

subplot(122), imshow(gradmag,[]), title('gradmag')

%直接用分水岭

%L=watershed(gradmag);

%Lrgb=label2rgb(L);

%figure;imshow(Lrgb),

%title('Lrgb')

%No. 如果没有额外的预处理,如下面的标记计算,使用分水岭变换直接结果往往是“过度分割。”

% 以下是标记前景和背景物体

%各种程序可以在这里应用到找到前景标记,它必须连接内的每个前景对象的像素的斑点。在这个例子中,你将使用名为“开放由重建”及以上的图像“闭合由重建”为“干净”的形态学技术。这些操作将创建一个可以使用imregionalmax位于每个对象内部平最大值。

%Step 3:形态学开操作

se = strel('disk', 20);%圆形结构元素

Io = imopen(I, se);%形态学开操作

figure;subplot(121)

imshow(Io), title('Io')%显示执行后的图

%Step 4:腐蚀与重建

Ie = imerode(I, se);%对图像进行腐蚀

Iobr = imreconstruct(Ie, I);%对图像进行重建

subplot(122);imshow(Iobr), %显示重建后的图像

title('Iobr')

%Step 5:形态学关操作

Ioc = imclose(Io, se);%形态学关操作

figure;subplot(121)

imshow(Ioc),

title('Ioc')

%Step 6:图像膨胀与求反

Iobrd = imdilate(Iobr, se);%对图像进行膨胀

Iobrcbr = imreconstruct(imcomplement(Iobrd), imcomplement(Iobr));

Iobrcbr = imcomplement(Iobrcbr);%对图像求反

subplot(122);imshow(Iobrcbr),

title('Iobrcbr')

%%Step 7:获得局部最大值

fgm = imregionalmax(Iobrcbr);%获得局部最大值

figure;imshow(fgm),

title('fgm')

%Step 8:在原图上显示极大值区域

I2 = I;

I2(fgm) = 255;%局部极大值处像素值设为255

figure;imshow(I2),

title('fgm superimposed on original p_w_picpath')%在原图上显示极大值区域

se2 = strel(ones(5,5));%构建元素

fgm2 = imclose(fgm, se2);%关操作

fgm3 = imerode(fgm2, se2);%腐蚀

fgm4 = bwareaopen(fgm3, 20);%开操作

%Step 9:显示修改后的极大区域

I3 = I;

I3(fgm4) = 255;%前景设置为255

figure;subplot(121),

imshow(I3)%显示修改后的极大区域

title('fgm4 superimposed on original p_w_picpath')

%现在标记背景, 在清理后的图像,Iobrcbr,暗像素属于背景,所以你可以从一个阈值操作。

%Step 10:转化为二值图像

bw = im2bw(Iobrcbr, graythresh(Iobrcbr));

subplot(122);imshow(bw),

title('bw')

%背景像素是黑色的,但理想地,我们不希望的背景标记是太靠近我们目标对象的边缘。我们通过'骨骼化'进行细分,对二值图像的距离进行分水岭变换,然后寻找分水岭的界线。

%Step 11:

D = bwdist(bw);%计算距离

DL = watershed(D);%分水岭变换

bgm = DL == 0;%求取分割边界

figure; imshow(bgm), %显示分割后的边界

title('Watershed ridge lines (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('Markers and object boundaries')

Lrgb = label2rgb(L, 'jet', 'w', 'shuffle');%转化为伪彩***像

subplot(122); imshow(Lrgb)%显示伪彩***像

title('Colored watershed label matrix')

figure; imshow(I),

hold on

hp_w_picpath = imshow(Lrgb);%在原图上显示伪彩***像

set(hp_w_picpath, 'AlphaData', 0.3);

title('Lrgb superimposed transparently on original p_w_picpath')

分水岭 matlab代码,分水岭算法MATLAB编程代码解析相关推荐

  1. 视频教程-三十八课时零基础matlab精通优化算法-Matlab

    三十八课时零基础matlab精通优化算法 图像和算法等领域有多年研究和项目经验:指导发表科技核心期刊经验丰富:多次指导数学建模爱好者参赛. 宋星星 ¥100.00 立即订阅 扫码下载「CSDN程序员学 ...

  2. c语言代码运行成图指令代码,C语言图形编程代码.doc

    C语言图形编程代码 C语言图形编程代码 自己以前编写的C语言图形编程代码 自己以前编写的图形编程代码实现DOS下256BMP图片显示,中文注释,中文汉字显示 写的不好,给大家交流与学习,TC3.0与T ...

  3. bfgs算法matlab程序,bfgs算法matlab代码

    (对 Large -scale 问题) 对应文件 \\toolbox\\matlab\\funfun\\fminbnd.m \\toolbox\\optim\\sfminbx.m \\toolbox\ ...

  4. 极值滤波matlab,极值滤波算法MATLAB程序及处理结果对比

    <极值滤波算法MATLAB程序及处理结果对比>由会员分享,可在线阅读,更多相关<极值滤波算法MATLAB程序及处理结果对比(5页珍藏版)>请在人人文库网上搜索. 1.极值滤波算 ...

  5. 压缩感知算法matlab,压缩感知算法matlab

    MATLAB代码如下: 压缩感知仿真实例 压缩感知仿真实例在MATLAB R2001b中的计算结果如下: 原图像 采样率0.7 采样率0.5 采样率0.3 压缩感知仿真实例采用均方误差...... M ...

  6. 用matlab实现理查森外推算法,Matlab数值积分(2)

    实验目的: 掌握理查森外推法 实验要求: 1. 给出理查森外推算法 2. 用Matlab实现理查森外推算法 3. 用Matlab实现自适应积分算法 实验内容: 1. 理查森外推算法,数学知识:利用Ri ...

  7. 神经网络模型matlab例子,神经网络算法matlab

    1.如何利用matlab神经网络工具箱做神经网络分析 神经网络技术在模式识别与分类.识别滤波.自动控制.预测等方面已展示了其非凡的优越性.神经网络的结构由一个输入层.若干个中间隐含层和一个输出层组成. ...

  8. 关于精英蚁群算法matlab,蚁群算法MATLAB解VRP问题

    Excel  exp12_3_2.xls内容: ANT_VRP函数: function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ANT ...

  9. idw matlab 程序_IDW 算法MATLAB 实现 -

    中国Unix/Linux软件开发联盟 http://www.lisdn.com IDW 算法MATLAB 实现 linux软件开发 %IDW(反距离加权插值法) %其中x,y,z为已知坐标及其函数值, ...

  10. idw matlab 程序_IDW 算法MATLAB 实现

    IDW 算法MATLAB 实现 linux软件开发 %IDW(反距离加权插值法) %其中x,y,z为已知坐标及其函数值,X,Y为要插值的坐标 %x,y,z,X,Y最高为二维的,不可为三维 %不考虑x, ...

最新文章

  1. 浅析Spring——控制反转IoC
  2. Redis_基本类型介绍和指令___2
  3. Mysql的innodb缓冲池管理(转)
  4. 洛谷 P3157 [CQOI2011]动态逆序对 | CDQ分治
  5. OD逆向调试程序的笔记
  6. python 下标越界_Python中异常处理
  7. 因为没钱买衣服,我女朋友不要我了......
  8. hdu 2082 找单词(母函数)
  9. 阿里巴巴(alibaba)系列_druid 数据库连接池_监控(一篇搞定)记录执行慢的sql语句...
  10. Servlet请求和响应
  11. 实对称矩阵的特征值求法_机器学习和线性代数 - 特征值和特征向量
  12. java架构师是做什么的 java架构师的工作内容
  13. Python与SEO,三大SEO网站查询工具关键词查询采集源码!
  14. 如何在linux环境下打开xlsx文件
  15. 经验模态分解python_信号处理 - 经验模态分解 【1】
  16. 2021 年 1 月中国编程语言排行榜:Java 稳居第一
  17. 谷歌百度脸书IBM,人工智能四巨头2014盘点
  18. android java 写文件操作_Android编程之文件的读写实例详解
  19. Android中的run-as命令引出升降权限的安全问题
  20. 车窗内观春运 镜头记录旅客百态心情

热门文章

  1. Spring系列——@lazy注解
  2. android屏幕大小字体大小,Android字体大小自适应不同分辨率的解决办法
  3. Java筑基10-封装继承多态(重点)
  4. c++自学笔记第五次
  5. 等级保护体系及信息安全管理系统
  6. oreo另一个意思_孑孓、仄亾、片爿…看起来天生一对的字,意思竟然大不同
  7. 计算机体系结构:记分牌算法(完全弄懂!)
  8. android外接USB扫码器应用闪退,外接U盘正常的情况
  9. springboot文件上传 Required request part 'file' is not present
  10. Java语言高级(第三部分)异常多线程 ->(个人学习记录笔记)