图像处理中的标记分水岭分割算法
- 格式:doc
- 大小:980.62 KB
- 文档页数:10
分水岭分割算法分水岭分割算法是计算机视觉领域中的一种常用图像分割技术,它可以将图像中的物体和背景或两个不同物体进行分割。
这种算法具有计算快速、模型简单等优点,能够有效地检测图像中的轮廓,目前被广泛应用在计算机视觉领域,如自动驾驶、机器人技术、图像识别等,在多个工业领域中发挥着重要作用。
分水岭分割算法又叫洪水填充算法,它是一种基于形态学概念的算法,它可以用来区分输入图像中不同物体的边界,从而实现图像的分割和对象的检测。
该算法的基本思想是:把一个连续的图像分割成较小的连接区域,每个区域中的灰度差较小,而边界之间的灰度差比较大,以此实现图像的分割。
分水岭分割算法的主要步骤如下:(1)计算图像的梯度信息,即用梯度滤波器来计算图像中每个对象的边界;(2)用反演函数来找到灰度边界上的边界点,并且根据几何约束均匀地将它们分割成几块;(3)把分割的边界点标记为未知,并且用洪水填充的方法来填充所有的未知点;(4)根据梯度信息,对填充点进行分类,实现图像的分割。
分水岭分割算法有计算简单、模型简单等优点,它能够有效地检测图像中的轮廓,在各种低级图像处理和图像分割技术中都发挥着重要作用。
此外,它还被广泛用于生物医学图像分析、机器人以及自动驾驶等领域。
但是,分水岭分割算法也存在一些缺点,例如,对于图像中的小物体的分割效果较差,容易出现图像分割结果的误分等问题;同时,该算法可能很难处理较大的图像,因为它很容易受到噪声干扰。
因此,在应用分水岭分割算法之前,应该加以考虑,根据不同的场景和要求来选择不同的算法,能够有效地解决图像分割难题。
同时,对算法参数也需要进行调整,以便获得更准确的图像分割结果。
总之,分水岭分割算法是一种简单有效的图像分割技术,它可以用来分割图像中不同物体的边界,广泛应用于计算机视觉领域,为多个工业领域提供了有效的解决方案。
但是,它也存在一些缺点,所以,在使用该算法时,应当仔细考虑,以便获得更好的图像分割结果。
分水岭算法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 优点•分水岭算法是一种无监督学习方法,不需要依赖任何先验知识或训练数据。
•可以对图像中的任意区域进行分割,不受形状、大小和数量的限制。
形态学分水岭算法
形态学分水岭算法(morphological watershed algorithm)是一种用于图像分割的算法,基于数学形态学的基本操作。
形态学分水岭算法基于对图像中的局部极小值进行分割。
它的基本思想是将图像看作是地理地形,其中的亮度变化可以看作是高度变化。
通过在图像中添加水,水源从局部极小值开始扩散,当两个水源相遇时,就会形成边界。
算法的具体步骤如下:
1. 对原始图像进行预处理,包括灰度化、滤波等操作,使图像更适合进行分割。
2. 使用梯度变换方法,计算图像的梯度或边缘信息。
这些边缘将成为分水岭的标记。
3. 对梯度图像进行二值化操作,得到梯度图像中的局部极小值。
4. 对二值化后的图像进行种子点标记,将每个局部极小值点标记为不同的区域(或水源)。
5. 进行水流模拟,将水从每个水源点开始扩散,使得水流逐渐融合并形成分割的边界。
水流的融合过程中,会遇到各种情况,例如水源相遇、水流进入高地等,需要根据算法设定的规则来处理这些情况。
6. 最后根据每个水源中像素的标记值,将图像分割成不同的区域。
形态学分水岭算法在图像分割领域有较广泛的应用,特别是在医学图像分割中常被用于分割细胞、组织等。
然而,该算法在处理有噪声、重叠和接触的物体时可能会产生过分分割的问题,因此需要结合其他方法进行改进和优化。
分水岭算法步骤分水岭算法是一种用于图像分割的算法,其原理是根据图像中不同区域的灰度差异来确定分割点,从而将图像分割成多个区域。
下面将详细介绍分水岭算法的步骤。
1. 图像预处理在使用分水岭算法进行图像分割之前,需要对图像进行预处理。
预处理的目的是去除噪声、平滑图像、增强图像的边缘等。
常见的预处理方法包括均值滤波、高斯滤波、中值滤波等。
2. 计算梯度图像梯度图像可以反映图像中不同区域的边缘信息。
通过计算图像的梯度,可以得到一个梯度图像,其中每个像素点的灰度值表示该点的梯度强度。
常用的方法是使用Sobel算子或Laplacian算子计算图像的梯度。
3. 计算图像的标记在分水岭算法中,需要将图像的每个像素点标记为前景、背景或未知区域。
通常情况下,可以通过用户输入或者阈值分割等方法来得到一个初始的标记图像。
4. 计算距离变换距离变换是指计算图像中每个像素点到最近的前景区域像素点的距离。
通过距离变换,可以得到一个距离图像,其中每个像素点的灰度值表示该点到最近前景像素点的距离。
5. 寻找种子点种子点是指位于图像中的一些特殊点,用于标记不同的区域。
通常情况下,种子点位于图像的前景和背景之间的边界处。
可以通过阈值分割等方法来寻找种子点。
6. 计算分水岭变换分水岭变换是一种基于图像的梯度和距离变换来确定图像分割的方法。
在分水岭变换中,首先将种子点填充到距离图像中,然后通过计算梯度和距离变换来确定分割线的位置,从而将图像分割为多个区域。
7. 后处理在得到分割后的图像之后,可能会存在一些图像分割不准确或者存在过度分割的问题。
因此,需要进行一些后处理的操作,如去除小的区域、合并相邻的区域等,以得到最终的分割结果。
总结起来,分水岭算法是一种基于图像的梯度和距离变换来进行图像分割的算法。
通过对图像进行预处理、计算梯度图像、计算标记、计算距离变换、寻找种子点、计算分水岭变换和后处理等步骤,可以得到一个准确的图像分割结果。
分水岭算法在图像分割领域具有广泛的应用,并且在处理复杂图像时能够取得较好的效果。
分水岭算法1. 介绍分水岭算法(Watershed algorithm)是一种图像处理算法,主要用于图像分割。
它以图像中的亮度或颜色信息为基础,将图像划分为不同的区域,从而实现图像的分割与提取。
分水岭算法的基本原理是将图像视为地形图,其中亮度或颜色信息类似于地形高度,而分水岭则代表不同的区域。
通过模拟水从高处流下,在分水岭相交的地方形成分割线,将图像分成不同的区域。
分水岭算法广泛应用于计算机视觉、图像分析、医学图像处理等领域。
它可以用于目标检测、图像分割、图像融合、边缘检测等任务。
分水岭算法具有较好的鲁棒性和适应性,对于不同类型的图像都能取得较好的效果。
2. 基本原理分水岭算法的基本原理可以概括为以下几个步骤:2.1 灰度化首先,将彩色图像转换为灰度图像。
这是因为分水岭算法主要基于图像的亮度信息进行分割,灰度图像能够更好地表达图像的亮度变化。
2.2 预处理对灰度图像进行预处理,包括去噪和平滑处理。
去噪可以使用各种滤波器,如中值滤波器、高斯滤波器等。
平滑处理可以使用图像平滑算法,如均值滤波器、高斯滤波器等。
预处理的目的是减少图像中的噪声和不必要的细节,使得后续的分割更加准确。
2.3 计算梯度图像通过计算图像的梯度,可以得到图像中的边缘信息。
常用的梯度算子有Sobel算子、Prewitt算子等。
梯度图像可以用来寻找图像中的边缘和区域边界。
2.4 标记种子点选择一些种子点,作为分水岭的起始点。
种子点通常位于图像中的明显边缘或区域边界处。
可以手动选择种子点,也可以使用自动选择的方法。
2.5 填充区域从种子点开始,利用水流模拟的方式填充整个图像。
水从高处向低处流动,当水流到达一个分水岭时,会分流到周围的区域中。
在水流过程中,会形成分割线,将图像分成不同的区域。
2.6 分割结果根据分水岭的位置,将图像分成不同的区域。
分割结果可以通过分水岭线进行可视化展示,也可以将不同区域标记为不同的颜色。
3. 算法改进分水岭算法在实际应用中存在一些问题,如过分细化、过分合并等。
opencv的分水岭算法
OpenCV是一个流行的计算机视觉库,它提供了许多图像处理和计算机视觉算法。
分水岭算法是OpenCV中的一种图像分割算法,用于将图像分割成多个不同的区域。
分水岭算法的主要思想是将图像看作是一个地形图,其中像素的灰度值表示地势高度。
然后通过向图像中注入水,水从低处逐渐流动到高处,最终形成分割区域。
这个过程中,水会在不同区域的边界上形成堤坝,这些堤坝就代表了物体的边界。
分水岭算法的步骤如下:
1. 对图像进行预处理,例如去噪、平滑等操作,以便更好地检测边界。
2. 对图像进行灰度转换,如果图像是彩色的,需要将其转换为灰度图像。
3. 根据图像的特征,选择合适的标记方法。
可以使用阈值分割、边缘检测等方法得到初始标记。
4. 通过计算梯度图像或距离变换来确定未标记像素的优先级,并按照优先级逐渐向图像注入水。
5. 不断更新图像中的水流,直到水流相遇或达到预设的终止条件。
6. 根据最终的水流情况,将图像分割成多个不同的区域。
分水岭算法在图像分割中具有广泛的应用,特别是在处理复杂的图像场景、图像中的目标重叠等情况下表现出色。
但它也有
一些局限性,例如对于图像中的噪声比较敏感,可能会导致过分细化的分割结果。
因此,在实际应用中需要根据具体的场景进行参数调节和优化。
分水岭算法分水岭算法是一种经典的图像处理和计算机视觉算法,常用于图像分割任务。
它被广泛应用于数字图像处理、目标检测和图像识别等领域。
本文将对分水岭算法进行介绍,并探讨其原理、应用和优缺点。
首先,我们来了解一下分水岭算法的原理。
分水岭算法基于图像的灰度或颜色信息,将图像视为一个地图,其中灰度值或颜色代表地势高度。
该算法的目标是通过在图像上放置一些种子点,然后利用水流的下降路径模拟水流的流动,最终将图像分割为不同的区域。
在分水岭算法中,首先需要对图像进行预处理,包括去噪和图像增强等操作。
接下来,根据预处理后的图像,构建一个梯度图,表示图像中的边缘和轮廓信息。
然后,根据种子点的位置,通过计算水流的流动路径,将图像分割成不同的区域。
最后,再根据分割结果进行进一步的后处理,消除不必要的分割和合并相邻的区域,从而得到最终的图像分割结果。
分水岭算法在图像处理和计算机视觉领域有着广泛的应用。
首先,它可以用于图像分割,即将图像划分为具有明显边界的不同区域,以便进一步对图像进行分析和识别。
例如,在医学图像分析中,可以利用分水岭算法对病变区域进行提取和分割,以辅助医生进行疾病诊断和治疗。
其次,分水岭算法还可以用于图像标记和目标检测。
通过在图像中放置种子点,并模拟水流的流动路径,可以将目标与背景分离,并进行像素级别的标记和识别。
例如,在自动驾驶和机器人导航中,可以利用分水岭算法对道路和障碍物进行分割和检测,以确保车辆的安全行驶。
此外,分水岭算法还可以用于图像修复和图像融合等应用,提高图像质量和视觉效果。
然而,分水岭算法也存在一些局限性和挑战。
首先,由于算法本身是基于像素的,对图像中的噪声和弱边缘比较敏感,容易产生过分割和欠分割的问题。
因此,对于复杂的图像或具有相似纹理的区域,分水岭算法可能无法准确地将其分割开来。
其次,分水岭算法在计算复杂度和时间消耗方面比较高,对于大规模图像和实时应用来说,可能会造成较高的计算负担。
因此,对于实时应用和大规模图像处理,需要进一步对算法进行改进和优化。
分水岭算法1. 简介分水岭算法是一种用于图像分割的算法。
通过将图像视为地形地貌,将图像中的每个像素视为一个水滴,从低处开始模拟水的渗透和汇聚过程,最终得到图像中的不同区域。
分水岭算法最初用于地理学中的水文地貌研究,后来被引入到计算机视觉领域中。
它在图像分割、目标检测、图像处理等方面具有广泛的应用。
2. 算法步骤分水岭算法包含以下几个步骤:2.1 图像预处理首先,对原始图像进行预处理,以便更好地进行分水岭算法的运算。
预处理的步骤可以包括灰度化、去噪、平滑滤波等。
2.2 计算图像的梯度梯度表示图像中每个像素的边缘强度。
通过计算图像的梯度,可以找到图像中的边缘和纹理信息。
常用的计算梯度的方法包括Sobel、Prewitt等算子。
2.3 寻找图像中的标记点标记点是分水岭算法中的关键概念,表示图像中的起始点或分水岭点。
标记点的选取对于最终分割结果有很大的影响。
通常情况下,可以通过阈值分割、连通区域分析等方法寻找图像中的标记点。
2.4 计算距离变换图距离变换图是一个将图像中每个像素替换为其与最近标记点之间距离的图像。
通过计算距离变换图,可以评估每个像素到最近标记点的距离。
2.5 计算分水岭线分水岭线是指图像中的边缘或过渡区域,它将不同的区域分隔开来。
通过计算距离变换图,可以找到图像中的分水岭线。
2.6 执行分水岭漫水算法最后,执行分水岭漫水算法,将图像中的每个像素与标记点进行比较,并根据像素值和距离变换图进行分割。
分水岭漫水算法会将图像中的不同区域分割成若干个连通区域。
3. 算法优缺点3.1 优点•分水岭算法可以对图像进行多种类型的分割,包括分割不完全的区域和不规则形状的目标。
•分水岭算法不需要预先知道目标的数量。
•分水岭算法可以自动识别图像中的背景和前景。
3.2 缺点•分水岭算法对于噪声和纹理较强的图像分割效果不理想。
•分水岭算法对于图像中的非连通区域分割效果差。
•分水岭算法具有较高的计算复杂度,对于大规模图像处理较为困难。
基于分水岭算法的图像分割在图像分割领域中,分水岭算法是一种经典的方法。
分水岭算法最初是根据地理学领域的概念而来,类似于山脉与河流的分割。
在图像中,局部极小值和极大值处形成了类似于山脉和河流的结构,而分水岭算法就是通过泛洪法来模拟这个过程,将局部极小值连接起来,形成一个分水岭,从而完成图像的划分。
分水岭算法的主要思想是基于图像中的梯度信息进行分割。
具体而言,首先计算图像的梯度幅值,并根据阈值将其转化为二值图像。
然后使用距离变换的方法,计算图像中每个像素点到最近边界的距离,得到一副距离变换图像。
接下来,通过将距离变换图像中的局部极小值进行标记,并进行连通区域的合并,构建无向图。
最后,使用分水岭变换的方法将图像划分成不同的区域。
分水岭算法的优点是能够获得较为准确的图像分割结果,并且具有良好的鲁棒性。
然而,分水岭算法也存在一些问题。
首先,分水岭算法较为复杂,计算量较大,运行时间长。
其次,分水岭算法对图像中的噪声较为敏感,在噪声较多的图像上容易产生过度分割或欠分割的情况。
此外,分水岭算法对初始种子点的选择也较为敏感,不同的初始种子点可能得到不同的分割结果。
针对上述问题,研究者们提出了一些改进的方法。
例如,可以采用图割算法来替代分水岭算法的标记和分割阶段,以提高分割的效果。
同时,可以通过预处理步骤来降低图像中的噪声或平滑图像,以改善分割的质量。
此外,也可以采用自适应的分水岭算法来选择合适的初始种子点,以减少分割结果的不确定性。
总结来说,基于分水岭算法的图像分割是一种经典而有效的方法。
虽然该算法存在一些问题,但通过改进和优化,可以得到更好的分割结果。
随着计算机视觉和图像处理的不断发展,我们相信分水岭算法在未来将会得到更广泛的应用。
分水岭算法综述分水岭算法是图像分割领域中常用的一种算法,它可以将图像分割成不同的区域,每个区域内的像素具有相似的特征。
本文将对分水岭算法进行综述,介绍其原理、应用以及优缺点。
一、分水岭算法的原理分水岭算法的原理源于水在山谷中流动的过程。
首先,将图像看作一个地形图,较亮的区域对应山峰,较暗的区域对应山谷。
然后,通过在地形图上进行洪水填充,使得水从山峰的高处流向山谷的低处,最终形成水汇聚的区域。
这些水汇聚的区域即为图像的分割结果。
分水岭算法的核心是确定图像中的山峰和山谷。
为了实现这一点,需要进行图像的预处理。
首先,对图像进行灰度化处理,将彩色图像转换为灰度图像。
然后,通过应用梯度算子,计算图像中每个像素的梯度值。
梯度值较大的像素被认为是山峰,梯度值较小的像素被认为是山谷。
在预处理完成后,可以开始进行分水岭算法的主要步骤。
首先,将山峰像素标记为前景,山谷像素标记为背景。
然后,将标记的像素区域称为markers。
接下来,通过对markers进行洪水填充,将水从山峰处逐渐流向山谷。
当水汇聚到一定程度时,会形成分割的边界,即分水岭。
二、分水岭算法的应用分水岭算法在图像分割领域有广泛的应用。
以下是一些常见的应用场景:1. 医学图像分割:分水岭算法可以用于医学图像的分割,如MRI图像中的肿瘤分割、X射线图像中的骨骼分割等。
通过将图像分割成不同的区域,医生可以更好地观察和分析病变部位。
2. 地质勘探:分水岭算法可以用于地质勘探中的岩石分割。
通过将地质图像分割成不同的区域,可以更好地识别和分析不同类型的岩石,有助于矿产资源的开发和利用。
3. 视觉检测:分水岭算法可以用于视觉检测中的目标分割。
通过将图像中的目标分割出来,可以更好地进行目标识别和跟踪,有助于自动驾驶、智能监控等领域的发展。
三、分水岭算法的优缺点分水岭算法具有以下优点:1. 算法简单:分水岭算法的原理简单易懂,实现相对容易。
2. 适用性广泛:分水岭算法可以用于不同类型的图像,包括医学图像、地质图像、自然图像等。
图像处理中的标记分水岭分割算法如果图像中的目标物体是连接在一起的,则分割起来会更困难,分水岭分割算法经常用于处理这类问题,通常会取得比较好的效果。
分水岭分割算法把图像看成一幅“地形图”,其中亮度比较强的区域像素值较大,而比较暗的区域像素值较小,通过寻找“汇水盆地”和“分水岭界限”,对图像进行分割。
直接应用分水岭分割算法的效果往往并不好,如果在图像中对前景对象和背景对象进行标注区别,再应用分水岭算法会取得较好的分割效果。
有很多图像处理工具箱函数可以用到,如fspecial、imfilter、watershed、lable2rgb、imopen、imclose、imreconstruct、imcomplement、imregionalmax、bwareaopen、graythresh、和imimposemin函数等。
下面进行一个例子,步骤如下。
1、读取图像并求其边界,代码如下。
rgb = imread('pears.png');%读取原图像I = rgb2gray(rgb);%转化为灰度图像figure; subplot(121)%显示灰度图像imshow(I)text(732,501,'Image courtesy of Corel',...'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('Gradient magnitude (gradmag)')在这一步骤中,首先读取一套真彩色图像,然后把真色图像转化为灰度图像,结果如图所示:图1原图和梯度图像使用sobel 边缘算子对图像进行水平和垂直方向的滤波,然后求取模值,sobel 算子滤波后的图像在边缘处会显示比较大的值,在没有边界处的值会很小,如上图右图所示。
2、 直接使用梯度模值进行分水岭算法,代码如下。
L = watershed(gradmag);%直接应用分水岭算法Lrgb = label2rgb(L);%转化为彩色图像 figure; imshow(Lrgb), %显示分割后的图像title('Watershed transform of gradient magnitude (Lrgb)')直接使用梯度模值图像进行分水岭算法得到的结果往往会存在过度分割的现象,如下图所示。
因此通常需要对前景对象和背景对象进行标记,以获得更好的分割效果。
Image courtesy of CorelGradient magnitude (gradmag)图2直接对梯度图像进行分水岭分割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-closing by reconstruction (Iobrcbr)')fgm = imregionalmax(Iobrcbr);%局部极大值figure; imshow(fgm), %显示重建后局部极大值图像title('Regional maxima of opening-closingby reconstruction(fgm)')Watershed transform of gradient magnitude (Lrgb)I2 = I;I2(fgm) = 255;%局部极大值处像素设置为255figure; imshow(I2), %在原图上显示极大值区域title('Regional maxima superimposed on original image (I2)')se2 = strel(ones(5,5));%结构元素fgm2 = imclose(fgm, se2);%关操作fgm3 = imerode(fgm2, se2);%腐蚀fgm4 = bwareaopen(fgm3, 20);%开操作I3 = I;I3(fgm4) = 255;%前景处设置为255figure; subplot(121)imshow(I3)%显示修改后的极大值区域title('Modified regional maxima')bw = im2bw(Iobrcbr, graythresh(Iobrcbr));%转化为二值图像subplot(122); imshow(bw), %显示二值图像title('Thresholded opening-closing by reconstruction') 可以使用很多算法来对前景对象进行标记,标记的每个对象内部的像素值是连接在一起的。
在这个例子中,使用形态学重建技术对前景对象进行标记,首先使用imopen函数对图像进行开操作,如图3左图所示,使用半径为20的圆形结构元素,开操作是膨胀和腐蚀操作的结合。
另外一种方法是先对图像进行腐蚀,然后对图像进行形态学重建,处理后的图像如图3右图所示。
图3开操作和重建操作结果对比Opening (Io)Opening-by-reconstruction (Iobr)在开操作之后进行关键操作可以去除一些很小的目标,如苹果上的茎干和一些污点等,如图4中左图所示。
另外一种方法是先对图像进行腐蚀,然后对图像进行形态学重建,重建后的图像如图4右图所示,注意在重建之前需要先对图像求反,然后再重建之后再进行一次求反。
图4关操作和重建操作结果对比对比两幅图像Iobrcbr 和Ioc ,以重建为基础的开关操作(结果为Iobrcbr )比一般的开关操作(结果为Ioc )比一般的开关操作(结果为Ioc )在去除小的污点时会更有效,并且不会影响这个图像的轮廓。
计算Iobrcbr 的局部极大值会得到比较好的前景标记,如图5所示。
Opening-closing (Ioc)Opening-closing by reconstruction (Iobrcbr)图5求取局部极大值的图像为了更好的理解这个结果,可以在原图像的基础上,显示局部极大值,对前景图像进行标记,如图6所示。
图6在原图上显示局部极大值Regional maxima of opening-closing by reconstruction (fgm)Regional maxima superimposed on original image (I2)注意到图像中还有少部分目标物体,即苹果,未被正确的标记出,如果这些目标物体不能被正确的进行标记,则不能正确的进行分割。
并且,少部分前景目标物体已经拓展到边缘,因此应该收缩一下边缘,可以先对图像进行操作,然后进行腐蚀来达到这样的效果。
这个过程会产生一些孤立的像素点,可以使用bwareaopen 函数来达到这样的效果,这个过程将像素点数量较少的孤立像素点去除,如图7左图所示。
图7调整后的局部极大值图像和二值图像将图像Iobrcbr 使用合适的阈值转化成二值图像,其中淡颜色的值为背景,转化成二值图像如图7右图所示。
4、 进行分水岭变换并显示,代码如下。
D = bwdist(bw);%计算距离DL = watershed(D);%分水岭变换Modified regional maxima Thresholded opening-closing by reconstructionbgm = DL == 0;%求取分割边界figure; imshow(bgm), %显示分割后的边界title('Watershed ridge lines (bgm)')gradmag2 = imimposemin(gradmag, bgm | fgm4);%设置最小值L = watershed(gradmag2);%分水岭变换I4 = I;I4(imdilate(L == 0, ones(3, 3)) | bgm | fgm4) = 255;%前景及边界处设置为255figure; subplot(121)imshow(I4)%突出前景及边界title('Markers and object boundaries')Lrgb = label2rgb(L, 'jet', 'w', 'shuffle');%转化为伪色彩图像subplot(122); imshow(Lrgb)%显示伪色彩图像title('Colored watershed label matrix')figure; imshow(I),hold onhimage = imshow(Lrgb);%在原图上显示伪色彩图像set(himage, 'AlphaData', 0.3);title('Lrgb superimposed transparently on original image')从图7中可以看出,背景像素是黑色的,但在理想情况下,我们不希望背景标记太靠近目标对象的边缘,可以通过“骨骼化”进行细化,对二值图像的距离进行分水岭变换,然后寻找分水岭的界限,分水岭的界限如图8所示。