exponenta event banner

opticalFlowFarneback

Объект для оценки оптического потока методом Фарнбека

Описание

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

Создание

Описание

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

пример

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

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

Свойства

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

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

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

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

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

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

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

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

Примеры

свернуть все

Прочитайте видеофайл. Укажите метку времени считываемого кадра.

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

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

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

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

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.

Алгоритмы

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

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

Ссылки

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

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

.
Представлен в R2015b