基于Criminisi算法的灰度图像修复系统
项目介绍
本项目实现了著名的Criminisi基于块的图像填补算法(Exemplar-based Inpainting)。该算法的核心思想是利用图像中已知的纹理块来填充受损或缺失区域,通过综合考虑几何结构(等照度线)和局部信息的可信度,确保在大尺度破损修复中能够保持视觉上的连续性,有效避免了传统扩散修复方法常见的模糊现象。
功能特性
- 结构与纹理同步修复:通过优先级机制,确保图像的边缘和轮廓线等几何结构优先被延伸进入受损区,随后进行纹理填充。
- 自适应填充顺序:基于置信度项和数据项动态计算每一轮修复的优先级,自动确定最佳修复顺序。
- 相似性匹配搜索:采用平方误差之和(SSD)准则,在图像已知区域内检索最匹配的源块进行内容迁移。
- 实时进度反馈:修复过程以可视化窗口动态呈现,用户可观察受损边界的收缩和填充过程。
- 自动化测试数据生成:内置合成图像生成器,可模拟条纹背景和几何线条受损的场景。
系统要求
- 运行平台:MATLAB(建议R2016b及以上版本)
- 工具箱要求:Image Processing Toolbox(图像处理工具箱)
算法实现逻辑
程序的执行遵循以下核心迭代流程:
- 初始化阶段:
- 将输入的灰度图像归一化至 [0, 1] 范围。
- 定义掩模(Mask),其中1代表待修复区域,0代表已知区域。
- 初始化置信度矩阵,已知区域的初始置信度设为1,待修复区域设为0。
- 边界识别与优先级计算:
- 使用形态学算子提取待修复区域的边缘(填充前沿)。
- 对边缘上的每个像素点计算优先级 $P(p) = C(p) cdot D(p)$。
-
置信度项 $C(p)$:反映待修复点邻域内已知像素的占比。
-
数据项 $D(p)$:反映图像结构(等照度线)进入边界的强度,通过计算图像梯度的垂直向量与边界法向量的点积获得。
- 最优块搜索与填充:
- 在所有边缘点中选出优先级最高的点作为当前修复中心。
- 在整幅图的已知区域内,通过滑动窗口搜索一个与目标块(仅对比已知像素部分)SSD差值最小的参照块。
- 将该参照块的内容填入目标块中的缺失部分。
- 状态更新:
- 更新被填充区域的置信度,将其设为块中心的置信度值。
- 更新掩模状态,将已填充位置标记为已知。
- 循环执行以上步骤,直到掩模中所有像素被处理完毕。
关键实现细节分析
- 等照度线计算:程序利用梯度函数获取图像在x和y方向的变化率,通过旋转梯度向量90度获得等照度线向量,用于引导结构延伸。
- 法向量推导:通过对掩模局部区域计算梯度来确定待修复边界的法线方向,确保数据项能准确捕捉结构与边界的交角。
- 匹配策略优化:在寻找最佳匹配块时,程序会严格检查搜索窗口,确保作为信源的块内不包含任何待修复像素,以保证修复质量的纯净。
- 边界处理:在块匹配和优先级计算中,程序通过动态计算坐标范围,妥善处理了图像边缘像素越界的问题。
- 合成实验数据:内置函数通过正弦波和余弦波函数叠加生成复杂的条纹背景,并人为添加亮线结构及几何形状(矩形和圆形)的遮盖,用于验证算法对结构和纹理的恢复能力。
使用方法
- 启动MATLAB。
- 将程序文件所在的文件夹设置为当前工作路径。
- 执行主控制程序。
- 程序将自动弹出窗口,左侧显示带白色破损的原始图,中间显示动态修复过程,右侧显示最终修复后的灰度图像。
- 修复完成后,命令行窗口会输出总的迭代次数。