您的位置:首页 > 编程语言 > C语言/C++

用于图像分割的自适应距离保持水平及演化总结

2013-08-31 12:33 295 查看
DRLSE算法

看了Drlse算法之后,又发现了这篇文章,比LI的算法有一些改进。Li 等人提出的距离保持水平集方法有传统变分水平集方法不具备的许多优点,然而,它有初始曲线必须包围目标物体或完全置于目标物体内部或外部的缺点.提出一种自适应距离保持水平集方法,它无须初始曲线包围目标物体或完全置于目标物体内部或外部,即初始曲线可以置于图像的任何地方.它能够解决原方法所不能解决的一些图像分割问题,例如,能够从任意选取的一条初始曲线出发自动检测目标物体的内外轮廓,检测多目标物体以及深度凹陷区域的边缘,并能较好地提取目标物体的弱边界.对几幅具有不同目标边界形态的合成图像和自然图像进行了实验,结果都取得了预期的分割效果.

传统的水平集的问题:

1) 为了保证水平集演化稳定、有效地进行,

水平集函数在演化过程中必须始终保持近似于符号距离函数(尤其在零水平集的附近),因此不得不周期性地重

新初始化水平集函数.反复初始化不仅费时(使演化速度变慢),而且数值误差使零水平集定位不准;

2) 水平集演

化的数值实现需要采用一种特殊的有限差分——逆向(upwind)有限差分方法,这种差分方法复杂性高,计算

量大.

LI的优点:

该方法在能量泛函中添加了一项内部能量泛函,主要用来纠正水平集函数与符号距离函数的偏差,因此无须在演化过程中再周期性地初始化水平集函数.

Li的缺点:

1) 演化曲线只能沿着一个方向(向内或向外)演化,不能根据图像信息自主决定向内还是向外运动,必须人为地选择初始轮廓的运动方向.这就决定了初始曲线不能任意选择,必须包围目标边界或在目标边界内部或外部.因此,这种方法未能解决演化曲线的自适应运动和对初始位置敏感的问题.

2) 外部能量泛函的权系数v 是常数,不能根据图像信息自适应地调整符号和大小,因此,零水平集不能检验物体的多层轮廓以及狭窄深度凹陷区域的边界,对多个目标物体的边缘检测存在明显的局限性.

3) 控制演化停止的停止速度函数收敛于0 的速度太慢,造成弱边界处仍然可能具有较大的演化速度.

4) 数值实现时采用的正则化Dirac 函数有紧支集,这决定了演化方程的控制作用是局部的,因而限制了活动轮廓捕获目标

物体边界的能力.

此文的改进:

1) 引入图像相依的权系数v(I)代替常值权系数.一方面,权系数v(I)能够根据图像信息自适应地改变符号,这使得零水平集能够根据图像性质自适应地决定向内还是向外运动,克服了演化曲线对初始位置的依赖,从而可以在任何位置定义初始曲线;另一方面,权系数v(I)能够根据图像信息自适应地调整大小,这极大地提高了零水平集检验多层轮廓的能力,也提高了零水平集对深度凹陷区域里的目标以及多目标的捕获能力.

2) 采用了新的停止速度函数,这极大地提高了零水平集检测弱边界的能力,同时也加快了零水平集的演化速度.

3) 数值实现时,采用了支集为(−∞,+∞)的正则化Dirac 函数,这决定了演化方程的控制作用是全局的,从而获得能量泛

函的全局最小,进一步提高了活动轮廓捕获目

实际:换了一个能量函数,换了定义域。

1 距离保持水平集演化

1.1

介绍li的算法:我自己翻译了一遍DRLSE算法的原文,用了一周,写在本子上了,感觉,整体理解起来难度不小,现在看看本文作者理解的:

距离保持水平集方法[6]在传统方法的能量泛函中添加了一项内部能量泛函,主要用来纠正水平集函数与

符号距离函数的偏差,从而实现了水平集函数在演化过程中不需要再次初始化的目标.具体来说,文献[6]考虑了

如下的能量泛函:

E(φ ) = μ P(φ ) + Em (φ ) (1)

其中,

  -------------------------------------------------------2

是水平集函数φ 的内部能量泛函(Ω是图像区域),它定量地表示了水平集函数偏离符号距离函数的程度,用来纠

正水平集函数与符号距离函数的偏差,μ>0 是其权系数;Em(φ)是某种外部能量泛函,用来驱使零水平集向着图像

中的目标边界运动,其定义为

Em( ) Lg ( ) Ag ( ) g( I ) ( ) dxdy g( I )H( )dxdy Ω Ω

φ = λ φ +ν φ = λ ∫ ∇ δ φ ∇φ +ν ∫ ∇ −φ (3)

----------------------3

其中,λ>0 和v 为常数,δ(x)和H(x)分别是一维Dirac 函数和Heaviside 函数,g(s)为停止速度函数, g(s) = (1+ s2 )−1 ,

