我正在尝试使用图像处理工具箱在MATLAB中执行本地二进制模式。当我执行时,我无法获得LBP图像和LBP直方图。
clear all;
close all;
clc;
I=imread('test.png');
figure,imshow(I)
%% Crop
I2 = imcrop(I);
figure, imshow(I2)
w=size(I2,1);
h=size(I2,2);
%% LBP
scale = 2.^[7 6 5; 0 -inf 4; 1 2 3];
for i=2:w-1
for j=2:h-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(LBP)
figure,imhist(LBP)
问题是什么。我应该从0到255获得数字。
答案 0 :(得分:2)
I3(i-1,j-1)=I2(i-1,j-1)>J0;
创建逻辑输出。如果你不把它转换成别的东西,你的图像只会是0和1。
最简单的方法是在循环外初始化I3
,即在开始循环之前使用I3=I2;
。这样,循环中的所有赋值都将转换为I2
所在的类。
答案 1 :(得分:0)
使用: 图中,imshow(UINT8(LBP));
因为LBP图像是DOUBLE,你需要施放它。