分水岭算法的概念及原理

合集下载

简述分水岭算法的基本原理

简述分水岭算法的基本原理

分水岭算法是一种基于像素值的区域分割方法,在计算机视觉领域中应用广泛。

其基本原理是将图像视为一个地形表面,像素值表示高度,然后寻找这个地形表面上的“山脊线”和“山谷线”,将山脊线和山谷线的交点看做分割线,将图像分割成多个区域,最终得到分割后的结果。

分水岭算法的基本步骤可以概括为以下几点:
预处理:将图像上的小区域进行平滑化处理以减小局部噪声的影响,对图像进行二值化,使区域的边界更清晰明显。

计算距离变换图:使用距离变换得到一张图像,其中每个像素表示该像素点与最近的边缘像素点之间的距离。

寻找种子点:通过对距离变换图使用阈值处理得到二值图像,标记出每个局部最小值作为分水岭的初始种子点。

集合种子点:汇聚相邻的且距离较近的种子点,并形成一个“分水岭”网络,分离异物目标和背景。

分水岭重建:从所有的标记点开始向外扩展,使每个点都标记为与其最近的标签点相同的标记。

后处理:对分割结果进行后处理,例如过滤掉面积较小的分割区域以消除噪声。

分水岭算法的优点是分割结果准确,适用于任何图像,多用于图像分割、药物颗粒分析、医学图像分析等方面的应用。

但是,该算法在处理边缘粗糙、噪声较多的情况下,容易出现不稳定等问题。

分水岭 算法

分水岭 算法

分水岭算法1. 简介分水岭算法(Watershed algorithm)是一种图像分割算法,可以将图像中的不同区域进行分离和标记。

它基于图像的灰度值和梯度信息,将图像看作一个地形地貌,并从低处向高处逐渐充满水,直到不同区域之间的水汇聚形成分割线。

该算法最初是由Belknap和Hoggan在1979年提出的,后来被广泛应用于计算机视觉领域,特别是在医学图像处理、目标检测和图像分析等方面。

2. 原理2.1 灰度变换在进行分水岭算法之前,需要对原始图像进行灰度变换。

这可以通过将彩色图像转换为灰度图像来实现。

灰度图像中的每个像素点都代表了原始彩色图像中相应位置的亮度值。

2.2 梯度计算接下来,需要计算灰度图像中每个像素点的梯度值。

梯度表示了亮度变化的速率,可以帮助我们找到不同区域之间的边界。

常用的梯度计算方法有Sobel、Prewitt和Scharr等算子。

这些算子对图像进行卷积操作,将每个像素点的梯度计算为其周围像素点的亮度差值。

2.3 标记初始化在进行分水岭算法之前,需要为每个像素点初始化一个标记值。

通常情况下,我们可以将背景区域标记为0,前景区域标记为正整数。

2.4 梯度图像处理接下来,我们将梯度图像中的每个像素点看作一个地形地貌中的一个位置,并将其灌满水。

初始时,所有像素点的水位都是0。

2.5 水汇聚从灰度最小值开始,逐渐增加水位直到灰度最大值。

在每次增加水位时,会发生以下情况: - 当前水位高于某个位置的梯度值时,该位置被认为是不同区域之间的边界。

- 如果两个不同区域之间存在连接路径,则会发生水汇聚现象。

此时需要将这两个区域合并,并更新合并后区域的标记值。

2.6 分割结果当水位达到最大值时,分割过程结束。

此时所有不同区域之间都有了明确的边界,并且每个区域都有了唯一的标记值。

3. 算法优缺点3.1 优点•分水岭算法是一种无监督学习方法,不需要依赖任何先验知识或训练数据。

•可以对图像中的任意区域进行分割,不受形状、大小和数量的限制。

分水岭算法的概念及原理

分水岭算法的概念及原理

分水岭算法的概念及原理
分水岭算法(Watershed Algorithm)是一种用于图像分割的算法,它基于山脊线(ridge line)和水流的概念,能够将图像中的物体分割出来。

该算法的主要原理是将图像看作地形地貌,将亮度视作高程,通过模拟洪水灌溉的过程,将图像分割成多个区域。

分水岭算法的核心思想是:将图像中的亮度极值点视作各个地块的山峰,从这些山峰出发,模拟水流的分布过程,即从高处向低处流动,在流动的过程中形成不同的流域。

