Определение уровня захвата

В этом примере показано, как использовать метки времени, обеспеченные функцией 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