资讯详情

超强实操!手把手教学Kinect深度图与RGB摄像头的标定与配准

作者 | aipiano @CSDN

编辑 | 3D视觉开发者社区

导读

Kinect微软推出XBOX360体感周边外设,有能力获取深度信息。但由于Kinect自身RGB摄像头分辨率有限,清晰度略低,不适合要求较高的开发者。因此,许多开发者使用第三方摄像头代替Kinect但两者之间的配置一直是个问题。这篇文章是如何将Kinect第三方摄像头的深度图和深度图RGB对图像对准的问题进行了详细的讲解和手把手教学,简单易懂,强烈推荐阅读。

自从有了Kinect,根据深度图提取前景非常方便。因此,有许多虚拟现实、视频集成等应用程序。Kinect自身的RGB摄像头分辨率有限,清晰度不如一些专业摄像头,所以用第三方摄像头代替Kinect摄像头的想法。现在的问题是如何做到Kinect第三方摄像头的深度图和深度图RGB图像对准?

当使用Kinect的RGB有方便的MapColorCoordinatesToDepth和MapDepthCoordinatesToColor该方法可用于深度图和RGB对齐在一起,根据深度图准确提取RGB中的前景。然而,当我们计划使用第三方相机时,这些函数是无用的。他们不知道我们使用的相机的参数和空间位置,所以他们只能通过自己的校准方法来解决这个问题。

标定前,应先固定Kinect和摄像头的位置,让深度摄像头和RGB像平面这样的摄像头尽量平行,距离也不要太远,就像下面这样:

3d50695594c5abb8f770423db846852a.png

一、RGB相机的校准

RGB每个人都必须熟悉相机的校准。最常用的是棋盘法。从不同的角度拍摄许多棋盘图片,并从不同的角度扔掉这些图片OpenCV或Matlab,从而计算出相机的内参和对应于每个图像的外参。以下是我在校准过程中的一些感受和经验。

1.用于校准的棋盘应尽可能大,至少应该有A3纸的大小;

2.棋盘平面与摄像头平面之间的夹角不宜过大,控制在45度以下;

3.棋盘的姿势和位置尽可能多样化,但平行棋盘对结果没有贡献;

4.用于校准的图片应超过10张;

5.注意设置摄像头的分辨率。长宽比最好与深度图相同,如1280x960(4:3)。

以下是一些用于校准的样图:

二、深度摄像头的校准

深度摄像头看起来和谐RGB摄像头差别很大,但实际上有很多相似之处。Kinect就红外光束而言,它通过红外散斑发射器发射红外光束,光束在遇到障碍物后反射回深度摄像头,然后通过返回散斑之间的几何关系计算距离。事实上,Kinect深度摄像头是一种普通的带有滤波片的摄像头,只有红外光成像的摄像头么想)。

所以要标定,只需要用红外光源照射物体,LED淘宝上只有20元一个红外光源。还需要注意的是,拍摄红外照片时,应使用黑色胶带(或其他东西)Kinect红外发射器完全堵塞,否则其散斑会在红外照片中产生许多亮点,不利于棋盘角的检测。以下是对应的RGB红外图像:

三、计算内参

得到以上图片后,可以分别对齐RGB摄像头和深度摄像头计算内参。OpenCV,自己写一小段程序,然后扔进去。你也可以用名字Matlab Camera Calibration Toolbox。

自己写代码累,Matlab我没装,就用了 GML Calibration Toolbox,可以在这里下载:。这是一个C 标定程序,用户界面友好,精度好,使用方便。

分别将RGB扔进红外照片,得到RGB内参(包括畸变参数):

=== Intrinsic ===

554.952628 0.000000 327.545377

0.000000 555.959694 248.218614

0.000000 0.000000 1.000000

=== Distortion ===

0.025163 -0.118850 -0.006536 -0.001345

和Kinect深度摄像头的内参(这是所有的Kinect应该都差不多):

=== Intrinsic ===

597.599759 0.000000 322.978715

0.000000 597.651554 239.635289

0.000000 0.000000 1.000000

=== Distortion ===

-0.094718 0.284224 -0.005630 -0.001429

四、配准

现在我们来谈谈如何因为Kinect三维坐标可以的三维坐标,因此深度图的准确性可以采用一些简单而特殊的方法。

设P_ir在深度摄像头坐标下,p_ir在图像平面上的投影坐标(x、y单位为像素,z等于深度值,单位为mm),H_ir小孔成像模型可以看到深度摄像头的内参矩阵,它们满足以下关系:

又设P_rgb为在RGB相机坐标下同一点的空间坐标,p_rgb为该点在RGB就像平面上的投影坐标,H_rgb为RGB摄像头的内参矩阵。由于深度摄像头的坐标和RGB相机的坐标不同,可以通过旋转平移变换连接起来,即:

R是旋转矩阵,T为平移向量。最后使用H_rgb对P_rgb投影可以获得该点对应的对应点RGB坐标:

