深度相机
操作系统:ubuntu18.04 显卡:GTX1080ti python版本:2.7(3.7) QQ群:加入深度学习交流群 获取学习资料 (147960154)
主要介绍深度相机的成像原理及投影坐标转换
文章目录
深度相机深度相机分类相机成像原理小孔成像与凸透镜成像相机结构相机成像模型中的4个坐标系前向投影反向重建
相机畸变
双目视觉(Stereo)原理应用双目视觉的优缺点
结构光(Structured-light)原理应用
飞行时间(TOF)原理应用
参考了以下文章
深度相机-TOF、RGB双目、结构光优劣分析深度相机哪家强常用的深度相机从零开始一起学习SLAM | 相机成像模型相机成像原理南门摄影STB数据集的使用
深度相机分类
目前主流的深度相机根据其工作原理可分为三类:RGB双目、结构光、TOF
相机类型RGB双目结构光TOF相机代表ZED相、Leap Motion、大疆Kinect v1、Realsense、奥比中光Kinect v2、v3、 realsense L515工作原理被动式: RGB图像特征匹配,三角测量间接计算主动式:主动投射已知编码光源,提升特征匹配效果主动式:根据飞行时间直接测量测量精度短工作范围内能够达到mm级(0.01mm~1cm)短工作范围内能够达到高精度(0.01mm-1mm)最高可达厘米级测量范围0.1m ~ 20m(距离越远精度越低)0.1m ~ 10m(距离越远精度越低)0.1m ~ 100m(不受距离的影响)环境限制受光照变化和物体纹理影响大、夜晚无法使用室内,暗室效果不错,室外强光效果会产生较大测量误差不受光照变化和物体纹理影响,受反光影响分辨率高,可达2K分辨率高,可达1280x720低(512×424)帧率1~ 90 fps1~30 fps高,可达几百fps功耗较低,主要靠软件中,USB即可很高,需要外电源
相机成像原理
想要了解深度相机的原理之前,先补充一下普通的RGB相机成像原理,了解相机的内参矩阵和外参矩阵,坐标系转换,以及相机拍摄中会产生什么畸变以及畸变的矫正方法。
小孔成像与凸透镜成像
相机结构
光心,焦距,像距,物距,光圈,景深
在相机中,焦距即为光心到底片的距离(光学中称为像距),远离镜头的影像就能在底片或传感器上形成清晰的影像,日常中说的“调焦”实际为调整光心与底片的距离,并不会改变凸透镜的焦距
相机成像模型中的4个坐标系
相机成像原理中涉及到4个坐标系的转换,分别是:
维度dimension含义世界坐标系(world coordinate)3D (U,V,W)世界坐标系通常以所感兴趣的物体object为中心建立相机坐标系(camera coordinate)3D (X,Y,Z)相机坐标系由成像平面,焦距,光心点唯一确定;Z轴为光轴成像坐标系(film coordinate)2D (x,y)成像坐标系由相机的成像平面唯一确定,XY轴与相机坐标轴平行像素坐标系(pixel coordinate)2D (u,v)进行图像处理算法时用到的图像所在的2D像素坐标系
前向投影
在将世界坐标系中的3D真实点转换到通常进行图像处理时所使用的以像素为单位的2D图像上,通常的前向投影过程如下:
通过外参矩阵(包括旋转矩阵R和平移矩阵T)将世界坐标系中的点转换到相机坐标系中。通过相机内参f:相机的焦距(成像平面到光心的距离,在相机主轴上计算)参数,将相机坐标系中的点转换到成像坐标系上。通过相机内参Ox,Oy(平移,从成像坐标系的中心点平移到像素坐标系的中心点上)和Sx、Sy(对于成像平面/感光器件成像后的图像进行的采样,表示x和y轴方向上的采样率),将成像坐标系转换到图像像素坐标系上。
Step 1 : 世界坐标系到相机坐标系 (相机外参R和T)
补充知识点:坐标系变换 一般世界坐标系和相机坐标系都是描述的同一空间维度,因而此处等价于坐标系变换。我们使用相机外参矩阵时,主要是用来对应多个摄像头的坐标系统一问题。以STB数据集为例,深度相机坐标系即为世界坐标系,RGB相机的坐标系则需经过相机外参矩阵变换,以转化并统一到深度相机坐标系。
# External camera parameters
R = np.array([0.00531,-0.01196,0.00301])
T = np.array([-24.0381, -0.4563, -1.2326])
rotationMatrix = cv2.Rodrigues(R)[0]
T = np.reshape(T,[3,1])
kp_coord_xyz_rgb = np.dot(np.transpose(rotationMatrix), kp_coord_xyz - T)
Step2:相机坐标系到成像坐标系 (相机内参f)
通过相机内参f:相机的焦距(成像平面到光心的距离,在相机主轴上计算)参数,将相机坐标系中的点转换到成像坐标系上
从相机坐标系3D到成像坐标系2D,使用的是透视变换 (利用相似三角形原理),注意图中给出的成像平面本身应该在光心O左边的f位置处(才是正确的小孔成像原理),但是这里为了简便就直接对称过来了。
Step3 : 成像坐标系到像素坐标系 (相机内参Ox,Oy,Sx,Sy)
通过相机内参Ox,Oy(平移,从成像坐标系的中心点平移到像素坐标系的中心点上)和Sx、Sy(对于成像平面/感光器件成像后的图像进行的采样,表示x和y轴方向上的采样率),将成像坐标系转换到图像像素坐标系上。
在深度相机中一般将Step2和Step3整合到一起,即为相机的内参矩阵,投影变换和仿射变换。
#for rgb image
fx = 607.92271
fy = 607.88192
tx = 314.78337
ty = 236.42484
K = np.array([[fx,0,tx],
[0,fy,ty],
[0,0,1]])
kp_coord_uv_rgb = np.dot(K, np.dot(np.transpose(rotationMatrix), kp_coord_xyz - T))
STB数据集显示的效果图如下
反向重建
即通过图像中的人手关节点还原到世界坐标系中
相机畸变
和小孔成像不同在于,为了拍摄很大的范围,收集更多的光源,相机采用的镜头都是凸透镜。相机视场角比较小(比如手机摄像头)时,一般可以近似为针孔相机成像,三维世界中的直线成像也是直线。 但是很多时候需要用到广角甚至鱼眼相机,此时会产生畸变,三维世界中的直线在图像里会弯曲。基于针孔模型下坐标变换的假设就不成立了。因此需要引入相机畸变参数,对图像进行去畸变处理。
畸变类型:
相机透镜的畸变主要分为径向畸变和切向畸变,还有其他的畸变,但都没有径向和切向畸变影响显著,所以我们在这里只考虑径向和切向畸变
径向畸变: 由于相机透镜的形状导致的,且越向透镜边缘移动径向畸变越严重。切向畸变: 由于透镜和CMOS或者CCD的安装位置误差导致,随着相机制造工艺的大大提升,这种情况很少出现了,我们一般也不考虑切向的畸变。 畸变矫正方法
相机视场角比较小(比如手机摄像头)时,一般可以近似为针孔相机成像,三维世界中的直线成像也是直线。 但是很多时候需要用到广角甚至鱼眼相机,此时会产生畸变,三维世界中的直线在图像里会弯曲。因此,需要做去畸变。
双目视觉(Stereo)
原理
1、首先需要对双目相机进行标定,得到两个相机的内外参数、单应矩阵。
2、根据标定结果对原始图像校正,校正后的两张图像位于同一平面且互相平行。
3、对校正后的两张图像进行像素点匹配。
4、根据匹配结果计算每个像素的深度,从而获得深度图。
理想双目相机成像模型
假设左右两个相机位于同一平面(光轴平行),且相机参数(如焦距f)一致。那么深度值的推导原理和公式如下。
分析: 三点确定一个平面,假设平面M由(L, R, P)三点确定,camera L摄像头可以确定P点在平面M中的LP直线上,且可由相机内参计算出LP的直线方程,同理camera R则可以确定RP直线方程,由于LP和RP处于同一平面且不平行,则必然相交于唯一的点P,故P点坐标即可求得。
根据上述推导,空间点P离相机的距离(深度)z=f*b/d,可以发现如果要计算深度z,必须要知道:
1、相机焦距f,左右相机基线b。这些参数可以通过先验信息或者相机标定得到。
2、视差d。需要知道左相机的每个像素点(xl, yl)和右相机中对应点(xr, yr)的对应关系。这是双目视觉的核心问题。
极线约束
对于左图中的一个像素点,如何确定该点在右图中的位置?是不是需要我们在整个图像中地毯式搜索一个个匹配?
答案是:不需要。因为有极线约束。极线约束对于求解图像对中像素点的对应关系非常重要。
上文提到的M平面称为极平面,所谓极线约束(Epipolar Constraint)就是指当同一个空间点在两幅图像上分别成像时,已知左图投影点p1,那么对应右图投影点p2一定在相对于p1的极线上,这样可以极大的缩小匹配范围。
图像矫正
上文提及的都是理想情况下,两个相机的坐标系的xyz三轴平行,而实际应用中,往往是不平行的,因此需要图像矫正技术
图像矫正技术:分别对两张图片用单应(homography)矩阵变换(可以通过标定获得)得到的,的目的就是把两个不同方向的图像平面(下图中灰色平面)重新投影到同一个平面且光轴互相平行(下图中黄色平面),这样就可以用前面理想情况下的模型了,两个相机的极线也变成水平的了。
应用
Leap Motion
双目视觉的优缺点
1、优点
1)、对相机硬件要求低,成本也低。因为不需要像TOF和结构光那样使用特殊的发射器和接收器,使用普通的消费级 RGB相机即可。
2)、室内外都适用。由于直接根据环境光采集图像,所以在室内、室外都能使用。相比之下,TOF和结构光基本只能 在室内使用。
2、缺点
1)、对环境光照非常敏感。双目立体视觉法依赖环境中的自然光线采集图像,而由于光照角度变化、光照强度变化等 环境因素的影响,拍摄的两张图片亮度差别会比较大,这会对匹配算法提出很大的挑战。
2)、不适用于单调缺乏纹理的场景。由于双目立体视觉法根据视觉特征进行图像匹配,所以对于缺乏视觉特征的场景 (如天空、白墙、沙漠等)会出现匹配困难,导致匹配误差较大甚至匹配失败。
3)、相机基线限制了测量范围。测量范围和基线(两个摄像头间距)关系很大:基线越大,测量范围越远;基线越 小,测量范围越近。所以基线在一定程度上限制了该深度相机的测量范围。
结构光(Structured-light)
原理
应用
Kinect v1realsense
飞行时间(TOF)
原理
应用
Kinect v2