Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 MATLAB函数问题

我得到了这个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从文件中加载图像数据,然后将图像数据传递给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无法正确处理它们。



更多&回答...
poster 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 21:26


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.