Вычислите скорости оптического потока

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

Считайте два фрейма изображения из последовательности изображений в рабочее пространство MATLAB.

I1 = imread('car_frame1.png');
I2 = imread('car_frame2.png');

Откройте модель Simulink®.

modelname = 'ex_blkopticalflow.slx';
open_system(modelname)

Модель читает изображения при помощи блока Image From Workspace. Чтобы вычислить скорости оптического потока, необходимо сначала преобразовать входные цветные изображения в изображения интенсивности при помощи блока Color Space Conversion. Затем найдите скорости при помощи Optical Flow блок с этими значениями параметров:

  • Метод - Horn-Schunck

  • Вычислите оптический поток между - Two images

  • Фактор гладкости - 1

  • Остановите итеративное решение - When maximum number of iterations is reached

  • Максимальное количество итераций - 10

  • Velocity выход - Horizontal and vertical components in complex form

Наложите обоих фреймы изображения при помощи блока Compositing и используйте наложенное изображение, чтобы построить результаты.

Запустите модель.

out = sim(modelname);

Считайте выходные скорости и наложенное изображение.

Vx = real(out.simout);
Vy = imag(out.simout);
img = out.simout1;

Создайте объект оптического потока при помощи opticalFlow функция.

flow = opticalFlow(Vx,Vy);

Отобразите наложенное изображение и постройте векторы скорости при помощи plot функция.

figure
imshow(img)
hold on
plot(flow,'DecimationFactor',[5 5],'ScaleFactor',40)