В этом примере показано, как использовать метки времени, обеспеченные функцией GETDATA, и оценить частоту кадров устройства с помощью функций MATLAB®.
Создайте объект ввода видео и получите доступ к его объекту источника видеосигнала сконфигурировать желаемый уровень приобретения. Уровень приобретения определяется значением устройства определенное свойство 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
Инициируйте приобретение и получите регистрируемые системы координат и метки времени.
% 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);
Путем графического вывода метки времени каждой системы координат можно проверить, что уровень приобретения является постоянным.
% 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