双目立体匹配

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

相关推荐
hhzz2 分钟前
Barbershop:基于GAN和分割Mask的图像合成技术——从理论到实战全解析
图像处理·人工智能·python·深度学习·计算机视觉
动物园猫1 小时前
校园异常行为目标检测数据集:5类别 | 目标检测
人工智能·目标检测·计算机视觉
weixin_446260853 小时前
SportMV-Agent:面向多机位体育视频的智能体多视角推理框架 & SportMV-Bench评测基准
人工智能·计算机视觉·音视频
线束线缆组件品替网6 小时前
Amphenol ICC RJE1Y22610C42401线束组件应用解析
网络·数码相机·智能手机·计算机外设·电脑·电视盒子
ComputerInBook7 小时前
opencv 图像处理之边缘检测
图像处理·人工智能·opencv·边缘检测
我没胡说八道7 小时前
论文排版避坑指南|按问题选工具,不踩坑,选好工具
人工智能·深度学习·考研·计算机视觉·自然语言处理·论文
LongtengGensSupreme7 小时前
C#图像内存高速拷贝:使用Marshal.AllocHGlobal与ArrayPool实现内存拷贝的几个方法
开发语言·数码相机·c#
今天AI了吗10 小时前
人工智能:计算机视觉的基础与应用
java·开发语言·人工智能·python·深度学习·计算机视觉
、我是男生。11 小时前
激光切割机——相机焦点——激光焦点
数码相机
2zcode11 小时前
低采样率ISAR成像的稀疏重建方法及其实时实现
图像处理·人工智能·计算机视觉