基础篇12-图像分割(中)--区域的方法
图像分割是图像处理的重要内容,是位于底层的图像处理、特征提取与上一层次的图像分析之间的关键步骤。图像分割的相关技术较多,分为三篇介绍。本节是中篇,介绍基于区域的技术,包括区域生长和分水岭算法等。
1. 引言
基于区域的图像分割方法是一类通过识别图像中具有相似特征的区域来实现分割的技术。其核心思想是将图像划分为若干区域,每个区域内的像素在颜色、纹理、强度等方面具有一致性,而不同区域之间则存在明显差异。
1.1 工作原理
基于区域的图像分割方法通常从图像的初始区域(如单个像素或小的像素块)开始,通过一定的准则(如灰度值、纹理、颜色等)逐步合并或分裂区域,直到满足预定的停止条件。常见的准则包括区域内的相似性和区域间的差异性。最终,图像被划分为若干个具有一致特征的区域。
这类方法通常依赖于像素的局部信息,通过区域生长、合并或分裂等操作来实现分割。
1.2 主要方法分类及特性
(1)区域生长法
- 工作原理:从种子点开始,逐步将邻近的像素或区域合并到当前区域中,直到满足停止条件。
- 特性:简单直观,但对种子点的选择敏感,且容易受到噪声影响。
(2)分裂合并法
- 工作原理:先将图像划分为若干初始区域,然后根据相似性准则对区域进行分裂或合并,直到满足分割要求。
- 特性:能够处理复杂的图像结构,但计算复杂度较高。
(3)基于图论的方法
- 工作原理:将图像表示为图结构,节点代表像素或区域,边代表像素或区域之间的关系,通过图割(Graph Cut)等方法实现分割。
- 特性:能够全局优化分割结果,但对图的构建和优化算法的选择较为敏感。
(4)均值漂移分割
- 工作原理:通过均值漂移算法寻找图像中密度最大的区域,将像素分配到相应的密度中心。
- 特性:对噪声鲁棒,能够处理复杂的纹理和颜色分布,但计算量较大。
(5)超像素分割
- 工作原理:将图像划分为若干个超像素块,每个超像素块内的像素具有相似的特征。
- 特性:能够显著减少后续处理的复杂度,常用于预处理步骤。
2. 区域生长方法
2.1 区域生长算法的原理
区域生长算法的核心思想是从一个或多个种子点开始,逐步将与其相邻且满足相似性条件的像素合并到同一区域中。其基本步骤如下:
- 选择种子点:在图像中选择一个或多个像素作为种子点。
- 定义生长准则:通常基于像素的灰度值、颜色或纹理等特征,设定相似性判据(如灰度差值不超过某个阈值)。
- 区域生长:从种子点出发,检查其邻域像素(如八邻域),将符合生长准则的像素加入当前区域,并作为新的种子点继续生长。
- 停止条件:当没有新的像素满足生长条件时,算法停止。
区域生长算法的优点在于能够精确分割出具有相似特征的区域,但对种子点的选择和噪声较为敏感
2.2 Halcol中区域生长算法的实现
(1) regiongrowing
Halcon使用regiongrowing算子实现区域生长分割。
算子声明:
regiongrowing(Image : Regions : RasterHeight, RasterWidth, Tolerance, MinSize : )
参数说明:
- Image:输入的单通道图像。
- Regions:输出的分割区域。
- RasterHeight和RasterWidth:定义用于平滑处理的高斯低通滤波器的模板大小,默认值都是3。
- Tolerance:灰度值差异的容忍度,用于判断相邻两子区域是否属于同一区域,默认值是6。
- MinSize:输出区域的最小像素数,小于此值的区域将被忽略,默认值是100。
实例代码:
* 读取图像
read_image(Image, 'example_image.tiff')
* 中值滤波去噪
median_image(Image, ImageMedian, 'circle', 2, 'mirrored')
* 区域生长分割
regiongrowing(ImageMedian, Regions, 1, 1, 5, 100)
* 填充区域空洞
fill_up_shape(Regions, RegionFillUp, 'area', 1, 100)
* 显示结果
dev_display(RegionFillUp)
性能分析:
- 通常在调用区域生长算法之前,使用尺寸至少为RasterHeight×RasterWidth的低通滤波器对图像进行平滑处理(以便矩形中心的灰度值能够“代表”整个矩形)。如果图像噪声较少且矩形区域较小,在许多情况下可以省略平滑处理。
- 优点:能够精确分割出具有相似特征的区域。适用于复杂图像的分割,尤其是目标区域与背景差异明显的场景。
- 缺点:对种子点的选择敏感,种子点选择不当可能导致分割失败。对噪声和灰度不均匀的图像效果较差。计算复杂度较高,处理大图像时可能耗时较长。
(2) regiongrowing_mean
Halcon使用regiongrowing_mean算子实现区域生长分割。
算子声明:
regiongrowing(Image : Regions : RasterHeight, RasterWidth, Tolerance, MinSize : )
参数说明:
- Image:输入的单通道图像。
- Regions:输出的分割区域。
- RasterHeight和RasterWidth:定义用于平滑处理的高斯低通滤波器的模板大小,默认值都是3。
- Tolerance:灰度值差异的容忍度,用于判断相邻两子区域是否属于同一区域,默认值是6。
- MinSize:输出区域的最小像素数,小于此值的区域将被忽略,默认值是100。
(3) regiongrowing_n
Halcon使用regiongrowing_n算子实现区域生长分割。
算子声明:
regiongrowing(Image : Regions : RasterHeight, RasterWidth, Tolerance, MinSize : )
参数说明:
- Image:输入的单通道图像。
- Regions:输出的分割区域。
- RasterHeight和RasterWidth:定义用于平滑处理的高斯低通滤波器的模板大小,默认值都是3。
- Tolerance:灰度值差异的容忍度,用于判断相邻两子区域是否属于同一区域,默认值是6。
- MinSize:输出区域的最小像素数,小于此值的区域将被忽略,默认值是100。
3. 分水岭方法
(未完待续,最新更新2025-03-04)
本专栏将介绍基于Halcon的各种传统经典的数字图像处理技术,所介绍内容基本与Gonzalez的教材基本保持一致。作为学习和实践DIP技术的入门教程。
感谢大家的支持和浏览,本专栏将持续更新(每周至少更新1篇),每篇的篇幅控制在5000字左右,这样大家阅读起来也比较轻松。估计2025年上半年完成全部内容,欢迎加收藏。但由于到了假期,更新的速度不会很快。
在专栏全部完成之前,所有内容将一直免费。