我想实施统一的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。
答案 0 :(得分:2)
步骤
LBP
中的值构建一个查找表。
LBP
映射到59个标签中。
labeled = table(LBP) % this is called table lookup or MATLAB indexing.
建议(虽然没有必要实施)
I3(1), I3(2), ... I3(8)
,因为每次移动到下一个中心像素(i,j)
时都会重新分配它们。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