LBP特征提取原理和python库代码
1局部二值模式
? ? ? ?局部二值模式(?Local?binary?pattern,?LBP?)圖作為-?-?種傳統(tǒng)的表情提取特征的方法,有著不可替代的優(yōu)勢(shì)。在1994?年被Ojala等人首次提出并作出定義計(jì)算。他最大的特點(diǎn)就是當(dāng)圖像數(shù)據(jù)中的灰度值不易被影響而發(fā)生改變,同時(shí),對(duì)圖像數(shù)據(jù)進(jìn)行轉(zhuǎn)向操作而不影響表情特征的提取。該方法的過(guò)程共分三步,如圖
1將圖像中的某一一個(gè)像素點(diǎn)及其周圍的8鄰域像素點(diǎn)組合在一-起,?定義為一個(gè)3x3的窗口。
2以該像素點(diǎn)的灰度值也就是窗口中心點(diǎn)的灰度值作為閾值,與其周圍8鄰域像素點(diǎn)的灰度值依次進(jìn)行比較,8鄰域像素點(diǎn)灰度值中大于闕值的位置被置為1,小于閾值的位置被置為0。
3將經(jīng)過(guò)(2)步驟得到的二進(jìn)制數(shù)按照順時(shí)針或者逆時(shí)針旋轉(zhuǎn)的順序排列起來(lái)(圖中采用的是順時(shí)針旋轉(zhuǎn)的方式),將得到的結(jié)果從二進(jìn)制轉(zhuǎn)為十進(jìn)制,此時(shí)得到的值就是該方法獲取的特征值。
? ? ? 上述公式中,中心像素點(diǎn)的定位由LBP,來(lái)決定,P?確定的是相鄰區(qū)域的像素點(diǎn)的數(shù)量,p提供的是相鄰區(qū)域中排在P位置的像素點(diǎn),g,確定了所有范圍內(nèi)在中心點(diǎn)周圍其他區(qū)域的點(diǎn)的灰度值,g指的是所有范圍內(nèi)的中心點(diǎn)的灰度值,s(x)返回參數(shù)的正負(fù)號(hào)。
? ? ? 由上述的原始LBP算子計(jì)算過(guò)程不難看出,其并不具備旋轉(zhuǎn)不變性的優(yōu)點(diǎn),換句話來(lái)說(shuō)就是當(dāng)圖像發(fā)生旋轉(zhuǎn)時(shí),原始LBP算子也會(huì)發(fā)生改變。因?yàn)楫?dāng)圖像發(fā)生旋轉(zhuǎn)時(shí),其紋理及形狀卻并不會(huì)因此發(fā)生變化,所以這是不被期望產(chǎn)生的情況。因此,為了解決原始LBP算子的這種局限性問(wèn)題,Ojala及其團(tuán)隊(duì)又提出了改進(jìn)的圓形LBP算子。圓形LBP算子結(jié)構(gòu)如圖2.4所示,相比于原始LBP算子來(lái)說(shuō),圓形LBP算子是將圖像中某--像素點(diǎn)與其周圍任意半徑大小的圓形領(lǐng)域上的像素點(diǎn)組合在一-起定義的一個(gè)圓形領(lǐng)域。而在圓形鄰域上會(huì)存在若千個(gè)像素點(diǎn),因此,這里需要對(duì)圓形鄰域進(jìn)行采樣,假設(shè)這個(gè)圓形鄰域的半徑大小為R,那么通過(guò)采樣得到的鄰域像素點(diǎn)數(shù)量為P,這,樣就構(gòu)成了該像素點(diǎn)的圓形LBP算子。之后將執(zhí)行與原始LBP算子運(yùn)算過(guò)程中的(2)(3)兩個(gè)步驟相同的操作,即可得到由圓形LBP算子計(jì)算得出的LBP特征值。然而,在這里還有一-?個(gè)小問(wèn)題,在對(duì)圓形鄰域進(jìn)行采樣的過(guò)程中,并不是所有的采樣坐標(biāo)都一定會(huì)剛好落在像素點(diǎn)上,為了解決這一-?問(wèn)題,將采用雙線性插值來(lái)對(duì)這些沒(méi)有落在像素上的領(lǐng)域值進(jìn)行估計(jì)。
?
? ? ? ?為了使這種圓形LBP算子具備旋轉(zhuǎn)不變性的優(yōu)點(diǎn),Ojala?及其團(tuán)隊(duì)為其算法增加了-步與原始LBP算子計(jì)算過(guò)程不同的操作,即將圓形LBP算子進(jìn)行-系列的旋轉(zhuǎn)操作,這樣就可以得到一系列不同的LBP特征值,將這些LBP特征值中的最小值作為該圓形LBP算子計(jì)算得出的LBP特征值。
? ? ? ? 圖2.5展示的是LBP算子具有數(shù)據(jù)旋轉(zhuǎn)但特征值能保持不變的特性,其中白色圓圈表示1,黑色圓圈表示0,因此通過(guò)計(jì)算原循環(huán)LBP算子表示的二進(jìn)制數(shù)為1100001也就是十進(jìn)制下的225。經(jīng)過(guò)不斷旋轉(zhuǎn)后發(fā)現(xiàn)該圓形LBP算子擁有8種旋轉(zhuǎn)角度,分別對(duì)應(yīng)8種LBP特征值,經(jīng)過(guò)比較,選取最小的LBP特征值15作為該圓形LBP算子的LBP特征值。
? ? ? ?通過(guò)上述LBP算子的計(jì)算過(guò)程可以看出,原始LBP的特征模式每次有2的8次方種可能,而圓形LBP的特征模式每次有2"種可能,因此,不難發(fā)現(xiàn),LBP?的特征模式數(shù)量隨著不斷地改進(jìn)而呈現(xiàn)爆炸性的指數(shù)增長(zhǎng),而過(guò)多的特征值數(shù)量不僅會(huì)增加計(jì)算量,而且還可能影響計(jì)算效率。針對(duì)這一-問(wèn)題,?Ojala?及其團(tuán)隊(duì)又提出了一種既能夠大幅減低特征維度又能夠盡量保留圖像信息的等價(jià)模式。這種模式的理論基礎(chǔ)是他們研究發(fā)現(xiàn),圖像數(shù)據(jù)的二進(jìn)制值一般只會(huì)發(fā)生兩次變化,且二進(jìn)制只包括0和1,因此根據(jù)這種特征定義了與LBP模式相似的模式類,且這種類中包含最多兩次的數(shù)據(jù)改變。當(dāng)實(shí)驗(yàn)采用了該模式后,原始LBP特征模式的數(shù)量降低為58種,圓形LBP特征模式的數(shù)量降低為Px(P-1)+2種。
?LBP特征向量進(jìn)行提取的步驟:
(1)首先將檢測(cè)窗口劃分為16×16的小區(qū)域(cell);
(2)對(duì)于每個(gè)cell中的一個(gè)像素,將相鄰的8個(gè)像素的灰度值與其進(jìn)行比較,若周圍像素值大于中心像素值,則該像素點(diǎn)的位置被標(biāo)記為1,否則為0。這樣,3*3鄰域內(nèi)的8個(gè)點(diǎn)經(jīng)比較可產(chǎn)生8位二進(jìn)制數(shù),即得到該窗口中心像素點(diǎn)的LBP值;
(3)然后計(jì)算每個(gè)cell的直方圖,即每個(gè)數(shù)字(假定是十進(jìn)制數(shù)LBP值)出現(xiàn)的頻率;然后對(duì)該直方圖進(jìn)行歸一化處理。
(4)最后將得到的每個(gè)cell的統(tǒng)計(jì)直方圖進(jìn)行連接成為一個(gè)特征向量,也就是整幅圖的LBP紋理特征向量;
然后便可利用SVM或者其他機(jī)器學(xué)習(xí)算法進(jìn)行分類了。參考一些博客中的代碼實(shí)現(xiàn)效果如下:
? ??
local_binary_pattern參數(shù)詳解:
local_binary_pattern(image, P, R, method='default')
參數(shù)(調(diào)參)
image:(N,M)陣列灰度圖像。(只能是灰度圖)
P:int圓對(duì)稱鄰居設(shè)置點(diǎn)的數(shù)量(角度空間的量化)。
R:float圓的半徑(操作員空間分辨率)。
method:{‘default’,‘ror’,‘uniform’,‘var’}確定模式的方法(調(diào)參使用)
?
返回值:
輸出:(N,M)陣列LBP圖像
np.histogram()解釋:
np.histogram()是一個(gè)生成直方圖的函數(shù) histogram(a,bins=10,range=None,weights=None,density=False);a是待統(tǒng)計(jì)數(shù)據(jù)的數(shù)組;bins指定統(tǒng)計(jì)的區(qū)間個(gè)數(shù);range是一個(gè)長(zhǎng)度為2的元組,表示統(tǒng)計(jì)范圍的最小值和最大值,默認(rèn)值None,表示范圍由數(shù)據(jù)的范圍決定weights為數(shù)組的每個(gè)元素指定了權(quán)值,histogram()會(huì)對(duì)區(qū)間中數(shù)組所對(duì)應(yīng)的權(quán)值進(jìn)行求和density為True時(shí),返回每個(gè)區(qū)間的概率密度;為False,返回每個(gè)區(qū)間中元素的個(gè)數(shù)a = np.random.rand(100) hist,bins = np.histogram(a,bins=5,range=(0,1)) print(hist) print(bins) [19 30 15 16 20] [ 0. 0.3 0.4 0.6 0.9 1. ]
?
總結(jié)
以上是生活随笔為你收集整理的LBP特征提取原理和python库代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 集成海康威视Sadp SDK实现设备激活
- 下一篇: 帅瞎了!手机也能写Python代码!手把