Local binary pattern (LBP),在機器視覺領(lǐng)域,是非常重要的一種特征。LBP可以有效地處理光照變化,在紋理分析,紋理識別方面被廣泛應(yīng)用。
LBP 的算法非常簡單,簡單來說,就是對圖像中的某一像素點的灰度值與其鄰域的像素點的灰度值做比較,如下圖所示:
如果鄰域像素值比該點大,則賦為1,反之,則賦為0,這樣從左上角開始,可以形成一個bit chain,然后將該 bit chain 轉(zhuǎn)換為一個十進制的數(shù),用表達式可以表達如下:
其中,s 表示一個閾值函數(shù),滿足如下關(guān)系:
通過這種轉(zhuǎn)換,可以將一個像素點與鄰域的差值關(guān)系用一個數(shù)表示,因為LBP 記錄的是像素點與鄰域像素的差值關(guān)系,所以光照變化引起像素值的同增同減不會改變LBP的大小,特別是在局部的區(qū)域,我們可以認為光照對圖像造成的像素值變化是單向的,所以LBP可以很好的保存圖像中像素值的差值關(guān)系。可以進一步將LBP 做直方圖統(tǒng)計,這個直方圖可以用來作為紋理分析的特征算子。
我們可以看到,R 表示鄰域的半徑,P 表示鄰域像素的個數(shù),或者bit chain 的長度,如果鄰域的半徑為1,則鄰域的像素個數(shù)為8, bit chain 的長度為8,如果鄰域半徑為2,則鄰域的像素個數(shù)為16,bit chain 的長度為16,鄰域半徑為3, 鄰域的像素個數(shù)為24,bit chain 長度為24,如下圖所示:
我們考慮最簡單的R=1,P=8 的情況,LBP 映射成一個0-255之間的某一數(shù)值,如果用直方圖表示,需要一個256維的數(shù)組在存儲這個直方圖。為了縮小存儲空間,有人提出了 uniform pattern 的編碼方式,根據(jù)一個 bit chain 中 0,1之間的轉(zhuǎn)換次數(shù)定義了uniform pattern。如果一個 bit chain 中,0,1 之間的轉(zhuǎn)換次數(shù)不超過兩次,那么這個bit chain 就是 uniform pattern, 比如,00000000 轉(zhuǎn)換次數(shù)為0, 00001111 轉(zhuǎn)換次數(shù)為1, 00011100 轉(zhuǎn)換次數(shù)為2, 01101100 轉(zhuǎn)換次數(shù)為4, 01101010 轉(zhuǎn)換次數(shù)為6,那些轉(zhuǎn)換次數(shù)不超過兩次的pattern 都屬于uniform pattern,可以證明,絕大多數(shù)的binary pattern 都是uniform pattern,通過這種定義,對于 8 bit 的 LBP, 可以從256 維降到 59維,減少了90%。