分水岭分割方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

分⽔岭分割⽅法 matlab
分⽔岭分割⽅法,是⼀种基于拓扑理论的数学形态学的分割⽅法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每⼀点像素的灰度值表⽰该
点的海拔⾼度,每⼀个局部极⼩值及其影响区域称为集⽔盆,⽽集⽔盆的边界则形成分⽔岭。

分⽔岭的概念和形成可以通过模拟浸⼊过程来说明。

在每
⼀个局部极⼩值表⾯,刺穿⼀个⼩孔,然后把整个模型慢慢浸⼊⽔中,随着浸⼊的加深,每⼀个局部极⼩值的影响域慢慢向外扩展,在两个集⽔盆汇合
处构筑⼤坝,即形成分⽔岭。

分⽔岭的计算过程是⼀个迭代标注过程。

分⽔岭⽐较经典的计算⽅法是L. Vincent提出的。

在该算法中,分⽔岭计算分两个步骤,⼀个是排序过程,⼀个是淹没过程。

⾸先对每个像素的灰度级进⾏从低到⾼排序,然后在从低到⾼实现淹没过程中,对每⼀个局部极⼩值在h阶⾼度的影响域采⽤先进先出(FIFO)结构进⾏判断及标注。

分⽔岭分割技术是⼀种很优秀的且得到了⼴泛应⽤的分割技术,从本质上讲,它属于⼀种基于区域增长的分割⽅法,但它得到的确是⽬标的边界,且是
连续、闭合、但像素宽的边界。

在很多领域,这种分割技术都得到了⼴泛的应⽤,但分⽔岭分割却有⼀个致命的弱点,那就是容易产⽣过分割,对于噪
声和细密纹理⾮常敏感,使其常常产⽣严重的过分割结果。

所以,针对这个问题,很多⼈提出了很多种改进的分⽔岭分割技术。

综合来讲,⼤概也就三类。

其⼀,分割预处理。

既在应⽤分⽔岭分割之前对图像进⾏⼀些预处理,诸如除噪,求梯度图像,形态学重建,标记前景背景等等,⼀个⽬的,减少
⼩的积⽔盆,从⽽减少过分割区域的数量。

其⼆,分割后处理。

既在应⽤分⽔岭分割之后对结果图像进⾏合并处理。

如果初始分割产⽣过多⼩区域,合
并处理会具有很⼤的运算量,所以后处理的时间复杂度经常较⾼,还有合并准则的确定,也是⼀件⽐较⿇烦的事情,通常有基于相邻区域的平均灰度信
息和边界强度信息的合并准则,不同的合并准则会得到不同的分割结果。

其三,就是既有预处理⼜有后处理的分割技术了,根据具体应⽤领域的要求,
如果只是采取预处理或后处理还不能得到满意的效果,那就把他们都⽤上试试了。

matlab基本程序:
clear, close all;
clc;
%1.读取图像并求取图像的边界。

rgb = imread('tree.bmp');%读取原图像
I = rgb2gray(rgb);%转化为灰度图像
figure; subplot(121)%显⽰灰度图像
imshow(I)
text(732,501,'Image courtesy of Corel','FontSize',7,'HorizontalAlignment','right')
hy = fspecial('sobel');%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('Gradient magnitude (gradmag)')
%2. 直接使⽤梯度模值进⾏分⽔岭算法:(往往会存在过的分割的情况,效果不好)
L = watershed(gradmag);%直接应⽤分⽔岭算法
Lrgb = label2rgb(L);%转化为彩⾊图像
figure; imshow(Lrgb), %显⽰分割后的图像
title('Watershed transform of gradient magnitude (Lrgb)')%过分割现象%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%。

相关文档
最新文档