当前位置:   article > 正文

深度相机原理及坐标系转换_深度相机计算物体坐标

深度相机计算物体坐标

深度相机


操作系统:ubuntu18.04
显卡:GTX1080ti
python版本:2.7(3.7)
QQ群加入深度学习交流群 获取学习资料 (147960154)


主要介绍深度相机的成像原理及投影坐标转换


参考了以下文章

  1. 深度相机-TOF、RGB双目、结构光优劣分析
  2. 深度相机哪家强
  3. 常用的深度相机
  4. 从零开始一起学习SLAM | 相机成像模型
  5. 相机成像原理
  6. 南门摄影
  7. 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图像上,通常的前向投影过程如下:

  1. 通过外参矩阵(包括旋转矩阵R和平移矩阵T)将世界坐标系中的点转换到相机坐标系中。
  2. 通过相机内参f:相机的焦距(成像平面到光心的距离,在相机主轴上计算)参数,将相机坐标系中的点转换到成像坐标系上。
  3. 通过相机内参Ox,Oy(平移,从成像坐标系的中心点平移到像素坐标系的中心点上)和Sx、Sy(对于成像平面/感光器件成像后的图像进行的采样,表示x和y轴方向上的采样率),将成像坐标系转换到图像像素坐标系上。
  • Step 1 : 世界坐标系到相机坐标系 (相机外参RT)

    一般世界坐标系和相机坐标系都是描述的同一空间维度,因而此处等价于坐标系变换。我们使用相机外参矩阵时,主要是用来对应多个摄像头的坐标系统一问题。以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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • Step2:相机坐标系到成像坐标系 (相机内参f)

    • 通过相机内参f:相机的焦距(成像平面到光心的距离,在相机主轴上计算)参数,将相机坐标系中的点转换到成像坐标系上

    • 从相机坐标系3D到成像坐标系2D,使用的是透视变换 (利用相似三角形原理),注意图中给出的成像平面本身应该在光心O左边的f位置处(才是正确的小孔成像原理),但是这里为了简便就直接对称过来了。
      在这里插入图片描述

  • Step3 : 成像坐标系到像素坐标系 (相机内参Ox,Oy,Sx,Sy)

    • 通过相机内参Ox,Oy(平移,从成像坐标系的中心点平移到像素坐标系的中心点上)和Sx、Sy(对于成像平面/感光器件成像后的图像进行的采样,表示x和y轴方向上的采样率),将成像坐标系转换到图像像素坐标系上。
      在这里插入图片描述

    • 在深度相机中一般将Step2Step3整合到一起,即为相机的内参矩阵,投影变换和仿射变换。

      #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))
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
  • 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)、相机基线限制了测量范围。测量范围和基线(两个摄像头间距)关系很大:基线越大,测量范围越远;基线越		小,测量范围越近。所以基线在一定程度上限制了该深度相机的测量范围。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10


结构光(Structured-light)

原理
应用
  • Kinect v1
  • realsense

飞行时间(TOF)

原理
应用
  • Kinect v2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/250706
推荐阅读