exponenta event banner

Оценка движения между двумя изображениями

В этом примере показано, как использовать Block Matching блок для оценки движения между двумя изображениями.

Считывание кадров изображения, для которых необходимо оценить движение.

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

Пример модели

Откройте модель, вызвав open в командной строке MATLAB. Укажите имя открываемого файла Simulink.

open_system('ex_blockmatching.slx');

Загрузите изображения в рабочее пространство модели с помощью Image From Workspace блок. Для прямого чтения изображений из расположения файла используйте Image From File вместо этого блокировать. Модель оценивает движение между двумя RGB-изображениями движущегося автомобиля, которые фиксируются через разные интервалы времени. Модель использует алгоритм трехэтапного согласования блоков для оценки движения. Функция затрат для согласования неперекрывающихся макроблоков устанавливается как среднеквадратическая ошибка (MSE). Размер макроблоков устанавливается равным 35 на 35, а максимальное смещение (в горизонтальном и вертикальном направлениях), допустимое для соответствующих блоков, устанавливается равным 7 пикселям. Выходная скорость Block Matching блок состоит как из горизонтальной, так и из вертикальной составляющих вектора движения в комплексной форме.

Вы можете использовать Compositing для наложения обоих изображений.

Выполнить модель

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

out = sim('ex_blockmatching.slx');

Показать результаты

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

vx = real(out.simout.Data);
vy = imag(out.simout.Data);
imageOverlay = out.simout1.Data;

Укажите точки на плоскости изображения относительно размера макроблоков.

x = 1:35:size(imageOverlay,1);
y = 1:35:size(imageOverlay,2);

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

figure,imshow(imageOverlay);
hold on
quiver(y',x,vx,vy,0);