MATLAB中的局部二进制模式

时间:2011-09-13 17:59:53

标签: matlab image-processing

我正在尝试使用图像处理工具箱在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获得数字。enter image description here

2 个答案:

答案 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,你需要施放它。