Matlab 下标赋值维度不匹配错误4

Matlab 下标赋值维度不匹配错误4,matlab,Matlab,我想使用我自己的myblockproc函数(下面给出了代码)在全尺寸图像的不同块(子图像)上添加(或执行一些其他函数“fun”)。在这里,我使用了一个dim 5,5,4的小矩阵进行测试,实际上我必须对四个m的大尺寸图像执行一个函数(不是加法),我的实际图像的n维是m,n,4 我得到了这个错误: Subscripted assignment dimension mismatch. Error in myblockproc (line 30) blk(:,:,k)=tmp(tc :

我想使用我自己的
myblockproc
函数(下面给出了代码)在全尺寸图像的不同块(子图像)上添加(或执行一些其他函数“fun”)。在这里,我使用了一个dim 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);
这是我在dim 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中的标准方法是所有子函数都应显示在调用它们的函数下面

但是,出现此错误的原因是
size(blk(:,:,k))~=size(tmp(tc:tc+a-1,tr:tr+b-1))
对于某些
k
。这个问题对我来说很难解决,因为我不知道你到底在做什么,因此不能说如何修改向量的长度。例如,我不知道它是
blk
还是
tc
tr
,。。。这是不正确的

解决此问题的最佳方法是使用。在发生错误的行上设置断点,或将设置为在出现错误时停止(通过键入
dbstop error
或从菜单中设置断点)。在这里,您可以检查blk的大小,并与tc、tr、tc进行比较