I(x,y)为图像函数.

对应于能量泛函E(φ),通过极小化这个泛函,得到控制水平集演化的偏微分方程:

为了数值求解上述方程,文献[6]采用了式(5)定义的正则化Dirac 函数δε(x)代替广义函数δ(x),并采用简单的

有限差分法,而且允许选取较大的时间步长τ (例如,τ=5.0).

在传统方法中,水平集函数φ 必须初始化为符号距离函数.与此不同,文献[6]的方法不仅不需要水平集函数

在演化过程中的反复初始化,而且水平集函数也不必是符号距离函数.文献[6]定义的初始化函数为

(6)

其中,ω是Ω的开子集,ρ>0 是常数.

1.2 进一步分析

在传统几何活动轮廓模型中,水平集函数在演化过程中必须始终保持近似于符号距离函数(尤其在零水平

集的附近),这样才能保证水平集演化的稳定性和结果的有效性.我们知道,符号距离函数有如下性质[8]:

1) 满足|∇φ|=1;

2) 满足|∇φ|=1 的函数φ一定可以表示为一个符号距离函数与一个常数之和.因此,内部能量泛函P(φ)定量地表示了水平集函数偏离符号距离函数的程度,对其极小化可以有效防止水平集函数偏离符号距离函数,从而免去了水平集函数在演化过程中反复初始化.

水平集演化的实质就是利用图像特征控制演化曲线向能量泛函最小化的方向运动.外部能量泛函Em(φ)最

小化的结果:一方面使零水平集的加权长度Lg(φ)向最小化方向运动,使零水平集逐渐变得平滑,并减少尖点、角

点、奇异点的产生;另一方面使加权面积Ag(φ)向最小化(v>0)或者最大化(v<0)方向运动,使零水平集收缩(v>0)

或者扩张(v<0),从而获取目标物体的轮廓.

权系数v 在距离保持水平集方法中也起着至关重要的作用.一方面,它的符号决定了零水平集的演化方向,

使零水平集收敛于正确的目标边界:若初始曲线包围目标物体,则需要零水平集向内收缩,这就要求权系数v>0;

若初始曲线位于目标物体内部(或外部),则需要零水平集向外扩张(或先扩展后收缩),这就要求权系数v<0.另一

方面,因为权系数v 是常数,,这说明权系数v 改变了停止速度函数的

幅值,从而在一定程度上决定了零水平集捕获目标物体多层轮廓的能力.后文图2 的结果说明了这一点:当v=1.5

时,零水平集只能检验目标物体的外轮廓(后文图2(c));当v=6.5 时,零水平集能够检验部分内轮廓,但同时产生了

外边界的泄漏(后文图2(d)).

下面,我们分析距离保持水平集方法的一些不足之处.

首先,距离保持水平集方法缺乏方向和大小的自适应性.权系数v 不但决定了零水平集的演化方向,也改变了停止速度函数的幅值.然而,v 是预设常数,因而演化过程缺乏方向和大小的自适应性,这极大地限制了这种方

法灵活处理复杂问题的能力:一方面,v 的符号一旦被确定,活动轮廓就只能沿着一个方向演化(单方向运动流),

这就要求特定的初始化步骤,即初始化曲线必须把目标物体包围或在目标物体内部(或外部),否则就会产生错

误的边界或根本提取不到任何边界.对于有些图像,目标物体的某些部分超出了图像的边界,初始曲线无论如何

放置,都无法满足包围目标物体或位于目标物体内部或外部的要求,从而不能正确提取目标物体边缘;另一方

面,v 的值一旦被确定,其大小在零水平集演化过程中始终不能自适应地改变,这就使得零水平集在捕获图像多

层轮廓以及不发生边界泄漏方面陷入两难.在后文图2 中,当|v|较小时,只能提取物体的外轮廓;当|v|较大时,虽然

提取了部分内轮廓,但产生了外边界的泄漏.其次,停止速度函数g(s) = (1+ s2 )−1收敛于0 的速度太慢,因此容易导致在弱边界处产生边界泄漏.我们知

道,在几何活动轮廓模型中,演化曲线能否停留在目标边界上,关键是要由停止速度函数控制的演化速度近似为

0[2].否则,先到达目标边界的演化曲线继续前进穿过目标边界,从而导致边界泄漏.然而,在目标边界处的梯度值

通常并不是无限大,尤其是在弱边界上,梯度值可能还较小.这就不能保证演化速度接近于0,尤其是在弱边界处,

演化速度还可能较大.

第三,正则化Dirac 函数的选择不够好.Dirac 函数δ(x)的出现决定演化方程(4)仅仅是作用于局部的.在数值

