opticalFlowFarneback

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

Описание

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

Создание

Описание

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

пример

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 = im2gray(frameRGB);  
    flow = estimateFlow(opticFlow,frameGray);
    
    imshow(frameRGB)
    hold on
    plot(flow,'DecimationFactor',[5 5],'ScaleFactor',2,'Parent',hPlot);
    hold off
    pause(10^-3)
end

Figure contains an axes and an object of type uipanel. The axes contains 2 objects of type image, quiver.

Figure contains an axes and an object of type uipanel. The axes contains 2 objects of type image, quiver.

Алгоритмы

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

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

Ссылки

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

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

.
Введенный в R2015b