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