Matlab:用于实时事件分析的精确定时快照

时间:2013-04-01 18:07:32

标签: matlab image-processing real-time video-capture timed

我以1 / 0.14s的恒定速率从外部源触发摄像机,并使用Matlab for-loop拍摄定时图像进行实时测量。但是,执行"获取快照的时间为#34;每次都是如此不同。有时我会得到1张不到0.14秒的照片 有时拍照需要0.5秒。无论如何都要同步" getsnapshot" 使用外部触发器?或至少制作"获取快照"确切的时间?

以下是我的代码:

vid = videoinput('camera');  
preview(vid);  

for i=1:100  
data=getsnapshot(vid);  
%...data processing...  
%....  
clear data  
end

1 个答案:

答案 0 :(得分:2)

首先,删除preview(vid)行,这可能就是为什么代表。你得到的速度很奇怪。当你获取数据时,你不需要这个预览选项,因为它从你的cpu中获取资源。

然后,您可能需要将imaq工具箱上的摄像机属性设置为触发模式。例如,对于gentl相机类型,这可能类似于:

    triggerconfig(vid, 'hardware', 'DeviceSpecific', 'DeviceSpecific');

    src = getselectedsource(vid);
    src.FrameStartTriggerMode = 'On';
    src.FrameStartTriggerActivation = 'RisingEdge';
    src.FrameStartTriggerDelayAbs = 0;
    src.FrameStartTriggerSource = 'Line1';
    src.FrameStartTriggerOverlap = 'Off';

然后,使用某些相机,您可以读取它们的触发器,即每当相机曝光时,它会向某个输出发送ttl。 Matlab定义它的方法就像:

    src.SyncOut1SyncOutPolarity = 'Normal';
    src.SyncOut1SyncOutSource = 'Exposing';  

同样,您需要在imaq工具中使用相机的选项。 此外,您之后执行的数据处理步骤可能需要一些时间,因此请对其进行基准测试,以便您可以在不发生瓶颈的情况下即时获取数据并对其进行分析。

最后,您可以使用getdata代替getsnapshot(阅读文档以了解其差异),并采用以下格式:[img, time, metadata] = getdata(vid); 这将为您提供每张图像的时间戳,以便您可以看到正在发生的事情。另外,代替clear data使用flushdata(vid)来保持vid对象不会完全填充内存缓冲区(尽管如果你只在循环中运行100次迭代,你应该没问题。)

相关问题