当水流面临两个流域的交汇区时,就会形成分水岭,从而将图像分割成多个区域。

具体的分水岭算法步骤如下:
1.预处理:将彩色图像转换成灰度图像,并进行平滑处理,以减少噪声的干扰。

2.计算梯度图像:通过计算图像灰度值的梯度来得到梯度图像。

梯度较大的地方通常表示物体的边界。

3.标记种子点:选取梯度图像中的极值点作为种子点(山峰),这些点将成为分水岭的起点。

4.洪水灌溉:从种子点开始模拟水流的分布过程。

初始化一个标记图像,将种子点周围标记为相应的流域。

然后将水从种子点开始向相邻的像素流动,直到遇到另一个流域或已经被标记过。

这样不断地灌溉,最终得到一个水流分布图。

6.后处理:将不可靠的区域(通常是细长的、过于小的区域)进行合并,得到最终的分割结果。

总的来说,分水岭算法是一种基于洪水灌溉模拟的图像分割算法,通过模拟水流的分布过程,将图像分割成多个区域,从而准确地分割出物体边界。

分水岭 算法

分水岭 算法

分水岭算法1. 介绍分水岭算法(Watershed algorithm)是一种图像处理算法,主要用于图像分割。

它以图像中的亮度或颜色信息为基础,将图像划分为不同的区域,从而实现图像的分割与提取。

分水岭算法的基本原理是将图像视为地形图,其中亮度或颜色信息类似于地形高度,而分水岭则代表不同的区域。

通过模拟水从高处流下,在分水岭相交的地方形成分割线,将图像分成不同的区域。

分水岭算法广泛应用于计算机视觉、图像分析、医学图像处理等领域。

它可以用于目标检测、图像分割、图像融合、边缘检测等任务。

分水岭算法具有较好的鲁棒性和适应性,对于不同类型的图像都能取得较好的效果。

2. 基本原理分水岭算法的基本原理可以概括为以下几个步骤:2.1 灰度化首先,将彩色图像转换为灰度图像。

这是因为分水岭算法主要基于图像的亮度信息进行分割,灰度图像能够更好地表达图像的亮度变化。

2.2 预处理对灰度图像进行预处理,包括去噪和平滑处理。

去噪可以使用各种滤波器,如中值滤波器、高斯滤波器等。

平滑处理可以使用图像平滑算法,如均值滤波器、高斯滤波器等。

预处理的目的是减少图像中的噪声和不必要的细节,使得后续的分割更加准确。

2.3 计算梯度图像通过计算图像的梯度,可以得到图像中的边缘信息。

常用的梯度算子有Sobel算子、Prewitt算子等。

梯度图像可以用来寻找图像中的边缘和区域边界。

2.4 标记种子点选择一些种子点,作为分水岭的起始点。

种子点通常位于图像中的明显边缘或区域边界处。

可以手动选择种子点,也可以使用自动选择的方法。

2.5 填充区域从种子点开始,利用水流模拟的方式填充整个图像。

水从高处向低处流动,当水流到达一个分水岭时,会分流到周围的区域中。

在水流过程中,会形成分割线,将图像分成不同的区域。

2.6 分割结果根据分水岭的位置,将图像分成不同的区域。

分割结果可以通过分水岭线进行可视化展示,也可以将不同区域标记为不同的颜色。

3. 算法改进分水岭算法在实际应用中存在一些问题,如过分细化、过分合并等。

分水岭算法之自下而上的模拟泛洪的算法流程

分水岭算法之自下而上的模拟泛洪的算法流程

分水岭算法是一种用于图像分割的算法,它能够将图像中的不同区域进行分割,并找到它们之间的分界线。

此算法的主要思路是通过模拟泛洪的方式来不断扩展各个区域,直到它们彼此分离为止。

分水岭算法通常分为两种实现方式,一种是自上而下的方式,另一种是自下而上的方式。

本文将重点介绍和探讨自下而上的模拟泛洪的分水岭算法流程,以帮助读者更好地理解该算法的原理和实现方法。

一、初始化1. 为图像创建距离变换图:首先需要将输入的图像进行预处理,创建一个距离变换图。

距离变换图中的每个像素表示该像素到最近的边界像素的距离。

