分水岭算法的Matlab实现

合集下载

分水岭算法(完整版)

分水岭算法(完整版)
分水岭分割算法的实现 与分析
青 衣
11053413 李小泷
• 分水岭算法实现步骤:先把图片转化为灰度梯度级图像, 在图像梯度空间内逐渐增加一个灰度阈值,每当它大于一 个局部极大值时,就把当时的二值图像(只区分陆地和水 域,即大于灰度阈值和小于灰度阈值两部分)与前一个时 刻(即灰度阈值上一个值的时刻)的二值图像进行逻辑异或 (XOR)操作,从而确定出灰度局部极大值的位置 。根据所 有灰度局部极大值的位置集合就可确定分水岭。
Lrgb = label2rgb(L, 'jet', 'w', 'shuffle');%转 化为伪彩色图像 subplot(122); imshow(Lrgb)%显示伪彩色图 像 title('分水岭伪彩色图像') 青 衣
figure; imshow(I), hold on himage = imshow(Lrgb);%在原图上显示 伪彩色图像 set(himage, 'AlphaData', 0.3); title('原图像上的Lrgb处理')
imcomplement(Iobr));%形态学重建 Iobrcbr = imcomplement(Iobrcbr);%图像求反 subplot(122); imshow(Iobrcbr), %显示重建求反后的 图像 title('重建求反后的图像(Iobrcbr)')
fgm = imregionalmax(Iobrcbr);%局部极大值 figure; imshow(fgm), %显示重建后局部极大值图像 title('重建后局部极大值图像(fgm)')
此时再进行分水岭变换并显示得到的效果。

分水岭算法——MATLAB

分水岭算法——MATLAB
% These operations will create flat maxima inside each object that can be located using imregionalmax.
% 有多种方法可以应用在这里来获得前景标记,这些标记必须是前景对象内部的连接斑点像素。这个例子中,将使用形态学技术“基于开的重建”和“基于闭的重建”来清理图像。
% 接下来,通过腐蚀后重建来做基于开的重建计算。
Ie = imerode(I, se);
Iobr = imreconstruct(Ie, I);
figure('units', 'normalized', 'position', [0 0 1 1]);
subplot(1, 2, 1); imshow(I, []); title('灰度图像');
% 使用MATLAB图像处理工具箱
% 注:期间用到了很多图像处理工具箱的函数,例如fspecial、imfilter、watershed、label2rgb、imopen、
% imclose、imreconstruct、imcomplement、imregionalmax、bwareaopen、graythresh和imimposemin函数等。
% The gradient is high at the borders of the objects and low (mostly) inside the objects.
% 使用Sobel边缘算子对图像进行水平和垂直方向的滤波,然后求取模值,sobel算子滤波后的图像在边界处会显示比较大的值,在没有边界处的值会很小。
figure('units', 'normalized', 'position', [0 0 1 1]);

区域生长 形态学 分水岭算法

区域生长 形态学  分水岭算法

n r 数 h(rk ) nk 表示。其中, k 是第K级灰度, k 是灰
度级为 rk的像素个数。
通常迚行归一化处理,n是图像中像素的总数 n p ( rk ) k ,我们也可以称为 n 灰度级为 rk 发生的概率估计。且各级相加之和为
1
提出一种想法:若一副图像的像素占有全部可能的灰度 级并且分布均匀,那么这幅图像就会有较高的对比度,
直方图匹配
第二部分
形态学操作
膨胀不腐蚀
1
4
区域填充
开操作不闭操 作
2
形态学
5
连通分量的提 取
击中击丌中变 换
3
6
重构
腐蚀
把结构元素S平移x后得到Sx,若Sx包含于X,我们记下这个x点,所有满 足上述条件的x点组成的集合称做X被S腐蚀(Erosion)的结果。用公式表示为:
腐蚀的方法是,拿S的原点和X上的点一个一个地对比,如果S上的所有点 都在X的范围内,则S的原点对应的点保留,否则将该点去掉。
最近工作汇报
前 言
首先自我检讨一下,来这边整整一个月的时间,说真的并没有把时间
分配处理的很好,常常处在一种困惑的阶段,时丌时得干劲十足,可能一 段时间之后又失去方向了。。。丌过丌管怎么样,还是在一定程度上有所
迚步,首先是渐渐收敛了玩的心,再者就是戒多戒少学到了一些知识,希
望在今后的日子里,可以更好得利用自己的学习时间,提高效率,和大家 沟通交流,自己也能有更多的IDEA,再接再励 O(∩_∩)O
且灰度级动态范围大
直方图均衡
直方图均衡化:顾名思义,就是通过灰度变换将一幅图象转换 为另一幅具有均衡直方图,即在每个灰度级上都具有相同的象 素点数的过程, Ps ( s ) 1 直方图均衡化变换:设灰度变换s=T(r)为斜率有限的非减连续 可微函数,它将输入图象Ii(x,y)转换为输出图象Io(x,y),输 入图象的直方图为Hi(r),输出图象的直方图为Ho(s),则根据直 方图的含义,经过灰度变换后对应的小面积元相等: Ho(s)ds=Hi(r)dr

