1. 程式人生 > >Recognition System複習筆記:LBP

Recognition System複習筆記:LBP

小辣雞筆者今天突然想起LBP沒有看,本來想著上午看一下、下午寫作業,嘻嘻,發現PCA忘了,然後開始看PCA,嘻嘻,線性代數忘了,然後看線性代數,然後等下我要去吃晚飯了。所以這三個我是在一天看的,明白個大概,具體內容並不懂。說的不對望指正!

LBP全稱是Local Binary Pattern,區域性二值模式?應該可以這麼翻譯吧,區域性指的是從每個畫素的neighbor處提取特徵,怎麼提取,轉化為二值來提取,模式?突然感覺自己翻譯的不大對,pattern也有圖樣的意思,每個畫素周圍都二值化成不同的pattern。下圖就是個 pattern,黑的是0,白的是1,灰的就是中心畫素啦。 在這裡插入圖片描述

LBP按我的理解應該是一種提取特徵的方式,比如不同texture的東西他就能分辨出來,可以用於做影象的segmentation;另外LBP有個重大好處就是它對光強和旋轉都有很好的魯棒性(但是有陰影的話會不會影響我就不知道了)。還有,它計算量不大,搞好了好像可以做實時的應用。

LBP有很多用法,這裡我只說一下LBPP,Rriu2LBP_{P,R}^{r_iu_2}吧,別的我也整不明白。

在心中有個印象的話,記LBPP,Rriu2LBP_{P,R}^{r_iu_2}這個符號最好了,叫uniform pattern。就看上面那個圖好了,區域性嘛,中間灰色的是一個畫素,P代表在它周圍平均取多少個點,這就組成個圈了,所以R代表這個圈的半徑,rir_i代表旋轉,意思是這樣的兩個圈,只要轉一圈能夠得到一樣的pattern他們的取值就一樣。u2u_2就是指bitwise transition等於2,別慌!就是你轉著圈的數,0突然條成1了,那就是一個bitwise transition,如果1跳成0了,也是!好的2是什麼,2就是,只關注只有bitwise transition(誒呀好累,叫bt好了)兩次(或小於)的pattern,下面就是全部了,這樣有什麼好處呢,可以看到2和1可以表示線的一端,3是個角,4是條線的edge,等等等等。 在這裡插入圖片描述

那麼,好端端的影象怎麼就轉化成這個圈圈了呢,這裡是將中心pixel設為一個threshold,周圍一圈的pixel強度大於等於中心的就取1,小於的就取零,但實際上它取的是個圓,取不到的地方用插值來做,雙線性插值!看到這裡小辣雞筆者又懵逼了,學過的肯定是就著粥一起喝掉的。 在這裡插入圖片描述 這個圖是我在筆記本上隨便畫的,就比如你想求這個中間點畫素的畫素值,它雖然不在畫素點上,但是它周圍有四個點呀!雙線性插值就是你用四個周圍點計算中間點就好了,離得越近的對它影響越大,這樣圖片視覺效果變化的也自然,就比如P1對中心點的影響比重就是圖中的k,當然實現上肯定要用兩步,先算上下後算左右,這個很簡單只是容易忘!

在這裡插入圖片描述

取到周圍一圈的值之後,周圍bt小於等於2的pixel的L

BPP,Rriu2LBP_{P,R}^{r_iu_2}取值為它的neighbor所有1的數量,如果bt大於2的話,就通通算作P+1,這裡的P就是上面把一圈分成P份的P。 應用上,把一個圖片分成若干份,或者只提取其中的某些部分,在這些部分內部計算畫素的LBP並進行直方圖統計(記得normalization鴨!)然後將這些不同部分的histogram拼在一起,放到PCA或者各種分類器裡分類就好了!嘻嘻,PCA是啥來著,我忘了。

PCA,principal component analysis,主成分分析,發明的本意是為了dimension reduction,結果分起類來效果拔群!多一句嘴,它跟FLD有啥區別呢,就二維來說,FLD是找一條線讓這些sample儘量扎堆落,而PCA是穿糖葫蘆,找一條線儘量穿過所有sample。 PCA通過找到能夠代表sample們的主要維度,用vector表示,這樣就構建了一個新座標系,然後將這些sample投射到這個新座標系中,由於捨棄了一些起作用很小的座標,維度變小,計算量變小。並且!為達到PCA的目的,必須儘量增加sample與sample之間的距離,這樣反而起到了分類的作用。 那麼這條線怎麼找呢(高維度的話的話就不是一條線啦!),一句話來說就是使協方差儘量大。 首先,把影象的所有畫素列成一個vector,如果400400的影象就是160000個畫素(也就是160000個維度,如果直接進行匹配的話,這個計算量很嚇人的!),計算出畫素們的平均值xˉ\bar x,當然也是160000*1維的vector,這個數好難打,那就變成mm吧,那麼協方差矩陣就是S(m,m)=[x1xˉ...xm2xˉ][(x1xˉ)T...(xm2xˉ)T]TS_(m,m)=[\vec x_1-\bar x\ ...\ \vec x_{m^2}-\bar x]*[(\vec x_1-\bar x)^T\ ...\ (\vec x_{m^2}-\bar x)^T]^T,這個公式我沒打好,基本意思就是協方差矩陣嘛,然後求出這個矩陣的特徵值和特徵向量。

這裡小辣雞筆者不明白的是憑什麼求出來的特徵值就能作為新的座標系來用,就仔細的看了一下,現在大約是這麼理解的。我們來看Ax=λxA\vec x=\lambda\vec x這個式子,A是要轉化的矩陣,這個式子就是想找到一個特徵向量x\vec x使A在x這個方向上的對映僅與一個常量λ\lambda有關,我們來想一下我們平時用的笛卡爾座標系是不是也是這樣,我的A=(1,2),變長一倍就是(2,4),投射到xy軸上完全就是座標增加了一倍,並且值越大說明A在這個方向上的取值越大,越能決定這個vector的性質(所以PCA取更大的λ\lambda),加之特徵向量互相都是orthogonal的,所以,不得不承認人類的智慧是無窮的。

這樣算出來,你得到的特徵向量還是m*m維的,但是你可以只取重要的特徵向量,(大約100個向量大約表示1萬個特徵都可以呢!)這樣,第j張圖片的座標就變成[e1T...etT]T(xjxˉ)[e_1^T\ ...\ e_t^T]^T*(\vec x_j-\bar x)了,t就是你提取出的向量個數。

最後,可以用LBP提取出得特徵來用PCA進行分類。