Живое обнаружение движения Используя оптический поток

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

Введение

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

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

Создайте Системный объект Видеоустройства.

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);