Проблема в том, что вы фактически не передаете данные изображения для аргументов image1
и image2
.Вы просто передаете строки символов, содержащие имена файлов изображений 'keyframe1.jpg'
и 'keyframe2.jpg'
.
. Сначала необходимо загрузить данные изображений из файлов, используя IMREAD , а затем передать изображениеданные до im_reg_MI
.Предполагая, что изображения находятся в текущем рабочем каталоге, вы должны сделать что-то вроде этого:
image1 = imread('keyframe1.jpg');
image2 = imread('keyframe2.jpg');
[h,im_matched,theta,I,J] = im_reg_MI(image1,image2,0,1);
РЕДАКТИРОВАТЬ:
Кажется, есть дополнительная ошибка в im_reg_MI
это происходит, если image21
(повернутая версия image2
) имеет тот же размер или меньше, чем image1
для одного или нескольких его измерений.Если m1
меньше или равно m
и / или n1
меньше или равно n
, то один или оба цикла для i
или j
никогда не будут введены, так как 1:step:(m1-m)
и / или 1:step:(n1-n)
создаст пустой вектор .Таким образом, код внутреннего цикла никогда не будет выполняться, и h
никогда не будет создан.
И еще одна заметка ...
Я заметил, что функция im_reg_MI
, по-видимому, обрабатывает два изображения как двумерные, что означает, что они должны быть изображениями с интенсивностью (т. Е. Данные в градациях серого или двоичные изображения).Если вы имеете дело с индексированными или RGB данными изображений, я не думаю, что im_reg_MI
будет обрабатывать их должным образом.