2011-09-23 4 views
-3

以前は、ローカルバイナリパターン(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とします。その場合、ここでの問題は、kl変数の2つの内部ループです。現在の値はijで、i+6j+6になります。しかし、ijはそれぞれm-1n-1に達することができます。したがって、あなたは「範囲外」エラーに遭遇します。 forループ

私が正しいだ場合、あなたはiの上限を変更する必要があり、j:返信用

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ループの上限を変更する)? – Amro

+0

は問題を解決しませんでした...なぜm-1-6ですか?上記で説明したように –