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