exponenta event banner

opticalFlowHS

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

Описание

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

Создание

Описание

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

пример

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

Например, opticalFlowHS('Smoothness',1.5)

Свойства

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

Ожидаемая плавность оптического потока, заданная как положительный скаляр. Увеличение этого значения при увеличении движения между последовательными кадрами. Типичное значение для 'Smoothness' находится вокруг 1.

Максимальное число итераций, указанное как скаляр с положительным целым числом. Увеличьте это значение, чтобы оценить оптический поток объектов с низкой скоростью.

Итеративное вычисление останавливается, когда число итераций равно значению 'MaxIteration' или когда алгоритм достигнет значения, установленного для 'VelocityDifference'. Прекращение вычислений только с помощью 'MaxIteration', установите значение 'VelocityDifference' кому 0.

Минимальная абсолютная разность скоростей, заданная как положительный скаляр. Это значение зависит от типа входных данных. Уменьшите это значение, чтобы оценить оптический поток объектов с низкой скоростью.

Итеративное вычисление останавливается, когда алгоритм достигает значения, установленного для 'VelocityDifference' или количество итераций равно 'MaxIteration'. Использовать только 'VelocityDifference' для прекращения вычислений, установить 'MaxIteration' кому Inf.

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

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

Примеры

свернуть все

Создать VideoReader объект для входного видеофайла, visiontraffic.avi. Укажите временную метку кадра, который будет считываться как 11.

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

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

opticFlow = opticalFlowHS
opticFlow = 
  opticalFlowHS with properties:

            Smoothness: 1
          MaxIteration: 10
    VelocityDifference: 0

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

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

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

while hasFrame(vidReader)
    frameRGB = readFrame(vidReader);
    frameGray = im2gray(frameRGB);  
    flow = estimateFlow(opticFlow,frameGray);
    imshow(frameRGB)
    hold on
    plot(flow,'DecimationFactor',[5 5],'ScaleFactor',60,'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.

Алгоритмы

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

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

Ixu + Iyv + Это = 0

.

  • Ix, Iy и это пространственно-временные производные яркости изображения.

  • u - горизонтальный оптический поток.

  • v - вертикальный оптический поток.