基于SAD算法的图像立体匹配系统
项目介绍
本项目是一个基于MATLAB环境开发的双目视觉立体匹配系统。其核心目标是利用绝对差值和(Sum of Absolute Differences, SAD)算法,对已经过极线校正的立体图像对进行像素级匹配,从而计算出稠密视差图(Disparity Map)。
项目专注于双目立体匹配的基础原理实现。系统内置了合成数据生成功能,能够自动生成带有Ground Truth(真实视差)的测试图像,无需外部数据即可直接运行验证。通过滑动窗口机制配合赢家通吃(WTA)策略,算法能够有效计算深度信息,并提供了从中值滤波优化到3D表面重建的完整可视化分析流程。
功能特性
- SAD立体匹配核心:实现了经典的基于区域的SAD匹配算法,通过计算左右视图窗口的灰度差绝对值之和来评估相似度。
- WTA策略:采用赢家通吃(Winner-Takes-All)原则,在视差搜索范围内自动选取SAD值最小的偏移量作为最终视差。
- 自包含合成数据生成:代码内部集成了一个合成数据生成器,可构建包含随机纹理背景和不同深度前景物体的立体图像对,无需外部数据集即可运行演示。
- 图像边界处理:使用边缘复制填充(Replicate Padding)技术处理图像边缘,确保滑动窗口在图像边界处也能正常计算。
- 视差优化:集成中值滤波(Median Filter)后处理模块,有效去除SAD算法产生的椒盐噪声和误匹配点。
- 多维结果可视化:提供包括原始输入对比、真实视差图、SAD原始结果、滤波后结果以及3D深度表面重建在内的全方位展示。
- 零外部依赖:仅使用MATLAB原生函数库,无需安装额外的计算机视觉工具箱即可运行。
系统要求
- MATLAB R2016a 或更高版本(代码使用基础矩阵运算及图像处理函数)。
- 内存建议:4GB及以上(取决于处理图像的分辨率)。
算法原理与实现细节
本项目的主要脚本通过以下步骤实现了完整的立体匹配流程:
1. 图像获取与预处理
程序首先调用内部辅助函数
createSyntheticStereoData 生成一对分辨率为 300x400 的合成立体图像。
- 数据内容:包含随机噪声背景和两个不同深度的矩形前景物体,并添加了高斯噪声模拟真实环境干扰。
- 灰度转换:虽然合成数据默认为灰度,代码仍包含逻辑判断,若输入为彩色图像则自动转换为灰度图,确保SAD计算的一致性。
2. 参数初始化与边界填充
- 视差范围:预设视差搜索范围为 [0, 30],覆盖了合成数据中前景物体的视差值(分别为10和25)。
- 匹配窗口:设定窗口大小为 9x9(必须为奇数),用于局部区域特征匹配。
- Padding处理:利用
padarray 函数对左、右视图进行边缘复制填充,填充宽度为窗口半径,从而避免了滑动窗口在遍历图像边缘时发生数组越界错误。
3. SAD 匹配与 WTA 策略(核心逻辑)
这是本项目的核心计算部分,代码通过三层嵌套循环显式地实现了匹配逻辑:
- 像素遍历:遍历图像的每一个像素点 (r, c)。
- 窗口提取:以当前像素为中心,在左图填充后的矩阵中提取 9x9 的模板块。
- 视差搜索:在预设的视差范围 [dMin, dMax] 内循环。
* 根据极线约束,计算右图对应的列坐标 $c_R = c - d$。
* 提取右图对应的候选窗口块。
*
计算SAD:计算左图模板块与右图候选块之间像素差绝对值的总和:$SAD = sum |I_{Left} - I_{Right}|$。
*
WTA决策:在当前像素的所有候选视差中,记录最小的SAD值及其对应的视差 $d$,并将其存入视差图
dispMap。
4. 后处理优化
原始的SAD视差图通常包含由于纹理重复或噪声引起的误匹配点。代码使用
medfilt2 函数对视差图进行 5x5 的二维中值滤波。这一步利用邻域像素的中值替代当前值,能有效平滑视差图并保留边缘信息。
5. 结果可视化
程序最终生成一个包含四个子图的分析窗口:
- 真实视差图 (Ground Truth):用于对比算法准确性的基准数据。
- SAD原始计算视差图:展示未经优化的算法直接输出。
- 中值滤波后视差图:展示去除噪声后的最终深度图。
- 3D深度结构:通过
mesh 函数将滤波后的视差图绘制为三维网格表面,直观展示场景的深度层次(包含降采样处理以提升渲染速度)。
使用方法
- 启动 MATLAB。
- 将当前工作目录切换到脚本所在文件夹。
- 在命令行窗口输入
main 并回车,或者直接在编辑器中点击“运行”按钮。 - 程序将自动输出每一行的处理进度,并在计算完成后弹出一个包含四幅分析图表的窗口。
- 控制台中将显示匹配算法的耗时统计。
若需要处理自己的图片,只需修改代码第一部分的 imLeft 和 imRight 读取逻辑,并根据实际场景调整 dispRange(视差范围)参数即可。