将LBP划分为6x6矩阵

时间:2011-09-23 17:37:14

标签: matlab

以前,我为局部二进制模式(LBP)编写了一个代码,并获得了LBP图像和直方图。现在我想将图像分成6×6矩阵,并获得每个6x6矩阵的LBP图像和直方图。我写下面的代码。但它没有那么好用。

    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 个答案:

答案 0 :(得分:1)

我猜您仍在使用previous questions解决问题。

我假设mn表示I2矩阵的大小。如果是这种情况,那么这里的问题是kl变量的两个内部循环。它们来自ij的当前值,最高为i+6j+6。但ij本身可以分别达到m-1n-1,因此您会遇到“越界”错误。

如果我是正确的,您需要更改ij for-loops的上限:

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
%# ...