1 簡介

LBP指區域性二值模式(Local Binary Pattern),是一種用來描述影象區域性特徵的運算元,具有灰度不變性和旋轉不變性等顯著優點。LBP常應用於人臉識別和目標檢測中,在OpenCV中有使用LBP特徵進行人臉識別的介面,也有用LBP特徵訓練目標檢測分類器的方法,OpenCV實現了LBP特徵的計算,但沒有提供一個單獨的計算LBP特徵的介面。也就是說OpenCV中使用了LBP演算法,但是沒有提供函式介面。

2 LBP演算法原理

2。1 LBP演算法思想

原始的LBP運算元定義在畫素3*3的鄰域內,以鄰域中心畫素為閾值,相鄰的8個畫素的灰度值與鄰域中心的畫素值進行比較,若周圍畫素大於中心畫素值,則該畫素點的位置被標記為1,否則為0。這樣,3*3鄰域內的8個點經過比較可產生8為二進位制數,將這8位二進位制數依次排列形成一個二進位制數字,這個二進位制數字的十進位制表示就是中心畫素的LBP值,LBP值共有28種可能,因此LBP值有256種可能。中心畫素的LBP值反映了該畫素周圍區域的紋理資訊。

計算機視覺基礎-影象處理: LBP特徵描述運算元

(圖片注:然後講19放入到中心,作為LBP值)

2。2 標準LBP演算法原理

LBP特徵用影象的區域性領域的聯合分佈

T

來描述影象的紋理特徵,如果假設區域性鄰域中畫素個數為

P(P>1)

,那麼紋理特徵的聯合分佈

T

可以表述成:

T=t(g_{c},g_{0},…,g_{p−1}),  \\ where, p=0,…,P−1

其中,

g_c

表示相應區域性鄰域的中心畫素的灰度值,

g_p

表示以中心畫素圓心,以

R

為半徑的圓上的畫素的灰度值。

假設中心畫素和區域性鄰域畫素相互獨立,那麼這裡可以將上面定義式寫成如下形式:

T=t(g_{c},g_{0}−g{c},…,g_{p−1}−g_{c})≈t(g_{c})t(g_{0}−g_{c},…,g_{p−1}−g_{c})

其中

t(g_{c})

決定了區域性區域的整體亮度,對於紋理特徵,可以忽略這一項,最終得到:

T≈t(g_{0}−g_{c},…,g_{p−1}−g_{c})

上式說明,將紋理特徵定義為鄰域畫素和中心畫素的差的聯合分佈函式,因為

g_{p}-g_{c}

是基本不受亮度均值影響的,所以從上式可以看出,此時統計量T 是一個跟亮度均值,即灰度級無關的值。最後定義特徵函式如下:

T\approx t(s(g_{0}-g_{c}),...,s(g_{p-1}-g_{c}))

s(x)

是符號函式,即大於0為1,小於0為0。

標準LBP(灰度級不變LBP)定義如下

LBP_{P,R}=∑_{p=0}^{P−1}s(g_{p}−g_{c})2^p

最後的

2^p

用於將二進位制轉換為對應的十進位制,例如,

計算機視覺基礎-影象處理: LBP特徵描述運算元

3 改進的LBP運算元

3。1 圓形LBP運算元

基本的 LBP運算元的最大缺陷在於它只覆蓋了一個固定半徑範圍內的小區域,這顯然不能滿足不同尺寸和頻率紋理的需要。為了適應不同尺度的紋理特徵,並達到灰度級和旋轉不變性的要求,Ojala等對 LBP運算元進行了改進,將 3×3鄰域擴充套件到任意鄰域,並用圓形鄰域代替了正方形鄰域,改進後的 LBP運算元允許在半徑為 R的圓形鄰域內有任意多個畫素點。從而得到了諸如半徑為R的圓形區域內含有P個取樣點的LBP運算元,表示為

LBP_{P}^{R}

計算機視覺基礎-影象處理: LBP特徵描述運算元

對於給定中心點

(x_c,y_c)

,其鄰域畫素位置為

(x_p,y_p)

p∈P

,其取樣點

(x_p,y_p)

用如下公式計算:

x_p=x_c+Rcos(\frac{2πp}{P})\\ yp=yc+Rsin(\frac{2πp}{P})

R是取樣半徑,p是第p個取樣點,P是取樣數目。如果近鄰點不在整數位置上,就需要進行插值運算,可以參考這篇部落格 OpenCV框架下的插值演算法

3。2 旋轉不變的LBP

