在看到他们使用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
图像数据集