opticalFlowFarneback

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

Описание

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

Создание

Описание

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