标记分水岭.docx

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
标记分水岭

标记分水岭分割算法 如果图像中的目标物体是连接在一起的,则分割起来会更困难,分水岭分割算法 经常用于处理这类问题,通常会取得比较好的效果。分水岭分割算法把图像看成 一幅“地形图”,其中亮度比较强的区域像素值较大,而比较暗的区域像素值较 小,通过寻找“汇水盆地”和“分水岭界限”,对图像进行分割。 直接应用分水岭分割算法的效果往往并不好,如果在图像中对前景对象和背景对 象进行标注区别,再应用分水岭算法会取得较好的分割效果。基于标记控制的分 水岭分割方法有以下基本步骤: 1.计算分割函数。图像中较暗的区域是要分割的对象。 2.计算前景标志。这些是每个对象内部连接的斑点像素。 3.计算背景标志。这些是不属于任何对象的像素。 4.修改分割函数,使其仅在前景和后景标记位置有极小值。 5.对修改后的分割函数做分水岭变换计算。 使用MATLAB 图像处理工具箱 注:期间用到了很多图像处理工具箱的函数,例如fspecial、imfilter、watershed、 label2rgb、imopen、imclose、imreconstruct、imcomplement、imregionalmax、 bwareaopen、graythresh 和imimposemin 函数等。 第一步:读入彩色图像,将其转化成灰度图像 clc; clear all; close all; rgb = imread(Sunset.jpg); if ndims(rgb) == 3 I = rgb2gray(rgb); else I = rgb; end figure(units, normalized, position, [0 0 1 1]); subplot(1, 2, 1); imshow(rgb); title(原图); subplot(1, 2, 2); imshow(I); title(灰度图); 第2 步:将梯度幅值作为分割函数 使用Sobel 边缘算子对图像进行水平和垂直方向的滤波,然后求取模值,sobel 算子滤波后的图像在边界处会显示比较大的值,在没有边界处的值会很小。 hy = fspecial(sobel); hx = hy; Iy = imfilter(double(I), hy, replicate); Ix = imfilter(double(I), hx, replicate); gradmag = sqrt(Ix.^2 + Iy.^2); figure(units, normalized, position, [0 0 1 1]); subplot(1, 2, 1); imshow(I,[]), title(灰度图像) subplot(1, 2, 2); imshow(gradmag,[]), title(梯度幅值图像) 可否直接对梯度幅值图像使用分水岭算法? L = watershed(gradmag); Lrgb = label2rgb(L); figure(units, normalized, position, [0 0 1 1]); subplot(1, 2, 1); imshow(gradmag,[]), title(梯度幅值图像) subplot(1, 2, 2); imshow(Lrgb); title(梯度幅值做分水岭变换) 直接使用梯度模值图像进行分水岭算法得到的结果往往会存在过度分割的现象。 因此通常需要分别对前景对象和背景对象进行标记,以获得更好的分割效果。 第3 步:标记前景对象 有多种方法可以应用在这里来获得前景标记,这些标记必须是前景对象内部的连 接斑点像素。这个例子中,将使用形态学技术“基于开的重建”和“基于闭的重 建”来清理图像。这些操作将会在每个对象内部创建单位极大值,使得可以使用 imregionalmax 来定位。 开运算和闭运算:先腐蚀后膨胀称为开;先膨胀后腐蚀称为闭。开和闭这两种运 算可以除去比结构元素小的特定图像细节,同时保证不产生全局几何失真。开运 算可以把比结构元素小的突刺滤掉,切断细长搭接而起到分离作用;闭运算可以 把比结构元素小的缺口或孔填充上,搭接短的间隔而起到连接作用。 开操作是腐蚀后膨胀,基于开的重建(基于重建的开操作)是腐蚀后进行形态学 重建。下面比较这两种方式。首先,用imopen 做开操作。 se = strel(disk, 20); Io = imopen(I, se); figure(units, normalized, position, [0 0 1 1]); subplot(1, 2, 1); imshow(I, []); title(灰度图像); subplot(1, 2, 2); imshow(Io), title(图像开操作) 接下来,通过腐蚀后重建来做基

文档评论(0)

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

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

1亿VIP精品文档

相关文档