OpenCV 人臉識別LBPH演算法分析

2021-08-20 09:25:51 字數 2937 閱讀 8760

人臉識別是指將乙個需要識別的人臉人臉庫中的某個人臉對應起來(類似於指紋識別),目的是完成識別功能,該術語需要和人臉檢測進行區分,人臉檢測是在一張中把人臉定位出來,完成的是搜尋的功能。從opencv2.4開始,加入了新的類facerecognizer,該類用於人臉識別,使用它可以方便地進行相關識別實驗。

原始的lbp運算元定義為在3*3的視窗內,以視窗中心畫素為閾值,將相鄰的8個畫素的灰度值與其進行比較,若周圍畫素值大於或等於中心畫素值,則該畫素點的位置被標記為1,否則為0。這樣,3*3鄰域內的8個點經比較可產生8位二進位制數(通常轉換為十進位制數即lbp碼,共256種),即得到該視窗中心畫素點的lbp值,並用這個值來反映該區域的紋理特徵

figure1:原始的lbp運算元示例圖

基本的 lbp運算元的最大缺陷在於它只覆蓋了乙個固定半徑範圍內的小區域,這顯然不能滿足不同尺寸和頻率紋理的需要。為了適應不同尺度的紋理特徵,ojala等對lbp運算元進行了改進,將3×3鄰域擴充套件到任意鄰域,並用圓形鄰域代替了正方形鄰域,改進後的lbp運算元允許在半徑為r的圓形鄰域內有任意多個畫素點,從而得到了諸如半徑為r的圓形區域內含有p個取樣點的lbp運算元,opencv中正是使用圓形lbp運算元。

figure2:圓形lbp運算元

從lbp的定義可以看出,lbp運算元是灰度不變的,但卻不是旋轉不變的,影象的旋轉就會得到不同的lbp值。maenpaa等人又將lbp運算元進行了擴充套件,提出了具有旋轉不變性的lbp運算元,即不斷旋轉圓形鄰域得到一系列初始定義的lbp值,取其最小值作為該鄰域的lbp值。下圖給出了求取旋轉不變lbp的過程示意圖,圖中運算元下方的數字表示該運算元對應的lbp值,圖中所示的8種lbp模式,經過旋轉不變的處理,最終得到的具有旋轉不變性的lbp值為15。也就是說,圖中的8種lbp模式對應的旋轉不變的lbp碼值都是00001111。

figure3:旋轉不變的lbp示例

乙個lbp運算元可以產生不同的二進位制模式,對於半徑為r的圓形區域內含有p個取樣點的lbp運算元將會產生種模式。很顯然,隨著鄰域集內取樣點數的增加,二進位制模式的種類是急劇增加的。例如:5×5鄰域內20個取樣點,有=1,048,576種二進位制模式。如此多的二值模式無論對於紋理的提取還是對於紋理的識別、分類及資訊的訪問都是不利的。為了解決二進位制模式過多的問題,提高統計性,ojala提出了採用一種「等價模式」(uniform pattern)來對lbp運算元的模式種類進行降維。ojala等認為,在實際影象中,絕大多數lbp模式最多隻包含兩次從1到0或從0到1的跳變。因此,ojala將「等價模式」定義為:當某個區域性二進位制模式所對應的迴圈二進位制數從0到1或從1到0最多有兩次跳變時,該區域性二進位制模式所對應的二進位制就成為乙個等價模式類。如00000000(0次跳變),00000111(含一次從0到1的跳變和一次1到0的跳變),10001111(先由1跳到0,再由0跳到1,共兩次跳變)都是等價模式類。除等價模式類以外的模式都歸為另一類,稱為混合模式類,例如10010111(共四次跳變)。

通過這樣的改進,二進位制模式的種類大大減少,模式數量由原來的種減少為p(p-1)+2+1種,其中p表示鄰域集內的取樣點數,等價模式類包含p(p-1)+2種模式,混合模式類只有1種模式。對於3×3鄰域內8個取樣點來說,二進位制模式由原始的256種減少為59種,這使得特徵向量的維數更少,並且可以減少高頻雜訊帶來的影響。

顯而易見的是,上述提取的lbp運算元在每個畫素點都可以得到乙個lbp「編碼」,那麼,對一幅影象(記錄的是每個畫素點的灰度值)提取其原始的lbp運算元之後,得到的原始lbp特徵依然是「一幅」(記錄的是每個畫素點的lbp值)。

如果將以上得到的lbp圖直接用於人臉識別,其實和不提取lbp特徵沒什麼區別,在實際的lbp應用中一般採用lbp特徵譜的統計直方圖作為特徵向量進行分類識別,並且可以將一幅劃分為若干的子區域,對每個子區域內的每個畫素點都提取lbp特徵,然後,在每個子區域內建立lbp特徵的統計直方圖。如此一來,每個子區域,就可以用乙個統計直方圖來進行描述,整個就由若干個統計直方圖組成,這樣做的好處是在一定範圍內減小影象沒完全對準而產生的誤差,分割槽的另外乙個意義在於我們可以根據不同的子區域給予不同的權重,比如說我們認為中心部分分割槽的權重大於邊緣部分分割槽的權重,意思就是說中心部分在進行匹配識別時的意義更為重大。例如:一幅100*100畫素大小的,劃分為10*10=100個子區域(可以通過多種方式來劃分區域),每個子區域的大小為10*10畫素;在每個子區域內的每個畫素點,提取其lbp特徵,然後,建立統計直方圖;這樣,這幅就有10*10個子區域,也就有了10*10個統計直方圖,利用這10*10個統計直方圖,就可以描述這幅了。之後,我們利用各種相似性度量函式,就可以判斷兩幅影象之間的相似性了。

question:(ai領域)

一、在人臉識別領域,使用改進後的lbph演算法較原始的lbp演算法有哪些好的特性?

二、可以從模式的轉換方式和特徵檢測的原理方面闡述改進後的演算法對人臉識別技術確實有較好的效果!!

OpenCv人臉識別

在進行人臉識別時候,為了達到效果,我們使用opencv的分類器。進行對進行識別。include include include include using namespace cv using namespace std void detectanddraw mat img,cascadeclass...

opencv人臉識別

在python環境下利用opencv實現人臉識別,接下來一步一步動手操作。預備知識 一 環境準備 如果已經準備好了請跳過。0,第一步安裝numpy和matplotlib pip install upgrade setuptools pip install numpy matplotlib 1,pip...

學習opencv 人臉識別

在opencv中提供了許多成熟的介面,其中乙個就是人臉識別,先看看效果圖。可以看出用opencv自帶的樣本就能很方便的識別出人臉。opencv有已經自帶了人臉的haar特徵分類器。在目錄 opencv sources data haarcascades 下面。可以看出裡面還有很多分類器,識別左耳 右...