opticalFlowFarneback

Объект для оценки использования оптического потока метод Farneback

Описание

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

Создание

Синтаксис

opticFlow = opticalFlowFarneback
opticFlow = opticalFlowFarneback(Name,Value)

Описание

opticFlow = opticalFlowFarneback возвращается оптический поток возражают, что можно использовать, чтобы оценить направление и скорость движущихся объектов в видео. Оптический поток оценивается с помощью метода Farneback.

пример

opticFlow = opticalFlowFarneback(Name,Value) возвращает объект оптического потока со свойствами, заданными в качестве одного или нескольких аргументов пары Name,Value. Любые незаданные свойства имеют значения по умолчанию. Заключите каждое имя свойства в кавычки.

Например, opticalFlowFarneback('NumPyramidLevels',3)

Свойства

развернуть все

Количество слоев пирамиды, заданных как положительная скалярная величина. Значение включает начальное изображение как один из слоев. Когда вы устанавливаете это значение к 1, функция оценивает, что оптический поток только от оригинального изображения структурирует, и не выполняет разложение пирамиды. Рекомендуемые значения между 1 и 4.

Отобразите шкалу, заданную как положительная скалярная величина в области значений (0,1). Значение задает уровень субдискретизации на каждом уровне пирамиды. Значение 0.5 создает классическую пирамиду, где разрешение пирамиды уменьшает фактором два на каждом уровне. Самый низкий уровень в пирамиде имеет самое высокое разрешение.

Количество поисковых итераций на уровень пирамиды, заданный как положительное целое число. Алгоритм Farneback выполняет итеративный поиск ключевых пунктов на каждом уровне пирамиды до сходимости.

Размер пиксельного окружения, заданного как положительное целое число. Увеличьте размер окружения, чтобы увеличить размытое движение. Движение размытости приводит к более устойчивой оценке оптического потока. Типичным значением для NeighborhoodSize является 5 или 7.

Составляя в среднем размер фильтра, заданный как положительное целое число в области значений [2, Inf). После того, как алгоритм вычисляет смещение (поток), усреднение по окружениям сделано с помощью Гауссова фильтра размера (FilterSize * FilterSize). Кроме того, пикселям близко к границам дают уменьшаемый вес, потому что алгоритм принимает, что полиномиальные коэффициенты расширения менее надежны там. Увеличение размера фильтра увеличивает робастность алгоритма к шуму изображения. Чем больше размер фильтра, тем больше алгоритм обрабатывает шум изображения и быстрое обнаружение движения, делая его более устойчивым.

Функции объекта

estimateFlowОцените оптический поток
resetСбросьте внутреннее состояние объекта оценки оптического потока

Примеры

свернуть все

Считайте видеофайл. Задайте метку времени кадра, который будет считан.

vidReader = VideoReader('visiontraffic.avi','CurrentTime',11);

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

opticFlow = opticalFlowFarneback
opticFlow = 
  opticalFlowFarneback with properties:

    NumPyramidLevels: 3
        PyramidScale: 0.5000
       NumIterations: 3
    NeighborhoodSize: 5
          FilterSize: 15

Создайте пользовательское окно рисунка, чтобы визуализировать векторы оптического потока.

h = figure;
movegui(h);
hViewPanel = uipanel(h,'Position',[0 0 1 1],'Title','Plot of Optical Flow Vectors');
hPlot = axes(hViewPanel);

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

while hasFrame(vidReader)
    frameRGB = readFrame(vidReader);
    frameGray = rgb2gray(frameRGB);  
    flow = estimateFlow(opticFlow,frameGray);
    
    imshow(frameRGB)
    hold on
    plot(flow,'DecimationFactor',[5 5],'ScaleFactor',2,'Parent',hPlot);
    hold off
    pause(10^-3)
end

Алгоритмы

Алгоритм Farneback генерирует пирамиду изображений, где каждый уровень имеет более низкое разрешение по сравнению с предыдущим уровнем. Когда вы выбираете уровень пирамиды, больше, чем 1, алгоритм может отследить точки на нескольких уровнях разрешения, запускающегося на самом низком уровне. Увеличение числа уровней пирамиды позволяет алгоритму обработать большие смещения точек между кадрами. Однако количество вычислений также увеличивается. Схема показывает пирамиду изображений с тремя уровнями.

Отслеживание начинается на самом низком уровне разрешения и продолжается до сходимости. Местоположения точки, обнаруженные на уровне, распространены как keypoints для последующего уровня. Таким образом алгоритм совершенствовал отслеживание с каждым уровнем. Разложение пирамиды позволяет алгоритму обработать большие пиксельные движения, которые могут быть расстояниями, больше, чем размер окружения.

Ссылки

[1] Farneback, G. “2D структурируйте оценку движения на основе полиномиального расширения”. В продолжениях 13-й скандинавской конференции по анализу изображения, 363 - 370. Хальмстад, Швеция: SCIA, 2003.

Расширенные возможности

Введенный в R2015b