作者 | aipiano @CSDN
编辑 | 3D视觉开发者社区
导读
Kinect微软推出XBOX360体感周边外设,有能力获取深度信息。但由于Kinect自身RGB摄像头分辨率有限,清晰度略低,不适合要求较高的开发者。因此,许多开发者使用第三方摄像头代替Kinect但两者之间的配置一直是个问题。这篇文章是如何将Kinect第三方摄像头的深度图和深度图RGB对图像对准的问题进行了详细的讲解和手把手教学,简单易懂,强烈推荐阅读。
自从有了Kinect,根据深度图提取前景非常方便。因此,有许多虚拟现实、视频集成等应用程序。Kinect自身的RGB摄像头分辨率有限,清晰度不如一些专业摄像头,所以用第三方摄像头代替Kinect摄像头的想法。现在的问题是如何做到Kinect第三方摄像头的深度图和深度图RGB图像对准?
当使用Kinect的RGB有方便的MapColorCoordinatesToDepth和MapDepthCoordinatesToColor该方法可用于深度图和RGB对齐在一起,根据深度图准确提取RGB中的前景。然而,当我们计划使用第三方相机时,这些函数是无用的。他们不知道我们使用的相机的参数和空间位置,所以他们只能通过自己的校准方法来解决这个问题。
标定前,应先固定Kinect和摄像头的位置,让深度摄像头和RGB像平面这样的摄像头尽量平行,距离也不要太远,就像下面这样:
一、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视觉开发者社区编辑整理发布,仅做学术分享,未经授权请勿二次传播,版权归原作者所有,图片来源于网络,若涉及侵权内容请联系删文。
本文仅做学术分享,如有侵权,请联系删文。
后台回复:
后台回复:
后台回复:
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视觉核心技术,扫描查看介绍,3天内无条件退款
圈里有高质量教程资料、答疑解惑、助你高效解决问题