Определение уровня приобретения

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