2011-09-13 18 views
3

我想在MATLAB中使用圖像處理工具箱執行本地二進制模式。當我執行時,我無法獲得LBP圖像和LBP直方圖。在MATLAB中的本地二進制模式

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) 

什麼issue.i我應該得到的數字從0到255 enter image description here

回答

2

I3(i-1,j-1)=I2(i-1,j-1)>J0;創建一個邏輯作爲輸出。如果你不去,並把它投到別的東西,你的形象只會是零和一個。

最簡單的方法是在循環外部初始化I3,即在開始循環之前有I3=I2;。這樣,循環內的所有分配都會轉換爲I2所屬的類。

+0

非常感謝ypi .... –

0

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

因爲LBP圖像在DOUBLE中,所以需要將它施放。