Проблема с функциями MATLAB - PullRequest
       5

Проблема с функциями MATLAB

1 голос
/ 28 декабря 2010

Я получил эту функцию MATLAB. Когда я его запустил, появилась следующая ошибка. Кто-нибудь может дать мне подсказку? Спасибо. Код также показан ниже.

[h, im_matched, theta, I, J] = im_reg_MI ('keyframe1.jpg', 'keyframe2.jpg', 0, 1) ??? Неопределенная функция или переменная "h".

Ошибка в ==> im_reg_MI на 74 [a, b] = max (h (:));% для определения максимального значения MI и нерешительности

Ниже приведен код.

[h,im_matched, theta,I,J]=im_reg_MI(image1, image2, angle, step)  
[m,n]=size(image1);  
[p,q]=size(image2);   
[a,b]=size(angle);  
im1=round(image1);   

for k=1:b  
    J = rotate_image(angle(k),image2); %rotated cropped IMAGE2  
    image21=round(J);  
    [m1,n1]=size(image21);  
    for i=1:step:(m1-m)  
        for j=1:step:(n1-n)  
                im2=image21(i:(i+m-1),j:(j+n-1)); % selecting part of IMAGE2 matching the size of IMAHE1   
                im2=round(im2);   
                h(k,i,j)=MI2(im1,im2); % calculating MI  
            end  
        end  
    end  


[a, b] = max(h(:));% finding the max of MI and indecises

1 Ответ

2 голосов
/ 28 декабря 2010

Проблема в том, что вы фактически не передаете данные изображения для аргументов 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 будет обрабатывать их должным образом.

...