图像分割算法研究与实现

2020-11-11 07:19王舒卉
关键词:分水岭灰度边缘

宋 凯,王舒卉

(沈阳理工大学 信息科学与工程学院,辽宁 沈阳 110159)

图像分割是指把图像按照一定的特征分成若干个具有其特征的个体,特征可以分为很多种,如图像的灰度、颜色、纹理等;同时分割区域的大小也需根据特定的目标进行分割,目标可以对应单个区域,也可以对应多个区域。最理想的分割结果就是分割出的每一块区域都可以表示其对象的特征,后续可以通过对其特征的提取进行图像的识别和重建等任务。

图像分割是实现计算机视觉高层任务所必需的一个过程,它的输入是一幅图像而输出是从图像中提取的属性特征[1-3]。图像中前景物体之间、前景物体与背景之间,存在明显的灰度过渡以至于在边缘处产生灰度突变的现象。基于边缘的图像分割算法,是根据图像中灰度突变特征来分割图像的。在理想情况下,边缘检测后得到的是表征图像边缘和边界的像素集合。同样地,待分割的目标区域的像素也会具有相似性。因此,可以通过分析图像不同区域的特性,寻找一种分类准则来分割一幅图像[4]。图像像素的突变性和相似性,是图像分割算法的两个主要依据。

1 图像分割方法

1.1 阈值法

阈值法就是基于图像的灰度特征进行分割的一种算法,因此这种算法一般适用于灰度图像,其算法核心理念是确定一个合适的阈值,将每个像素点的灰度值与阈值进行比较,如果像素点的灰度值大于阈值,那么就将其作为目标的像素点保留下来;反之,如果像素点的灰度值小于阈值,那么就将其认为是背景的像素点并舍弃,最终得到目标的全部像素点,以此来将所需的目标从图像中分割出来,这种方法叫做全局阈值。然而在很多情况下,阈值在同一张图像中并不唯一,因为图像各部分的对比度并不完全相同,这时我们就要根据局部图像的特征分别确定不同的阈值,并对图像进行分割,这时的阈值称为自适应阈值[5-6]。

1.2 基于边缘的分割

边缘分割就是通过检测图像的不连续性来分割图像。图像的边缘常常代表一个区域的结束,同时也标志着另一个区域的开始,我们要做的就是通过算法找到并区分开这两个区域的边界,这个边界就称为边缘。图像的边缘往往伴随着灰度值的突变,通常情况下,将图片从空间域变换到频率域(使用傅里叶变换),图像的边缘就对应着高频部分,可以通过这种方式将其找出。但在分割图像边缘时也存在一定的误差,例如在分割一些细小边缘时可能存在误判,或者分割出的边缘不完整,因此后来人们又提出了诸如sobel 算子、拉普拉斯算子等方法解决以上问题[7]。

1.3 基于区域的分割算法

所谓基于区域的分割算法就是直接从寻找某一片特定的区域入手,通常有以下两种方式获得最终的区域:一种算法叫做区域生长算法;另一种算法叫做区域分裂合并算法。前者是从单个像素入手,先确定一组代表不同生长区域的像素,将其称为种子像素;其次确定一种生长准则,使其能在种子像素的生长过程中将符合条件的临近像素包括进来,不断循环,不断将新的像素合并进来,并将最新的像素作为新的种子像素进行寻找,直到没有符合条件的像素被找到,则停止算法。后者则是前者的一个逆过程,它从整幅图像出发,将一块区域不断地分为若干子区域,再将所需的目标进行整合,最终实现目标的提取。这种算法较为复杂,计算量庞大,但是对图像的分割效果极好[8]。

1.4 基于特定理论的分割算法

以上3 种算法分别根据图像的灰度值、边缘和区域来进行分割,可以处理大多数的图像,但对一些特定的图像,其处理能力有限,需要结合数学方法来进行图像分割。例如小波变换,因其具有多尺度性,能同时结合时域和频域对图像进行研究而成为近年来应用最为广泛的工具。它通过检测函数的极值点来突显出图像的边缘并确定图像边缘位于哪个尺度,且每个尺度的小波变换都能提供一些边缘信息,因此处理的图像较为理想[9-13]。

2 算法实现及实验分析

本文分别实现了上节所述的4 类图像分割算法,分别为Otsu阈值化算法、Canny边缘检测算法、区域生长算法和分水岭算法。实验平台为visual studio 2017,编程语言为C++,实验的原始图像如图1所示。

图1 原始图像

2.1 Otsu阈值化算法

