opticalFlowLK

Объект для оценки оптического потока с помощью метода Лукаса-Кэнэйда

Описание

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

Создание

Описание

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

пример

opticFlow = opticalFlowLK('NoiseThreshold',threshold) возвращает объект оптического потока со свойством 'NoiseThreshold' заданный как Name,Value пара. Заключите имя свойства в кавычки.

Например, opticalFlowLK('NoiseThreshold',0.05)

Свойства

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

Порог для шумоподавления в виде положительной скалярной величины. Когда вы увеличиваете это число, перемещение объектов оказывает меньше влияния на вычисление оптического потока.

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

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

Примеры

свернуть все

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

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

Создайте объект оптического потока для оценки оптического потока с помощью метода Лукаса-Кэнэйда. Задайте порог для шумоподавления. Выход является объектом оптического потока определение метода оценки оптического потока и его свойств.

opticFlow = opticalFlowLK('NoiseThreshold',0.009);

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

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',10,'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+It=0

.

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

  • u является горизонтальным оптическим потоком.

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

Ссылки

[1] Баррон, J. L. Д. Дж. Флит, С. С. Беокемин и Т. А. Беркитт. “Эффективность методов оптического потока”. В Продолжениях Конференции по IEEE по Компьютерному зрению и Распознаванию образов (CVPR), 236-242. Равнина, IL: CVPR, 1992.

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

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Представленный в R2015a