1. 程式人生 > >區域性二值模式(LBP)理論學習與演算法實現

區域性二值模式(LBP)理論學習與演算法實現

專案原始碼:https://github.com/zhongqianli/local_binary_pattern

一、概念

區域性二值模式, Local binary patterns, LBP, 一種用於紋理分類的特徵。如果區域性二值模式特徵與方向梯度直方圖結合,則可以在一些集合上十分有效的提升檢測效果。它將各個畫素與其附近的畫素進行比較,並把結果儲存為二進位制數。由於其辨別力強大和計算簡單,區域性二值模式紋理運算元已經在不同的場景下得到應用。LBP最重要的屬性是對諸如光照變化等造成的灰度變化的魯棒性。它的另外一個重要特性是它的計算簡單,這使得它可以對影象進行實時分析。

二、分類

1、原始的區域性二值模式
這裡寫圖片描述
這裡寫圖片描述

在最簡簡化的情況下,區域性二值模式特徵向量可以通過如下方式計算:
* 將檢測視窗切分為區塊(cells,例如,每個區塊3x3畫素)。
* 對區塊中的每個畫素,與它的八個鄰域畫素進行比較(左上、左中、左下、右上等)。可以按照順時針或者逆時針的順序進行比較。
* 對於中心畫素大於某個鄰域的,設定為1;否則,設定為0。這個過程類似影象處理中的二值化。這就獲得了一個8位的二進位制數(通常情況下會轉換為十進位制數字),作為該位置的特徵。
* 對每一個區塊計算直方圖。
* 此時,可以選擇將直方圖歸一化;
* 串聯所有區塊的直方圖,這就得到了當前檢測視窗的特徵向量。
此特徵向量可以通過諸如支援向量機等機器學習演算法來產生一個分類器。
這裡寫圖片描述

2、圓形區域性二值模式(Extended LBP or Circular LBP)

基本的區域性二值模式運算元的最大缺陷在於它只覆蓋了一個固定半徑範圍內的小區域,這顯然不能滿足不同尺寸和頻率紋理的需要。為了適應不同尺度的紋理特徵,並達到灰度和旋轉不變性的要求,Ojala等對區域性二值模式運算元進行了改進,將3×3鄰域擴充套件到任意鄰域,並用圓形鄰域代替了正方形鄰域,改進後的區域性二值模式運算元允許在半徑為 R 的圓形鄰域內有任意多個畫素點。從而得到了諸如半徑為R的圓形區域內含有P個取樣點的區域性二值模式運算元。
這裡寫圖片描述
3、旋轉不變的區域性二值模式
從區域性二值模式的定義可以看出,區域性二值模式運算元是灰度不變的,但卻不是旋轉不變的。影象的旋轉就會得到不同的區域性二值模式值。Maenpaa等人又將區域性二值模式運算元進行了擴充套件,提出了具有旋轉不變性的區域性二值模式運算元,即不斷旋轉圓形鄰域得到一系列初始定義的區域性二值模式值,取其最小值作為該鄰域的區域性二值模式值。
這裡寫圖片描述

這裡寫圖片描述

4、等價模式(Uniform pattern)
一個有效的擴充套件被稱為“等價模式”,可用於對特徵向量降維,以及實現簡單的旋轉不變運算元。其主要根據是一些模式比另一些模式更加常見。當某個LBP只包含從0到1或從1到0的最多兩次跳變時,該LBP被定義為一個等價模式。例如,00010000(2次跳變)是一個等價模式,01010100(6次跳變)不是。在計算LBP的直方圖時,對於每一個等價模式都各有一個組(bin),而所有非等價模式都被歸類到一個單獨的組中。使用等價模式,一個區塊的特徵長度能從256降到59。The 58 uniform binary patterns correspond to the integers 0, 1, 2, 3, 4, 6, 7, 8, 12, 14, 15, 16, 24, 28, 30, 31, 32, 48, 56, 60, 62, 63, 64, 96, 112, 120, 124, 126, 127, 128, 129, 131, 135, 143, 159, 191, 192, 193, 195, 199, 207, 223, 224, 225, 227, 231, 239, 240, 241, 243, 247, 248, 249, 251, 252, 253, 254 and 255.

5、旋轉不變的等價模式
這裡寫圖片描述
對於半徑為R, 點的個數為P的圓形的旋轉不變的Uniform Pattern, 取值範圍[0, P+1],LBP直方圖的Bins為P+2維。

三、應用

區域性二值模式已經應用在指紋識別、光學字元識別、人臉識別及車牌識別等領域。

上述提取的區域性二值模式運算元在每個畫素點都可以得到一個區域性二值模式“編碼”,那麼,對一幅影象(記錄的是每個畫素點的灰度值)提取其原始的LBP運算元之後,得到的原始LBP特徵依然是“一幅圖片”(記錄的是每個畫素點的區域性二值模式值)。

在區域性二值模式的應用中,如紋理分類及人臉分析等,一般都不將區域性二值模式圖譜作為特徵向量用於分類識別,而是採用區域性二值模式特徵譜的統計直方圖作為特徵向量用於分類識別。因為,從上面的分析我們可以看出,這個“特徵”跟位置資訊是緊密相關的。直接對兩幅圖片提取這種“特徵”,並進行判別分析的話,會因為“位置沒有對準”而產生很大的誤差。後來,研究人員發現,可以將一幅圖片劃分為若干的子區域,對每個子區域內的每個畫素點都提取區域性二值模式特徵,然後,在每個子區域內建立區域性二值模式特徵的統計直方圖。如此一來,每個子區域,就可以用一個統計直方圖來進行描述;整個圖片就由若干個統計直方圖組成。

四、演算法實現

scikit-image中實現的演算法:

lbp = feature.local_binary_pattern(image, self.numPoints,
			self.radius, method="uniform")
scikit-image中實現了五種LBP演算法,應該都是基於paper
《Multiresolution Gray-Scale and Rotation Invariant Texture 
Classification with Local Binary Patterns》實現的:
	* 'default': original local binary pattern which is gray scale but not
        rotation invariant.
    * 'ror': extension of default implementation which is gray scale and
        rotation invariant.
    * 'uniform': improved rotation invariance with uniform patterns and
        finer quantization of the angular space which is gray scale and
        rotation invariant.
    * 'nri_uniform': non rotation-invariant uniform patterns variant
        which is only gray scale invariant.
    * 'var': rotation invariant variance measures of the contrast of local
        image texture which is rotation but not gray scale invariant.

為了深入理解paper,決定研究一下它的原始碼。花了一下午,最終將我最感興趣的Uniform Pattern部分移植出來了。寫了python和c++兩個版本,方便用python訓練模型,c++部署模型。

下載地址:
http://download.csdn.net/download/zhongqianli/9954304
或者https://github.com/zhongqianli/local_binary_pattern

五、相關引用

(1) Local binary patterns: https://en.wikipedia.org/wiki/Local_binary_patterns
(2) http://blog.csdn.net/zouxy09/article/details/7929531
(3) scikit-image: http://scikit-image.org/
(4)《Multiresolution Gray-Scale and Rotation Invariant Texture Classification with Local Binary Patterns》