首先,删除该preview(vid)
行,这可能就是 rep. 你得到的利率很奇怪。当您获取数据时,您不需要启用此预览选项,因为它会从您的 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 次迭代,你应该没问题)。