Kevin Murphy CRF条件随机场 MATLAB工具包 - 图像去噪演示
项目简介
本项目是一个基于Kevin Murphy经典CRF工具包思想实现的MATLAB工程,专门用于演示和应用条件随机场(Conditional Random Fields, CRF)模型在计算机视觉领域的应用。项目核心构建了一个2D网格结构的CRF模型(类Ising模型),完整实现了从数据生成、模型参数学习到概率推断的机器学习全流程。
该实现专注于像素级的二分类问题(图像去噪),通过结合一元势函数(观测信息)和二元势函数(邻域空间一致性),有效地从含噪图像中恢复原始结构。代码结构旨在教学演示与学术研究,展示了在存在环路的图结构中如何进行高效的近似推断。
核心功能与特性
1. 2D网格CRF模型构建
- 实现了基于网格(Grid)拓扑结构的马尔可夫随机场。
- 采用二值状态空间({-1, 1}),适用于二值图像处理。
- 构建了包含节点势(Node Potentials)和边缘势(Edge Potentials)的概率图模型。
2. 参数学习(训练阶段)
- 算法:伪似然估计(Pseudo-Likelihood, PL)。
- 优化方法:基于梯度的数值优化算法(模拟L-BFGS/梯度下降行为)。
- 学习目标:自动学习两个关键标量参数:
*
一元权重 (w_unary):控制观测像素对最终分类的影响权重。
*
二元权重 (w_pairwise):控制相邻像素间平滑度/一致性的权重。
3. 概率推断(测试阶段)
- 算法:循环置信度传播(Loopy Belief Propagation, LBP)。
- 消息传递机制:实现了Sum-Product算法,在概率域中进行消息更新。
- 稳定性控制:引入了阻尼系数(Damping factor = 0.5)以抑制有环图推断中的震荡,保证收敛性。
- 四向传递:详细实现了上、下、左、右四个方向的消息交互逻辑。
4. 结果评估与可视化
- 提供最大后验概率(MAP)解码,输出最终修复图像。
- 实时计算并对比噪声图像准确率与CRF修复后的准确率。
- 多视图可视化:包含原始真值图、噪声图、边缘概率热力图以及CRF推断结果图。
详细实现逻辑
项目中主要脚本的执行流程如下:
数据准备与预处理
程序首先固定随机种子以保证结果可复现。通过内置生成器创建64x64像素的合成几何图像(圆形),并添加椒盐噪声(约15%翻转率)。为了适配Ising模型计算,将图像数据从 {0, 1} 转换为 {-1, 1} 格式,分别作为观测向量(x)和标签向量(y)。
模型参数训练 (Pseudo-Likelihood)
采用伪似然最大化策略替代复杂的全局似然计算。
- 局部马尔可夫性:针对每个像素,仅计算其在给定上下左右邻居状态下的条件概率。
- 梯度计算:计算负伪似然损失(NLL)及其关于
w_unary 和 w_pairwise 的梯度。梯度计算基于“观测特征值”与“模型期望特征值”的差值。 - 参数更新:通过迭代循环,利用计算出的梯度方向更新参数权重,使模型能够拟合当前数据的统计特性。
近似推断 (Loopy Belief Propagation)
使用训练好的参数在含有噪声的观测图上建立势函数:
- 初始化:建立全零或全一的消息矩阵,维度涵盖行、列、4个传播方向及2种状态。
- 构建势函数:
*
一元势 (Phi):基于观测图像和
w_unary 计算,通过指数函数转换。
*
二元势 (Psi):基于
w_pairwise 构建兼容性矩阵,倾向于使相邻像素保持相同状态。
- 消息迭代更新:
* 在设定的迭代次数内(如30次),并行或遍历更新每个节点向四个方向发出的消息。
* 计算规则遵循:发出消息 = (当前节点一元势) × (除目标方向外其他三个方向输入消息的乘积) × (边缘兼容性矩阵)。
* 每次迭代应用阻尼更新策略与归一化操作,防止数值溢出和不收敛。
解码与分析
推断结束后,结合一元势和所有邻居传入的消息计算每个节点的最终置信度(Belief)。
- 边缘概率:归一化置信度得到每个像素属于前景或背景的概率分布。
- MAP估计:根据概率图,以0.5为阈值进行二值化,得到最终的去噪图像。
- 精度计算:逐像素对比修复结果与Ground Truth,量化算法性能。
系统要求
- 软件环境:MATLAB (推荐 R2016b 或更高版本)
- 工具箱:标准配置即可,无需额外的图像处理或深度学习工具箱(主要依赖基础矩阵运算)。
使用方法
- 将项目所有文件下载至本地目录。
- 打开 MATLAB 并将工作路径切换至项目文件夹。
- 直接运行主程序脚本。
- 程序将在命令行输出训练过程中的迭代损失、梯度模长以及最终学习到的参数。
- 运行结束后,会弹出一个包含四幅子图的窗口,分别展示原始数据、噪声输入、概率分布和修复结果。