基于Kinect Azure的多相机数据采集(二)

基于Kinect Azure的多相机数据采集(二)

    在基于Kinect Azure的多相机数据采集(一)中以双相机数据采集为例,介绍了Kinect Azure进行多相机数据采集的方法,主要包括数据采集,设备同步,设备标定,数据融合四个部分。并给出了采集深度数据、彩色数据以及获得彩色点云数据的方法。这一篇继续介绍如何对设备进行同步。
    老样子,还是先放参考链接:
    https://docs.microsoft.com/zh-cn/azure/Kinect-dk/multi-camera-sync
    https://github.com/microsoft/Azure-Kinect-Sensor-SDK/blob/develop/examples/green_screen/MultiDeviceCapturer.h
    多相机数据采集最终想要合成好的点云模型,设备同步是最基础的要求。所谓同步,就是使得各设备在同一时刻捕获数据,只有把设备同步做到精确,最终多设备间的点云数据才能得到完美的融合。设备同步包括设备内的同步以及设备间的同步,设备内的同步指深度传感器和彩色传感器的同步,它们之间的同步可以通过设备的depth_delay_off_color_usec属性进行设置。设备间的同步又包括硬件同步和软件同步,硬件同步的具体方式可以参考上方的第一个连接。本文重点分享软件上如何同步两台设备。

一、准备工作:

1、设置设备的主从属性;
2、先开启所有从属设备,再启动主设备;(以上两点详见本系列上一篇文章)
3、设置设备的subordinate_delay_off_master_usec属性为0;
4、分别设置两台设备的depth_delay_off_color_usec属性为80和-80。为了防止多台设备的深度传感器之间相互干扰,所以深度传感器之间的捕获时间应偏离160μs或以上;
5、为了设备的精确定时,需手动调整彩色图像的曝光时间,自动模式会使已同步的设备较快的失去同步。使用k4a_device_set_color_control函数将曝光时间设置为手动模式;同时用k4a_device_set_color_control函数继续设置控制频率为手动模式,这里我设置的参数与上方链接的例程中一致。

二、实现方法及代码

使用调整时间戳的方法来获取设备同步。具体实现思路如下:
1、主从设备分别获取一帧数据,并获取其彩色图像(深度图像也可以);
2、用k4a_image_get_device_timestamp_usec函数分别获取两张图像的时间戳;
3、计算期望时间戳;
   期望时间戳=主设备图像时间戳+subordinate_delay_off_master_usec属性值,
   如果使用深度图像,还需加上depth_delay_off_color_usec属性值)
4、将从属设备图像的时间戳与期望时间戳比较:
    1)差值小于设置阈值的相反数,表明从属设备的时间戳滞后,从属设备重新捕获数据,并转到步骤3;
    2)差值大于设置的阈值,表明主设备的时间戳滞后,主设备重新捕获数据,并转到步骤3;
    3)差值的绝对值小于设置的阈值,表明两个设备间已完成同步;
    用彩色图像同步时,阈值设为100μs;用深度图像同步时,阈值设为260μs。
在这里插入图片描述
    至此,两台设备间已经完成了同步,但也有可能面临着失步的风险(不过我暂时还没发现这种情况)。因此为了程序的正确性,每一帧数据采集时都调用一次同步函数比较保险。而且一定注意,在同步函数中获取的图像一定要及时release,不然循环跑起来内存会爆!!!别问我是怎么知道的…

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值