一、引言
借鉴一些流体中的重要思想, 1988年,Osher和Sethian首次提出了水平集算法[1],这是一种有效解决曲线演化问题的数值方法,并且计算稳定,适宜任意维数空间。随后,Osher等人对水平集算法做出扩展和总结[2,3], Giga也做了相关的理论扩展[4]。近年来这种算法已被广泛地应用在图像处理领域[5]中 ,尤其在图像分割中已取得了很大的进展。事实上,用水平集来解决图像分割问题的实质就是与活动轮廓模型结合,用水平集方法来求解这些模型得到的偏微分方程PDE(partial differential equation) ,属于边缘检测的分割方法。
二、水平集方法
水平集方法将 n维曲面的演化问题转化为 n +1维空间的水平集函数曲面演化的隐含方式来求解,主要包括 3个要素:超曲面的数据表示,控制曲面演化的一系列 PDE以及相应的数值解法。Osher和Fedkiw对水平集方法做了归纳和总结[6]。为简化问题,这里选择n=2来讨论。水平集的主要思想是将2维平面闭合曲线 C(t)表示为水平集函数φ的零水平集φ(t=0),即将界面嵌入到一个曲面中,将2维曲线的演化转化为 3维曲面演化。具体情况如图 1所示。
图1 水平集方法原理示意图
首先,定义符号距离函数(signed distance function, SDF):
(1)
其中, 表示点 到初始闭合曲线 的最短距离,其符号取决于点 在曲线的内部还是外部,通常在外部取正号,内部取负。
水平集函数曲面的演化遵循下面的Hamilton-Jacobi方程[1]:
(2)
其中, 表示曲线上各点的演化速度,方向沿着曲线的法线方向,通常与图像梯度和曲线曲率有关。我们想要分析和计算的就是在速度 的作用下,曲面随后的演化情况。从式(2)可以看出,只要速度 变化平滑,则 始终保持是一个光滑函数,零水平集始终与运动曲面相对应,曲面的拓扑变化可以很容易的描述。对于不同的分割模型,速度 表达式也不相同,从而出现了多种基于水平集的图像分割方法。另外,可以看出式(2)对任意维数的曲面演化都适用。曲线的几何特性也可以很容易的从水平集函数 得出。计算过程中,可以利用有限差分法结合离散网格在数值上近似求解,水平集函数的梯度也可以利用空间导数得到很好的近似。
通常情况下,速度 只定义在零水平层,而扩展实在整个曲面进行,因此需要将 扩展到整个函数曲面。最初的扩展方法就是全局扩展算法,但这种方法的运算区域是整个平面,计算量达,效率低。针对这一问题,Malladi等人提出了窄带算法及自适应窄带算法,该方法将计算区域由整个图像平面缩减到曲线周围的一个窄带内,计算量大大减少,提高了效率。
这种基于水平集的数值方法以一种隐含的方式表述曲面的运动变化。所有曲面运动相关的信息和运动曲面本身的情况都体现在水平集函数之中。
三、基于梯度信息的活动轮廓模型的水平集图像分割方法
3.1 活动轮廓模型
活动轮廓模型即Snake模型,其基本思想是使初始曲线在一系列的外部约束力和图像内在能量的相互作用下进行演化,直至它满足一定的收敛条件停止在图像的边缘,实现图像的分割。Snake模型的原理就是要计算能量最小,其具体形式为:
(3)