基于偏微分方程的经典三维水平集图像分割与曲面演化系统
项目介绍
本系统是一个基于偏微分方程(PDE)的经典三维水平集(Level Set)演化框架。它利用高维函数的零水平面来隐式表达三维动态边界,能够自动处理演化过程中的拓扑结构变化(如合并与分裂)。系统核心集成了经典的Chan-Vese(CV)无边缘主动轮廓模型,适用于处理边界模糊、噪声明显的图像数据。该项目通过模拟三维体数据的分割过程,展示了水平集从初始状态向目标边缘收敛的完整数值求解流程。
功能特性
- 隐式曲面演化:采用三维标量场表达几何界面,支持复杂几何形状的边界追踪。
- Chan-Vese模型:基于区域全局信息的能量泛函构建,对弱边缘及噪声具有较强的鲁棒性。
- 数值稳定性保障:内置符号距离函数(SDF)重初始化机制,防止水平集函数在演化中过陡或过平缓。
- 动态实时可视化:支持演化过程中的二维切片动态展示与三维等值面实时渲染。
- 结果分析:输出能量收敛曲线,提供最终分割目标的三维模型提取(基于Marching Cubes算法)。
系统实现逻辑
系统的主程序运行流程严格遵循偏微分方程的数值求解步骤:
- 环境初始化与模拟数据生成:系统首先定义计算网格,并生成一个带有高斯噪声的三维椭球体模拟目标,作为待分割的原始图像数据。
- 初始水平集配置:在目标区域中心初始化一个球形的种子点,通过计算点到球心的欧氏距离生成初始水平集函数。
- 循环迭代演化:
- 计算正则化项:使用平滑后的Dirac和Heaviside函数,确保数值计算在边界附近的连续性。
- 提取区域特征:计算当前演化曲面内部和外部的平均灰度值(c1与c2)。
- 计算曲率能量:通过计算水平集函数的散度(Divergence)来获取其平均曲率,用于平滑边界。
- 求解演化方程:结合内部/外部灰度差项(数据项)和曲率项(平滑项),利用数值梯度下降法更新水平集函数。
- 符号距离项修复:定期调用重初始化函数,确保演化中的函数始终保持符号距离属性。
- 可视化与导出:每隔固定步数展示中间演化状态,并在结束后利用等值面提取算法展示最终的三维三维重构效果。
核心算法与技术细节分析
- 图像能项计算:采用了L2范数能量泛函。代码中通过phi的正负值筛选出区域索引,分别计算c1(目标均值)和c2(背景均值)。这两个参数直接决定了演化界面的驱动力方向。
- 曲率计算:系统通过计算phi的梯度场,并对其进行单位化处理,得到单位法向量场。通过对法向量求散度(nxx + nyy + nzz),获得了曲面的平均曲率。这一步是保证分割边界光滑的关键。
- 数值离散格式:采用了时间步长显式迭代。为了保证稳定性,代码中使用了极小值eps防止分母为零,并结合正则化参数epsilon来控制Dirac函数的支撑集范围。
- 符号距离函数重初始化:这是一种基于二值掩膜距离变换的快速实现方案。算法通过bwdist函数分别计算每一个体素点到当前零水平面边界的内部距离和外部距离,并进行差值重构。相比于传统的PDE重初始化方程,这种方法计算速度更快且结果极其准确。
- 三维可视化技术:采用了Marching Cubes(移动立方体)算法实现的isosurface函数,将隐式的零水平面转化为显式的三角网格数据(vertices & faces),并配合Gouraud/Phong光照模型进行三维渲染。
使用方法
- 启动MATLAB环境。
- 打开主程序文件。
- 直接运行脚本,系统将自动生成模拟三维空间并启动迭代。
- 演化过程中左侧窗口实时展示中心Z轴切片的边界运动,右侧窗口动态渲染三维曲面的扩张或收缩。
- 迭代完成后,观察能量收敛曲线以确认算法是否达到稳定状态,并查看最终生成的三维分割模型。
- 用户可以通过调整参数设置中的iterations(迭代次数)、mu(平滑权重)和time_step(步长)来针对不同的体数据进行优化调优。
系统环境要求
- 软件环境:MATLAB R2016b 或更高版本。
- 必备工具箱:Image Processing Toolbox(用于bwdist等距离变换运算)。
- 硬件建议:由于三维矩阵运算对内存有一定要求,建议配置8GB以上内存。