學習LBP特征


1、LBP特征背景介紹

     LBP指局部二值模式,英文全稱:Local Binary Pattern,是一種用來描述圖像局部特征的算子,LBP特征具有灰度不變性和旋轉不變性等顯著優點。它是由T. Ojala, M.Pietikäinen, 和 D. Harwood [1][2]在1994年提出,由於LBP特征計算簡單、效果較好,因此LBP特征在計算機視覺的許多領域都得到了廣泛的應用,LBP特征比較出名的應用是用在人臉識別和目標檢測中,在計算機視覺開源庫OpenCV中有使用LBP特征進行人臉識別的接口,也有用LBP特征訓練目標檢測分類器的方法,Opencv實現了LBP特征的計算,但沒有提供一個單獨的計算LBP特征的接口。

2、MATLAB代碼

 1 %2017-05-12 學習LBP特征  2 
 3  clc;  4  clear;  5 
 6 %讀圖操作  7 img=imread('船 (403).bmp');  8 [m,n]=size(img);  9 figure(1); 10 imshow(img,[]); 11 title('原圖'); 12 %%
13 %求原始的LBP特征 14 img_LBP=zeros(m,n); 15 for i=2:m-1
16    for j=2:n-1 
17        
18        code=zeros(1,8);    %行向量 19        code(1)=img(i-1,j-1)>img(i,j); 20        code(2)=img(i-1,j)>img(i,j); 21        code(3)=img(i-1,j+1)>img(i,j); 22        code(4)=img(i,j+1)>img(i,j); 23        code(5)=img(i+1,j+1)>img(i,j); 24        code(6)=img(i+1,j)>img(i,j); 25        code(7)=img(i+1,j-1)>img(i,j); 26        code(8)=img(i,j-1)>img(i,j); 27        for p=1:8
28            img_LBP(i,j)=img_LBP(i,j)+code(p)*2^(8-p);     %從左上角開始,順時針編碼 29  end 30        
31  end 32 end 33 
34 figure(2); 35 imshow(img_LBP,[]); 36 title('original LBP'); 37 %%
38 %求旋轉不變LBP 39 img_LBP_ri=zeros(m,n); 40 for i=2:m-1
41    for j=2:n-1 
42        
43        code=zeros(1,8);    %行向量,原始LBP特征編碼 44        code(1)=img(i-1,j-1)>img(i,j); 45        code(2)=img(i-1,j)>img(i,j); 46        code(3)=img(i-1,j+1)>img(i,j); 47        code(4)=img(i,j+1)>img(i,j); 48        code(5)=img(i+1,j+1)>img(i,j); 49        code(6)=img(i+1,j)>img(i,j); 50        code(7)=img(i+1,j-1)>img(i,j); 51        code(8)=img(i,j-1)>img(i,j); 52        for p=1:8
53            img_LBP_ri(i,j)=img_LBP_ri(i,j)+code(p)*2^(8-p);     %從左上角開始,順時針編碼 54  end 55        
56        %循環左移,移動k位相當於把開頭的k個數放到最右邊 57        for k=1:7
58            code=[code(k+1:end) code(1:k)];    %移位之后的二進制編碼,右移表達式 code=[code(end-k+1:end) code(1:end-k)] 59            temp=0; 60            for p=1:8
61                temp=temp+code(p)*2^(8-p); 62  end 63            if temp<img_LBP_ri(i,j)    %取旋轉之后的最小值 64                img_LBP_ri(i,j)=temp; 65  end 66  end 67        
68  end 69 end 70 
71 figure(3); 72 imshow(img_LBP_ri,[]); 73 title('rotate invariant LBP');

3、LBP特征圖像

 4、LBPH的求法

      LBPH(Local Binary PatternsHistograms),局部二進制編碼直方圖,建立在LBPH基礎之上的人臉識別法基本思想如下:

(1)首先以每個像素為中心,判斷與周圍像素灰度值大小關系,對其進行二進制編碼,從而獲得整幅圖像的LBP編碼圖像;

(2)再將LBP圖像分為個區域,獲取每個區域的LBP編碼直方圖,繼而得到整幅圖像的LBP編碼直方圖;

(3)通過比較不同圖像LBP編碼直方圖達到圖像分類的目的,其優點是不會受到光照、縮放、旋轉和平移的影響。

比如說,對應、於一張200*200的圖片,照上述方法求出LBP特征圖像(在最外圈補0)也為200*200,再將LBP圖像分為10行10列,按行求出每一小塊20*20的直方圖。

問題在於如何歸一化,特意查了一下數據歸一化的方法,如下:

數據歸一化和兩種常用的歸一化方法

      數據標准化(歸一化)處理是數據挖掘的一項基礎工作,不同評價指標往往具有不同的量綱和量綱單位,這樣的情況會影響到數據分析的結果,為了消除指標之間的量綱影響,需要進行數據標准化處理,以解決數據指標之間的可比性。原始數據經過數據標准化處理后,各指標處於同一數量級,適合進行綜合對比評價。

以下是兩種常用的歸一化方法:

一、min-max標准化(Min-Max Normalization)

也稱為離差標准化,是對原始數據的線性變換,使結果值映射到[0 , 1]之間。轉換函數如下:

                                                           

其中max為樣本數據的最大值,min為樣本數據的最小值。這種方法有個缺陷就是當有新數據加入時,可能導致max和min的變化,需要重新定義。

二、Z-score標准化方法

這種方法給予原始數據的均值(mean)和標准差(standard deviation)進行數據的標准化。經過處理的數據符合標准正態分布,即均值為0,標准差為1,轉化函數為:

                                                                             

其中μ為所有樣本數據的均值,σ為所有樣本數據的標准差。

 

 

但是網上看到有人解析Opencv里面用LBP 作人臉識別時說到直方圖歸一化,直接對直方圖除以上文舉例中的20*20

 

參考博客:http://blog.csdn.net/sinat_25885063/article/details/43704005


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM