【问题标题】:Matlab Synchronize acquisition with Color/Depth of KinectMatlab 与 Kinect 的颜色/深度同步采集
【发布时间】:2013-09-26 18:13:51
【问题描述】:

我无法将颜色和深度图像与图像采集工具箱同步。

目前,我只是尝试将两个流都记录到二进制文件中,而不会丢帧或失去同步。

我在录制过程中不尝试渲染。

开始按钮的代码:

colorVid = videoinput('kinect',1); depthVid = videoinput('kinect',2);
colorVid.FramesPerTrigger = inf; depthVid.FramesPerTrigger = inf;
triggerconfig([colorVid depthVid],'manual');

iatconfigLogging(colorVid,'Video/Color.bin');
iatconfigLogging(depthVid,'Video/Depth.bin');

start([colorVid depthVid]);

pause(2); % this is to be sure both sensor are start before the trigger

trigger([colorVid depthVid]);

iatconfigureLogging() 来自here

停止按钮只是在做

stop([colorVid depthVid]);

由于 Kinect 的帧速率是 30FPS,我们无法更改,所以我使用 FrameGrabInterval 来模拟它。

但是当我喜欢 5FPS 时,我无法记录深度和颜色并保持帧同步超过 20-25 秒。除了 1 FPS,同步在 2-3 分钟后结束,我正在寻找至少 10-15 分钟的采集时间。

我正在寻找类似 flushdata(obj,'triggers'); 的东西。现在,但我不知道如何通过日志记录保持 30 FPS。

提前感谢任何愿意提供东西的人。

【问题讨论】:

    标签: matlab synchronization kinect


    【解决方案1】:

    据我所知,您无法通过触发来同步流,因为它们在硬件中未同步。我试过了,我能想到的最好的办法是给每个流加上时间戳,并丢弃时间上相距太远的帧对。我注意到经典的频率偏移效应,即流与每个周期之间差异的反向频率进出同步。丢弃帧的明显缺点是你得到一个不连续的流。 您可以使用

    获取时间戳信息
    [data time] = getdata(vid,1);
    

    【讨论】:

    • 是的,我知道,您可以检索骨架部分的数据、时间和元数据。也许我会像你说的那样试试。检查是否同时标记我有相同的帧,否则我真的不知道我要做什么。我正在尝试获得 30 FPS,因为它是相机规格,但我需要大约 12-15 FPS,但这也不起作用......你有代码示例来记录/获取相同的时间戳帧吗?如果不是也可以:)
    • 我上面粘贴的代码应该给你帧时间戳...?
    • 它给出了获取帧的时间,因为当您启动两个流时,传感器在另一个之前启动,因此帧没有相同的时间启动,并且很难自动说帧何时同步。手动,我可以在不同的时间(开始或结束)发现一些问题,但是现在尝试编写一些健壮的代码并不那么容易:P
    • 哦,是的,我忘记了。所以我所做的是我浏览了前几帧,找到了最匹配的帧,并为这些对中的每个流定义了零时间戳。
    • 你有代码示例吗?当最后的总帧数不相似时,你是如何工作的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    相关资源
    最近更新 更多