參考http://blog.csdn.net/xidianzhimeng/article/details/19634573
https://wenku.baidu.com/view/d03494a687c24028905fc34b.html
LBP
指局部二值模式,英文全稱:Local Binary Pattern
,是一種用來描述圖像局部特征的算子,LBP
特征具有灰度不變性和旋轉不變性等顯著優點
LBP
是一種圖像紋理特征提取算法,是一種局部特征,是照片分類和人臉檢索研究中采用較多的特征提取算法之一。在圖像物體識別領域,常用的特征描述子包括:HOG、SIFT、SURT、Wavelet、Gabor、DCT等,具體選擇哪種算子需要根據目標對象決定。人臉識別中,LBP
和Gabor
是效果較好的兩組特征。gabor
效果比LBP
效果魯棒,但是LBP
運算速度快,編譯在嵌入式等平台運行。一般如果條件允許,二者會進行結合,包括定義結合特征(比如LGBP,LGXP等),特征級融合和決策級融合。
特征提取是希望將資料中重要的資訊提取出來,去除雜訊的影響,以提升分類的准確率。不同的特征提取方法有不同的效果,LBP的特性是較能排除光照變化且運算速度快。LBP的核心觀念是計算每個像素和周圍像素間”相對”的關系。通常光照對圖中的物件帶來的影響是全局的,也就是說照片中的物體的明暗程度,都往同一個方向改變,可能是變亮或變暗,只是改變的幅度會因為距離光源的遠近而有所不同。所以基本上局部相鄰(Local)的像素間,受光照影響后數值也許會改變,但是相對大小不會改變。
1.原始LBP
LBP特征是根據相鄰的像素點與中間相鄰點相比的大小確定值為1或0,即如果相鄰像素的值大於或等於中間像素的值,則值為1;如果小於則值為1.然后對每個像素點的領域信息進行整合,變為領域個位的數的編碼。然后對一個塊中所有像素的編碼進行直方圖的統計,得到LBP特征
注意:對於鄰域像素順序的規定並沒有明確,默認為水平方向左側為起始點,逆時針旋轉
其公式定義為:
s(x)函數就是計算相鄰位置像素與中間位置像素的差值,大於或等於中間值,即x為正數或0時返回1;否則為0。
p即該中間像素依據的鄰近像素的個數,如上面的例子p為8,左上角的值對應的十進制值的計算為0*2(p-1) = 0*2(8-1) = 0,其下面位置的值為1*20 = 1,最后各個位置計算得到值LBP(xc,yc) = 19,即這個中心點(xc,yc)的LBP值
總結:這個方法可以很好地捕捉到圖像中的細節,但是固定的近鄰區域對於尺寸變化的編碼失效。為了適應不同尺度的紋理特征,將3*3的固定領域擴展到了任意領域,並用圓形代替正方形
2.圓形LBP
改進后的LBP算子允許在半徑為R的圓形領域有多個像素點
LBPpR表示在半徑為R的圓內有p個像素點
在上面的圖像中,第一幅圖像的圓半徑為1,采樣的點為8個;第二幅圖像的圓半徑為2,采樣的點為16個;第三副圖像的圓半徑為2,采樣的點為8個
一般來說,當領域采樣點個數相同時,半徑越小,圖像紋理越精細;當半徑相同時,領域采樣點個數越少,圖像亮度越低,區分度變差。如半徑都是3的區域,分別划分為4個和8個采樣點,4個采樣點只有24種灰度值,區分度肯定沒有28種灰度值的好
這樣子采樣點的坐標計算如下:
當近鄰點不在圖像的坐標上時,其對應的像素值使用雙線性插值算法計算,可見最鄰近插值算法和雙線性插值算法——圖像縮放
3.旋轉不變性
此時的LBP特征是灰度不變的,但是不是旋轉不變的。同一幅圖像,進行旋轉后,其特征將會有很大的差別,因為像素位置發生了變化。
實現旋轉不變形的方法:不斷旋轉圓形領域得到所有可能的初始定義的LBP值,然后取其中的最小值作為該領域的值
即上圖的例子中對應的LBP特征都是00001111,對應的十進制為15
4.等價模式(uniform pattern)
一個LBP算子可以產生不同的二進制模式,對於LBPpR將會產生2p種模式。比如3*3領域內有8個點,則有28種模式;7*7領域內則有236種模式
如此多的二值模式對於信息的提取、識別都是不利的。如果使用這樣的LBP模式的統計直方圖表示圖像的信息,過多的模式種類將使得數據量多大,且直方圖過於稀疏
解決辦法: 對LBP算子的模式種類進行降維
Ojala認為,在實際圖像中,絕大多數LBP模式最多只包含兩次從1到0或從0到1的跳變
因此,Ojala將“等價模式”定義為:當某個LBP所對應的循環二進制數從0到1或從1到0最多有兩次跳變時,該LBP所對應的二進制就稱為一個等價模式類。如00000000(0次跳變),00000111(只含一次從0到1的跳變),10001111(先由1跳到0,再由0跳到1,共兩次跳變)都是等價模式類。除等價模式類以外的模式都歸為另一類,稱為混合模式類,例如10010111(共四次跳變)
另一種說法是說其實00000111也算是兩次跳變,因為這是個圓形模式,理解即可
通過這樣的改進,二進制模式的種類大大減少,而不會丟失任何信息。模式數量由原來的2P種減少為 P*( P-1)+2種,其中P表示鄰域集內的采樣點數。對於3×3鄰域內8個采樣點來說,二進制模式由原始的256種減少為58種,這使得特征向量的維數更少,並且可以減少高頻噪聲帶來的影響。
當然,最后還要加上一種混合模式,所以最后的公式為P*( P-1)+2+1 = P*( P-1)+3,所以對於3×3鄰域內8個采樣點來說,最終的模式數量為59種
通過LBP特征的定義,可見LBP特征對光照變化是魯棒的,效果如圖:
5.LBPH
LBPH,Local Binary Patterns Histograms,即LBP特征的統計直方圖,LBPH將LBP特征與圖像的空間信息結合在一起。
計算該統計直方圖的步驟如下:
- 計算圖像的LBP特征圖像,即上面的所說的計算方式,為每個坐標計算其的LBP(xc,yc)值
- 然后將整個LBP特征圖像進行分塊,Opencv中默認將LBP特征圖像分成8行8列64塊區域
- 然后分別計算每塊區域的特征圖像的直方圖,即統計該區域中所有像素點的LBP(xc,yc)值(該值有[0,2p-1]的2p種情況,p為采樣點個數)的分布情況,假設該區域中有3個點的LBP(xc,yc)值為20,則統計該LBP(xc,yc)值=20對應的分布值為3。這樣最后一個區域就能夠得到一個(1*2p)大小的特征向量,即直方圖分布情況。最后將所有區域的直方圖結果,即特征向量進行歸一化
- 最后將所有區域的特征向量按分塊的空間順序一次排列成一行,形成LBP特征向量,大小為1*(2p*64),這個特征向量就能夠用來表示一張圖像了
當采樣點數p為8時,如果使用的是原始模式的LBP,對應的LBP(xc,yc)值個數為28 = 256,則最后得到的LBP特征向量的維度為256*64 = 16384維;如果使用的是等價模式,則最后的特征向量的維度為59*64=3776維。可以看出,使用等價模式特征,其特征向量的維度大大減少,這意味着使用機器學習方法進行學習的時間將大大減少,而性能上沒有受到很大影響
最后可以使用卡方來計算兩個圖像對應的兩個直方圖的差異: