基于LBF活动轮廓模型的图像分割与偏差场校正系统
项目简介
本项目是一个在MATLAB环境下开发的图像处理系统,主要实现了一种基于局部二值拟合(Local Binary Fitting, LBF)能量的变分水平集图像分割算法。该系统专门针对医学图像或自然图像中常见的“灰度不均匀”(Intensity Inhomogeneity)或“偏差场”(Bias Field)现象设计。
与传统的全局Chan-Vese模型不同,本项目利用高斯核函数提取局部灰度信息,引导活动轮廓向目标边界演化,从而能够同时实现复杂图像的精确分割和偏差场估计与校正。
功能特性
- 内置演示数据生成:无需外部图像文件,系统运行时自动生成包含圆形、矩形目标以及强烈低频偏差场和高斯噪声的合成图像,方便直接验证算法有效性。
- 局部二值拟合(LBF)机制:通过计算目标像素邻域内的局部拟合中心,克服了全局模型无法处理灰度不均的缺陷。
- 距离正则化水平集演化(DRLSE):引入了距离正则化项,在演化过程中保持水平集函数的符号距离特性,从而避免了传统方法中耗时的重新初始化(Re-initialization)步骤。
- 自动初始化:程序自动在图像中心生成初始轮廓,无需手动干预。
- 高效的数值计算:利用卷积运算加速局部均值和能量项的计算,并使用有限差分法求解偏微分方程。
系统要求
- MATLAB R2016a 或更高版本
- Image Processing Toolbox(图像处理工具箱)
使用方法
- 确保MATLAB当前工作目录为项目所在文件夹。
- 直接运行
main.m 文件。 - 系统将自动弹出窗口,显示原始合成图像及分割演化的中间过程。
详细代码逻辑与实现分析
本项目核心逻辑包含在 main.m 文件中,采用了单一脚本结构以便于理解和调试。以下是代码的具体实现细节分析:
1. 图像获取与预处理模块
代码首先清空环境,随后通过数学公式构建合成图像,而非读取外部文件。
- 偏差场模拟:构建了一个基于二次函数的低频偏差场(Bias Field),中心亮四周暗,模拟光照不均。
- 目标构建:在图像中通过逻辑索引创建了圆形和矩形两个几何目标。
- 图像合成:最终图像由(背景+目标)乘以偏差场,再叠加高斯噪声生成,并进行了[0,1]范围的归一化处理。这确保了输入数据具有LBF模型旨在解决的典型特征。
2. 算法参数配置
代码集中定义了演化的控制参数:
- 演化控制:定义了外循环和内循环次数,以及时间步长(delta_t)。
- LBF权重:
lambda1 和 lambda2 分别控制轮廓内部和外部的能量权重。 - 正则化权重:
mu 用于控制距离正则化项的强度,nu 控制长度项(即轮廓光滑度),sigma 定义了高斯核的尺度,决定了“局部”信息的范围。
3. 水平集函数初始化
实现了全自动的初始化策略:
- 创建一个与图像等大的矩阵,背景赋值为常数
c0。 - 在图像中心定义一个矩形区域,将其赋值为
-c0。 - 这种阶梯函数作为初始水平集函数(LSF),其零水平集即为初始轮廓。
- 同时预先生成了指定标准差
sigma 的高斯卷积核 K,用于后续的局部信息提取。
4. 核心演化模块(LBF 能量最小化)
这是代码中最关键的部分,在一个循环结构中迭代更新水平集函数
u。
A. 几何特征与正则化项计算
- 梯度计算:使用
gradient 函数计算水平集函数的梯度及其模长。 - 距离正则化项:代码实现了一种简化的距离正则化策略(类似DRLSE模型)。通过计算势函数的梯度发散度,迫使水平集函数的梯度模长在演化过程中保持在1附近,从而维持符号距离属性。
* 逻辑上计算了扩散算子
dp_reg。
* 通过散度公式计算
distRegTerm。
- 长度项(曲率流):计算梯度的归一化向量场,并求其散度得到曲率
curvature。该项用于保持演化曲线的光滑,平滑噪声造成的锯齿边界。
B. LBF 数据项计算
代码利用卷积操作高效计算局部能量项,避免了逐点循环:
- 平滑 Heaviside 函数:使用反正切函数近似Heaviside函数,用于区分轮廓内外区域。
- 局部均值计算(f1, f2):这是LBF模型的核心。通过高斯核
K 对图像 Img 和 Heaviside 函数 Hu 进行加权卷积,计算出每个像素点邻域内的“内部局部均值” f1 和“外部局部均值” f2。 - 能量梯度项(s1, s2):根据 LBF 能量泛函对水平集函数的变分导数推导,计算数据项的梯度。
* 代码利用数学展开式 $(I - f)^2 = I^2 - 2If + f^2$ 的原理,结合卷积运算,分别计算了轮廓内(s1)和轮廓外(s2)的局部拟合误差积分。
- 数据项汇总:将
s1 和 s2 根据权重 lambda1 和 lambda2 结合,形成驱动轮廓运动的主要驱动力 dataTerm。
C. 演化方程组装
最后,代码将距离正则化项、长度项(曲率项)和LBF数据项组合,乘以Dirac函数(代码中使用梯度的近似形式或直接更新),得到水平集函数的时间导数
delta_u,并进行迭代更新。
(注:最终演化过程通过MATLAB的绘图功能,利用 contour 函数在原图上实时绘制红色的零水平集轮廓,直观展示分割进度的动态变化。)