poster
2019-12-10, 20:48
我得到了这个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
回答:
问题是您实际上没有为image1和image2参数传递图像数据。您只是传递包含图像文件名'keyframe1.jpg'和'keyframe2.jpg'字符串。
您需要首先使用IMREAD (http://www.mathworks.com/help/techdoc/ref/imread.html)从文件中加载图像数据,然后将图像数据传递给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)将创建一个空向量 (http://www.mathworks.com/help/techdoc/ref/colon.html) 。因此,内部循环代码将永远不会运行, h也不会创建。
还有一点注意...
我注意到,函数im_reg_MI似乎im_reg_MI两个图像视为2-D,这意味着它们必须是强度图像 (http://www.mathworks.com/help/techdoc/creating_plots/f2-10709.html#f2-175) (即灰度或二进制图像数据)。如果您要处理索引 (http://www.mathworks.com/help/techdoc/creating_plots/f2-10709.html#f2-155)或RGB (http://www.mathworks.com/help/techdoc/creating_plots/f2-10709.html#f2-12468)图像数据,我认为im_reg_MI无法正确处理它们。
更多&回答... (https://stackoverflow.com/questions/4543468)
[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
回答:
问题是您实际上没有为image1和image2参数传递图像数据。您只是传递包含图像文件名'keyframe1.jpg'和'keyframe2.jpg'字符串。
您需要首先使用IMREAD (http://www.mathworks.com/help/techdoc/ref/imread.html)从文件中加载图像数据,然后将图像数据传递给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)将创建一个空向量 (http://www.mathworks.com/help/techdoc/ref/colon.html) 。因此,内部循环代码将永远不会运行, h也不会创建。
还有一点注意...
我注意到,函数im_reg_MI似乎im_reg_MI两个图像视为2-D,这意味着它们必须是强度图像 (http://www.mathworks.com/help/techdoc/creating_plots/f2-10709.html#f2-175) (即灰度或二进制图像数据)。如果您要处理索引 (http://www.mathworks.com/help/techdoc/creating_plots/f2-10709.html#f2-155)或RGB (http://www.mathworks.com/help/techdoc/creating_plots/f2-10709.html#f2-12468)图像数据,我认为im_reg_MI无法正确处理它们。
更多&回答... (https://stackoverflow.com/questions/4543468)