谈到双目相机测距,我们首先要先了解测距的原理:如下图所示,这是双目摄像头的俯视图。
上图解释了双摄像头测距的原理,书中Z的公式如下:b代表基线,根据相似三角形关系,
这里d表示为左右图横坐标之差,称为视差,视差的单位是像素点。但是通过标定得出的UR是负的,
在OpenCV中,焦距f的量纲是像素点,基线b的量纲由定标棋盘格的实际尺寸和用户输入值确定,一般总是设成毫米,当然为了精度提高也可以设置为0.1毫米量级,视差d=xl-xr(ul-ur)的量纲也是像素点。因此分子分母约去,z的量纲与d相同。
图2解释了双摄像头获取空间中某点三维坐标的原理。
可以看到,实际的坐标计算利用的都是相似三角形的原理
因此,为了精确地求得某个点在三维空间里的距离,我们需要获得的参数有焦距f、视差d、摄像头中心距Tx。
如果还需要获得X坐标和Y坐标的话,那么还需要额外知道左右像平面的坐标系与立体坐标系中原点的偏移cx和cy。其中f, Tx, cx和cy可以通过立体标定获得初始值,并通过立体校准优化,使得两个摄像头在数学上完全平行放置,并且左右摄像头的cx, cy和f相同(也就是实现图2中左右视图完全平行对准的理想形式)。而立体匹配所做的工作,就是在之前的基础上,求取最后一个变量:视差d(这个d一般需要达到亚像素精度)。从而最终完成求一个点三维坐标所需要的准备工作。