“图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。”---百度百科
本文将继续介绍常见的图像处理算法之图像分割算法,图像分割是从图像中找出目标所在的区域,把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。下图是图像分割的两个例子,分别从原始图像中分割出花和人物。其实简单理解,通常情况下图像分割就是去除图像背景提取感兴趣区域的过程。
基于阈值的分割
基于阈值的分割算法是最简单直接的分割算法。由于图像中目标位置和其他区域之间具有不同的灰度值,具有这种性质的目标区域通过阈值分割能够取得非常好的效果。通过阈值进行分割通常可以需要一个或多个灰度值作为阈值使图像分成不同的目标区域与背景区域。
如何找到合适的阈值进行分割是基于阈值的分割算法中最核心的问题。学者们针对这一问题进行了深入的研究。大津法(OTSU)、最大熵法等算法是其中比较突出的算法,这类算法在图像中适用固定的阈值。但是也有一类算法使用局部阈值,这类算法称为自适应阈值算法。这类算法根据图像的局部特征计算局部的阈值,通常情况下这类算法在有阴影或者图像灰度不均匀的情况下,具有比全局阈值更加好的分割效果。由于基于阈值的分割算法对噪声敏感,通常情况图像在分割之前需要进行图像去噪的操作。
OTSU算法通过计算前景和背景的两个类的最大类间方差得到阈值,阈值将整张图像分为前景和背景两个部分。
基于区域生长的分割
基于区域生长的分割算法将具有相似特征的像素集合聚集构成一个区域,这个区域中的相邻像素之间具有相似的性质。算法首先在每个区域中寻找一个像素点作为种子点,然后人工设定合适的生长规则与停止规则,这些规则可以是灰度级别的特征、纹理级别的特征、梯度级别的特征等,生长规则可以根据实际需要具体设置。满足生长规则的像素点视为具有相似特征,将这些像素点划分到种子点所在区域中。将新的像素点作为种子点重复上面的步骤,直到所有的种子点都执行的一遍,生成的区域就是该种子点所在的区域。区域生长法的优势是整个算法计算简单,对于区域内部较为平滑的连通目标能分割得到很好的结果,同时算法对噪声不那么敏感。而它的缺点也非常明显,需要人为选定合适的区域生长种子点,而且生长规则选取的不合适可能导致区域内有空洞,甚至在复杂的图像中使用区域生长算法可以导致欠分割或者过分割。最后,作为一种串行的算法,当目标区域较大时,目标分割的速度较慢。
基于边缘的分割
通过区域的边缘来实现图像的分割是图像分割中常见的一种算法。由于不同区域中通常具有结构突变或者不连续的地方,这些地方往往能够为图像分割提供了有效的依据。这些不连续或者结构突变的地方称为边缘。图像中不同区域通常具有明显的边缘,利用边缘信息能够很好的实现对不同区域的分割。
基于边缘的图像分割算法最重要的是边缘的检测。图像的边缘通常是图像颜色、灰度性质不连续的位置。对于图像边缘的检测,通常使用边缘检测算子计算得出。常用的图像边缘检测算子有:Laplace算子、Sobel算子、Canny算子等。
基于图的分割
基于图论的图像分割技术是近年来图像分割领域的一个新的研究热点。其基本思想是将图像映射为带权无向图,把像素视作节点,节点之间的边的权重对应于两个像素间的不相似性度量,割的容量对应能量函数。运用最大流/最小流算法对图进行切割,得到的最小割对应于待提取的目标边界。下面将介绍基于图的分割中的grabcut算法.
Grabcut算法是常用的一种图像分割算法,算法是对GraphCut的改进和升级,相对于GraphCut,该算法使用迭代估计来训练模型,同时支持不完整的标记,该算法有效综合了图片中的边界特征和纹理特征,只需要少量的人工交互操作就可以对目标实现较好的分割效果。
GrabCut使用k个高斯分量的全协方差混合高斯模型(GMM)对背景和目标建立模型。混合高斯模型表征图像中每个像素点的特征,图像中的每个像素对应一个高斯分量。在GraphCut 的基础上,GrabCut重新定义了Gibbs能量E。能量E的最小化代表了一个良好的分割。
Grabcut算法使用迭代最小化的方式进行算法的更新优化。迭代的方法如下:
1、将图像中目标区域的每一个像素分配到混合高斯模型中,计算其中最大的高斯分量;
2、针对得到的高斯分量与像素之间的关系,得到每个高斯模型的均值和协方差参数;
3、通过最大流或者最小割算法实现分割能量的最小化;
4、重复上述过程,直到算法收敛。
GrabCut算法通过以上迭代得到最小割,从而实现图像的分割。
本文介绍了传统的常见图像分割算法,虽然目前深度学习算法在图像分割中应用广泛,但是我们依然需要对传统的分割算法有深入的理解。最后欢迎各位读者批评指导。
图像处理系列文章:
网友评论