基于MATLAB的基础双目立体视觉实现系统
项目介绍
本项目是一个专为初学者设计的双目立体视觉入门级代码实现方案。系统演示了从成对的二维图像中提取三维深度信息的核心流程。通过模拟或加载预标定的相机参数,项目对左右视图进行畸变校正和极线校正,确保特征匹配在同一水平线上进行。系统采用经典的块匹配算法计算视差,并根据三角测量原理重建场景的三维坐标。该项目对于理解立体匹配、投影几何及三维空间感知等基础概念具有极高的参考价值。
功能特性
- 立体相机参数建模:支持自定义相机焦距、主点、图像尺寸以及相机间的旋转和平移矩阵,方便模拟不同硬件配置。
- 自动化图像预处理:内置灰度转换及异常处理机制。若外部图像缺失,系统能自动生成带有预设视差的合成图像以演示算法逻辑。
- 极线校正技术:通过几何重投影技术对齐左右图像,将原本复杂的二维搜索简化为水平方向的一维搜索。
- 视差映射生成:采用块匹配加速算法(Block Matching),可动态调整搜索范围和匹配窗口大小。
- 物理深度转化:基于相机基线和焦距,将像素位移(视差)准确转化为物理单位(mm)的深度信息。
- 全维度结果可视化:提供红青重叠图、伪彩色视差图、热力深度图以及交互式三维点云视图。
系统要求
- MATLAB 环境(建议 R2016b 及以上版本)
- 图像处理工具箱 (Image Processing Toolbox)
- 计算机视觉工具箱 (Computer Vision Toolbox)
核心实现逻辑说明
1. 环境初始化与参数设定
系统首先配置相机的内部参数,包括焦距(设定为 400 像素)和图像主点(设定为 320x240 中心点)。外部参数设定了基线长度约为 100mm,并通过平移向量 [-100, 0, 0] 体现左右相机的空间位移。这些参数最终被封装进立体相机对象中,作为后续计算的基础。
2. 图像获取与格式转换
系统会尝试加载标准立体测试图像。如果环境中不存在这些文件,程序会利用矩阵运算生成带有白色方块的合成图像,通过在不同水平位置绘制方块来人工模拟视差。所有图像在处理前均会被转化为 8 位灰度图,以减少计算复杂度。
3. 立体校正 (Rectification)
利用校正函数依据相机内参和外参对图像进行重映射。校正后的图像对消除了相机的安装偏差,使得左图中任意一点在右图中的对应点必定位于同一行。这不仅是提高匹配精度的关键,也是后续块匹配算法的前提。
4. 块匹配视差计算 (Disparity Mapping)
系统采用块匹配算法寻找左右图中匹配的像素块。核心参数包括:
- 视差搜索范围:设定为 [0, 64],定义了像素点在水平方向上可能移动的最大范围。
- 匹配块大小:设定为 15x15 的滑块窗口,用于平衡匹配的平滑度与边缘精度。
生成的视差图记录了每个像素点的水平位移量。
5. 三维空间重建
根据三角测量公式及相机标定信息,系统将视差图中的每个点映射到三维坐标系(X, Y, Z)。通过重建函数生成的 XYZ 坐标图包含了场景的物理尺寸。程序还加入了深度过滤逻辑,自动剔除小于 0mm 或大于 5000mm 的离群异常点,确保点云数据的可靠性。
6. 数据测量与可视化
系统会在生成的深度图中自动定位中心像素,计算并输出该点到相机的实测物理距离。可视化界面分为四个部分:
- 重叠视图:展示左右图校正后的融合效果。
- 视差/深度视图:通过不同的色标(Jet 和 Hot 颜色映射)直观展示物体远近。
- 三维点云:构建可旋转的三维模型,支持从不同视角观察重建出的物体形状,并标记物理坐标轴。
使用方法
- 将所有相关代码置于 MATLAB 的工作路径下。
- 直接运行主逻辑程序,系统将依次执行标定、校正、匹配和重建操作。
- 在弹出的图形界面中观察处理结果,并在命令行窗口查看基线和中心点距离的数值输出。
- 可以通过修改代码中的视差范围或块大小参数,观察对最终三维重建精度的影响。