首页 文章

Kinect v2 - 同步深度和彩色帧

提问于
浏览
2

我目前正在为一个项目寻找立体摄像机,而Kinect v2似乎是个不错的选择 . 但是,由于这对我来说是一项投资,我需要确保它符合我的要求,主要是不同传感器的良好同步 .

显然没有传感器的硬件同步,我得到了很多关于软件部分的版本:

  • 一些人们抱怨两个传感器之间存在滞后的帖子,还有许多人要求采用同步传感器的方法 . 两者似乎都有奇怪的解决方法而且没有“官方”,从答案中可以看出共同的解决方案 .

  • 有关MultiSourceFrame类的一些帖子,它是Kinect SDK 2.0的一部分 . 根据我的理解,这个类使您能够在给定时间检索所有传感器的帧(或更少,您可以选择要从中获取数据的传感器) . 因此,对于给定的时刻t,您应该能够获得不同传感器的输出并确保这些输出是同步的 .

所以我的问题是,这个 MultiSourceFrame 类正在做我的意思吗?如果是的话,为什么它从未被提出作为解决方案?看起来第一类的帖子是从2013年开始,所以在SDK 2.0发布之前 . 但是, MultiSourceFrame 类应该替换以前版本的SDK的AllFramesReady事件,并且 AllFramesReady 也不建议作为解决方案 .

不幸的是,文档没有提供有关它如何工作的大量信息,所以我在这里问,以防有人已经使用过它 . 如果我的问题看起来很愚蠢,我很抱歉,但在购买这样的相机之前我想确定一下 .

谢谢您的回答!如果需要,随时可以要求更多细节:)

1 回答

  • 1

    libfreenect2 issue中有一个讨论,当使用 MultiSourceFrameReader 时,有人specifically mentioned在RGB和深度帧之间有6.25毫秒的延迟:

    ColorFrame的RelativeTime似乎总是落后于DepthFrame,InfraredFrame,BodyFrame,BodyIndexFrame的RelativeTime的6.25或6.375 ms . 同时,RelativeTime总是匹配DepthFrame,InfraredFrame,BodyFrame和BodyIndexFrame .

    在我自己的实验中,我得到了相同的结果 . 但这只是基于框架的时间戳 . 这些时间戳直接来自Kinect v2设备,因此不太可能,但仍有可能它们不是100%正确 .

    因此,虽然深度和RGB帧之间存在延迟,但即使使用 MultiSourceFrameReader ,它也很可能足够小,因此您可以忽略它 .

    至于 MultiSourceFrame / MultiSourceFrameReader 的用法,一旦你习惯了Kinect v2 SDK就很简单了:

    m_pKinectSensor->OpenMultiSourceFrameReader(
        FrameSourceTypes::FrameSourceTypes_Depth | FrameSourceTypes::FrameSourceTypes_Color,
        &m_pMultiSourceFrameReader);
    
    // get "synced" frame
    IMultiSourceFrame* pMultiSourceFrame = NULL;
    m_pMultiSourceFrameReader->AcquireLatestFrame(&pMultiSourceFrame);
    
    // get depth frame
    IDepthFrameReference* pDepthFrameReference = NULL;
    pMultiSourceFrame->get_DepthFrameReference(&pDepthFrameReference);
    IDepthFrame* pDepthFrame = NULL;
    pDepthFrameReference->AcquireFrame(&pDepthFrame);
    
    // get RGB frame
    IColorFrameReference* pColorFrameReference = NULL;
    pMultiSourceFrame->get_ColorFrameReference(&pColorFrameReference);
    IColorFrame* pColorFrame = NULL;
    pColorFrameReference->AcquireFrame(&pColorFrame);
    
    // ... now use both frames
    

    安装Kinect v2 SDK后,您可以在 CoordinateMapping Basic 示例中找到更多详细信息 .

相关问题