实现中,文献[6]采用正则化Dirac 函数(5)代替Dirac 函数.但是,该正则化Dirac 函数是具有紧支集的函数(支撑

集为[−ε,ε]),这就使得方程(4)仅仅作用于零水平集周围的少量水平集而不是全局,容易使演化曲线陷入局部最

小,从而无法检测物体的内外轮廓、深度凹陷区域以及多目标物体的边界.

2 自适应距离保持水平集演化及数值实现

2.1 自适应距离保持水平集演化

在距离保持水平集方法中,权系数v 是一个常数,这使得模型缺乏方向和大小的自适应性.为了解决这一问

题,我们考虑引入可变权系数,它需要满足两个条件:1) 能够根据图像信息自动改变正、负符号,使零水平集能够

自适应地选择其运动方向,从而克服对初始位置的依赖性;2) 能够根据图像信息自动改变大小,从而使零水平

集有足够的能力捕获多层轮廓而又不致边缘泄露.

基于以上考虑,本文如下定义可变权系数:

v(I ) c sgn( Gσ I ) Gσ I = ⋅ Δ × ∇ × (7)

其中,I(x,y)为图像函数,sgn(⋅)是符号函数,Gσ是标准差为σ 的高斯滤波器,∇Gσ×I 是图像经过高斯滤波后的梯度,

ΔGσ×I 为Laplace 算子作用于高斯滤波后的图像的结果,c>0 是常数.

下面,我们对可变权系数v(I)作一些分析.

1) 在图像内的边界处,二阶导数有一个非常重要的性质,即目标边界两侧二阶导数值符号相反.根据这个性质,对于活动轮廓在目标物体外的部分,有ΔGσ×I>0, sgn( Gσ I ) 0 Δ × > ,v(I)>0,从而引导零水平集向内朝着目标物体演化,同时,对于活动轮廓在目标物体内的部分,有Gσ I 0 Δ × < , sgn( Gσ I ) 0 Δ × < ,ν (I ) < 0 ,引导零水平集向外朝着目标物体演化.这就是说,零水平集能够根据当前位置自适应地决定向内还是向外运动,从而完全摆脱了演化曲线对初始位置的依赖,可以在任何位置定义初始曲线.

2) 权系数v(I)的大小是由图像梯度决定的,因此,它能够依据图像信息自适应地调整大小.当零水平集运动

到目标边缘附近时,梯度的模较大,导致v(I)的绝对值也较大,这极大地提高了零水平集检验多层轮廓的能力,以

及对深度凹陷区域与多目标物体边缘的捕获能力.

3) 在某种特定环境下,我们可能对目标物体的轮廓或细节需求不一样,式(7)中引入系数c 就是用来控制不

同环境对目标边缘的不同需求,如果需要提取多层轮廓或者较弱的边缘,可适当提高c 的取值,一般在1.8~5 之

间(后文图6(b)),但对噪声的敏感性相应增加;如果仅需要单层轮廓或者图像中一些主要目标的轮廓,则取较小

的c 值,一般在1.0~1.8 之间(后文图6(c)),但对噪声的敏感性相应减弱.

基于上面的分析,本文定义的能量泛函如下:

其水平集形式为

其中, k = div(∇φ / ∇φ )为演化曲线的曲率.

2.2 数值实现

与文献[6]不同,本文采用指数函数g(s) = exp(−s)作为停止速度函数,即在式(9)中, g( I ) exp( G I / σ

∇ = − ∇ ×

m) ,其中,常数m∈[2,5] .本文选取m=4.

对于停止速度函数g(s) = exp(−s) ,显然有g(s) ≥ 0 , g(0) =1和lims→∞ g(s) 0 = .此外,随着s 的增大,该函数收

敛于0 的速度大大快于函数g(s) = (1+ s2 )−1 ,这就使得零水平集运动到目标边缘时,演化速度迅速减少到0,从

而避免或减少了边界泄漏.后面的实验显示,利用新的停止速度函数,能够提取诸如血管之类的弱边界.而且在

活动轮廓运动的过程中,该函数能够使零水平集保持较好的光滑性,从而加快了演化速度.

在数值实现时,文献[6]采用了式(5)定义的正则化Dirac 函数.该函数的支撑集为[−ε ,ε ] ,这决定了演化方程

的控制作用是局部的.本文采用了如下的正则化Dirac 函数来代替Dirac 函数δ(x):

因为函数δε(x)的支撑集为(−∞,+∞),所以方程(9)作用于整个水平集函数,从而获得能量泛函的全局最小,这

进一步提高了零水平集检测多层轮廓的能力,以及对深度凹陷区域与多目标物体边界的捕获能力.本文实验选

取ε=1.5.

初始水平集函数定义与文献[6]定义一致(见式(6)),且ρ =4.对图像边界作镜面反射处理.

采用中心差分方案,方程(10)的离散形式为

1

其中, ( k, )

L φi j 为方程(10)右边的差分离散形式.本文算法是根据式(12)实现的.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++