【问题标题】:Local Binary Pattern in MATLABMATLAB 中的局部二进制模式
【发布时间】:2011-11-16 09:43:29
【问题描述】:

我正在尝试使用图像处理工具箱在 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 的数字。

【问题讨论】:

    标签: matlab image-processing


    【解决方案1】:

    I3(i-1,j-1)=I2(i-1,j-1)>J0; 创建一个逻辑输出。如果你不去把它转换成别的东西,你的形象只会是零和一。

    最简单的方法是在循环外初始化I3,即在开始循环之前有I3=I2;。这样,您在循环中的所有分配都将转换为 I2 的任何类。

    【讨论】:

      【解决方案2】:

      使用: 图,imshow(uint8(LBP));

      因为LBP图像是DOUBLE的,所以需要强制转换。

      【讨论】:

        猜你喜欢
        • 2016-06-28
        • 2016-03-02
        • 1970-01-01
        • 2015-01-26
        • 2015-10-20
        • 1970-01-01
        • 1970-01-01
        • 2018-09-17
        • 1970-01-01
        相关资源
        最近更新 更多