2011-09-23 6 views
-3

이전에, 저는 Local Binary Pattern (LBP)에 대한 코드를 작성하고 LBP 이미지와 히스토그램을 얻었습니다. 이제 이미지를 6x6 행렬로 나누고 각각의 6x6 행렬에 대해 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.

More, m과 n의 값은 394와 330입니다. 따라서 카운터 값은 55가되어야합니다. 그러나 나는 위에 나온 오류를 얻습니다.

답변

1

당신은 여전히 ​​previousquestions에서 문제를 해결하고 있습니다.

행렬의 크기는 mn으로 가정합니다. 이 경우 여기에있는 문제는 kl 변수에 대한 두 개의 내부 루프와 관련됩니다. 현재 값은 ij이고 최대 값은 i+6j+6입니다. 그러나 ij은 각각 m-1n-1에 도달 할 수 있으므로 "경계를 벗어났습니다"라는 오류가 발생합니다. 회신에 대한

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

이 문제를 해결 않았다 내가 올바른 생각하면

, 당신은-루프 ji의 상한을 변경해야 (for-loops 상한 변경)? – Amro

+0

문제를 해결하지 못했습니다 ... 왜 m-1-6입니까? –

관련 문제