💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
💥1 概述
文献来源:
编辑
本文提出了一种基于区域的主动轮廓模型,采用变分水平集形式用于图像分割。在我们的模型中,局部图像强度由具有不同均值和方差的高斯分布描述。我们定义了一个局部高斯分布拟合能量,其中包含一个水平集函数和局部均值和方差作为变量。能量最小化通过交替进行水平集演化和估计局部强度均值和方差的迭代过程来实现。局部强度的均值和方差被视为空间变化的函数,以处理不均匀强度和空间变化强度的噪声(例如乘法噪声)。此外,我们的模型能够区分具有相似强度均值但不同方差的区域。通过将我们的方法应用于带有噪声和纹理的图像,可以区分不同区域的纹理模式和局部强度方差。比较实验证明了所提出方法的优点。
图像分割是许多图像处理和计算机视觉应用中的基础任务。由于存在噪声、低对比度和强度不均匀性,在大多数应用中仍然是一个困难的问题。特别是强度不均匀性对经典分割技术如边缘检测和阈值处理构成了重要挑战。
图像分割在过去几十年中得到了广泛研究。一类被广泛使用且经过充分验证的方法是主动轮廓模型,该模型在图像分割中取得了令人满意的结果。这些模型能够实现亚像素精度,并提供闭合且平滑的轮廓/表面。现有的主动轮廓模型大致可分为两类:基于边缘的模型和基于区域的模型。基于边缘的模型利用图像梯度来指导曲线演化,通常对噪声和弱边缘敏感。而基于区域的模型通常通过使用特定的区域描述符(如强度、颜色、纹理或运动)来识别感兴趣的每个区域,从而引导轮廓的移动。因此,基于区域的模型通常在存在图像噪声和弱对象边界时表现更好。此外,基于区域的模型对于初始轮廓位置的敏感性较基于边缘的模型要小。详细文章见第4部分。
一、主动轮廓模型与变分水平集方法的基础
1. 主动轮廓模型的核心原理
主动轮廓模型(Active Contour Model, ACM)通过构造能量泛函驱动轮廓曲线演化,最终收敛至目标边界。其优势在于能生成连续光滑的闭合边界,对噪声鲁棒性强。根据能量函数构造方式,可分为两类:
- 基于边缘的模型:依赖图像梯度检测边界,对初始位置敏感且易漏检弱边缘。
- 基于区域的模型:利用区域统计信息(如均值、方差、概率分布)驱动轮廓演化,能处理弱边界图像,对初始位置和噪声更稳定。例如Chan-Vese(CV)模型假设图像灰度同质,通过最小化前景/背景的灰度均值差异实现分割。
2. 变分水平集方法的优势
传统参数化主动轮廓难以处理拓扑变化(如分裂/合并),而几何主动轮廓模型通过水平集方法(Level Set Method)将曲线嵌入高维函数的零水平集,天然支持拓扑结构动态调整。其变分形式将能量最小化转化为偏微分方程(PDE)求解:
- 能量泛函构成:通常包含数据拟合项(驱动轮廓向目标边界移动)、长度正则项(保证轮廓光滑)及水平集约束项(维持函数为符号距离函数,避免重新初始化)。
- 通用表达式:
其中 为水平集函数, 依赖图像数据, 惩罚轮廓长度, 约束 的几何性质。
二、局部高斯分布拟合能量(LGDF)的提出与创新
1. 解决灰度不均匀性的挑战
自然图像常呈现灰度非均匀性(如医学影像中的强度渐变),传统全局区域模型(如CV)失效。LGDF模型的核心创新在于:
- 局部统计建模:假设每个像素邻域内的强度服从独立高斯分布 ,其中均值 和方差 为空间变化参数。
- 能量泛函设计:定义局部高斯分布拟合能量,迫使轮廓将不同统计特性的区域分离:
其中 为截断高斯核函数,控制邻域范围。
2. 与现有模型的对比优势
| 模型类型 | 优势 | 局限性 |
| CV模型 | 全局同质假设,计算简单 | 无法处理灰度不均匀 |
| LBF模型 | 引入局部均值拟合,抗不均匀性 | 忽略方差信息 |
| LGDF模型 | 同时拟合局部均值与方差,可区分灰度相似但纹理不同的区域 | 计算复杂度较高 |
例:肝脏CT图像中,肿瘤与正常组织可能均值相近但方差不同,LGDF能准确分割此类目标。
三、LGDF驱动活动轮廓的变分水平集实现
1. 能量泛函的完整构成
LGDF模型的变分水平集框架包含三部分能量:
- 数据拟合项() :量化轮廓内外像素与局部高斯分布的匹配度。
- 长度正则项() :平滑轮廓,抑制噪声干扰:
- 水平集约束项() :保持 为符号距离函数,避免重新初始化:
2. 最小化能量的迭代算法
通过变分法导出梯度下降流方程,交替更新水平集函数与局部统计参数:
\frac{\partial \phi}{\partial t} = -\delta(\phi) \left[ \lambda_1 (I - \mu_{\text{in}})^2 - \lambda_2 (I - \mu_{\text{out}})^2 + \mu \operatorname{div}\left(\frac{\nabla \phi}{|\nabla \phi|}\right) \right] + \nu \left( \nabla^2 \phi - \operatorname{div}\left(\frac{\nabla \phi}{|\nabla \phi|}\right) \right)
迭代步骤:
- 初始化水平集函数 。
- 固定 ,更新局部参数:计算邻域内 , , , 。
- 固定参数,更新 :求解PDE演化轮廓。
- 重复直至能量收敛。
3. 关键实现技术
- 数值求解:采用半隐式差分格式离散PDE,保证稳定性。
- 加速策略:结合窄带技术(Narrow Band)仅更新零水平集附近区域,减少计算量。
- 多相扩展:使用 个水平集函数划分 个区域,支持多目标分割。
四、性能评估与应用场景
1. 优势验证
- 抗灰度不均匀性:成功分割脑MR图像中强度渐变的灰质/白质。
- 纹理区分能力:对相似均值但方差不同的区域(如肝脏CT中的肿瘤与组织)分割精度提升20%以上。
- 噪声鲁棒性:在30%高斯噪声下仍保持连续边界,优于边缘驱动模型。
2. 局限性及改进方向
| 问题 | 解决方案 |
| 计算效率低 | 引入GPU并行计算 |
| 对初始轮廓敏感 | 结合区域生长法预分割 |
| 多分散目标漏分割 | 融合全局概率密度约束 |
3. 典型应用案例
- 医学影像:
- 肝脏CT肿瘤分割:通过局部方差差异定位病灶。
- 脑MR多组织分割:扩展多相LGDF模型划分灰质、白质、脑脊液。
- 特殊场景:
- 声呐图像分割:克服海底强度不均匀性与散斑噪声。
- 极化SAR地物分类:结合Haralick纹理特征增强区分度。
五、研究趋势与展望
- 模型融合:
- 局部LGDF与全局模型(如CV)结合,平衡局部细节与全局一致性。
- 引入模糊聚类能量提升噪声鲁棒性。
- 计算优化:
- 基于机器学习的参数自适应调节。
- 实时交互式分割(如GPU加速)。
- 跨模态拓展:
- 多光谱/高维图像分割(如三维重建中的体数据分割)。
- 动态序列图像目标跟踪。
总结:LGDF驱动的活动轮廓模型通过局部统计建模突破了传统方法对灰度均匀性的依赖,其变分水平集实现兼顾了拓扑灵活性与边界精度。未来研究需进一步优化计算效率、增强模型通用性,并在多模态影像分析中深化应用。
📚2 运行结果
2.1 测试1
编辑
编辑
2.2 测试2
编辑
编辑
2.3 测试3
编辑
编辑
2.4 测试4
编辑
编辑
2.5 测试5
编辑
编辑
部分代码:
Img=imread('5.bmp');
Img = double(Img(:,:,1));
NumIter = 250; %iterations
timestep=0.1; %time step
mu=0.1/timestep;% level set regularization term, please refer to "Chunming Li and et al. Level Set Evolution Without Re-initialization: A New Variational Formulation, CVPR 2005"
sigma = 5;%size of kernel
epsilon = 1;
c0 = 2; % the constant value
lambda1=1.0;%outer weight, please refer to "Chunming Li and et al, Minimization of Region-Scalable Fitting Energy for Image Segmentation, IEEE Trans. Image Processing, vol. 17 (10), pp. 1940-1949, 2008"
lambda2=1.0;%inner weight
%if lambda1>lambda2; tend to inflate
%if lambda1<lambda2; tend to deflate
nu = 0.001*255*255;%length term
alf = 20;%data term weight
figure,imagesc(uint8(Img),[0 255]),colormap(gray),axis off;axis equal
[Height Wide] = size(Img);
[xx yy] = meshgrid(1:Wide,1:Height);
phi = (sqrt(((xx - 40).^2 + (yy - 50).^2 )) - 15);
phi = sign(phi).*c0;
Ksigma=fspecial('gaussian',round(2*sigma)*2 + 1,sigma); % kernel
ONE=ones(size(Img));
KONE = imfilter(ONE,Ksigma,'replicate');
KI = imfilter(Img,Ksigma,'replicate');
KI2 = imfilter(Img.^2,Ksigma,'replicate');
figure,imagesc(uint8(Img),[0 255]),colormap(gray),axis off;axis equal,
hold on,[c,h] = contour(phi,[0 0],'r','linewidth',1); hold off
pause(0.5)
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献