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

В этом примере показано, как использовать 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);