LPB特徵是灰度不變,但不是旋轉不變的,同一幅影象,進行旋轉以後,其特徵將會有很大的差別,影響匹配的精度。Ojala在LBP演算法上,進行改進,實現了具有旋轉不變性的LPB的特徵。

實現方法:不斷旋轉圓形鄰域得到一系列初始定義的LPB值,取最小值作為該鄰域的值。

LBP_{PR}^{ri}=min(ROR(LBP_{PR}^{ri,i})|i=0,1,…,P−1)

其中

LBP_{PR}^{ri}

表示具有旋轉不變性的LBP特徵。ROR(x,i)

ROR(x,i)

為旋轉函式,表示將x右迴圈i位。如下圖所示,旋轉後得到了一系列的LBP,取其中最小的15作為最終的LBP,這樣改進便可以使得LBP具備旋轉不變性。

計算機視覺基礎-影象處理: LBP特徵描述運算元

3。3 LBP的等價模式和混合模式

等價模式:

當某個區域性二進位制模式所對應的迴圈二進位制數從0到1或從1到0最多有兩次跳變時,該區域性二進位制模式所對應的二進位制就稱為一個等價模式。

比如:00000000,11111111,11110010,10111111都是等價模式。

一個LBP運算元可以產生不同的二進位制模式,對於

LBP_R^{p}

將會產生2p種模式。比如7∗7鄰域內有236種模式。如此多的二值模式對於資訊的提取和識別都是不利的。Ojala等認為,在實際影象中,絕大多數LPB模式最多隻包含兩次從1到0或從0到1的跳變。

混合模式

:除了等價模式之外的稱為混合模式。

改進後的LPB模式數由2 p(p為鄰域集內的採集點數 ) 降維為p∗(p−1)+2 。維數減少,可以降低高頻噪聲的影響。Ojala認為等價模式佔總模式中的絕大數。圖2。4 ( a ), ( b ), ( c )等價模式分別佔88%,93%和76%。可以透過低通濾波的方法來增強等價模式所佔的比例。圖2。4( c )經過高斯濾波後,其等價模式所佔比可以增加到90%。

計算機視覺基礎-影象處理: LBP特徵描述運算元

4 LBP運算元特徵圖視覺化

計算機視覺基礎-影象處理: LBP特徵描述運算元

原圖

計算機視覺基礎-影象處理: LBP特徵描述運算元

灰度不變常規LBP

計算機視覺基礎-影象處理: LBP特徵描述運算元

等價灰度不變LBP

5 利用LBP特徵做人臉檢測

5。1 人臉檢測流程

人臉檢測過程採用多尺度滑窗搜尋方式,每個尺度透過一定步長擷取大小為20x20的視窗,然後將視窗放到分類器中進行是不是人臉的判決,如果是人臉則該視窗透過所有分類器;反之,會在某一級分類器被排除。

計算機視覺基礎-影象處理: LBP特徵描述運算元

5。2 基於OpenCV的實現

#coding:utf-8

import

cv2

as

cv

# 讀取原始影象

img

=

cv

imread

‘*。png’

#face_detect = cv2。CascadeClassifier(‘haarcascade_frontalface_default。xml’)

face_detect

=

cv

CascadeClassifier

“lbpcascade_frontalface_improved。xml”

# 檢測人臉

# 灰度處理

gray

=

cv

cvtColor

img

code

=

cv

COLOR_BGR2GRAY

# 檢查人臉 按照1。1倍放到 周圍最小畫素為5

face_zone

=

face_detect

detectMultiScale

gray

scaleFactor

=

2

minNeighbors

=

2

# maxSize = (55,55)

print

‘識別人臉的資訊:

\n

face_zone

# 繪製矩形和圓形檢測人臉

for

x

y

w

h

in

face_zone

# 繪製矩形人臉區域

cv

rectangle

img

pt1

=

x

y

),

pt2

=

x

+

w

y

+

h

),

color

=

0

0

255

],

thickness

=

2

# 繪製圓形人臉區域 radius表示半徑

cv

circle

img

center

=

x

+

w

//

2

y

+

h

//

2

),

radius

=

w

//

2

color

=

0

255

0

],

thickness

=

2

# 設定圖片可以手動調節大小

cv

namedWindow

“Easmount-CSDN”

0

# 顯示圖片

cv

imshow

“Easmount-CSDN”

img

# 等待顯示 設定任意鍵退出程式

cv

waitKey

0

cv

destroyAllWindows

()

原圖:

計算機視覺基礎-影象處理: LBP特徵描述運算元

檢測結果:

計算機視覺基礎-影象處理: LBP特徵描述運算元

參考

Datawhale 影象處理 LBP特徵描述運算元