lbp特征提取算法 知乎_计算机视觉基础-图像处理: LBP特征描述算子
1 簡(jiǎn)介
LBP指局部二值模式(Local Binary Pattern),是一種用來描述圖像局部特征的算子,具有灰度不變性和旋轉(zhuǎn)不變性等顯著優(yōu)點(diǎn)。LBP常應(yīng)用于人臉識(shí)別和目標(biāo)檢測(cè)中,在OpenCV中有使用LBP特征進(jìn)行人臉識(shí)別的接口,也有用LBP特征訓(xùn)練目標(biāo)檢測(cè)分類器的方法,OpenCV實(shí)現(xiàn)了LBP特征的計(jì)算,但沒有提供一個(gè)單獨(dú)的計(jì)算LBP特征的接口。也就是說OpenCV中使用了LBP算法,但是沒有提供函數(shù)接口。
2 LBP算法原理
2.1 LBP算法思想
原始的LBP算子定義在像素3*3的鄰域內(nèi),以鄰域中心像素為閾值,相鄰的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ù),將這8位二進(jìn)制數(shù)依次排列形成一個(gè)二進(jìn)制數(shù)字,這個(gè)二進(jìn)制數(shù)字的十進(jìn)制表示就是中心像素的LBP值,LBP值共有28種可能,因此LBP值有256種可能。中心像素的LBP值反映了該像素周圍區(qū)域的紋理信息。
(圖片注:然后講19放入到中心,作為L(zhǎng)BP值)
2.2 標(biāo)準(zhǔn)LBP算法原理
LBP特征用圖像的局部領(lǐng)域的聯(lián)合分布
來描述圖像的紋理特征,如果假設(shè)局部鄰域中像素個(gè)數(shù)為
,那么紋理特征的聯(lián)合分布
可以表述成:
其中,
表示相應(yīng)局部鄰域的中心像素的灰度值,
表示以中心像素圓心,以
為半徑的圓上的像素的灰度值。
假設(shè)中心像素和局部鄰域像素相互獨(dú)立,那么這里可以將上面定義式寫成如下形式:
其中
決定了局部區(qū)域的整體亮度,對(duì)于紋理特征,可以忽略這一項(xiàng),最終得到:
上式說明,將紋理特征定義為鄰域像素和中心像素的差的聯(lián)合分布函數(shù),因?yàn)?/p>
是基本不受亮度均值影響的,所以從上式可以看出,此時(shí)統(tǒng)計(jì)量T 是一個(gè)跟亮度均值,即灰度級(jí)無關(guān)的值。最后定義特征函數(shù)如下:
是符號(hào)函數(shù),即大于0為1,小于0為0.
標(biāo)準(zhǔn)LBP(灰度級(jí)不變LBP)定義如下
最后的
用于將二進(jìn)制轉(zhuǎn)換為對(duì)應(yīng)的十進(jìn)制,例如,
3 改進(jìn)的LBP算子
3.1 圓形LBP算子
基本的 LBP算子的最大缺陷在于它只覆蓋了一個(gè)固定半徑范圍內(nèi)的小區(qū)域,這顯然不能滿足不同尺寸和頻率紋理的需要。為了適應(yīng)不同尺度的紋理特征,并達(dá)到灰度級(jí)和旋轉(zhuǎn)不變性的要求,Ojala等對(duì) LBP算子進(jìn)行了改進(jìn),將 3×3鄰域擴(kuò)展到任意鄰域,并用圓形鄰域代替了正方形鄰域,改進(jìn)后的 LBP算子允許在半徑為 R的圓形鄰域內(nèi)有任意多個(gè)像素點(diǎn)。從而得到了諸如半徑為R的圓形區(qū)域內(nèi)含有P個(gè)采樣點(diǎn)的LBP算子,表示為
;
對(duì)于給定中心點(diǎn)
,其鄰域像素位置為
,
,其采樣點(diǎn)
用如下公式計(jì)算:
R是采樣半徑,p是第p個(gè)采樣點(diǎn),P是采樣數(shù)目。如果近鄰點(diǎn)不在整數(shù)位置上,就需要進(jìn)行插值運(yùn)算,可以參考這篇博客 OpenCV框架下的插值算法
3.2 旋轉(zhuǎn)不變的LBP
LPB特征是灰度不變,但不是旋轉(zhuǎn)不變的,同一幅圖像,進(jìn)行旋轉(zhuǎn)以后,其特征將會(huì)有很大的差別,影響匹配的精度。Ojala在LBP算法上,進(jìn)行改進(jìn),實(shí)現(xiàn)了具有旋轉(zhuǎn)不變性的LPB的特征。
實(shí)現(xiàn)方法:不斷旋轉(zhuǎn)圓形鄰域得到一系列初始定義的LPB值,取最小值作為該鄰域的值。
其中
表示具有旋轉(zhuǎn)不變性的LBP特征。ROR(x,i)
為旋轉(zhuǎn)函數(shù),表示將x右循環(huán)i位。如下圖所示,旋轉(zhuǎn)后得到了一系列的LBP,取其中最小的15作為最終的LBP,這樣改進(jìn)便可以使得LBP具備旋轉(zhuǎn)不變性。
3.3 LBP的等價(jià)模式和混合模式
等價(jià)模式:當(dāng)某個(gè)局部二進(jìn)制模式所對(duì)應(yīng)的循環(huán)二進(jìn)制數(shù)從0到1或從1到0最多有兩次跳變時(shí),該局部二進(jìn)制模式所對(duì)應(yīng)的二進(jìn)制就稱為一個(gè)等價(jià)模式。
比如:00000000,11111111,11110010,10111111都是等價(jià)模式。
一個(gè)LBP算子可以產(chǎn)生不同的二進(jìn)制模式,對(duì)于
將會(huì)產(chǎn)生2p種模式。比如7?7鄰域內(nèi)有236種模式。如此多的二值模式對(duì)于信息的提取和識(shí)別都是不利的。Ojala等認(rèn)為,在實(shí)際圖像中,絕大多數(shù)LPB模式最多只包含兩次從1到0或從0到1的跳變。
混合模式:除了等價(jià)模式之外的稱為混合模式。
改進(jìn)后的LPB模式數(shù)由2 p(p為鄰域集內(nèi)的采集點(diǎn)數(shù) ) 降維為p?(p?1)+2 。維數(shù)減少,可以降低高頻噪聲的影響。Ojala認(rèn)為等價(jià)模式占總模式中的絕大數(shù)。圖2.4 ( a ), ( b ), ( c )等價(jià)模式分別占88%,93%和76%。可以通過低通濾波的方法來增強(qiáng)等價(jià)模式所占的比例。圖2.4( c )經(jīng)過高斯濾波后,其等價(jià)模式所占比可以增加到90%。
4 LBP算子特征圖可視化原圖灰度不變常規(guī)LBP等價(jià)灰度不變LBP
5 利用LBP特征做人臉檢測(cè)
5.1 人臉檢測(cè)流程
人臉檢測(cè)過程采用多尺度滑窗搜索方式,每個(gè)尺度通過一定步長(zhǎng)截取大小為20x20的窗口,然后將窗口放到分類器中進(jìn)行是不是人臉的判決,如果是人臉則該窗口通過所有分類器;反之,會(huì)在某一級(jí)分類器被排除。
5.2 基于OpenCV的實(shí)現(xiàn)
#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")
# 檢測(cè)人臉
# 灰度處理
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 ('識(shí)別人臉的信息:\n',face_zone)
# 繪制矩形和圓形檢測(cè)人臉
for x, y, w, h in face_zone:
# 繪制矩形人臉區(qū)域
cv.rectangle(img, pt1 = (x, y), pt2 = (x+w, y+h), color = [0,0,255], thickness=2)
# 繪制圓形人臉區(qū)域 radius表示半徑
cv.circle(img, center = (x + w//2, y + h//2), radius = w//2, color = [0,255,0], thickness = 2)
# 設(shè)置圖片可以手動(dòng)調(diào)節(jié)大小
cv.namedWindow("Easmount-CSDN", 0)
# 顯示圖片
cv.imshow("Easmount-CSDN", img)
# 等待顯示 設(shè)置任意鍵退出程序
cv.waitKey(0)
cv.destroyAllWindows()
原圖:
檢測(cè)結(jié)果:
參考
總結(jié)
以上是生活随笔為你收集整理的lbp特征提取算法 知乎_计算机视觉基础-图像处理: LBP特征描述算子的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html webservice数据交互_
- 下一篇: class ts 扩展方法_一些让程序保