基于形态学分水岭的图像分割算法..doc

基于形态学分水岭的图像分割算法..doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于形态学分水岭的图像分割算法 摘要: 关键字: 图像分割是图像分析和处理中一个重要的研究方向,它是许多后续处理的基础。其分割结果的好坏对后续的图像分析、理解及识别都有很大影响。图像分割的算法有很多种,比较常用的有:快速聚类分割、颗粒分割、区域阈值法、边缘检测法以及基于形态学分水岭分割等。其中分水岭变换是图像分割中的一种经典有效的方法,它与经典的边缘检测算法相比,计算精度高,可有效的生成封闭的单像素轮廓,它以快速、有效、准确的分割结果越来越得到人们的重视。 分水岭图像分割方法采用的原理主要有两种: 第一种是模拟浸水过程。首先把一幅图像视为跌宕起伏的地形曲面,图像中每个象素的灰度值对应于地形中的高度,代表了该点在地形中的海拔。在这样的地形中,有盆地(图像中的局部极小区域)、山脊(分水岭)以及盆地和山脊之间的山坡。初始把图像这个有盆地也有山脊的地形模型垂直浸入湖水中,然后在各个盆地的最低处刺上各个洞,使水慢慢均匀浸入各个洞中,当水快要填满盆地,即某两个或多个盆地中的水将要相交融时,就在将要相交的两盆地之间修建堤坝,随着水位的逐渐上涨,最后各个盆地完全被水淹没,只有各个堤坝没被水淹没,而各个盆地又完全被堤坝所包围,从而可以得到各个堤坝(分水岭)和一个个被堤坝分开的盆地(目标物体),从而达到使粘连物体分割的目的。 第二种是模拟降水过程。这种方法也是基于地形学中的地貌特征,同样把一幅图像视为跌宕起伏的地貌模型。在模拟降水过程中,当雨滴落到山地模型上时,必将沿着山坡流人谷底,雨滴所经过的路线就是一个连通分支,也是雨滴到谷底的最陡峭路径,而通往同一谷底的所有连通分支就形成了一个蓄水盆地。 算法实现: % 分水岭算法clear, close all; clc; PathName=t ;%t为自填内容,下面p类似FileName=[PathName p];?? Image=imread(FileName); subplot(2,2,1);subimage(Image);title(原图);;pixval on;B=[1,1,1;1,1,1;1,1,1];%方形结构元E8=[-1,0;-1,1;0,1;1,1;1,0;1,-1;0,-1;-1,-1];??? % 8-连通结构元坐标maskLenth=length(E8);?????? % 结构元点的个数[X,Y]=size(Image); %原始图像image 赋值给A1n=1; A(:,:,n)=Image; M=zeros(X,Y); Mark_Image=zeros(X,Y); %产生距离图while sum(sum(A(:,:,n)))~=0 ???? A(:,:,n+1)= imerode(A(:,:,n),B); ???? U(:,:,n)= (A(:,:,n)-A(:,:,n+1))*n; ???? M=M+U(:,:,n); ???? n=n+1; end n=n-1; subplot(2,2,2);imagesc(M,[0,n]);title(距离图);% 搜寻局部最大值,将其放入Deal_ImageDeal_Image=zeros(X,Y); while n0 for high=1:X ????? for width=1:Y %******************************************************************** ????????? Mark_Bool=0; ????????? if M(high,width)==n %______________________________________________________________? ??????????? for dot=1:maskLenth ???????????????? i=E8(dot,1); j=E8(dot,2); ???????????????? if high+i=1 width+j=1 high+i=X width+j=Y M(high+i,width+j)M(high,width); ????????????????????? Mark_Bool=1;break; ???????????????? end % if_end ????????????? end % for dot_end %______________________________________________________________ ???????????? if?? Mark_Bool==0; ???????????

文档评论(0)

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

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

1亿VIP精品文档

相关文档