Otsu 阈值化算法是基于统计决策理论基础之上的,将图像的像素分成两组或多组,计算分类过程引入平均误差,选取分类的类间方差最大的阈值为全局化阈值。类间方差σB的定义公式如下所示:

式中,P1和P2分别是两类发生的概率;m1和m2分别是两类的均值;mG是图像的均值。

实验的结果如图2所示。

图2 Otsu阈值化算法效果

2.2 Canny边缘算法

Canny算法在1986年被提出,自它现世以来一直都作为一种优秀的边缘检测方法而存在,时至今日Canny 算法及其变种依然是最优算法。它对图像的处理主要分为以下几个步骤:

1)第一,对图像进行高斯模糊。主要目的是去除噪声,使图像变得平滑,因为噪声和边缘都属于高频部分,不对图像进行去噪会影响边缘的检测。

2)第二,计算像素的梯度和方向。用来表示图像灰度值的变换程度和方向,便于寻找图像边缘。

3)第三,使用非极大值抑制算法对边缘进行细化处理,这一步是对上一步的辅助。

4)第四,进行边缘检测。一般的算法只使用一个阈值来检测边缘,但是这样误差较大,故Canny算法同时使用两个阈值进行检测,这样可以有效提高精确度;

5)第五,对整幅图进行修整,得到准确的边缘。

实验的结果如图3所示。

图3 Canny边缘检测算法效果

2.3 区域生长算法

区域生长算法是首先初始化一系列种子点,再根据预先制定的生长准则将具有相似性的像素聚合在一起。本文采用的生长准则Q如下所示:

实验的结果如图4所示。

2.4 分水岭算法

分水岭算法是借助地形学的概念,形象地将图像三维化。其基本原理是以图像的坐标为空间坐标,以图像灰度函数为高度值。水滴落在某一区域的高度最小值处,即局部极小值处,慢慢滴落聚集形成一个集水盆,逐渐地淹没梯度较低的地方。当水漫过程停止后,就会在集水盆汇合处形成边界线,这就叫做分水岭,而图像也就相应地被分割成了几块连通区域,图像分割就是寻找区域的边界线,形成水坝阻止不同区域混合在一起。

毫无疑问,分水岭表示的是输入图像的极大值点,而为得到图像的边缘信息,通常把梯度图像g(x,y)作为输入图像,即

式中,f(x,y)表示原始图像;grad{.}表示梯度运算。

本文采用人机交互的方式,用鼠标在图像上选取局部极小值点,进行区域分割。实验的结果如图5所示。

图4 区域生长算法效果

图5 分水岭算法效果

2.5 小 结

从以上的实验结果可以看出,Otsu 阈值化算法、Canny 边缘算法、区域生长算法和分水岭算法都能够根据图像自身的特征进行分割。Otsu阈值化算法主要依据图像的灰度级进行分割,以类间方差最大的阈值为全局化阈值对图像进行处理;

Canny 边缘算法是一种多级检测算法,普适性较高;区域生长算法最主要的就是确定种子点和生长准则,只有两者都合适才能展现出理想的分割效果;分水岭算法借助拓扑地貌来考虑图像的分割。虽然它们各具优点,但想要得到理想的分割结果,只用这些算法还远远不够,还需要进一步处理。

3 结论

本文系统地介绍并实现了Otsu 阈值化算法、Canny 边缘算法、区域生长算法以及分水岭算法这4种典型的图像分割算法。对于不同种类的图像分割应选取适用的方法,如果一幅图像的目标和背景灰度级占据不同灰度级范围,则可以选用Otsu阈值化算法;Canny 边缘算法不能保证边缘的连续性和封闭性,难以形成一个大区域,也就是说边缘检测只能产生边缘点,所以一般后续都需要进行边缘连接和形态学处理,而且常常需要综合多种算法一起使用,并非完整意义上的图像分割;区域生长算法对某些复杂物体定义的复杂场景的分割或者对某些自然景物的分割等类似先验知识不足的图像分割效果较为理想;分水岭算法对微弱边缘具有良好的响应,而且分水岭算法得到的封闭集水盆也为分析图像的区域特征提供了可能。

猜你喜欢
分水岭灰度边缘
采用改进导重法的拓扑结构灰度单元过滤技术
Bp-MRI灰度直方图在鉴别移行带前列腺癌与良性前列腺增生中的应用价值
选 择
2019,一定是个分水岭!
人生有哪些分水岭
基于最大加权投影求解的彩色图像灰度化对比度保留算法
一张图看懂边缘计算
基于像素重排比对的灰度图彩色化算法研究
在边缘寻找自我
走在边缘