3种不同的分水岭分割方法以及三种方法的比较

3种不同的分水岭分割方法以及三种方法的比较

程序代码:(代码标记[code]...[/code] )clear,clc%三种方法进行分水岭分割%读入图像filename='Fig1021(a)(small-blobs).tif';f=imread(filename);Info=imfinfo(filename);if Info.BitDepth>8f=rgb2gray(f);endfigure,mesh(double(f));%显示图像,类似集水盆地%方法1:一般分水岭分割,从结果可以看出存在过分割问题b=im2bw(f,graythresh(f));%二值化,注意应保证集水盆地的值较低(为0),否则就要对b取反d=bwdist(b); %求零值到最近非零值的距离,即集水盆地到分水岭的距离l=watershed(-d); %matlab自带分水岭算法,l中的零值即为风水岭w=l==0; %取出边缘g=b&~w; %用w作为mask从二值图像中取值figuresubplot(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);。

分水岭分割算法-watershed工具箱

分水岭分割算法-watershed工具箱
• 过分割现象: 对微弱边缘具有良好的响应,图像中的噪 声、物体表面细微的灰度变化,都会产生过度分割的现象;
• 为消除分水岭算法产生的过度分割,通常可以采用两种处 理方法: 一是利用先验知识去除无关边缘信息。 二是修改梯度函数使得集水盆只响应想要探测的目标。
3. Matlab演示
• 代码: • clear; close all; clc; • rgb = imread('forest.png'); • • f = rgb2gray( rgb ); • figure(1); • imshow(rgb); • title('原始图像'); • • fgm = imregionalmax(f); • D = bwdist(fgm);%¼ÆËã¾àÀë • DL = watershed(D);%·ÖË®Áë±ä»» • bgm = DL == 0;%ÇóÈ¡·Ö¸î±ß½ç • f0 = f; • f0(bgm) = 255; • • figure(2); • imshow(f0); • title('»ùÓÚ¾àÀë±ä»»µÄ·ÖË®Áë·Ö¸î');
• b. 为得到图像的边缘信息,通常把梯度图像作为输入图像 进行处理。
分水岭脊线
汇水盆地
a
b
c
1. a中红色箭头指示区域为谷底,代表低亮度像素;黄色 箭头所示为山脊,代表高亮度像素;
2. b中灰色部分表示水从谷底逐渐涨高后的状态; 3. C中表示水面到达一定程度后留下的分水岭(最高点)
3. 不足
• f1 = f;
• f1(wr) = 255;

• figure(3);
• imshow(f1);
• title('»ùÓÚÌݶȵķÖË®Áë·Ö¸î');

解决分水岭算法的过分割问题

解决分水岭算法的过分割问题

解决分水岭算法的过分割问题班级:020751学号:02075087姓名:刘恺摘要针对基于分水岭变换的分割算法通常存在过分割现象,提出了一种新的分割算法,采用形态学的运算去除噪声及背景像素的影响,搜索区域极大值点,将分割定位于目标图像,从而达到很好的分割效果,方法从消除过分割及区域轮廓定位等方面均具有很好的分割效果。

关检词图像分割,分水岭变换,数学形态学Abstract The article is based on watershed algorithm, proposed a method of image segmentation, adopted the morphology arithmetic to eliminate the effect of noise and background pixel, search for the max point in each area, let segmentation orientate as target image, could reach very good segment effect. The method can efficiently eliminate over-segmentation, and hold the position of region contours without evident bias.Key words image segmentation, watershed transform ,mathematical morphology1.1图像分割综述把图像分解为一些特定的性质相似的部分(区域或对象),并用这些部分对图像进行分析和描述。

一幅图像往往包含许多不同类型的区域,如物体、环境和背景等。

