Регистрация данных в постоянных интервалах

Этот пример показывает как данным логов с промежутками вместо того, чтобы регистрировать целое приобретение.

В определенных приложениях не может быть необходимо регистрировать каждый кадр, обеспеченный устройством получения изображений. На самом деле это может быть более практичным и находчивым, чтобы регистрировать кадры в определенных интервалах.

Чтобы регистрировать кадры в постоянном интервале, сконфигурируйте свойство FrameGrabInterval объекта ввода видео. При конфигурировании свойства к целочисленному значению N указывает, что каждый Энный кадр должен регистрироваться, начиная с первого кадра.

Отметьте, указав, что значение FrameGrabInterval не изменяет уровень, на котором устройство обеспечивает кадры (частота кадров устройства). Это только задает интервал, в котором регистрируются кадры.

Шаг 1: доступ и конфигурирует устройство.

Создайте ввод видео, возражают и конфигурируют желаемый интервал журналирования. Интервал журналирования определяется значением свойства FrameGrabInterval.

% Access an image acquisition device.
vidobj = videoinput('winvideo', 1);

% Configure the number of frames to log.
framesToLog = 9;
vidobj.FramesPerTrigger = framesToLog;

% Configure the logging interval. This specifies that
% every 10th frame provided by the device is to be logged.
grabInterval = 10;
vidobj.FrameGrabInterval = grabInterval;

% Access the device's video source and configure the device's frame rate.
% FrameRate is a device specific property, therefore, it may not be supported by
% some devices.
frameRate = 30;
src = getselectedsource(vidobj);
src.FrameRate = num2str(frameRate);

Шаг 2: регистрируйте и получите данные.

Инициируйте приобретение изображений и получите регистрируемые кадры и их метки времени.

% Start the acquisition.
start(vidobj)

% Wait for the acquisition to end.
wait(vidobj, 10)

% Retrieve the data.
[frames, timeStamp] = getdata(vidobj);

Шаг 3: вычислите разницу во времени между кадрами.

Зная фактическую частоту кадров устройства и интервал захвата, в котором регистрировались кадры, количество кадров, регистрируемых в секунду, может быть вычислено.

% Number of frames logged per second.
loggedPerSec = frameRate/grabInterval
loggedPerSec =

     3

Зная количество кадров, регистрируемых в секунду, ожидаемый временной интервал между каждым регистрируемым кадром может быть вычислен и сравнен.

% Expected number of seconds between each logged frame.
loggingRate = 1/loggedPerSec
loggingRate =

    0.3333
% Actual time difference between each logged frame.
% Note that frames were logged at a constant interval.
diff(timeStamp')
ans =

    0.3332    0.3338    0.3331    0.3332    0.3330    0.3332    0.3331    0.3330
% Determine the average time difference between frames.
avgDiff = mean(diff(timeStamp'))
avgDiff =

    0.3332
percentError = ( abs(loggingRate-avgDiff) ) * 100
percentError =

    0.0125
% Once the video input object is no longer needed, delete
% it and clear it from the workspace.
delete(vidobj)
clear vidobj