如何实施统一LBP?

时间:2011-09-29 18:36:10

标签: image-processing computer-vision

  

可能重复:
  Local Binary Pattern in MATLAB

我想实施统一的LBP。这是维基百科给出的统一LBP的定义。

  

如果二进制模式,则本地二进制模式称为uniform   最多包含从0到1的两个按位转换,反之亦然   当位模式循环遍历时。例如,   模式00000000(0转换),01110000(2转换)和   11001111(2个转换)是均匀的,而图案11001001(4   转换)和01010010(6转换)不是。在计算中   在LBP标签中,使用均匀图案以便存在   每个均匀图案的单独标签和所有非均匀图案   模式用单个标签标记。例如,使用时   (8,R)邻域,共有256种模式,其中58种是   均匀,产生59种不同的标签。

我已为LBP编写代码,但不确定如何将其转换为统一的LBP。以下是LBP的代码。

for i=2:m-1
    for j=2:n-1
        J0=I2(i,j);
        I3(i-1,j-1)=I2(i-1,j-1)>J0;
        I3(i-1,j)=I2(i-1,j)>J0;
        I3(i-1,j+1)=I2(i-1,j+1)>J0; 
        I3(i,j+1)=I2(i,j+1)>J0;
        I3(i+1,j+1)=I2(i+1,j+1)>J0; 
        I3(i+1,j)=I2(i+1,j)>J0; 
        I3(i+1,j-1)=I2(i+1,j-1)>J0; 
        I3(i,j-1)=I2(i,j-1)>J0;
        LBP(i,j)=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
figure,imshow(uint8(LBP))

任何帮助将不胜感激。我正在使用MATLAB。

2 个答案:

答案 0 :(得分:2)

步骤

  1. 下一步是为存储在LBP中的值构建一个查找表。
    • 查找表将256种可能的组合映射到59种不同的标签中。
    • 如果速度不重要,可以使用for循环构建表。
  2. 使用该表将LBP映射到59个标签中。
    • labeled = table(LBP) % this is called table lookup or MATLAB indexing.
  3. 使用这59个标签执行任何其他工作。

  4. 建议(虽然没有必要实施)

    1. I3无需使用2D矩阵。当前像素的八个邻居对于您正在处理的当前像素是本地的;因此,您只需将它们分配给I3(1), I3(2), ... I3(8),因为每次移动到下一个中​​心像素(i,j)时都会重新分配它们。

    2. function table = BitwiseToLBP
          % we reserve label 0 for non-uniform
          table = zeros(1, 256);
          nextLabel = 1;
          for k = 1:256,
              bits = bitand(k, 2.^(0:7)) > 0;
              if IsUniformLBP(bits),
                  table(k) = nextLabel;
                  nextLabel = nextLabel + 1;
              else
                  table(k) = 0;
              end
          end
      end
      

      function IsUniformLBP(bits)
          nnz(diff(bits([1:end, 1]))) == 2;
      end
      

答案 1 :(得分:0)

我试过这段代码:

 sum = abs(I3(k-1,l-1)-I3(k-1,l))+ abs(I3(k-1,l)-I3(k-1,l+1))+ abs(I3(k-1,l+1)-I3(k,l+1))+ abs(I3(k,l+1)-I3(k+1,l+1))+abs(I3(k+1,l+1)-I3(k+1,l))+abs(I3(k+1,l)-I3(k+1,l-1))+abs(I3(k+1,l-1)-I3(k,l-1));
    if(sum <=2)
            UniformHist = [UniformHist Hist];
    end