我有将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;
我的代码正在运行,但我需要对其进行修改以检测块是均匀还是不均匀。
答案 0 :(得分:0)
Local binary Pattern或LBP是一个强大的纹理描述符。它首先将图像分成单元格(例如,16×16像素的单元格)。对于该单元格中的每个像素,您将其8个邻居与其自身进行比较。如果邻居大于中心像素,则记录1,否则记录0.您将获得具有8位数的二进制数字流。将其转换为十进制。在整个细胞上进行直方图 - >这是单元格的LBP功能。连接所有单元格的功能,以获取整个图像的特征向量。
如何判断图像是否均匀?
那么,这实际上取决于你的一致性标准。
11111111
或其他它将是00000000
。很容易检测到。一般情况:
在这里你需要一些配方。第一步是收集统一+非均匀图像(也称为训练图像)的数据库。然后为所有这些提取LBP功能。您对这些特征向量执行训练,然后使用训练的分类器对新图像(也称为测试图像)进行分类。如果您的数据库相对于您的测试集有足够的变化,这应该会给您带来良好的结果。您可以使用任何分类器。我会推荐SVM,但这只是一个初步猜测。