3.3 图像分割的基本方法介绍

3.3.1 水平集的基本理论

一幅灰度图像在数值上可以使用曲面表示,离散情况下变为一个矩阵.正如前面对曲面的介绍,曲面除了可以使用经纬线来做参数描述,还可以使用等高线来刻画,配合着梯度方向,实际上形成了一种经纬线坐标网.等高线在数字图像处理中对应于水平集.水平集方法的基本思想是,将平面闭合曲线表达为三维连续函数曲面ϕx, y)的一个具有相同函数值的同值曲线,称为水平集.在图像所在区域Ω内,水平集

C={(x, y)∈Ωϕx, y)=λ}

例如,ϕ=0就是一个典型的0-水平集.而ϕx, y)称为水平集函数,其数字图像的水平集函数对应的就是灰度图像的等值曲面.这样,曲线的运动就转化为对曲面形状的刻画,而每一时刻曲线的位置由曲面的水平集表征.

水平集方法的出现推动了几何活动轮廓线模型的发展.以隐函数的方式来表达平面闭合曲线,避免了对闭合曲线演化过程的跟踪.通过变分方法,将曲线演化转化为求解数值偏微分方程问题,避免了几何曲线演化时对曲线的参数化过程.这一特点也是一般的基于参数的曲线变形模型所不具备的.

正是由于水平集方法所具有的优越性,它在被越来越多地研究的同时,也被广泛地应用在图像分割、图像平滑、图像复原等方面.

1)曲线演化理论

描述曲线几何特征的两个重要参数是单位法矢(即法向量)和曲率,单位法矢描述曲线的方向,曲率则表征曲线弯曲的程度.曲线演化理论就是利用曲线的单位法矢和曲率等几何参数来研究曲线随时间的变形.

加入时间参数的曲线可表示为

Cp, t)=(xp, t),yp, t))

式中,p为任意参数化变量;t为时间变量.

曲线的演化是一个形变过程,可按照法线和切线两个方向进行分解,该过程可用如下的偏微分方程表示[51]

式中,αβ分别为曲线切线方向T和法线方向N的速度函数.由于切线方向T的变形仅影响曲线的参数化,不改变其形状和几何属性,也可以说,任意方向运动的曲线方程总是可以通过重新参数化简化为如下的形式:

式中,VC)为速度函数,决定曲线C上每一点的演化速度.

演化曲线的参数化涉及曲线的曲率和法向量,并且需要在拓扑结构变化时对曲线重新进行参数化,因此,需要采用比较合适的方法来更加自然地描述演化曲线的各种参数,这正是水平集方法得到广泛应用的原因.

2)水平集方法

水平集方法由Osher和Sethian[52]提出,其基本思想是将平面闭合曲线以隐函数的形式表达为连续曲面ϕx, y)的一个具有相同函数值的等高线曲线.

水平集方法处理平面曲线的演化问题不是试图去跟踪演化后的曲线位置,而是遵循一定的规律,在二维固定坐标系中不断更新水平集函数,从而达到演化隐函数水平集中的闭合曲线的目的.这种方式的最大特点是,即使隐函数水平集闭合曲线发生了拓扑结构变化(如合并或分裂),水平集函数仍保持为一个有效的函数.

给定平面上的一条封闭曲线,以此曲线为边界,把整个平面划分为两个区域:曲线外部和曲线内部.在平面上定义距离函数ϕx, y, t)=±d,其中d为点(x, y)到曲线的最短距离.符号±取决于该点在曲线内部还是外部,定义曲线内部点的距离为负值.t表示时间,在任意时刻,曲线上的点就是距离函数值为零的点,即距离函数的0-水平集.尽管这种转化使问题在形式上变得复杂,但给问题的求解带来很多优点.最大的优点是曲线的拓扑变化能够得到很自然的处理.

设连续函数ϕx, y, t):R2×R+R是闭合曲线Cs, t):0≤s≤1在t时刻的隐函数表达式Cs, t)对应于ϕx, y, t)的0-水平集,即

t=0:CP,0)={(x, y)|ϕx, y,0)=0}

以及

CP, t)={(x, y)|ϕx, y, t)=0}

要使水平集函数ϕx, y, t)在演化过程中,以ϕ的初值(即0-水平集)所对应的平面闭合曲线

满足曲线演化的偏微分方程

对式(3-16)求全微分,得全导数

式中,梯度算子.由水平集函数的定义,ϕ沿曲线C方向的变化量为零,即

式中,〈·,·〉为向量内积.这样,▽ϕ就垂直于闭合曲线C的切线Cs.因此,▽ϕC的法线同向.为了方便起见,假设

inside (C)={(x, y)∈Ωϕx, y, t)>0}

outside (C)={(x, y)∈Ωϕx, y, t)<0}

则水平集的内向单位法向量就是

由式(3-17)至(3-19)得

这样就用水平集表达式表示了曲线的演化过程.

为利用水平集方法实现曲线演化的应用,要采用适当的数值计算方法.数值实现的关键是如何高效率地将定义于连续空间的偏微分方程以离散形式表达出来.由于水平集函数在演化过程中始终保持为一个函数,因此,可以用离散的网格来表达水平集函数ϕx, y, t),设离散网格的间距为h,并设在n时刻,网格点(i, j)处的水平集为,则),这里的Δt是时间步长,则式(3-20)为

离散形式为

式中,Vext为扩展速度函数;n时刻扩展速度函数Vext位于网格点(i, j)处的值.