LBP不适用于纹理匹配

时间:2014-06-26 18:44:55

标签: matlab image-processing textures histogram

在看到他们使用LBP进行纹理识别的文章很少之后, 我实现了一个简单的LPB并使用bhattacharya距离来获得相似性的分数。 但对于完全不同的纹理,得分不够好。我在代码中做错了吗?或者LBP不是纹理的好方法。

    function LBP()

    clc;
    im=imread('bark1.jpg');
    subplot(2,2,1);imshow(im);



     [r c]=size(im);
     h1=tex_lpb(im,r,c);
      subplot(2,2,2);plot(h1 );
    im_2=imread('t_shirt.jpg');
    im_2=rgb2gray(im_2);
     subplot(2,2,3);imshow(im_2);

     [r c]=size(im_2);
     h2=tex_lpb(im_2,r ,c );

     subplot(2,2,4);plot(h2);

     weight=sum(sqrt(h1.*h2))


    end




    function h= tex_lpb(im,r,c)

      im_lpb=zeros(r,c);
    for i=2:r-1

        for j=2:c-1
        a=[];
        %checking with the 8 nieghbours

        %N-W
            if(im(i,j)>im(i-1,j-1))
                a=[a 0];
            else
                a=[a 1];
            end

         %N   
            if(im(i,j)>im(i-1,j))
                a=[a 0];
            else
                a=[a 1];
            end

           %N-E 
            if(im(i,j)>im(i-1,j+1))
                a=[a 0];
            else
                a=[a 1];
            end

            %E
            if(im(i,j)>im(i,j+1))
                a=[a 0];
            else
                a=[a 1];
            end


            %S-E
            if(im(i,j)>im(i+1,j+1))
                a=[a 0];
            else
                a=[a 1];
            end

            %S
            if(im(i,j)>im(i+1,j))
                a=[a 0];
            else
                a=[a 1];
            end

            %S-W
            if(im(i,j)>im(i+1,j-1))
                a=[a 0];
            else
                a=[a 1];
            end

            %W
            if(im(i,j)>im(i,j-1))
                a=[a 0];
            else
                a=[a 1];
            end

      b=0;
      dec=8;

%changing into decimal
      for k=0:7
          b=a(dec)*(2^k)+b;
          dec=dec-1;
      end
      b;
        im_lpb(i,j)=b;
        end
    end


    h=hist_vec(im_lpb);% getting histogram




    end

    function h=hist_vec(im_lpb)

    [r c]=size(im_lpb);

    h=zeros(1,256);
    for i=1:r
        for j=1:c
            h(1,im_lpb(i,j)+1)=h(1,im_lpb(i,j)+1)+1;
        end
    end

    h=h/sum(h);
    end

图像数据集

enter image description here

enter image description here

enter image description here

enter image description here

0 个答案:

没有答案