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

Этот пример показывает, как создать видео алгоритм для обнаружения движения с помощью оптического метода оптического потока. В этом примере используется системный объект Image Acquisition Toolbox™ наряду с объектами Computer Vision Toolbox™ System.

Введение

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

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

Создайте объект Video Device System.

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

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

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

Сводные данные

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

Релиз

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

release(vidDevice);