2011-09-23 63 views
-3

此前,我爲Local Binary Pattern(LBP)編寫了一個代碼,並獲得了LBP圖像和直方圖。現在我想將圖像分成6×6矩陣,並獲得每個6×6矩陣的LBP圖像和直方圖。我編寫了下面的代碼。但它並沒有那麼好。將LBP劃分爲6x6矩陣

I2=imread('CropF.jpg'); 
    m=size(I2,1); 
    n=size(I2,2); 
    counter = 1; 
    for i=2:6:m-1 
     for j=2:6:n-1 
      for k=i:i+6 
       for l=j:j+6 
       J0=I2(k,l); 
       I3(k-1,l-1)=I2(k-1,l-1)>J0; 
       I3(k-1,l)=I2(k-1,l)>J0; 
       I3(k-1,l+1)=I2(k-1,l+1)>J0; 
       I3(k,l+1)=I2(k,l+1)>J0; 
       I3(k+1,l+1)=I2(k+1,l+1)>J0; 
       I3(k+1,l)=I2(k+1,l)>J0; 
       I3(k+1,l-1)=I2(k+1,l-1)>J0; 
       I3(k,l-1)=I2(k,l-1)>J0; 
       LBP(k,l)=I3(k-1,l-1)*2^7+I3(k-1,l)*2^6+I3(k-1,l+1)*2^5+I3(k,l+1)*2^4+I3(k+1,l+1)*2^3+I3(k+1,l)*2^2+I3(k+1,l-1)*2^1+I3(k,l-1)*2^0; 
       end 
      end 
      LBP=uint8(LBP); 
      LBPv=reshape(LBP,1,size(LBP,1)*size(LBP,2)); 
      Hist=hist(LBPv,0:255); 
      Hist1(counter,:)= Hist; 
      fname = sprintf('HistInf%03d.mat', counter);  
      save(fullfile(BASE_DIR,fname), 'Hist');  
      counter = counter + 1; 
     end 
    end 
    save('C:\Users\Lakshmen\Documents\MATLAB\HistInfMain','Hist1'); 

我有這樣的錯誤:??? Index exceeds matrix dimensions

更重要的是,我得到的m和n的值是394和330.因此,我應該得到的計數器的值是55,這是我得到的,但是我得到上面說的錯誤。

回答

1

我想你仍然在從你的previousquestions工作的問題。

我假設mn表示I2矩陣的大小。如果是這種情況,那麼這裏的問題是kl變量的兩個內部循環。他們從ij的當前值開始上升到i+6j+6。但是ij本身可以分別達到m-1n-1,因此你會得到「超出界限」的錯誤。

如果我是正確的,你需要改變上限的i的,j for循環:

counter = 1; 
Hist1 = [];    %# you can probably pre-allocate a fixed size here 
for i=2:6:m-1-6 
    for j=2:6:n-1-6 
     for k=i:i+6 
      for l=j:j+6 
       %#... 
      end 
     end 
     %# ... 
    end 
end 
%# ... 
+0

感謝回答......我將編輯QN .. –

+0

沒有這個解決問題(改變for-loops上限)? – Amro

+0

沒有解決問題...爲什麼m-1-6? –