2. 初始化标记图:标记图用来记录每个像素的标记信息,标记哪些像素属于同一个区域。

初始化时,将标记图中的像素值都设为0。

3. 初始化队列:为了模拟泛洪的过程,需要使用一个队列来存储待处理的像素。

将图像中的所有边界像素加入到队列中。

二、泛洪过程1. 从队列中取出一个像素,并记录其标记值。

2. 遍历该像素周围的像素,如果周围的像素未被标记过且不是边界像素,则将其加入到队列中,并将其标记值设为与当前像素相同。

3. 如果周围的像素已被标记过,且标记值不同于当前像素,则说明这两个区域相遇了。

此时需要将它们之间的分界线更新为分水岭,并将其加入到分水岭集合中。

4. 重复以上步骤,直到队列为空。

三、分水岭线处理1. 对分水岭集合中的像素进行排序:根据它们到最近的边界像素的距离,对分水岭集合中的像素进行排序。

2. 将排序后的像素逐个取出,遍历其周围的像素:如果周围的像素属于相同的区域,则将其标记为该区域的像素。

3. 重复以上步骤,直到所有分水岭像素都被处理完毕。

四、结果展示1. 根据标记图,可以将图像进行分割并展示不同区域的边界线或分水岭线。

2. 可以对图像进行进一步的后处理,如去除噪声、优化分割结果等。

通过以上的介绍,相信读者对于自下而上的模拟泛洪的分水岭算法流程有了更深入的了解。

虽然分水岭算法在图像分割领域具有广泛的应用,但其实现过程相对复杂,需要深入理解其原理和算法流程。

传统算法——分水岭算法

传统算法——分水岭算法

传统算法——分⽔岭算法分⽔岭算法是⼀种基于区域分割的算法。

它是基于地理形态的分析的图像分割算法,模仿地理结构(⽐如⼭川、沟壑,盆地)来实现对不同物体的分类。

封闭性是分⽔岭算法的⼀个重要特征图像的灰度空间很像地球表⾯的整个地理结构,每个像素的灰度值代表⾼度。

其中的灰度值较⼤的像素连成的线可以看做⼭脊,也就是分⽔岭。

其中的⽔就是⽤于⼆值化的gray threshold level,⼆值化阈值可以理解为⽔平⾯,⽐⽔平⾯低的区域会被淹没,刚开始⽤⽔填充每个孤⽴的⼭⾕(局部最⼩值)。

当⽔平⾯上升到⼀定⾼度时,⽔就会溢出当前⼭⾕,可以通过在分⽔岭上修⼤坝,从⽽避免两个⼭⾕的⽔汇集,这样图像就被分成2个像素集,⼀个是被⽔淹没的⼭⾕像素集,⼀个是分⽔岭线像素集。

最终这些⼤坝形成的线就对整个图像进⾏了分区,实现对图像的分割。

在该算法中,空间上相邻并且灰度值相近的像素被划分为⼀个区域。

分⽔岭算法的运⾏过程:1. 把梯度图像中的所有像素按照灰度值进⾏分类,并设定⼀个测地距离阈值。

2. 找到灰度值最⼩的像素点(默认标记为灰度值最低点),让threshold从最⼩值开始增长,这些点为起始点。

3. ⽔平⾯在增长的过程中,会碰到周围的邻域像素,测量这些像素到起始点(灰度值最低点)的测地距离,如果⼩于设定阈值,则将这些像素淹没,否则在这些像素上设置⼤坝,这样就对这些邻域像素进⾏了分类。

4. 随着⽔平⾯越来越⾼,会设置更多更⾼的⼤坝,直到灰度值的最⼤值,所有区域都在分⽔岭线上相遇,这些⼤坝就对整个图像像素的进⾏了分区。

⽤上⾯的算法对图像进⾏分⽔岭运算,由于噪声点或其它因素的⼲扰,可能会得到密密⿇⿇的⼩区域,即图像被分得太细(over-segmented,过度分割),这因为图像中有⾮常多的局部极⼩值点,每个点都会⾃成⼀个⼩区域。

其中的解决⽅法:1. 对图像进⾏⾼斯平滑操作,抹除很多⼩的最⼩值,这些⼩分区就会合并。

