lbp特征提取算法 知乎_计算机视觉基础-图像处理: LBP特征描述算子
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值反映了該像素周圍區域的紋理信息。
(圖片注:然后講19放入到中心,作為LBP值)
2.2 標準LBP算法原理
LBP特征用圖像的局部領域的聯合分布
來描述圖像的紋理特征,如果假設局部鄰域中像素個數為
,那么紋理特征的聯合分布
可以表述成:
其中,
表示相應局部鄰域的中心像素的灰度值,
表示以中心像素圓心,以
為半徑的圓上的像素的灰度值。
假設中心像素和局部鄰域像素相互獨立,那么這里可以將上面定義式寫成如下形式:
其中
決定了局部區域的整體亮度,對于紋理特征,可以忽略這一項,最終得到:
上式說明,將紋理特征定義為鄰域像素和中心像素的差的聯合分布函數,因為
是基本不受亮度均值影響的,所以從上式可以看出,此時統計量T 是一個跟亮度均值,即灰度級無關的值。最后定義特征函數如下:
是符號函數,即大于0為1,小于0為0.
標準LBP(灰度級不變LBP)定義如下
最后的
用于將二進制轉換為對應的十進制,例如,
3 改進的LBP算子
3.1 圓形LBP算子
基本的 LBP算子的最大缺陷在于它只覆蓋了一個固定半徑范圍內的小區域,這顯然不能滿足不同尺寸和頻率紋理的需要。為了適應不同尺度的紋理特征,并達到灰度級和旋轉不變性的要求,Ojala等對 LBP算子進行了改進,將 3×3鄰域擴展到任意鄰域,并用圓形鄰域代替了正方形鄰域,改進后的 LBP算子允許在半徑為 R的圓形鄰域內有任意多個像素點。從而得到了諸如半徑為R的圓形區域內含有P個采樣點的LBP算子,表示為
;
對于給定中心點
,其鄰域像素位置為
,
,其采樣點
用如下公式計算:
R是采樣半徑,p是第p個采樣點,P是采樣數目。如果近鄰點不在整數位置上,就需要進行插值運算,可以參考這篇博客 OpenCV框架下的插值算法
3.2 旋轉不變的LBP
LPB特征是灰度不變,但不是旋轉不變的,同一幅圖像,進行旋轉以后,其特征將會有很大的差別,影響匹配的精度。Ojala在LBP算法上,進行改進,實現了具有旋轉不變性的LPB的特征。
實現方法:不斷旋轉圓形鄰域得到一系列初始定義的LPB值,取最小值作為該鄰域的值。
其中
表示具有旋轉不變性的LBP特征。ROR(x,i)
為旋轉函數,表示將x右循環i位。如下圖所示,旋轉后得到了一系列的LBP,取其中最小的15作為最終的LBP,這樣改進便可以使得LBP具備旋轉不變性。
3.3 LBP的等價模式和混合模式
等價模式:當某個局部二進制模式所對應的循環二進制數從0到1或從1到0最多有兩次跳變時,該局部二進制模式所對應的二進制就稱為一個等價模式。
比如:00000000,11111111,11110010,10111111都是等價模式。
一個LBP算子可以產生不同的二進制模式,對于
將會產生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%。
4 LBP算子特征圖可視化原圖灰度不變常規LBP等價灰度不變LBP
5 利用LBP特征做人臉檢測
5.1 人臉檢測流程
人臉檢測過程采用多尺度滑窗搜索方式,每個尺度通過一定步長截取大小為20x20的窗口,然后將窗口放到分類器中進行是不是人臉的判決,如果是人臉則該窗口通過所有分類器;反之,會在某一級分類器被排除。
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特征描述算子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html webservice数据交互_
- 下一篇: class ts 扩展方法_一些让程序保