双目立体匹配

双目立体匹配重建(Stereo Matching Reconstruction)是一种经典的三维重建方法,其核心思想是:

通过两台相机从不同视角同时拍摄同一场景,通过对校正后的左右图像进行立体匹配获取两幅图像的 视差,再根据三角测量原理计算出场景的深度。

极几何:描述同一场景或者物体两个视点图像间的几何关系。

三维点与两个相机光心形成一个极平面,已知相机1图像上一点p,其三维点在o1到p点的空间射线上,其候选三维点P与o2的连线在这个极平面上。其中在相机2图像上的投影候选点组成了一条线,称之为极线。 也就是说,相机1p点对应的三维点一定 在另一个相机极线上。

那问题是在怎么找到另一个相机的极线?

在已知两个相机系统参数时,根据上述描述,极线约束公式可以写为:


非线性三角化重建。

视差是指三维场景中某一点在左右图像中对应点位置的像素级差距。

对极线校正(Epipolar Rectification / Stereo Rectification)**是双目视觉系统中的一个关键步骤,其目的就是:

把左右相机图像重新变换,使得对应点只需要在同一水平线上搜索。

① 得到两个摄像机之间的 Rotation和Translation之后,要用下面的API对两幅图像进行立体对极线校正,这就需要算出两个相机做对极线校正需要的R和T,用R1,T1, R2, T2表示,以及透视投影矩阵P1,P2:

cv::stereoRectify(camK, D, camK, D, imgL.size(), R, -R*t, R1, R2, P1, P2, Q);

② 得到上述参数后,就可以使用下面的API进行对极线校正操作了,并将校正结果保存到本地:

cv::initUndistortRectifyMap(P1(cv::Rect(0, 0, 3, 3)), D, R1, P1(cv::Rect(0, 0, 3, 3)), imgL.size(), CV_32FC1, mapx, mapy);

cv::remap(imgL, recImgL, mapx, mapy, CV_INTER_LINEAR);

cv::imwrite("data/recConyL.png", recImgL);

复制代码
cv::initUndistortRectifyMap(P2(cv::Rect(0, 0, 3, 3)), D, R2, P2(cv::Rect(0, 0, 3, 3)), imgL.size(), CV_32FC1, mapx, mapy);
cv::remap(imgR, recImgR, mapx, mapy, CV_INTER_LINEAR);
cv::imwrite("data/recConyR.png", recImgR);

对极线校正结果如下所示,查看对极线校正结果是否准确,可以通过观察若干对应点是否在同一行上粗略估计得出:


假设我们已经知道了两个相机的外参,即R和T,也就是说,我们已经知道了两个相机的相对旋转和平移关系。

①首先我们要想把两个相机平面调整平行就从这个相对旋转R下手。如果两者之间的相对旋转较大,那固定一个只旋转另一个,很可能造成共同观测的世界点投影到变换之后的那个图像外边去,所以简单的办法就是折中一下,两个相机各旋转这个相对旋转的一半。这一步可以将两个相机的光轴平行。

双目结构光系统



Bouguet 算法是常用的标定立体校正方法

参考文献:

3D视觉之立体匹配(Stereo Matching)
双目相机原理揭秘--双目立体视觉原理搞懂很简单
12. 双目视觉之极线矫正

杨其望, 张慧, 刘江涛, 等. 双目结构光目标三维重建方法研究J. 广东工业大学学报, 2025, 42(5): 121--128. doi: 10.12052/gdutxb.240106.
Bouguet算法--源码解析
Bouguet极线校正进一步理解

相关推荐
古一木2 小时前
opencv 形态学操作
人工智能·opencv·计算机视觉
xcLeigh3 小时前
Unity基础:Camera相机组件详解——透视投影与正交投影的区别
数码相机·unity·游戏引擎
雪的季节4 小时前
思考车牌号的提取
计算机视觉
在世修行4 小时前
从零打造 C# 工业视觉检测系统(四):海康威视 MVS SDK 入门与相机枚举实战
数码相机·c#·视觉检测
科研小刘带你玩学术7 小时前
【学术干货】CVPR论文解析:扩散模型如何推动生成式人工智能进入新时代?
人工智能·深度学习·计算机视觉·生成式ai·扩散模型
m0_749492227 小时前
2026平价运动相机选择指南:科美锐(Komery)PX3与另外两款相机的功能取舍拆解
数码相机
沐梯子7 小时前
AI视频工具大战升级!PixPix首发接入MiniMaxH3大战Seedance
数码相机
c#上位机7 小时前
线扫相机的帧触发
数码相机
sali-tec8 小时前
C# 基于OpenCv的视觉工作流-章100-抠图
图像处理·人工智能·opencv·计算机视觉
深视智能科技9 小时前
PIV高速成像系统如何同步?相机、激光与数据传输配置指南
数码相机