前言
双目视觉是一种模拟人类立体视觉的计算机视觉技术,它通过两个相机从不同的角度拍摄同一个场景,然后利用三角测量原理,计算出场景中物体的三维坐标信息。这种技术在机器人导航、自动驾驶、物体跟踪、三维重建等领域有广泛的应用。获取三维坐标是双目视觉的核心任务之一。通过对左右相机拍摄的图像进行特征匹配和视差计算,我们可以得到场景中每个像素点的视差值。视差值表示了同一个物体在左右图像中的位置差异,它与物体距离相机的远近有关。利用视差信息,再结合相机的参数,我们就可以通过三角测量的方法计算出物体在三维空间中的坐标。
在本文中,将详细介绍如何利用OpenCV库实现双目视觉的三维坐标获取。通过学习这些内容,读者将掌握双目视觉的基本原理和实现方法,并能够将其应用到实际的项目中💥💥。 目前在持续更新中,这篇博客主要讲基本原理,后续会添加代码。大家多点赞收藏哈!
1、基础知识
1.1 立体校正
深度值的计算建立在双目相机的光轴完全平行,但这个是理想状态,因此需要进行标定和校正。立体校正的目的是将左右相机的图像平面对齐,使得对应点在同一行上。
1.2 Q矩阵
Q矩阵是一个4×4的矩阵,是经过立体校正得到的,如下所示:
-
Tx是两个相机之间的水平基线长度
-
cx、cy表示校正后的左相机主点坐标(与原来的左相机主点坐标不一致,这个是校正后的左相机主点坐标💥💥)
-
f为相机焦距
-
cx1为右相机的主点横坐标
1.3 三角测量原理
双目立体成像的实现是基于视差的原理,其模型如下图所示,该模型是无畸变、对准、已测量好的完美标准立体实验台的数学模型。两台摄像机的像平面精确位于同一平面上,光轴严格平行,距离一定,焦距相同,并且左主点和右主点已经过校准。
如上图所示,OR和OT为两个相机的光心,B为两个相机光轴的距离(基线距离),f为镜头焦距,P点为场景中的一个实物点,P1、P2为P在两个图像中的像素点,Z为实物点P到相机的距离,W为图像的宽。由于三角形PP1P2与三角形POROT相似,那么P1P2/B=Z-f/Z,那么有:
P1P2=B-(XR-0.5W)-(0.5W-XT)=B-(XR-XT)
可以得Z=fB/(XR-XT),是不是很简单🍺🍺