如何在matlab中实现非均匀块LBP

时间:2014-09-16 20:29:35

标签: matlab image-processing

我有将LBP应用于图像的代码。之后,我需要将图像分成3×3块,并确定每个块是均匀的还是不均匀的。

function [M]=LBP(I)
%==========================================================================
Mc1=size(I,1);  %Height
Nc1=size(I,2);  %Width
      for i=2:Mc1-1   
      for j=2:Nc1-1 
         if (j<=Mc1-1)&& (i<=Nc1-1)
            J0=I(i,j);   
          I3(i-1,j-1)=I(i-1,j-1)>J0;  
           I3(i-1,j)=I(i-1,j)>J0;   
          I3(i-1,j+1)=I(i-1,j+1)>J0;  
            I3(i,j+1)=I(i,j+1)>J0;     
        I3(i+1,j+1)=I(i+1,j+1)>J0;    
          I3(i+1,j)=I(i+1,j)>J0;      
        I3(i+1,j-1)=I(i+1,j-1)>J0;     
         I3(i,j-1)=I(i,j-1)>J0;        
      I(i-1,j-1)=I3(i-1,j-1)*2^7+I3(i-1,j)*2^6+I3(i-1,j+1)*2^5+I3(i,j+1)*2^4+I3(i+1,j+1)*2^3+I3(i+1,j)*2^2+I3(i+1,j-1)*2^1+I3(i,j-1)*2^0; 
         end
end  
   end 
figure,imshow(uint8(I))
M=I;

我的代码正在运行,但我需要对其进行修改以检测块是均匀还是不均匀。

1 个答案:

答案 0 :(得分:0)

Local binary Pattern或LBP是一个强大的纹理描述符。它首先将图像分成单元格(例如,16×16像素的单元格)。对于该单元格中的每个像素,您将其8个邻居与其自身进行比较。如果邻居大于中心像素,则记录1,否则记录0.您将获得具有8位数的二进制数字流。将其转换为十进制。在整个细胞上进行直方图 - >这是单元格的LBP功能。连接所有单元格的功能,以获取整个图像的特征向量。

如何判断图像是否均匀?

那么,这实际上取决于你的一致性标准。

  1. 说,你想要将完全统一的图像与其他图像区分开来。这很容易。你的LBP直方图应该全部为零。
  2. 接下来,您有一个具有某些噪声像素的图像,它们之间的间隙总是超过1个像素。检测到这一点也很容易,如果噪声像素超过所有其他像素(由于两个噪声像素之间有> 1像素间隙而具有相同的值),那么您的LBP条目将为11111111或其他它将是00000000。很容易检测到。
  3. 一般情况:

    在这里你需要一些配方。第一步是收集统一+非均匀图像(也称为训练图像)的数据库。然后为所有这些提取LBP功能。您对这些特征向量执行训练,然后使用训练的分类器对新图像(也称为测试图像)进行分类。如果您的数据库相对于您的测试集有足够的变化,这应该会给您带来良好的结果。您可以使用任何分类器。我会推荐SVM,但这只是一个初步猜测。