图像分析的一个重要方法就是用它们作为基本组成成分对图像进行描述。

例如为了在气泡室图片中检出质点碰撞形式并判定其发生位置,就要在图像中分割出气泡的轨迹及其端点。

matlab图像处理教程1

matlab图像处理教程1

基本概念一点通从理论上讲,图像是一种二维的连续函数,然而在计算机上对图像进行数字处理的时候,首先必须对其在空间和亮度上进行数字化,这就是图像的采样和量化的过程。

空间坐标(x,y)的数字化称为图像采样,而幅值数字化称为灰度级量化。

对一幅图像采样时,若每行(横向)采样数为M,每列(纵向)采样数为N,则图像大小为M*N个像素,f(x,y)表示点(x,y) 处的灰度值,则F(x,y)构成一个M*N 实数矩阵****************************经验分享:“像素”的英文为“pixel”,它是“picture”和“element”的合成词,表示图像元素的意思。

我们可以对“像素”进行如下理解:像素是一个面积概念,是构成数字图像的最小单位。

****************************把采样后所得的各像素灰度值从模拟量到离散量的转换称为图像灰度的量化。

量化是对图像幅度坐标的离散化,它决定了图像的幅度分辨率。

量化的方法包括:分层量化、均匀量化和非均匀量化。

分层量化是把每一个离散样本的连续灰度值只分成有限多的层次;均匀量化是把原图像灰度层次从最暗至最亮均匀分为有限个层次,如果采用不均匀分层就称为非均匀量化。

当图像的采样点数一定时,采用不同量化级数的图像质量不一样。

量化级数越多,图像质量越好;量化级数越少,图像质量越差。

量化级数小的极端情况就是二值图像。

****************************经验分享:“灰度”可以认为是图像色彩亮度的深浅。

图像所能够展现的灰度级越多,也就意味着图像可以表现更强的色彩层次。

如果把黑——灰——白连续变化的灰度值量化为256个灰度级,灰度值的范围为0~255,表示亮度从深到浅,对应图像中的颜色为从黑到白。

****************************因此,对数字图像进行处理,也就是对特定的矩阵进行处理。

在C语言中,对M×N数字图像处理的核心代码如下:for (j=1;j<N+1;j++)for(i=1;i<M+1;i++){对I(i,j)的具体运算};在Matlab中,对M×N数字图像处理的核心代码如下:for i=1:Nfor j=1:M对I(i,j)的具体运算endend一幅数字图像可以用一个矩阵来表示,对数字图像进行处理,实质上就是对特定的图像矩阵进行变换的过程,因此,图像变换是数字图像处理技术的基础。

分水岭算法程序实现过程详解

分水岭算法程序实现过程详解

下标L表示左,R表示右,T表示上,B表示下,abs表示取绝对值
min(max(abs(R- RT), abs(G-GT), abs(B-BT)),max(abs(R- RB), abs(G-GB), abs(B-BB)),max(abs(R- RL), abs(G-GL), abs(B-BL)),max(abs(R-R R), abs(G-GR), abs(B-BR)))
二、传统分水岭算法
传统的分水岭分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图 像中每1像素的灰度值表示该点的海拔高度,每1个局部极小值及其影响区域 称为集水盆地,而集水盆地的边界则形成分水岭.基于梯度图像的直接分水岭 算法容易导致图像的过分割,产生这1现象的原因主要是由于输入的图像存在 噪声等而产生许多小的集水盆地,从而导致分割后的图像不能将图像中有意 义的区域表示出来.所以必须对分割结果的相似区域进行合并.
相应的队列. 如果这个灰度上的队列处理完了,就继续找下1个非空队列.
注 意 : 第 1轮 ,把标 记点的 邻居点 放入相 应的优 先级队 列后,先 进先出 的原则 处理队 列中的 像素结 点,找到 1个非 零结点 后,执行 第1,2,3步 ,执行 完第3步 之后 ,重新更 新队列 再次进 行扫描 .
1、有标的分水岭算法 1.准备好原图和掩模图
2.对掩模图做初始化标记,以形成最初的注水区域,设置mask边框值为-1,即每个标记 (种子,全为正值,1,2,3...)都是1个初始聚水盆,标记的周围1圈的邻居像素就是 聚水盆的初始边界.
3.在mask图像中找邻居像素(该像素四邻域内有标记点),并将邻居像素对应 原图中的点放入相应的优先级队列
优先级队列
Y
0 1 2 3 4 5 6
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档