exponenta event banner

Обнаружение движения в реальном времени с использованием оптического потока

В этом примере показано, как создать алгоритм видео для обнаружения движения с использованием метода оптического потока. Этот пример использует Приобретение Изображения Системный Объект Toolbox™ наряду с Системными объектами Computer Vision Toolbox™.

Введение

В этом примере осуществляется потоковая передача изображений из устройства получения изображений для обнаружения движения в реальном видео. Он использует метод оптической оценки потока для оценки векторов движения в каждом кадре видеопоследовательности. Как только векторы движения определены, мы нарисуем их над движущимися объектами в видеопоследовательности.

Инициализация

Создайте объект «Система видеоустройств».

vidDevice = imaq.VideoDevice('winvideo', 1, 'YUY2_320x240', ...
                             'ReturnedColorSpace', 'rgb', ...
                             'DeviceProperties.Brightness', 130, ...
                             'DeviceProperties.Sharpness', 50);

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

opticFlow = opticalFlowHS;

Цикл сбора и обработки потоков

Создайте цикл обработки для обнаружения движения во входном видео. В этом цикле используются созданные выше системные объекты.

% Set up for stream
nFrames = 0;
while (nFrames<100)     % Process for the first 100 frames.
    % Acquire single frame from imaging device.
    frameRGB = vidDevice();

    % Compute the optical flow for that particular frame.
    flow = estimateFlow(opticFlow,rgb2gray(frameRGB));

    imshow(frameRGB)
    hold on
    plot(flow,'DecimationFactor',[5 5],'ScaleFactor',25)
    hold off

    % Increment frame count
    nFrames = nFrames + 1;
end

Резюме

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

Выпуск

Здесь вызывается метод деблокирования объектов System для закрытия всех открытых файлов и устройств.

release(vidDevice);