Kinect的配准理论
前言
最近在利用Kinect 生成点云数据,有一个过程叫配准(对齐),其中会求得RGB相机内参、IR相机内参以及两相机坐标系之间的变换矩阵。然后结合一些代码,发现有的只需要RGB相机的内参就可以求得点云,有些不解,遂查阅资料总结如下
一、深度图像?
装好Kinect驱动,连接好Kinect,测试一下Kinect一般会得到得到左右两幅图:
右边是我们常见的RGB图像,左边的图像称为深度图(Depth Map),看起来与深度图像差了一个字,开始的时候我以为两者是等价的关系。但后来发现实际上:
深度图像 = 普通的RGB三通道彩色图像 +深度图
在3D计算机图形中,深度图是包含与视点的场景对象的表面的距离有关的信息的图像或图像通道。其中,深度图类似于灰度图像,只是它的每个像素值是传感器距离物体的表征距离,经过一定的比例换算后才能得到实际距离。
例如,视觉SLAM十四讲中,读取深度值:
unsigned int d = depth.ptr<unsigned short>(v)[u]
实际距离:
point[2] = double(d) / depthScale
depthScale为比例系数,一般取1000。搞清楚这两个概念之后,如何根据深度图和RGB图像生成点云数据呢,准确来说是彩色点云数据,假设已经得到两个相机的内参以及相机坐标系之间的变换矩阵,这些都是可以通过相机的标定得到的,在这里就不做展开。
二、Kinect配准原理
配准的意思是将深度图和RGB图对齐,也就是在RGB图像中找到与深度图中对应的像素点。其示意图如图所示:
具体流程为:
1.前面说过,红外相机的深度信息是可以得到的,这里想想,RGB图像和深度图也没有什么区别,一个的属性给了颜色,一个给了深度。通过红外相机的内参以及深度信息就可以求出二维到三维的变换,于是成像平面上的像素点重新变成了现实世界中的空间点,只不过此时的空间点坐标是相对红外相机坐标系而言。
2.将上述空间点变换到RGB相机坐标系下,用的就是之前说过两坐标系间的变换矩阵。其实这个时候,点云数据已经生成了,就是没有颜色信息而已,接下来的任务就是获得每个空间点的颜色信息。
3.由于红外相机和RGB相机观察的绝对世界坐标系下的同一个点,我们将刚才得到RGB相机下的空间点进行投影,当然是往RGB相机的成像平面上进行投影,用RGB相机的内参就可以实现这一过程。于是乎我们就找到了与深度图中像素点对应的像素点,然后读取该像素点的色彩信息并复制给相机坐标系下的空间点,于此,空间点的位置信息和色彩信息都有了,就可以生成完整的点云数据了。
最后解释一下为什么为什么有的程序中只给出了RGB相机的内参,也可以给出彩色点云数据。其实这是已经做了对齐处理,这样就相当于RGB相机坐标系与IR相机坐标系重合,其坐标信息共享。
总结
本文只是从理论上解释了一些参数的应用,解释了为什么要进行两种图像之间的配准,当然现在的驱动是默认这些参数的,当效果不好时,可以自己标定配准达到自己的使用要求。