活动轮廓模型活动轮廓模型(或者说基于能量泛函的分割方法)包括以Snake模型为代表的参数活动轮廓模型和基于水平集方法的几何活动轮廓模型(常被称为水平集方法)活动轮廓模型的基本思想是使用连续曲线来表达目标轮廓,并定义一个能量泛函使得其自变量包括曲线,将分割过程转变为求解能量泛函的最小值的过程,数值实现时可通过求解函数对应的欧拉(Euler-Lagrange)方程来实现,当能量达到最小时的曲线位置就是目标轮廓所在。一.参数活动轮廓模型Snake模型首先需要在感兴趣区域的附近给出一条初始曲线,接下来最小化能量泛函,让曲线在图像中发生变形并不断逼近目标轮廓。Snake模型中的变形曲线可用参量表示:()[(),()],[0,1]vsxsyss其能量泛函表示如下:222112001()()(())2snakeextdvdvEssdsEvdsdssds其中()s(弹力系数)用于控制活动曲线以较快或较慢的速度进行收缩,一阶导数表示轮廓的斜率,用来控制着轮廓的连续性;()s(强度系数)用于控制活动曲线沿着法线的方向向目标变化的速度。二阶导数表示轮廓的曲率,用来控制着轮廓的弯曲程度。能量泛函的前两项代表内部能量,起到保持轮廓连续性和平滑性的作用。第三项代表外部能量,也被称为图像能量,表示变形曲线与图像局部特征吻合的情况。一般外部能量可取:22(())(,)(())(,)extextEvsIxyEvsGIxy或其中G是标准差为的高斯核函数。对上面的能量泛函使用变分法可得到Euler-Lagrange方程:()()(,)0extvsvsExy将变形曲线视为时间t的函数,上式可转变为如下梯度下降流()vs()()(,)extvvsvsExyt这是一个偏微分方程(PDE),通常可采用有限差分法(finitedifferentialmethod)进行求解。参数活动轮廓模型从算法实现上看,可分为4步:即构造能量函数、推导欧拉方程、离散化和迭代求解。Snake模型也存在几个问题:(1)分割结果对初始曲线的位置和形状较为敏感;(2)难以分割凹陷区域处的目标;(3)容易收敛到局部极值点;(4)不能灵活地处理曲线拓扑结构的变化。二.水平集方法的基本理论与参数活动轮廓模型不同,水平集方法是几何活动轮廓模型,在水平集方法中曲线的运动过程是基于曲线的几何度量参数(如曲率和法向矢量等)而非曲线的表达参数。它能够较好的克服Snake模型的许多缺点。1.曲线演化理论曲线演化理论主要利用曲线的单位法向矢量和曲率等几何参数来研究曲线随时间的变化。其中,单位法向矢量描述了曲线的运动方向,而曲率则表述曲线弯曲的程度。曲线演化问题可以描述为:在二维欧式空间2R中的一条光滑闭合的曲线沿着其法线方向以一定速度运动,形成以时间为变量的一簇曲线的过程。把曲线演化理论应用在图像分割上,就是把分割过程近似的看作图像平面上闭合曲线在各种因素作用下运动的过程。假设()CCp一条光滑封闭的曲线,是任意的参数化变量,设表示曲率,T表示切线,表示法线,则有如下关系存在:N22,dCdCTdpdpN(1)在图中T和N是相互垂直的,,所以平面上任何曲线都可以用曲线上任何一点的T和N的线性组合来表示。在这里引入时间变量t,则曲线随时间t的演化方程可用如下偏微分方程来表达:CTNt其中和分别是速度函数在切线方向和法线方向的分量,由于曲线在切线方向上的运动,不会改变曲线的形状和几何属性。.因此在其体实现时可以只考虑曲线演化在法线方向上的运动。设是单位法向矢量,则曲线演化方程可改写为:NCFNt(2)其中F是曲线的速度函数,决定了曲线C上每一点的运动速度。关于速度函数F有很多表达方式.较为常见的是曲率演化和常量演化。曲率就是针对曲线上某个点的切线方向角对弧长的转动率,曲率越太则曲线的弯曲程度越大,如下图设0M是基点,在点M和M之州的弧长为|S|,则弧段MM平均曲率为:S求极限可得ddS则在曲率演化方式下,曲线的演化方程可使用如下的偏微分方程表示:CNt其中是一个常数。在曲率的作用下,任意形状的封闭曲线在上式的驱动下都会变得平滑,常量演化方式下的曲线演化方程为:0CVNt其中是一个常数。在上述方程的驱动下,较为光滑闭合曲线会产生尖角,且有可能会发生拓扑结构上的变化即分裂或合并。0V图:曲率演化方式和常量演化方式的对比曲线演化理论用在图像分割中最为关键的一步就是将图像的特性引入到曲线演化方程中,从而使得演化曲线能在收敛的情况下停留在目标轮廓上。水平集方法正是为了解决这一问题。2.水平集方法水平集方法的主要思想是:将移动变形的曲线作为零水平集嵌入到更高一维的函数中,由封闭超曲面的演化方程可以得到函数的演化方程,而嵌入的封闭曲线总是保持为函数在零水平截面上的点集,最终只要获得演化函数在零水平截面上点集的位置,即可得到移动变形曲线的演化结果。水平集方法一个重要的理论前提是隐函数的概念,在曲线演化理论中引入水平集的目的就是为曲线提供一种隐式表达方式,从而避免参数化这种显式表达。隐式表达有着明显的优点。(比如,几条曲线在运动中合并成一条曲线,或一条曲线分裂成若干条曲线,这样的拓扑结构变化不可能用一条连续的参数化曲线的运动来表示,但是曲线的拓扑结构变化却可以表示成一个连续变化的曲面与一个固定的平面的交线的变化,曲面本身可以不发生拓,从而使得复杂的曲线运动过程变为一个更高一维的函数的演化过程。)假设二维平面上的曲线由()yfx表示,该关系也可以用来描述,此时若设()0yfx(,)()xyyfy则(,)0xy就是曲线的隐式表达式。如下图:引入时间变量t后,曲线的演化形成了随时间变化的曲线族,可以把曲线族看作是更高维空间曲面函数()Ct的零水平集{0,t},此时(,,)xyt即被称为随时间变化的水平集函数,零水平集就是曲面上函数值为0的所有点的集合。如下图所示:0t时刻的曲面0(,,)xyt(水平集函数)在0z切面上的虚线(零水平集)即为隐含的曲线。因此在处理曲线的演化问题时,水平集方法遵循一定的演化规律(即水平集演化方程),来不断地更新水平集函数。使得零水平集发生变化,从而达到演化隐含在水平集函数中的闭合曲线的目的。下面从从数学的角度给出水平集方法与曲线演化理论之间的关系。给定水平集函数(,)Ct,则t时刻演化的曲线为其零水平集()Ct((),)0Ctt,根据复合函数求导法则对((0Ct),)t进行求导可得:0Ctt(3)其中为的梯度。设s是C的弧长参数,根据曲线演化理论和水平集函数的定义,沿着C切线方向的变化量0s,即0,xyCxsyss由上式可知垂直于切线Cs,即和法线同一方向,如果规定在零水平集内为负值,在外为正值,则水平集曲线的内单位法向矢量为:N将上式和(2)式CFNt代入(3)式0Ctt,可得如下的水平集演化方程:|Ft|(4)从上式可知水平集方法的实质就是求解一个随时间变化的偏微分方程,该演化方程属于Hamilton-Jacobi方程,可以通过分离变量法求出方程的全积,即按照对时间项和空间项(将图像按像素进行网格化)分开处理的方法对此类方程进行数值求解。t通常情况下,一个典型的水平集方法应包括如下三个部分1)一个(超)曲面的隐式数据表达;2)控制曲线运动的偏微分方程(组);3)相应的数值求解方案。3.水平集函数的初始化一般来说,为了确保数值计算的精度,水平集函数应具备如下两个性质:(1)水平集函数必须具有一定的光滑性。水平集演化方程(4式)可以得知,演化时需要计算水平集函数的梯度||,而梯度对数值变化是非常敏感的。且大部分方法中的速度函数F都会包含有常数项和曲率项,曲率项在数值求解时需要计算水平集函数的二阶导数,而常数项也要计算一阶导数。因此水平集函数的光滑性将会直接影响到水平集函数的计算精度。(2)水平集函数应保持为符号距离函数(SDF)。原因有两方面,一方面因为曲线的隐式表达与它的符号距离函数是等价的,另一方面从数值计算的角度来说,由于符号距离函数的梯度||1,因此可以保证离散网格的大小为1,使得数值计算具有较高的精度。综上所述,在水平集开始演化之前,把水平集函数初始化为SDF函数。设(0Ct)初始曲线,则零时刻的水平集函数为:(,,0)(,,(0))(,,(0))xytsignxyCtdistxyCt其中是一个取值为+1或-1的符号函数,如果点(x,y)在的外部,则(,,(0))signxyCt(0)Ct(,,(0))1signxyCt,在内部(,,(0))1xyCtsign。(,,distxyC(0))t表示点(x,y)到初始曲线的最短距离。。因此计算SDF函数包括两个步骤:(0)Ct(1)判断点在初始曲线的内部还是外部;(2)计算点到初始曲线的最短距离。4.水平集方法的数值计算水平集方法的实质就是求解一个随时间变化的偏微分方程,而数值计算的一个重要的步骤就是给出演化方程的离散形式。由于水平集方法在演化过程中始终保持为一个有效函数,因此可以使用离散网格的形式来表示水平集函数(,,)xyt。设离散网格的间隔为h,时间步长为t,则在n时刻网格点(i,j)处的水平集函数(,,)ihjhnt(可缩写为nij),则演化方程可离散化为:1nnijijnnijijijFt其中nijF表示n时刻速度函数在网格点(i,j)处的值。对于上式,可采用有限差分法进行求解。首先定义一阶中心差分、一阶向前差分和一阶向后差分六个算子如下:001,1,,1,11,,,1,,1,,,111()()2211()()11()()xijijyijixijijyijijxijijyijijhhhhhhj因此,离散化的演化方程可改写为1(max(,0)min(,0))nnnnijijijtFF(5)式中和可分别表示如下:2222222[max(,0)min(,0)max(,0)min(,0)][max(,0)min(,0)max(,0)min(,0)]xxyyxxyy12212将上式用于图像分割时,速度F可以写成如下形式:propcurvadvFFFF其中代表常量演化速度,0propFVcurvF是曲率演化速度,advFUN是水平对流速度,((,,),(xytv,,))Uuxyt,因此(5)式可进一步写成100020212[(max(,0)min(,0))(max(,0)min(,0))(max(,0)min(,0))(()())]nnijijijnnijxijxnnijxijxnijxytVVuuvv通过上式可以不断更新水平集函数。