我有这个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
答案 0 :(得分:2)
问题是您实际上没有传递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
create an empty vector。因此,永远不会运行内循环代码,永远不会创建im_reg_MI
。
还有一个额外的注释......
我注意到函数im_reg_MI
似乎将两个图像视为2-D,这意味着它们必须是intensity images(即灰度或二进制图像数据)。如果您正在处理indexed或RGB图片数据,我认为{{1}}无法正确处理它们。