截至目前,我们已经学习了很多关于图像分割的相关算法,就此,对图像的分割算法做以下总结:
- 基于边界驱动的分割
- 边缘检测分割
- 活动轮廓分割(基于能量)(Active Contours/snakes)
- 活动形状模型(Active Shape Models)
- 基于区域驱动的分割
- 可变性模板分割(Deformable templates)
- 基于统计学和聚类算法的分割(Statistical/clustering techniques)
- 基于边界和区域驱动的分割
- 活动轮廓分割(Active Contours)
- 水平集算法分割( Level Set Methods )
水平集算法
基于能量的分割方法,有一些显著的缺点,如:
- 对初始的轮廓极为敏感
- 难以处理一些复杂的结构
- 只能对单目标进行跟踪,难以实现多个目标的分割
水平集算法的提出可以有效解决上述缺点,所谓水平,即指同一高度的一些像素点,将水平集的算法引入到图像分析的领域,水平集算法提出了一个更高的维度来表达这些曲线。
水平集算法对图像的活动轮廓分割有一些新的术语表达:
contour front
contour energy forces
image energy speed function
为了避免3D 轮廓计算的复杂性,提出一个 零水平集(zero level set)的概念,并且提出了一个动态的坐标平面表达front的演化,如下图所示,我们总能总结出当前时刻的水平面,根据曲面的函数表达,总能总能计算出下一时刻的轮廓演化。与图像能量表达的轮廓不同,水平集算法多了一个平面的维度对轮廓施加影响。
水平集算法通过零水平集的设置和初始轮廓的约束求解偏微分方程的方式实现。
如下图所示,形象地表示了一个水平集算法的原理示意图,在front里面的点小于0,而front外面的点大于0,零水平面所对应的点设为0
不需要移动轮廓,仅仅通过改变图片中的一些值就可以很容易地实现图像地分割。
水平集算法的运算流程如下:
- 设定初始的front
- 计算
- 迭代以下运算过程,直至收敛:
- 在图像中标识分割结果的边缘
水平集算法的一个重要概念是速度函数(speed function),而对速度函数
有以下三个概念:
- 局部属性,如曲率和法向量
- 全局属性,如表示front的微分方程
- 独立属性,如基础的流体速度,
front通过迭代实现繁衍,而迭代的过程必有一个停止条件,此条件是由图像本身的性质决定的,gradient函数来表示这一停止条件,如,有以下三种常用的函数:
而
水平集算法的扩展可以从两个方向进行:
- 算法效率
- 应该尽量避免两个轮廓的碰撞(即一些像素点的交叉)
为了改进水平,提出了一个快速行进算法(Fast Marching)
Fast marching
Fast Marching 算法使得front朝着一个方向前进,要么扩展,要么收缩,避免了分割轮廓的抖动,提高了算法的运行速度,同时,为了避免轮廓的碰撞,每个网路与轮廓点只交叉一次。
在实际的算法应用中,通常将Fast Marching算法和 水平集算法结合来完成图像的分割,用Fast Marching 算法高效的实现轮廓线的行进,完成一个粗分割,当算法趋向于收敛时,用水平集算法完成更为精准的分割。
如下图所示,任意一个时刻点轮廓线网格点交叉的坐标 ,并且在任意高度处,表面会给出在时刻所到达点的集合。
网友评论