李纯明“距离正则化水平集演进及其在图像分割中的应用”论文解读
今天要讲的是李纯明博士关于水平集图像分割的论文“Distance Regularized Level Set Evolution and Its Application to Image Segmentation”(算法缩写为DRLSE)。这是一篇让我看了有膜拜之感的论文,读过之后不得不感慨搞数学的人来搞图像处理对本专业的人真的是降维打击。下面我将尝试为大家进行解读。
水平集主动轮廓算法基本思想
在解读这篇论文之前,首先为大家普及一下水平集主动轮廓演化算法的基本思想。主动轮廓演化的基本思想就是不断驱动边缘朝边缘法线移动进行变形,若边缘在理想轮廓内部,则促使其往外扩张,若边缘在理想轮廓外部,则促使其往内收缩,距离理想轮廓越远,驱动力越强,距离理想轮廓越近,驱动力越落。理想情况下,轮廓变形到理想轮廓时驱动力消失,轮廓演化完成。
水平集主动轮廓演化则更近一步,它演化的不单单是边界曲线,而是整个图像的函数值所形成的的曲面,这个函数我们称之为水平集函数(level set function,LSF)。这个LSF在轮廓内部取值为负,在轮廓外部取值为正(当然,反过来做也未尝不可)而在分割区域轮廓上则取零值。也就是说区域轮廓就是Level=0的点集,这也就是所谓level set名称的由来。看如下示意图(这个例子中LSF在内部是去正值的),LSF演化过程中,谷/峰的个数可以不止一个,这样就可以很容易地实现只演化曲线所难以完成的区域分裂、合并等操作。另外,LSF的演化可以在固定的笛卡尔网格上实现而不必参数化轮廓上的点。这就是这种升维演化所带来的好处。
传统水平集方法的势函数演化方程及其存在的问题
接下来再来给大家介绍下传统水平集算法到底是怎么演化的(即传统水平集方法的演化方程)。
记t时刻轮廓上的一点为,由于轮廓点始终是LSF函数
取值为0的点,所以有
恒成立。故有:
根据链式法则,有:
点向其法线方向(向内法线)运动,即有:
其中,即为
,
为控制轮廓演进的速度函数。于是有:
以上便是传统水平集算法中LSF演化的偏微分(PDE)方程。
但是这种演化存在一个问题,就是缺乏对LSF导数赋值(即曲面某点斜率)的限制,这可能使LSF曲面局部演化得过于陡峭(尤其是在附近过于陡峭,这意味着演化过于激进,轮廓变化过于剧烈,可以在理想结果附近反复波动)从而造成演化无法收敛或者收敛到错误的结果,这就需要采用定期重新初始化等方法来进行补救。
还有一个问题是理论与实践之间的背离问题。重新初始化时LSF被初始化为一个符号性距离函数,即:
其中,是轮廓内部区域。即LSF在区域内与区域外均为一常数,只是符号相反(也可能是一个带斜坡的阶跃函数,具体我不太清楚)。但是事实上根据上面的LSF演化PDE方程,
绝不会收敛到符号性距离函数,而每次初始化却以符号性距离函数进行初始化,这样缺乏继承性的初始化也就造成了缺乏继承性的演进,相当于每次演化到了一定程度就在当前水平上完全推倒重来。
为了补救以上缺陷,李纯明博士提出了距离正则化的水平集演变方程。
李纯明的距离正则化水平集演化方程
理想中的LSF应该在水平集附近具有有限的导数,同时LSF应该近似一个符号性距离函数,即远离水平集(或者说轮廓)的地方LSF基本上保持为一个常数,只不过轮廓内和轮廓外异号罢了。那很自然的一个想法就是让远离水平集的地方LSF导数基本为0,而在水平集附近LSF导数(模值)为1。李纯明博士创新性地提出了一般化的变分水平集公式,这个一般化的公式由一个距离正则项和一个驱动轮廓向理想轮廓演进的外部能量项这两部分组成。这个距离正则项是一个对LSF梯度的惩罚函数,它迫使每一点的梯度幅度向惩罚项中势函数的其中一个最小值(0或1)变化。这种势函数叫作双井势函数(double-well potential function)。用符号性距离函数进行初始化,这种构造内在地就迫使LSF演化为一个接近符号性距离函数的形式。比如下面这个图像:
初始时在深灰色区域内部随便画两个矩形作为起始轮廓。其起始LSF形式如下:
最终的演化结果如下:
可以看出,最终LSF在轮廓内远离边界处取值为3,轮廓外远离边界处取值为-3,而在轮廓周边梯度幅值约为1,轮廓附近的LSF值变化比较平缓。
定义能量函数为:
它是我们的最小化目标。其中,是驱动轮廓向理想轮廓演进的外部能量项,
是对LSF导数的惩罚项,有:
在变分法中,最小化一个能量函数的标准方法就是找到下式中梯度流方程的稳态解。
其中,是
的Gâteaux导数(这个啥意思我也不太懂)。
前述的Gâteaux导数如下:
其中,
论文中使用的双井势函数为(就是前面式子中的
,因为论文中提到了两种势函数,另一种是早先论文中提出的单井势函数,这个是新提出的):
论文中提出的这个势函数惩罚项有一个神奇的能力,那就是在时迫使
向0演进,否则向1演进。具体论证参见原论文。
别忘了还有驱动轮廓向理想轮廓演进的外部能量项。完整的能量函数如下:
其中为轮廓线上的线积分,
为轮廓内部的能量积分,
为Heaviside积分。
形式如下;
具体地实现这里就不讲了。
根据前面的介绍我们知道,轮廓线是取值为0的点的集合,同时,远离轮廓的部分梯度幅值基本为0,即
基本不变。那么很自然地就想到那不如在演化中我们每次只更新轮廓附近的取值而不是更新整幅图像上的
取值。这就是论文中窄带实现的基本思想。通过这种优化,算法的效率可以上百倍地提升。根据作者提供的数据,窄带实现的DRLSE比传统完整实现的水平集轮廓演化算法相比效果提高了成百上千倍。当使用简单预处理如阈值分割先给出一个不错的初始轮廓时,算法还可以更快地收敛。
DRLSE还有一个很NB的地方就是演化非常稳定,哪怕你初始轮廓给得渣得一匹。作者给出了这种分割示例,如下图所示。其中第二列白色部分为简单阈值分割得到的初始轮廓,第三列为中间结果,第四列为最终结果。可以看出,这种算法鲁棒性实在是太好了。
更多分割示例如下:
代码不方便直接贴上,大家自己到网上搜索下载吧。