[英]Subscripted assignment dimensions mismatch error 4
我想使用我自己的myblockproc
函数(在下面给出代码)在全尺寸图像的不同块(子图像)上添加(或执行一些其他功能“有趣”)。 在这里,我使用了一个昏暗的5,5,4小矩阵进行测试,实际上我必须对m,n的四幅大尺寸图像执行功能(而不是加法),而我的实际图像的尺寸为m,n,4 。
我收到此错误:
Subscripted assignment dimension mismatch.
Error in myblockproc (line 30)
blk(:,:,k)=tmp(tc : tc+a-1 , tr : tr+b-1);
Error in testmyblock (line 19)
CR = myblockproc(I,3,3);
这是我在昏暗的5,5,4的测试矩阵上的代码。 块大小为2X2。
function [J] = fun(I)
J=I(:,:,1)+I(:,:,2)+I(:,:,3)+I(:,:,4);
end
function [J] = myblockproc(I,r,c)
[m,n,p]=size(I);
ro=ceil(m/r);
cl=ceil(n/c);
Rr=mod(m,r);
Rc=mod(n,c);
blk=zeros(r,c,p);
for i= 1:ro
a=r;
if i==ro
a=Rr;
end
tc=((i-1)*r)+1;
for j=1:cl
b=c;
if j==cl
b=Rc;
end
tr=((j-1)*c)+1;
for k=1 : p
tmp=I(:,:,k)
blk(:,:,k)=tmp(tc : tc+a-1 , tr : tr+b-1);
end
J=fun(blk);
end
end
function [CR] = testmyblock()
I(:,:,1)=[1 2 3 4 5 ;6 7 8 9 10 ;11 12 13 14 15; 16 17 18 19 20; 21 23 23 24 25];
I(:,:,2)=[1 2 3 4 5 ;6 7 8 9 10 ;11 12 13 14 15; 16 17 18 19 20; 21 23 23 24 25];
I(:,:,3)=[1 2 3 4 5 ;6 7 8 9 10 ;11 12 13 14 15; 16 17 18 19 20; 21 23 23 24 25];
I(:,:,4)=[1 2 3 4 5 ;6 7 8 9 10 ;11 12 13 14 15; 16 17 18 19 20; 21 23 23 24 25];
CR = myblockproc(I,3,3);
end
我不确定这些功能是否在同一文件中,但我希望不会,因为那样的话您可能会遇到另一个错误。 尽管要记住,matlab中的标准方法是所有子函数都应出现在调用它们的函数下方。
但是,出现此错误的原因是对于某些k
, size( blk(:, :, k) ) ~= size( tmp(tc:tc+a-1, tr:tr+b-1) )
。 我很难解决这个问题,因为我不知道您到底在做什么,因此无法说出如何修改向量的长度。 例如,我确实不知道它是blk
还是tc
, tr
,...这是不正确的。
解决此问题的最佳方法是使用调试器 。 在发生错误的行上设置一个断点,或将调试器设置为在发生错误时停止(通过键入dbstop error
或从菜单中设置断点)。 在这里,您可以检查blk
的大小并与tc
, tr
,...进行比较。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.