需要注意的是,p_ir和p_rgb齐次坐标用于结构p_ir当原始像素坐标应使用时(x,y)乘以深度值,最终乘以深度值RGB必须使用像素坐标p_rgb除以z分量,即(x/z,y/z),而且z的重量值就是这个点RGB相机的距离(单位为mm)。

现在的问题是,如何求联系两个坐标系的旋转矩阵和平移向量。这就要用到摄像头的外参了。

事实上,外参矩阵也是由旋转矩阵组成的R_ir(R_rgb)和平移向量T_ir(T_rgb)它表示将全局坐标系下的点P转换为摄像头坐标系,分别对深度摄像头和RGB变换摄像头有以下关系:

P用于第一式P_ir、R_ir和T_ir表示并带入第二类,可得:

从上面的风格可以看出,这将是P_ir变换为P_rgb,比较之前的公式:

可得:

因此,我们只需要在同一场景下获得棋盘相对于深度摄像头和RGB相机的外参矩阵可以计算联系两个相机坐标系的变换矩阵(请注意,所有旋转矩阵都是正交阵,因此可以使用转移操作而不是求逆操作)。虽然不同场景下获得的外参矩阵不同,但计算R和T也有一些变化,但根据实际实验结果,使用前棋盘的校准图像可以达到更好的效果,如下图所示:

请注意,这两个图像必须来自同一个场景,否则毫无意义。当然,你也可以在多个场景中使用外参,然后使用它们OpenCV的StereoCalibration由于时间关系,我没有做这个测试,函数获得了两个摄像头的最佳相对变换矩阵。

使用GML Calibration Toolbox获取上述两张图片的外参(在菜单栏中Calibration->Export Calibration Data选择菜单导出),然后根据上面的风格扔进去Mathematica做矩阵操作,得到最终R和T:

R={ {0.999853, -0.00340388, 0.0167495},

{0.00300206, 0.999708, 0.0239986},

{-0.0168257, -0.0239459, 0.99571}  }

T={  {15.2562}, {70.2212}, {-10.9926}  }

五、测试

最后写一个小程序测试一下,在此说一下这个测试程序的思路:

1、获取Kinect的深度图像;

2、获取RGB摄像头的图像;

3、为深度图像中的每一个像素附上对应的RGB颜色,比如你要给坐标为(x, y)的深度图像素附上颜色,具体步骤如下;

1)构造一个三维向量p_ir = (x, y, z),其中x,y是该点的像素坐标,z是该像素的深度值;

2)用Kinect内参矩阵H_ir的逆,乘以p_ir得到对应的空间点坐标P_ir,具体公式见上文第四部分(配准);

3)由于P_ir是该点在Kinect坐标系下的坐标,我们需要将其转换到RGB摄像头的坐标系下,具体的,就是乘以一个旋转矩阵R,再加上一个平移向量T,得到P_rgb;

4)用RGB摄像头的内参矩阵H_rgb乘以P_rgb,得到p_rgb,p_rgb也是一个三维向量,其x和y坐标即为该点在RGB图像中的像素坐标,取出该像素的颜色,作为深度图像中对应像素的颜色;

5)对深度图像中的每一个像素都做上述操作,得到配准后的深度图。

看看配准前(左)和配准后(右)的区别:

从图像上看,配准已经很精确了。若还要更好,可以手动微调一下两个摄像头的平移向量T,主要改x分量和y分量,这样可以控制RGB和深度图的左右对齐和上下对齐。另外,还可以加入对畸变系数的处理,不过由于Kinect的摄像头以及我使用的RGB摄像头本身质量较高,畸变影响不大,这里就全部忽略了。

版权声明:本文为作者授权转载,由3D视觉开发者社区编辑整理发布,仅做学术分享,未经授权请勿二次传播,版权归原作者所有,图片来源于网络,若涉及侵权内容请联系删文。

本文仅做学术分享,如有侵权,请联系删文。

后台回复:即可下载国外大学沉淀数年3D Vison精品课件

后台回复:即可下载3D视觉领域经典书籍pdf

后台回复:即可学习3D视觉领域精品课程

1.面向自动驾驶领域的多传感器数据融合技术

2.面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)3.彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进4.国内首个面向工业级实战的点云处理课程5.激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解6.彻底搞懂视觉-惯性SLAM:基于VINS-Fusion正式开课啦7.彻底搞懂基于LOAM框架的3D激光SLAM: 源码剖析到算法优化8.彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM +LIO-SAM)

9.从零搭建一套结构光3D重建系统[理论+源码+实践]

10.单目深度估计方法:算法梳理与代码实现

11.自动驾驶中的深度学习模型部署实战

12.相机模型与标定(单目+双目+鱼眼)

13.重磅!四旋翼飞行器:算法与实战

14.ROS2从入门到精通:理论与实战

15.国内首个3D缺陷检测教程:理论、源码与实战

扫码添加小助手微信,可

也可申请加入我们的细分方向交流群,目前主要有等微信群。

一定要备注:,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。也请联系。

▲长按加微信群或投稿

▲长按关注公众号

:针对3D视觉领域的五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近5000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

 圈里有高质量教程资料、答疑解惑、助你高效解决问题

标签: 红外对准传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台