Разделение LBP на матрицы 6x6 - PullRequest
0 голосов
/ 23 сентября 2011

Ранее я написал код для локального двоичного шаблона (LBP) и получил изображение и гистограмму LBP.Теперь я хотел бы разделить изображение на матрицы 6x6 и получить изображение 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 Ответ

1 голос
/ 24 сентября 2011

Я думаю, вы все еще работаете над проблемой из ваших предыдущих вопросов .

Я предполагаю, что m и n обозначают размер матрицы I2. Если это так, то проблема здесь в двух внутренних циклах для переменных k и l. Они идут от текущих значений i и j и доходят до i+6 и j+6. Но сами i и j могут достигать m-1 и n-1 соответственно, таким образом вы получаете ошибки "вне границы".

Если я прав, вам нужно изменить верхние границы циклов 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
%# ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...