2. 不从最⼩值开始增长,可以将相对较⾼的灰度值像素作为起始点(需要⽤户⼿动标记),从标记处开始进⾏淹没,则很多⼩区域都会被合并为⼀个区域,这被称为基于图像标记(mark)的分⽔岭算法。

分水岭算法

分水岭算法

分水岭算法的概念及原理分水岭分割方法,是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆,而集水盆的边界则形成分水岭。

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

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

分水岭的计算过程是一个迭代标注过程。

分水岭比较经典的计算方法是L. Vincent提出的。

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

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

分水岭变换得到的是输入图像的集水盆图像,集水盆之间的边界点,即为分水岭。

显然,分水岭表示的是输入图像极大值点。

因此,为得到图像的边缘信息,通常把梯度图像作为输入图像,即g(x,y)=grad(f(x,y))={[f(x,y)-f(x-1,y)]2[f(x,y)-f(x,y-1)]2}0.5式中,f(x,y)表示原始图像,grad{.}表示梯度运算。

分水岭算法对微弱边缘具有良好的响应,图像中的噪声、物体表面细微的灰度变化,都会产生过度分割的现象。

但同时应当看出,分水岭算法对微弱边缘具有良好的响应,是得到封闭连续边缘的保证的。

另外,分水岭算法所得到的封闭的集水盆,为分析图像的区域特征提供了可能。

为消除分水岭算法产生的过度分割,通常可以采用两种处理方法,一是利用先验知识去除无关边缘信息。

二是修改梯度函数使得集水盆只响应想要探测的目标。

为降低分水岭算法产生的过度分割,通常要对梯度函数进行修改,一个简单的方法是对梯度图像进行阈值处理,以消除灰度的微小变化产生的过度分割。

分水岭分割算法-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('»ùÓÚÌݶȵķÖË®Áë·Ö¸î');
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

分水岭算法的概念及原

