KinectAzureDK编程实战_实时双 Azure Kinect 标定优化

在上篇文章中,我们实现了一个使用双 Azure Kinect 的实时重建应用。

实时双Kinect环境下的实时重建

首先基于 ArUco 第三方库做关于两个 Azure Kinect 的相对姿态的标定,然后把其中一个 Azure Kinect 输出的点云转换到另一个 Azure Kinect 坐标系中,最后我们仅仅把两者的点云叠加。

这是当时的效果。

最近,我在 Azure Kinect 的官方开源 SDK 所在的 Github 源码 中发现了一个 issue,是其中一个用户在 SDK 提供的 Green Screen 示例代码中发现,两个点云的源码无法完美拼接。

Azure Kinect 的官方开源 SDK https://github.com/microsoft/Azure-Kinect-Sensor-SDK

issue: Overlay point cloud from two cameras https://github.com/microsoft/Azure-Kinect-Sensor-SDK/issues/803

Green Screen 示例 https://github.com/microsoft/Azure-Kinect-Sensor-SDK/tree/develop/examples/green_screen

在 Green Screen 示例代码中,官方使用的是 OpenCV 提供的标定方法,使用黑白方格标定板做两个 Azure Kinect 的相对姿态的测定。

下图所示。

鉴于我上篇文章的结果,我觉得我的做法可能会更好一点,就在这个 issue 中提供了我的解决方案。

然而,不幸的是,我的做法也被发现了问题 [3],甚至比 Green Screen 示例的结果还要差。😂😂

幸好,我之前发现一个很好用的 ICP 算法,Open3D 0.8.0 的 Colored ICP 算法 [1].

Open3D Colored ICP 算法源码 https://github.com/intel-isl/Open3D/blob/master/src/Open3D/Registration/ColoredICP.cpp

普通的 ICP 算法会用到点云的三维点坐标 (x, y, z) 和相对应的法向量坐标 (nx, ny, nz)。但是对于深度摄像头来说,如果摄像头已经标定好内参,其深度图与彩色图的像素之间是一一对应的。所以深度图的每个像素也会有一个彩色信息 (r, g, b)。这个 Colored ICP [1]就是用到了 (x, y, z) + (nx, ny, nz) + (r, g, b) 信息做点云的拼接。

经过我的实验,在使用 ArUco 第三方库标定两个 Azure Kinect 相对姿态后,这个算法可以进一步优化点云的拼接效果。

我这里的流程和上篇文章的流程类似。

第一步,使用我写的这个代码得到两个 Azure Kinect 之间的相对姿态矩阵。

基于 ArUco 库的双 Azure Kinect 的相对姿态的标定。 https://github.com/forestsen/KinectAzureDKProgramming/tree/master/Aruco_TwoKinects_Calibration_Extrinsics

第二步,使用我写的另一个代码,初步拼接两个 Azure Kinect 的点云。

两个 Azure Kinect 点云拼接 https://github.com/forestsen/K4aGrabber/tree/master/PCL_Grabber_TwoKinects

比如这里给出的两个点云拼接效果。当点云拼接的是一个相对小的场景时,我们可能看不出误差效果。但当扩展到大点的场景,误差效果就很明显。比如上面的红框标记出来的部分都出现了很大的重影。

第三步,我们基于第二步的相对姿态作为 Colored ICP 算法 [1]的初始变换矩阵,对两个点云拼接,输出优化后的变换矩阵作为最终的两 Azure Kinect 之间的相对姿态矩阵。

比如上面两个相同的场景,优化相对姿态后,我们看到重影基本消失了。

我还做了一个极端的案例。让两个 Azure Kinect 同时拍摄一堵墙,墙上有些文字、曲线图。

上图是仅用 ArUco 第三方库得到的两个 Azure Kinect 之间的点云拼接效果。

这是经过 Colored ICP 算法 [1] 优化后的结果。我们可以看到文字,曲线图很好的重合了起来。

引用

[1] Park J , Zhou Q Y , Koltun V . Colored Point Cloud Registration Revisited[C]// 2017 IEEE International Conference on Computer Vision (ICCV). IEEE Computer Society, 2017.

[2] https://user-images.githubusercontent.com/38412160/66368300-562d8480-e9ca-11e9-9a83-e2bdbc30a6b2.PNG

[3] https://user-images.githubusercontent.com/38412160/66368300-562d8480-e9ca-11e9-9a83-e2bdbc30a6b2.PNG

商业合作请联系:

E-mail:forestsen@vip.qq.com

原文发布于微信公众号 - 无雨森的技术分享(forestsen_tech)

原文发表时间:2019-10-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券