Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我得到了这个MATLAB函数。当我运行它时,出现以下错误信息。有人可以给我一些提示吗?谢谢。该代码也如下所示。
==> im_reg_MI处的错误为74 [a,b] = max(h(:));%找到MI的最大值并降低[h,im_matched,theta,I,J] = im_reg_MI('keyframe1.jpg','keyframe2.jpg',0,1)???未定义的函数或变量“ h”。 下面是代码。 [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 回答: 问题是您实际上没有为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 ,则从1:step:(m1-m)和/或1:step:(n1-n)将永远不会输入i或j一个或两个循环。 1:step:(n1-n)将创建一个空向量 。因此,内部循环代码将永远不会运行, h也不会创建。 还有一点注意... 我注意到,函数im_reg_MI似乎im_reg_MI两个图像视为2-D,这意味着它们必须是强度图像 (即灰度或二进制图像数据)。如果您要处理索引或RGB图像数据,我认为im_reg_MI无法正确处理它们。 更多&回答... |
![]() |
![]() |