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

В этом примере показано, как использовать 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. Выходные параметры модели вектор движения и изображение overlayed.

out = sim('ex_blockmatching.slx');

Отображение результатов

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

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);

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

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