计算机视觉之图像分割——水平集方法_ACWE2001
-
-
- 利用一个简化的案例来介绍能量函数*
-
- 实际上它是Mumford-Shah模型的一个特例*
- 将曲线以水平集函数的形式表达出来*
- 利用变分法推导出欧拉-拉格朗日方程*
- 采用迭代方法求解相应的偏微分方程*
- 提出该算法的具体实现步骤*
- 完成问题描述并进行理论分析
这篇博客讨论的是2001年发布的一篇论文Active Contours Without Edges,其作者是Tony Chan。该论文探讨了一种改进型的active contour图像分割方法或者说是轮廓检测技术。作者首先对现有active contour/snakes模型存在的缺陷进行了分析。他指出,在现有的相关模型中,能量函数中的图像能量主要依据图像梯度计算得出,并通过梯度达到最大值(即边缘)来实现曲线演化过程中的停止效果。然而这种方法存在一个局限性:无法有效检测到平滑程度较高的边缘特征。基于此缺陷,在论文中作者提出了一种新的停止曲线演化策略的方法:采用新的停止曲线演化策略的方法是基于Mumford-Shah分割技术原理进行改进的
一个简单的例子引入能量函数
该作者采用了一个简明扼要的例子来介绍自己的模型。随后让我们接下来详细探讨这个例子以便更好地理解其工作原理。因此能够直观地感受到作者定义的能量函数在取得极小值时其对应的曲线正是我们期望得到的那个轮廓线。首先说明一下下面将要用到的数学符号:
- \Omega: 在\mathbb{R}^2中定义为有界的开区域。
- u_0: 由\Omega\rightarrow\mathbb{R}定义的一个函数(其中f(u)=u_0(u)代表图像)。
- 曲线族: 由区间[0,1]到平面空间的一组连续映射构成。
- \omega: 是一个开放区域,并且该曲线集合C是其边界(即C=∂ω)。
假设有一张图片,在其中分为两个区域:第一个区域内所有像素的取值均为u_0^i;第二个区域内所有像素的取值均为u_0^o。我们的目标是提取区域一的边界轮廓。为此需要考虑下面所述的"拟合"项(该参数的作用在于控制拟合过程以停止于物体边缘):
其中常数 c_1 和 c_2 分别对应于曲线 C 内部像素点和外部像素点各自的均值。在刚才介绍的例子中可以看出,在这种特殊情况下能够使该能量函数达到极小的具体轮廓即为我们所期望得到的第一区域边界线这一情况此时的能量值为零(需要注意的是如果尝试其他类型的轮廓线如并非第一区域边界的轮廓线则其对应的能量函数数值会大于零)。
由此可知 作者所提出的模型本质上就是上述的能量函数定义为基础在此基础上还附加了对曲线长度以及其内部包围区域面积等因素进行约束以确保优化过程的有效性和准确性。
其中,在满足μ≥0且ν≥0的前提下,并且λ₁与λ₂均大于零的情况下
其实是Mumford-Shah的特例
作者在文章中阐述了能量函数(1)作为Mumford-Shah的一个特例,并且似乎只是用来说明:由于Mumford-Shah具有极小值特性,则方程(1)自然也具备相应的极小值。
用水平集函数表示曲线
如何解决极小值问题?作者将能量函数E_c(曲线C)表示为φ的泛函形式,并进一步求解水平集函数φ。
在应用替换公式(1)时,需要引入两个辅助符号H和Δ型符号来辅助计算。
那么现在可以把公式(1)重新写成:
和 现在通过 求出:
变分法得到欧拉-拉格朗日公式
对于处理泛函极值问题而言,我们可导出欧拉-拉格朗日方程;本质上它就是一个属于偏微分方程领域的关键数学模型。
其中单位向量\vec{n}表示区域\Omega的外法线方向。
当参数ε趋近于零时,在理论分析中发现数值解会分别收敛至H及δ₀这两个极限情况。那么采取这样的策略的主要原因是什么呢?这是因为传统的数值模型往往假设基函数在大部分区域上均为零(即基函数几乎处处为零),这会导致无法直接求解上述欧拉-拉格朗日方程。然而引入δ_ε后其支集扩展至整个实数轴ℝ上,在这种情况下无论初始曲线如何设定都能够获得全局最优解的同时还能有效识别内部边界轮廓。(对于该方法背后的物理意义尚不完全清楚)
到此为止,已经完成了涉及各种数学知识的相关理论部分. 现在需要具体而言地解决的是如何求解这个偏微分方程.
迭代法解偏微分方程
在本节中采用迭代法求解上述偏微分方程。为了求解该偏微分方程问题,在后续章节将详细阐述其离散化过程。对于离散化方法的具体实现细节,请读者自行查阅相关文献。经过一系列复杂计算后,则可获得水平集函数的显式迭代表达式。
算法
将上述内容归纳总结为四个简明扼要的步骤(其中无需重新初始化)
- 随机设定初始值\phi^0=\phi_0及迭代步数n=0
- 通过公式(4)计算两组均值并存储
- 运用迭代公式(6)更新参数\phi^{n+1}
- 若需继续迭代,则可重新设定初始值\phi^0=\phi_0及n=0
- 判断系统是否收敛或进入循环状态
我分享了一份基于Python语言实现的代码包,并附上了该资源的具体链接:https://github.com/VictoriaW1/ACWE。未来计划定期对这份代码包进行优化工作,并具体来说,在每次更新后会对数据进行平滑处理以提升稳定性。
问题
原因是什么?会不会导致\phi=0部分上的不连续点在整个图像中分布?
