2.2 水平集的定义
说到水平集就应该首先明白什么是水平集。水平集的标准定义是[8]:与实数c对应的可微函数 的水平集是实点集 {(x1, x2, ...,xn) | f(x1, x2,...,xn) = c} 称可微函数f为水平集函数。也许这个比较难以理解,这里给一个例子:水平集函数 对应于常数c的水平集是一个以(0,0,0)为球心,sqrt(c) 为半径的球面(注意这里是球面不是线)。
当自变量参数个数n=2时,水平集是一个水平曲线,我们可以理解为一个空心的球体的切面。同理,当自变量的个数n=3时(上面 对应常数c的水平集),水平集是一个水平面,就像一个实心的球体的切面一样。
有上面的定义我们可以有这样的感性认识,所谓的水平集关键在于水平的概念。顾名思义,水平集就是水平切面上的一个集合。
2.3 水平集的思想
要把握一个算法,关键是把握该算法的基本思想,关于水平集的基本思想,文献[3]是这样定义的:水平集图像处理的核心思想是把n维描述视为高一维(n+1)维的水平集,或者说是把n维描述视为有n维变量的水平集函数f的水平集.这样一来就把求解n维描述的演化过程转化为求解关于有n维变量的水平集函数f的演化所导致的水平集的演化过程。其要害是通过这种转化,引入了变中的相对不变:水平集函数f的水平c不变。我们把这种变中的相对不变叫做泛对称。引入了泛对称,就引入了规律,而引入了规律就能推演出水平集在此规律下依各种具体条件而演化的具体演化方程。也即是说,引进了泛对称这一规律,我们就有了从一般到特殊的演绎过程的出发点和依据。这种思想方法的实质是以关系来决定对象。
文献[4]表述的水平集的基本思想是:将平面闭合曲线隐含地表达为三维连续函数曲面φ(x ,y)的一个具有相同函数值的同值曲线,通常是{φ=0},称为零水平集,而φ(x ,y)称为水平集函数。这样曲线的运动就转化为高维函数曲面的运动,而每一时刻曲线的位置由高维函数的零水平集表征。
文献[10]给出的水平集的基本思想是:假设用C(p,t)表示一个沿其法向方向的闭合曲线(interface,又称Front),它可以是二维中的一条闭合曲线(curve),也可以是三维中的一个闭合曲面(Surface)。这样,遵循一定的关系,二维曲线的演化就转换为三维水平集函数曲面的演化。通过截取不同时刻三维空间连续函数曲面的水平层,我们就可以得到当前时刻二维平面的闭合曲线的。位置和形状。水平集的主要思想就是将界面C(p,t)作为零水平集(Zero Level Set,ZLS)引入到高一维的 函数中,用一个关于函数 的水平集 来描述界面C(p,t)的运动状态。
通过比较上面三个文献中关于水平集基本思想的阐述,我们可以直觉上得到关于水平集的基本思想应该是:低维到高维的映射。就是把低维空间上的函数通过水平集的方法来转化为高维空间(如果低维是n,则这里的高维指n+1,和文献[3]相同)。也许这还不够直觉,这里给出一个例子:
这里假设二位平面上的闭合曲线为: ,明显该曲线是二维平面上的一个标准圆。利用上面提到的水平集函数的概念,函数 就是对应常数1的水平集函数,这里维数n=2所以定义的水平集是一个曲线。可能会疑惑,水平集的基本思想是从低维到高维,没有体现,并不是这样,注意,水平集函数 如果你在二维的空间看确实是一个曲线,和原来没有区别,但是你还同样可以在三维的空间看,此时他就是一个圆柱体。不是吗,我们现在把水平集函数做一个简单的修改就会更加的明确,修改后的水平集函数为 ,但这里 ,这个时候就实现了二维到三维的转化。此时,你就可以这样想象了,闭合曲线其实就是三维中的圆柱体经过xoy平面截取的一个曲线,事实上确实是这样。
如果我们接着上面所说的想象,我们把上面例子中的水平集函数 中的z变量变为t,此时水平集函数就为 ,这里其实就是上面文献[10]中提到的C(p,t)。则二维空间的闭合曲线就是我们通过截取不同时刻三维空间连续函数曲面的水平层。再直观的理解可见下图:
x |
y |
|
x |
y |
|
x |
y |
|
T=0 |
T=1 |
T=2 |
图 1
当我们函数中的t取不同的值时,水平集函数对应不同的水平集,三维中的函数就是这样映射到二维的平面中的。也就是将二维中曲线的演化转化为了三维中的曲面的演化,低维变化到了高维,低维中的问题变化到了高维进行求解。