双目立体匹配

双目立体匹配重建(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极线校正进一步理解

相关推荐
我材不敲代码3 小时前
OpenCV 背景建模实战:三种方法实现运动目标检测
人工智能·opencv·目标检测
每周报刊9 小时前
预算有限:二手手机 vs 二手相机,优先买谁?
数码相机
我材不敲代码11 小时前
OpenCV 光流估计实战:Lucas-Kanade 算法实现运动目标跟踪
opencv·算法·目标跟踪
禄亿萋12 小时前
基于多维协同注意力和特征融合的小目标检测方法
人工智能·目标检测·计算机视觉
咏&志12 小时前
目标检测Faster-RCNN论文简读
人工智能·目标检测·计算机视觉
卖报的大地主12 小时前
视觉生成底层技术发展脉络与研究图谱
人工智能·深度学习·计算机视觉
CV实验室16 小时前
Meta引爆3D革命!SAM 3D 发布:单张图秒建3D模型,AR/VR、游戏圈炸锅!
计算机视觉·3d·meta·ar·vr
RFdragon16 小时前
分享本周所学——三维重建算法3D Gaussian Splatting(3DGS)
人工智能·线性代数·算法·机器学习·计算机视觉·矩阵·paddlepaddle
小小数媒成员1 天前
Shader中的光照模型
人工智能·计算机视觉