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