MATLAB函数问题

时间:2010-12-28 03:31:36

标签: function matlab undefined

我有这个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 个答案:

答案 0 :(得分:2)

问题是您实际上没有传递image1image2参数的图像数据。您只是传递包含图像文件名'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_MIimage21的轮换版本)与image2的大小相同或小于image1,则m1内似乎会出现其他错误。更多的维度。如果m小于或等于n1且/或n小于或等于i,则j的一个或两个循环或1:step:(m1-m)永远不会输入1:step:(n1-n)和/或h create an empty vector。因此,永远不会运行内循环代码,永远不会创建im_reg_MI

还有一个额外的注释......

我注意到函数im_reg_MI似乎将两个图像视为2-D,这意味着它们必须是intensity images(即灰度或二进制图像数据)。如果您正在处理indexedRGB图片数据,我认为{{1}}无法正确处理它们。