一、原理
双目视觉的基本原理,以及公式推导,我参考的b站上的视频,链接如下:
2-线性相机模型-Linear Camera Model-Camera Calibration_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Q34y1n7ot/?p=2&spm_id_from=333.880.my_history.page.click&vd_source=3b6cdacf9e8cb3171856fe2c07acf498如果只学习双目视觉,建议阅读前五个视频。视频中有的翻译不太好,但是可以意会出来,哈哈哈~。视频中的讲解浅显易懂,但是我觉得有一处不对,下面写一份我的理解:
如上图所示, (xw,yw,zw)是世界坐标系,(xc,yc,zc)是相机坐标系,(ox,oy)是光心坐标,(u,v)是摄像机内部影像的坐标系。三个坐标系的方向可以随意决定,都可以通过旋转矩阵、平移矩阵进行转换。假设上图中三个坐标系之间相互平行!!!
P是三维空间中的任意一点,在摄像机坐标系下,P点的坐标为(xc,yc,zc),P在摄像机内部的影像坐标是(xi,yi),根据相似三角形原理可知:和。我认为,视频中的推导是错误的,f表示焦距,一定是正值。等式左右两边少了一个正负号。从而可以推出(xi,yi),实现了3d坐标到2d坐标的转换。
以上计算的2d坐标,是以光心原点,经过平移转换,可以转化成(u,v)坐标系。
两个相机就可以确定三维坐标了,以下是原理图。(x,y,z)是在左相机参考系下的坐标,(b,0,0)是右相机在左相机参考系下的坐标。
双目相机可以推导出来2d坐标到3d的反向转换 :
以上公式计算出来的坐标,是以左相机为参考系的三维坐标。经过平移、旋转可以转化成世界坐标系下的坐标。
二、细节问题
- 将相机三维坐标(xc,yc,zc)转化成世界坐标(xw,yw,zw)时,注意x轴y轴z轴的方向。相机的x轴坐标可能对应的是世界z轴坐标!!!可以通过旋转矩阵进行转化。
- 上图中,摄像机内部的影像,与实际我们看到的图像,呈正反颠倒的关系!!!
三、实现步骤
智在飞翔综合赛中,双目视觉相机的参数如下:
- 计算左右照片中,圆环圆心的2d坐标(xl,yl)、(xr,yr)
- 将上述两个坐标转化成(u,v)坐标系。(ul,vl)=(xl,480-yl)、(ur,vr)=(xr,480-yr)。
- 通过上述公式,计算出左相机坐标系下的3d坐标(x,y,z)