项目介绍
本项目实现了一个基于Chan-Vese(CV)主动轮廓模型与Mumford-Shah变分框架的图像分割系统。该项目利用水平集(Level Set)演化技术,将图像分割问题转化为能量泛函最小化的最优化问题。在分片常数(Piecewise Constant)的假设下,该系统能够通过迭代计算自动提取图像中的目标边缘。
其核心优势在于不需要依赖图像的梯度信息,因此对边界模糊、低对比度以及含有噪声的图像具有极强的鲁棒性。同时,由于采用了高维水平集函数表示演化曲线,系统能够自动处理目标在演化过程中的拓扑结构变化(如合并与分裂)。
功能特性
- 自动拓扑变换处理:采用水平集演化技术,能够自然表达分割目标的合并与分裂,无需由人工干预曲线重组。
- 区域信息驱动:基于全局区域的平均灰度(c1/c2)驱动曲线演化,而非局部梯度,有效应对边缘缺失问题。
- 多项能量约束:集成了长度平滑项(Mu)、面积约束项(Nu)以及区域拟合项,确保分割边界平滑且精确。
- 实时动态可视化:算法执行过程中动态展示水平集曲线的演化轨迹,便于直观观察分割进度。
- 能量演收敛监控:自动计算并绘制迭代过程中的能量泛函收敛曲线,提供数值稳定性参考。
- 完整输出体系:系统不仅提供最终的分割轮廓,还自动生成用于后续处理的二值化掩膜(Mask)。
系统要求
- 运行环境:MATLAB R2016b 或更高版本。
- 依赖工具箱:Image Processing Toolbox(用于图像读取、灰度转换及距离变换等基础操作)。
- 输入格式:支持常见图像格式(如.png, .jpg, .tif),默认包含MATLAB内置示例。
实现逻辑详解
算法的执行流程严格遵循变分法与偏微分方程(PDE)的数值求解框架,具体步骤如下:
- 图像预处理:
系统读取输入图像后,首先将其转换为双精度浮点型并进行归一化处理([0, 1]区间),确保数值计算的稳定性。
- 水平集初始化:
在图像区域内定义初始水平集函数 $phi$。代码默认在图像中心构建一个矩形区域,其中内部设为负值,外部设为正值,形成初始演化界面。
- 正则化近似:
为了使不可微的Heaviside函数和Dirac函数可计算,系统引入了正则化参数 $epsilon$,通过 $atan$ 函数对 Heaviside 阶跃函数进行平滑处理,并计算其导数作为正则化的 Dirac 函数。
- 区域参数估计:
在每一步迭代中,根据当前的水平集函数 $phi$,分别统计 $phi < 0$(内部)和 $phi > 0$(外部)区域的像素平均灰度值 $c_1$ 和 $c_2$。
- 偏微分方程求解:
*
梯度与曲率计算:利用中心差分法配合Neumann边界条件计算水平集函数的梯度,进而求得界面曲率,该项负责控制轮廓的平滑度。
*
演化力合成:结合区域拟合项(图像值与 $c_1, c_2$ 的偏差方差)与曲率平滑项,构建演化速度场。
*
状态更新:采用半隐式梯度下降法更新 $phi$ 的值。
- 能量泛函统计:
同步计算并记录包括长度项、内部拟合项和外部拟合项在内的总能量值,用于评估算法收敛状态。
- 结果输出:
迭代完成后,通过从 $phi$ 中提取零水平截面得到分割曲线,并生成对应的逻辑矩阵作为二值化分割结果。
核心算法与数值架构
- Heaviside 与 Dirac 正则化:
使用 $H(x) = frac{1}{2}(1 + frac{2}{pi}arctan(frac{x}{epsilon}))$ 实现连续化。这种方法保证了在图像全局范围内,水平集函数即便在远离零水平面的地方也能获得演化动力。
- 能量泛函构成:
算法旨在最小化以下能量:
$E = mu cdot Length(C) + nu cdot Area(inside(C)) + lambda_1 int |I-c_1|^2 dx + lambda_2 int |I-c_2|^2 dx$
其中 $mu$ 决定了边界的抗噪能力和圆滑程度。
- 数值平滑技术:
在计算曲率时,为了防止分母为零,引入了极小的正数 $eps$,确保了单位法向量计算的数值稳定性。
- 重初始化机制(可选):
虽然正则化CV模型对 $phi$ 的符号距离特性依赖较低,但系统中包含了一个基于距离变换的重初始化函数,用于在必要时恢复水平集函数的形态,防止其梯度过陡或过缓导致计算崩坏。
使用方法
- 将主程序脚本放置在MATLAB工作路径下。
- 通过修改代码初期的
imread 参数可更换待分割的目标图像。 - 调整模型参数(如
mu 控制平滑度,max_iter 控制迭代次数)以适应不同类型的图像。 - 直接运行程序,系统将弹出两个窗口:
*
全过程演示视窗:展示初始状态、迭代中间态、最终轮廓及二值化结果。
*
能量分析视窗:展示能量随迭代次数下降的曲线,确认算法是否达到稳态。
- 在命令行窗口查看计算输出的内外区域平均灰度等关键数值统计。