exponenta event banner

Определение скорости приобретения

В этом примере показано, как использовать временные метки, предоставляемые функцией GETDATA, и оценить частоту кадров устройства с помощью функций MATLAB ®.

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

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

Следует отметить, что, поскольку FrameRate является свойством устройства, не все устройства могут его поддерживать.

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

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

% Skip the first few frames the device provides
% before logging data.
vidobj.TriggerFrameDelay = 5;

% Access the device's video source.
src = getselectedsource(vidobj);

% Determine the device specific frame rates (frames per second) available.
frameRates = set(src, 'FrameRate')
frameRates = 

    '30.0000'
    '24.0000'
    '8.0000'	
% Configure the device's frame rate to the highest available setting.
src.FrameRate = frameRates{1};
actualRate = str2num( frameRates{1} )
actualRate =

    30

Шаг 2: Регистрация и извлечение данных.

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

% Start the acquisition.
start(vidobj)

% Wait for data logging to end before retrieving data.  Set the wait time
% to be equal to the expected time to acquire the number of frames
% specified plus a little buffer time to accommodate  overhead.
waittime = actualRate * (vidobj.FramesPerTrigger + vidobj.TriggerFrameDelay) + 5;
wait(vidobj, waittime);

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

Шаг 3: Расчет коэффициента приобретения.

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

% Graph frames vs time.
plot(timeStamp,'x')
xlabel('Frame Index')
ylabel('Time(s)')

Средняя разница во времени также может быть определена для сравнения с ожидаемой частотой обнаружения.

% Find the time difference between frames.
diffFrameTime = diff(timeStamp);

% Graph the time differences.
plot(diffFrameTime, 'x');
xlabel('Frame Index')
ylabel('Time Difference(s)')
ylim([0 .12])

% Find the average time difference between frames.
avgTime = mean(diffFrameTime)
avgTime =

    0.0333
% Determine the experimental frame rate.
expRate = 1/avgTime
expRate =

   30.0245

Сравнивая разницу во времени между экспериментальной и известной частотой кадров, можно вычислить процент ошибки. Поскольку в качестве устройства сбора данных используется универсальная веб-камера USB, следует ожидать, что фактическая частота кадров устройства будет колебаться.

% Determine the percent error between the determined and actual frame rate.
diffRates = abs(actualRate - expRate)
diffRates =

    0.0245	
percentError = (diffRates/actualRate) * 100
percentError =

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