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

Matlab:用于实时事件分析的精确定时getsnapshot,matlab,image-processing,real-time,video-capture,timed,Matlab,Image Processing,Real Time,Video Capture,Timed,我得到了一个由外部电源以1/0.14s的恒定速率触发的相机,并使用Matlab for loop拍摄定时照片进行实时测量。但是,每次执行“getsnapshot”1次所用的时间都非常不同。有时我得到一张小于0.14秒的照片 有时拍摄一张照片需要0.5秒。是否仍要同步“getsnapshot” 用外部触发器?或者至少让“getsnapshot”精确计时 以下是我的代码: vid = videoinput('camera'); preview(vid); for i=1:100 dat

我得到了一个由外部电源以1/0.14s的恒定速率触发的相机,并使用Matlab for loop拍摄定时照片进行实时测量。但是,每次执行“getsnapshot”1次所用的时间都非常不同。有时我得到一张小于0.14秒的照片 有时拍摄一张照片需要0.5秒。是否仍要同步“getsnapshot” 用外部触发器?或者至少让“getsnapshot”精确计时

以下是我的代码:

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

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

首先,删除
预览(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';
    src.SyncOut1SyncOutPolarity = 'Normal';
    src.SyncOut1SyncOutSource = 'Exposing';  
然后,使用一些相机,你可以读出它们的触发器,也就是说,当相机曝光时,它会向一些输出发送一个ttl。Matlab定义它的方法如下:

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

    src = getselectedsource(vid);
    src.FrameStartTriggerMode = 'On';
    src.FrameStartTriggerActivation = 'RisingEdge';
    src.FrameStartTriggerDelayAbs = 0;
    src.FrameStartTriggerSource = 'Line1';
    src.FrameStartTriggerOverlap = 'Off';
    src.SyncOut1SyncOutPolarity = 'Normal';
    src.SyncOut1SyncOutSource = 'Exposing';  
同样,您需要在imaq工具中使用相机的选项。 此外,您随后执行的数据处理步骤可能需要一些时间,因此对其进行基准测试,以确保您可以动态地获取数据并进行分析,而不会出现瓶颈

最后,您可以使用
getdata
而不是
getsnapshot
(阅读文档以查看它们的区别),格式为:
[img,time,metadata]=getdata(vid)

这将为您提供拍摄的每个图像的时间戳,以便您可以看到发生了什么。另外,使用
flushdata(vid)
来防止vid对象完全填满内存缓冲区,而不是
clear data

什么是src?是否在triggerinfo(视频)下?我试图按照您的命令操作,但它会弹出“?”未定义的函数或变量“src”。“
src
通过
src=getselectedsource(vid)获得我已经更新了答案。我使用的是滨松c4742相机,在get(src)下没有“src.SyncOut1SyncOutPolarity”。可调功能仅适用于FrameStartTrigger。这是否意味着我不能使用你的方法?正如我在回答中所说,你需要探索你的相机属性,我刚才给了你一个我使用的
gentl
类型示例。尝试使用imaqtool,查看您的相机支持的不同选项。
SyncOut
属性是将cameta(我的)设置为在曝光时发送TTL的方式,您的相机可以使用不同的命令,也可以不使用此选项。您必须自己探索。我在get(src)下找不到任何syncout属性。无论如何,谢谢你善意的回答。