2014-07-24 110 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,...