2014-07-24 114 views
0

我想使用我自己的myblockproc函数(代码如下)在全尺寸图像的不同块(子图像)上添加(或执行一些其他功能的“乐趣”)。在这里,我用了一个小的5,5,4矩阵作为测试目的,实际上我必须在四个大尺寸图像上执行一个函数(不是加法),我的实际图像的四维尺寸是m,n,4 。下标的分配尺寸不匹配错误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 

回答

0

我不确定这些函数是否在同一个文件中,但我不期望,因为你可能会得到另一个错误。请记住,matlab中的标准方法是所有子函数都应该出现在调用它们的函数下面。

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

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