水平集Chan-Vese模型的变分法梯度下降

  • Post author:
  • Post category:其他


回顾:

在之前的水平集方法中,我们最后得出了一个能量泛函
E
如下:

E=\mu \iint_{}^{} \left | \bigtriangledown H(\o (x,y) \right |dxdy+\nu \iint_{}^{} H(\o (x,y)dxdy+ \lambda 1\iint_{}^{} \left | I(x,y)-c1 \right |^2H(\o )dxdy + \lambda 2\iint_{}^{} \left | I(x,y)-c2 \right |^2(1-H(\o ))dxdy

不要出现误区,我们的目的是得到水平集函数
\phi (x,y)
,使整体能量泛函
E
最小化 ,这里水平集函数
\phi (x,y)
的初始值是给定的,因为要有一个差不多的初始轮廓,初始轮廓是一个面就是
\phi (x,y)
的初始值 (形式是一个和图像一样尺寸的矩阵,轮廓内数值为 1,轮廓外为 -1),就是要通过

变分法梯度下降

,一点一点的调整,最后得到一个个
\phi (x,y)
,使能量泛函
E
越来越趋近于极值 .(


变分法梯度下降推导过程在这里


再使用变分方程之前,要先了解几点:

关于泛函
E
中的  :
\left | \bigtriangledown H(\o (x,y) \right | = \sqrt{(\delta (\phi )*\phi _{x})^{2}+(\delta (\phi )*\phi _{y})^{2}}=[(\delta (\phi )*\phi _{x})^{2}+(\delta (\phi )*\phi _{y})^{2})]^{\frac{1}{2}}

变分方程公式:
\frac{\partial \phi }{\partial t}=\large \frac{\partial F}{\partial u}-\frac{d}{dx}(\frac{\partial F}{\partial {u}'}) = 0

但是我们发现这里的
\large u=\phi
也就是水平集函数,但
\large \phi =\phi (x,y)
参数是两个,所以我们使用的变分方程应该为:

\large \large \frac{\partial \phi }{\partial t} =\frac{\partial F}{\partial u}-\frac{d}{dx}(\frac{\partial F}{\partial {u_{x}}'})-\frac{d}{dy}(\frac{\partial F}{\partial {u_{y}}'}) = 0

在泛函
E
中 :

F = \mu \left | \bigtriangledown H(\phi (x,y)) \right |+\upsilon H(\phi (x,y))+\lambda 1\left | I(x,y)-c1 \right |^2 H(\phi )+\lambda 2\left | I(x,y)-c2 \right |^2(1-H(\phi ))

\large u=\phi

利用变分公式,先算出
\frac{\partial F}{\partial u} = \frac{\partial F}{\partial \phi }

\frac{\partial F}{\partial \phi } = \upsilon \delta (\phi )+\lambda 1\left |I(x,y)-c1 \right |^2\delta (x)-\lambda 2\left |I(x,y)-c2 \right |^2\delta (x)

\frac{d}{dx}(\frac{\partial F}{\partial {u_{x}}'})+\frac{d}{dy}(\frac{\partial F}{\partial {u_{y}}'})=\frac{d}{dx}[\frac{\delta (\phi )\phi _{x}}{\sqrt{(\delta (\phi )\phi _{x})^2+(\delta (\phi )\phi _{y})^2}}]+\frac{d}{dy}[\frac{\delta (\phi )\phi _{y}}{\sqrt{(\delta (\phi )\phi _{x})^2+(\delta (\phi )\phi _{y})^2}}]

所以 :

\large \frac{\partial \phi }{\partial t}=\frac{\partial F}{\partial \phi }-\frac{d}{dx}(\frac{\partial F}{\partial {u_{x}}'})-\frac{d}{dy}(\frac{\partial F}{\partial {u_{y}}'})= \upsilon \delta (\phi )+\lambda 1\left |I(x,y)-c1 \right |^2\delta (x)-\lambda 2\left |I(x,y)-c2 \right |^2\delta (x)-\mu (\frac{d}{dx}[\frac{\delta (\phi )\phi _{x}}{\sqrt{(\delta (\phi )\phi _{x})^2+(\delta (\phi )\phi _{y})^2}}]+\frac{d}{dy}[\frac{\delta (\phi )\phi _{y}}{\sqrt{(\delta (\phi )\phi _{x})^2+(\delta (\phi )\phi _{y})^2}}])

上式中:

\frac{d}{dx}[\frac{\phi _{x}}{\sqrt{(\delta (\phi )\phi _{x})^2+(\delta (\phi )\phi _{y})^2}}]+\frac{d}{dy}[\frac{\phi _{y}}{\sqrt{(\delta (\phi )\phi _{x})^2+(\delta (\phi )\phi _{y})^2}}]=div \frac{\bigtriangledown \phi }{\left | \bigtriangledown \phi \right |}


所以完整的Chan-Vese模型的变分法梯度下降公式为:

\frac{\partial F}{\partial \phi }-\frac{d}{dx}(\frac{\partial F}{\partial {u_{x}}'})-\frac{d}{dy}(\frac{\partial F}{\partial {u_{y}}'})

=\upsilon \delta (\phi )+\lambda 1\left |I(x,y)-c1 \right |^2\delta (\phi )-\lambda 2\left |I(x,y)-c2 \right |^2\delta (\phi )-div \frac{\bigtriangledown \phi }{\left | \bigtriangledown \phi \right |}\delta (\phi )

=\delta (\phi )[\upsilon +\lambda 1\left |I(x,y)-c1 \right |^2-\lambda 2\left |I(x,y)-c2 \right |^2-div \frac{\bigtriangledown \phi }{\left | \bigtriangledown \phi \right |}]

=\delta (\phi )[-\upsilon -\lambda 1\left |I(x,y)-c1 \right |^2+\lambda 2\left |I(x,y)-c2 \right |^2+div \frac{\bigtriangledown \phi }{\left | \bigtriangledown \phi \right |}]

应用方法与总结:

我们费了半天劲,求出了一个 :

\large \frac{\partial \phi }{\partial t}=\delta (\phi )[-\upsilon -\lambda 1\left |I(x,y)-c1 \right |^2+\lambda 2\left |I(x,y)-c2 \right |^2+div \frac{\bigtriangledown \phi }{\left | \bigtriangledown \phi \right |}]=0

求出来这个差不多是
0
的式子有什么意义呢 ?我们其实就是用这个差不多为
0
的式子做梯度下降,一开始我们有一个和图像大小一样的水平集函数
\phi (x,y)
,我们设置一个偏小的步长,每次都让水平集函数(就是一个矩阵)加上这个步长 *
\small \frac{\partial \phi }{\partial t}
,经过一次次的迭代计算梯度下降,使得原本的水平集函数中的数值开始慢慢变化,逐渐演化到
\small 0
水平面上方,最后取大于
\small 0
的作为曲线的轮廓 (个人理解,若有错误请及时纠正!)



版权声明:本文为qq_37668179原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。