文稿归稿存档编号:[KKUY-KKIO69-OTM243-OLUI129-G00I-FDQS58-
分水岭算法WatershedAlgorithm(分水岭算法),顾名思义,就是根据分水岭的构成来考虑图像的分割。

现实中人们可以或者说可以想象有山有湖的景象,那么那一定是水绕山,山围水的情形。

当然在需要的时候,要人工构筑分水岭,以防集水盆之间的互相穿透。

而区分高山(plateaus)与水的界线,以及湖与湖之间的间隔或都是连通的关系,就是分水岭(watershed)。

为了得到一个相对集中的集水盆,那么让水涨到接近周围最高的山顶就可以了,这样的话,我们就可以用来获取边界灰阶大,中间灰阶小的物体区域了,它就是集水盆。

算法的概念及原理
分水岭分割方法,是一种基于拓扑理论的的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆,而集水盆的边界则形成分水岭。

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

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

分水岭的计算过程是一个迭代标注过程。

分水岭比较经典的计算方法是L.Vincent提出的。

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

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

变换得到的是输入图像的集水盆图像,集水盆之间的,即为分水岭。

显然,分水岭表示的是输入图像极大值点。

因此,为得到图像的边缘信息,通常把梯度图像作为输入图像,即
g(x,y)=grad(f(x,y))={[f(x,y)-f(x-1,y)]2[f(x,y)-f(x,y-
1)]2}0.5
式中,f(x,y)表示原始图像,grad{.}表示梯度运算。

算法对微弱边缘具有良好的响应,图像中的噪声、物体表面细微的变化,都会产生过度分割的现象。

但同时应当看出,分水岭算法对微弱边缘具有良好的响应,可得到封闭连续的边缘。

通过分水岭算法所得到的封闭的集水盆,为分析图像的区域特征提供了可能。

分水岭算法有时会产生过度分割,为了避免产生这种过度分割,通常可以采用两种处理方法,一是利用先验知识删除无关边缘信息。

二是可以修改梯度函数,使得集水盆只响应所探测的目标。

对于通过梯度函数降低低分水岭算法的过度分割,需要对梯度函数进行改进,一个简单的改进方法是对梯度图像进行阈值处理,从而消除像素灰度值的微小变化引起过度分割。

即:
g(x,y)=max(grad(f(x,y)),gθ)
式中,gθ表示阈值。

程序可采用方法:用限制梯度图像以达到消除的微小变化产生的过度分割,获得适量的区域,再对这些区域的边缘点的灰度级进行从低到高
排序,然后在从低到高实现淹没的过程,梯度图可由Sobel算子计算得到。

对梯度图像进行阈值处理时,阈值的合理选择对分割结果有较大的影响,因此,阈值的选取是影响效果的一个关键。

该方法的缺点是,通常一些实际图像可能含有微弱的边缘,灰度值变化不是特别明显,阈值选取过大可能会消除这些微弱边缘。

分水岭算法是数学形态学分割方法中的经典算法,它将图像看作是地形学上被水覆盖的自然地貌,图像中的每一像素的灰度值表示该点的海拔高度,其每一个局部极小值及其影响区域称为集水盆,集水盆的边界则是分水岭,在各极小区域的表面打一个小孔,同时让水从小孔中涌出,并慢慢淹没极小区域周围的区域,那么各极小区域波及的范围,即是相应的集水盆,对应图像中的区域;不同区域的水流相遇时的界限,就是期望得到的分水岭,对应区域的边缘。

分水岭变换可以保证分割区域的连续性和封闭性。

分水岭变换是从局部极小点开始,即只能是在梯度图中用,原始图是转换后才能用于分水岭变换的。

一般图像中存在多个极小值点,通常会存在过分割现象,可以采用梯度阈值分割改进或者采用标记分水岭算法将多个极小值区域连在一起。

如果图像中的目标物体是连在一起的,则分割起来会更困难,分水岭算法经常用于处理这类问题,通常会取得比较好的效果。

分水岭分割算法把图像看成一副“地形图”,其中亮度比较强的地区像素值较大,而比较暗的地区像素比较小,通过寻找“汇水盆地”和“分水岭界限”,对图像进行分割。

步骤:
1.读取图像
2.求取图像的边界,在此基础上可直接应用分水岭分割算法,但效果不佳;
3.对图像的前景和背景进行标记,其中每个对象内部的前景像素都是相连的,背景里面的每个像素值都不属于任何目标物体;
4.计算分割函数,应用分水岭分割算法的实现
注:直接用分水岭分割算法效果并不好,如果在图像中对前景和背景进行标注区别,再应用分水岭算法会取得较好的分割效果。

例步骤:
1.读取图像并求取图像的边界。

rgb=imread('pears.png');%读取原图像
I=rgb2gray(rgb);%转化为灰度图像
figure;subplot(121)%显示灰度图像
imshow(I)
text(732,501,'ImagecourtesyofCorel',...
'FontSize',7,'HorizontalAlignment','right')
hy=fspecial('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('Gradientmagnitude(gradmag)')
2.直接使用梯度模值进行分水岭算法:(往往会存在过的分割的情况,效果不好)
L=watershed(gradmag);%直接应用分水岭算法
Lrgb=label2rgb(L);%转化为彩色图像
figure;imshow(Lrgb),%显示分割后的图像
title('Watershedtransformofgradientmagnitude(Lrgb)')
3.分别对前景和背景进行标记:本例中使用形态学重建技术对前景对
象进行标记,首先使用开操作,开操作之后可以去掉一些很小的目标。

se=strel('disk',20);%圆形结构元素
Io=imopen(I,se);%形态学开操作
figure;subplot(121)
imshow(Io),%显示执行开操作后的图像
title('Opening(Io)')
Ie=imerode(I,se);%对图像进行腐蚀
Iobr=imreconstruct(Ie,I);%形态学重建
subplot(122);imshow(Iobr),%显示重建后的图像
title('Opening-by-reconstruction(Iobr)')
Ioc=imclose(Io,se);%形态学关操作
figure;subplot(121)
imshow(Ioc),%显示关操作后的图像
title('Opening-closing(Ioc)')
Iobrd=imdilate(Iobr,se);%对图像进行膨胀
Iobrcbr=imreconstruct(imcomplement(Iobrd),... imcomplement(Iobr));%形态学重建
Iobrcbr=imcomplement(Iobrcbr);%图像求反
subplot(122);imshow(Iobrcbr),%显示重建求反后的图像title('Opening-closingbyreconstruction(Iobrcbr)') fgm=imregionalmax(Iobrcbr);%局部极大值。

相关文档
最新文档