畢業(yè)論文---基于adaboost的人臉檢測研究_第1頁
已閱讀1頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  本 科 生 畢 業(yè) 設 計(論文)</p><p><b> ?。?012屆)</b></p><p><b>  信息工程學院</b></p><p>  題 目: 基于Adaboost的人臉檢測研究 </p><p>  學 號:

2、 </p><p>  姓 名: </p><p>  專業(yè)班級: 計算機081班 </p><p>  指導教師: 職稱: 實驗師 </p><p>  2012 年 5 月 27日<

3、;/p><p>  基于Adaboost的人臉檢測研究</p><p>  摘要:本文使用Adaboost算法,以Visual C++集成開發(fā)環(huán)境做平臺并利用OpenCV圖像處理軟件實現了人臉檢測功能。論文介紹了幾種常見的人臉檢測識別方法以及國內外人臉檢測技術研究的發(fā)展現狀,詳細闡述了Adaboost人臉檢測算法的原理及訓練流程,利用OpenCV圖像處理軟件與Adaboost人臉檢測算法的結合

4、模塊,選取擴展的Haar特征,實現了人臉檢測功能并給出了檢測結果。該方法具有較高的準確度和實時性,在自動人臉識別、智能人機交互、圖像與視頻檢索和監(jiān)控等方面有著重要的應用價值。</p><p>  關鍵字:Adaboost算法; OpenCV; 人臉檢測</p><p>  Face detection research based on Adaboost</p><p&

5、gt;  Abstract: This article is using Adaboost algorithm, OpenCV image processing software and Visual C + + integrated development environment as a platform, achieving a face detection function. This paper introduces seve

6、ral common face detection methods and development status of domestic and international face detection technology, elaborating on the Adaboost face detection algorithm principle and training processes,using OpenCV image p

7、rocessing software combined with Adaboost face detection algorith</p><p>  keyword: Adaboost algorithm, OpenCV, Face detection</p><p><b>  目 錄</b></p><p><b>  摘

8、要:I</b></p><p>  Abstract:II</p><p><b>  1、緒論 1</b></p><p>  1.1 人臉檢測研究的提出及背景1</p><p>  1.2 國內外人臉檢測的研究現狀1</p><p>  1.3 本文研究的目的與意義

9、2</p><p>  1.4 本文研究的主要內容與組織結構2</p><p>  1.4.1 主要內容2</p><p>  1.4.2 組織結構3</p><p>  2、人臉檢測方法與分析4</p><p>  2.1 基于特征的人臉檢測方法4</p><p>  2.

10、1.1 輪廓規(guī)則法4</p><p>  2.1.2 器官分布法5</p><p>  2.1.3 顏色紋理法5</p><p>  2.1.4 對稱性規(guī)則4</p><p>  2.1.5 運動規(guī)則法5</p><p>  2.2 模板匹配方法5</p><p>  2

11、.2.1 鑲嵌圖法4</p><p>  2.2.2 預定模板匹配法5</p><p>  2.2.3 變形模板法5</p><p>  2.3 基于統(tǒng)計的方法5</p><p>  2.3.1 人工神經網絡法4</p><p>  2.3.2 特征空間法5</p><p&g

12、t;  2.3.3 支持向量機法5</p><p>  2.3.4 概率模型法4</p><p>  2.3.5 基于積分圖像特征法5</p><p>  2.4 結束語5</p><p>  3、Adaboost 算法在人臉檢測中的應用5</p><p>  3.1 Adaboost算法簡介6&

13、lt;/p><p>  3.2 Adaboost的原理6</p><p>  3.2.1 基本原理7</p><p>  3.2.2 具體步驟7</p><p>  4、OpenCV圖像處理軟件的介紹8</p><p>  4.1 OpenCV簡介8</p><p>  4.1.1

14、 OpenCV的基本概念及應用領域12</p><p>  4.1.2 OpenCV的優(yōu)勢及項目歷史12</p><p>  4.2 OpenCV在Visual C++ 6.0下的安裝與配置14</p><p>  4.2.1 OpenCV的安裝15</p><p>  4.2.2 配置Windows環(huán)境變量15</

15、p><p>  4.2.3 配置Visual C++ 6.015</p><p>  5、人臉檢測功能的實現19</p><p>  5.1 Harr特征的提取19</p><p>  5.2 積分圖20</p><p>  5.3 Adaboost人臉檢測方法22</p><p>

16、;  5.4 利用OpenCV實現Adaboost算法的人臉檢測22</p><p>  5.4.1 OpenCV中Haar分類器的數據結構23</p><p>  5.4.2 OpenCV人臉檢測模塊及相關函數23</p><p>  5.4.3 OpenCV的人臉檢測23</p><p>  5.5 實驗結果與分析24

17、</p><p>  5.6 關鍵功能實現代碼24</p><p><b>  6、結論26</b></p><p><b>  參考文獻27</b></p><p><b>  致謝28</b></p><p><b>  1 緒

18、論</b></p><p>  1.1 問題的提出及研究背景</p><p>  人臉檢測(face detection)最初來源于人臉識別(face recognition)。人臉識別的研究可以追溯到二十世紀六十年代,由于早期的人臉識別研究主要針對背景簡單的、靜態(tài)的人的面部圖像,通常這些人臉的方位都很輕松可以捕捉到,所以人臉檢測沒有得到應有的關注與研究。進入二十一世紀以來,

19、電子商務應用得到大力蓬勃的的發(fā)展,最具有代表性的識別驗證生物身份的手段—人臉檢測,在這種應用背景要求下得到了廣大研究人員的關注,成為人臉信息識別、處理中的一種非常重要的手段。近幾年來,各領域對生物驗證的迫切要求,以及計算機視覺的快速發(fā)展,人臉檢測逐漸開始作為一項單獨的項目進行研究開發(fā),引起了國內外廣大的學者、技術科學人員的高度重視。</p><p>  人臉檢測方法和人臉識別技術是兩個不同的概念,后者包括前者,人

20、臉檢測是人臉識別其中的一個分支。兩者的側重點和解決的手段都不相同。從本質上說,人臉檢測是一個2類的分類問題。它的基本思路是先用統(tǒng)計或知識的方法對人臉建模,然后將所有可能需要檢測的區(qū)域與己經建立好模型的進行相似程度的匹配,從檢測結果中得到是人臉特征的區(qū)域。與人臉檢測相對的是人臉識別,它是n類的分類問題(n不是人臉的個數,而是代表圖像數據庫中人的個數)。人臉識別最終的目的是從大量數據庫中搜索出檢測到的對應的人臉,看是否在人臉數據庫中,具體是

21、那個人。</p><p>  現在,人臉檢測的應用背景已經遠遠超出了人臉識別系統(tǒng)的范疇,在基于內容的檢索、數字視頻處理、視頻監(jiān)測等方面有著重要的應用價值[1]。</p><p>  1.2 國內外人臉檢測的研究現狀</p><p>  直到二十世紀末,人們才把對人臉圖像的研究從人臉識別領域轉移到人臉檢測的領域上來。到目前為止,國內外對人臉檢測問題的研究有很多,外國

22、比較著名的有MIT,CMU等;在國內,清華大學、北京工業(yè)大學、中科院計算所和自動化所等都有研究者從事人臉檢測相關的研究[2]。而且,標準組織MPEG7已經成立了人臉識別草案小組,人臉檢測算法也是其中一項征集的內容。隨著人臉檢測研究的深入,國際上發(fā)表的有關論文數量也大幅度增長,如IEEE的FG、ICIP\CVPR等重要國際會議上每年都有大量關于人臉檢測的論文,占有關人臉研究論文的1/3之多。由此可以看到世界對人臉檢測技術的重視[3]。&l

23、t;/p><p>  早期人臉檢測方法往往針對簡單無變化背景下的正面人臉檢測,所以使這些方法在很大程度上顯得很有局限性。</p><p>  直到二十世紀九十年代,隨著實際的人臉識別和視頻編碼系統(tǒng)開始成為現實,這種情況才有所改變。在過去的十多年里,研究者提出了多種檢測方法,特別是那些利用運動、膚色、示例學習、統(tǒng)計模型、形狀分析和一般信息的方法統(tǒng)計和神經網絡方法的使用也使在復雜背景和多分辨率中的

24、人臉檢測成為可能。</p><p>  近期人臉檢測的研究主要集中在基于數據驅動的學習方法,如統(tǒng)計模型方法,彩色信息,神經網絡學習方法,支持向量機、多模態(tài)信息融合新分類方法的應用[4]等。</p><p>  目前,國內外對人臉檢測的研究很多,每年都有大批的研究論文出現,但是由于人臉的復雜多樣,而生物科學上對人類視覺理解的研究還不夠透徹,至今仍然沒有徹底的解決這個問題。</p>

25、<p>  1.3 本文研究的目的與意義</p><p>  人臉檢測的目的是確定圖像中是否有人臉,如果有人臉,則返回人臉在圖像中的位置和范圍。人臉檢測是人臉識別的基礎,我們只有檢測出圖像中人臉的位置和大小,才能對其進行近一步的識別。</p><p>  隨著人機交互和人工智能技術不斷的發(fā)展,各個領域對實時迅速自動驗證身份的要求愈來愈強烈。尤其是視頻會議、人機交互、門禁控制

26、、家庭娛樂以及信息安全等場合。人臉作為最關鍵的生物象征,成為了驗證身份最權威的參考依據。當今社會有很多生物識別技術,比如視網膜識別,虹膜識別,步態(tài)識別,聲音識別,人臉識別,指紋識別等等,而人臉識別更形象,更迅速,更直接有效,其中人臉檢測是人臉識別的先決條件,所以必須加以重視,需要投入更多的人力,財力加以研究開發(fā)。</p><p>  1.4 本文研究的主要內容與組織結構</p><p>

27、  1.4.1 主要內容</p><p>  本論文研究的是基于AdaBoost算法,在windows平臺下,利用Intel開發(fā)的OpenCV圖像處理軟件結合VC中的MFC實現的人臉檢測方法,第一步利先訓練出大考量的簡單的分類器,接著根據一定規(guī)則,選取有用的分類器,疊加起來組成一個能力更強的強分類器,最后通過把幾個強分類器組成一個終極分類器,完成對圖像的搜索和檢測。此研究過程中采用OpenCV庫編寫程序實現人臉

28、檢測的算法。</p><p>  本文作者創(chuàng)新點是用VC 結合MFC和OpenCV對圖像進行處理,用于檢測人臉。詳細介紹了Adaboost人臉檢測算法的原理及訓練流程.利用OpenCV圖像處理軟件與Adaboost人臉檢測算法的結合模塊,選取擴展的Haar特征,實現了人臉檢測并給出了檢測結果,并對結果進行了分析。</p><p>  1.4.2 組織結構</p><p

29、>  本論文的內容一共分為六個章節(jié),具體內容安排如下:</p><p>  第一章是緒論部分,首先介紹了選題背景,然后分析了人臉檢測國內外研究的的現狀。接著總結了本文研究人臉檢測的目的、意義、主要內容和本文的組織結構。</p><p>  第二章是介紹人臉檢測的方法。</p><p>  第三章是介紹Adaboost算法在人臉檢測中的應用。</p>

30、<p>  第四章是OpenCV圖像處理軟件的介紹,包括OpenCV的基本概念、應用領域、優(yōu)勢及項目歷史和OpenCV在VC6.0下的安裝與配置。</p><p>  第五章是人臉檢測系統(tǒng)的實現,展示了功能實現后的具體式樣(附圖片)以及對研究結果的分析。</p><p><b>  第六章是結論。</b></p><p>  最后

31、是參考文獻,包括相關參考文獻列表及對老師和同學的衷心感謝等相關內容。</p><p>  2 人臉檢測方法與分析</p><p>  本文對人臉檢測的方法進行了整理和歸納,大致分為三類:基于特征的方法,模板匹配方法和基于統(tǒng)計的方法,并對這些方法做了簡單的分析。</p><p>  圖 2-1 人臉檢測方法分類圖</p><p>  2.1

32、 基于特征的人臉檢測方法</p><p>  這里所說的基于特征的人臉檢測方法是指人眼可以看見的特征,這些特征都是顯而易見的,比如說頭發(fā)、皮膚顏色、臉型、輪廓、眼睛、鼻子、嘴巴、耳朵等器官特征等。利用這些最具代表性的結構特征對人臉進行檢測。</p><p>  2.1.1 輪廓規(guī)則法</p><p>  人的面部輪廓好像一顆鵝蛋,也可看成幾何圖形中的橢圓,所以檢

33、測算法可以通過尋找一個橢圓形來進行人臉檢測。Govindaraju等人根據臉部輪廓特征,抽象的把人臉簡單分為三個部分:第一部分,頭頂及額頭,算第一層輪廓線,以鼻子為分界線,將左臉和又臉分別分為第二層和第三層輪廓線。我們隨便給出的任何一幅圖像,第一步對圖片進行預處理,首先是邊緣檢測,細化后,提取得到面部曲線的特征,接著用提取的曲線特征與封裝好的函數進行匹配,檢測人臉。</p><p>  2.1.2 器官分布法&

34、lt;/p><p>  每個人都是獨立的個體,即使是雙胞胎,細細觀察也總存在不同之處。而且人的五官分布結構遵循了一定的幾何規(guī)則。這種方法采用的規(guī)則有兩種:第一種是“從上到下”, 在這種規(guī)則中Yang等人提出的Mosaic方法是最為簡單和有效的,它給出了基于人臉區(qū)域灰度分布的規(guī)則,根據這些規(guī)則,按照低分辨率到高分辨率對這些圖片進行一一篩選,如果樣本在一定程度上滿足了這些規(guī)則,則可以判斷為人臉。第二種方法則是“從下到上”

35、,第一步直接對幾個器官可能分布的位置進行檢測,接著分別組合組合這些檢測到的位置點,再根據已有的器官幾何分布規(guī)則逐個對其進行挑選,剔除非人臉,篩選出有可能是人臉的樣本。</p><p>  2.1.3 顏色紋理法</p><p>  人臉面部皮膚顏色信息跟大部分背景顏色在很大程度上有所不同,可以根據這個差別將人聯(lián)合非人臉進行區(qū)別。基于膚色模型算法有很多優(yōu)點:比如算法相對比較簡單、計算量小、

36、易于實現、檢測時間短等。由于只要考慮色度,所以不需要考慮人的面部表情、姿態(tài)等,只要根據膚色因素,不需要把其他方面考慮在內,很大程度上簡化了檢測過程。此方法比較有名的代表人物有Dai和Saber,前者利用了SGLD(空間灰度共生矩陣)紋理圖信息作為特征[5],可以對低分辨率的圖像進行人臉檢測。而Saber則是綜合形狀、顏色等因素,對人臉進行檢測,顯然后者考慮的因素更全面。</p><p>  2.1.4 對稱性規(guī)

37、則</p><p>  人的臉部結構具有一定的幾何特點即軸對稱性,以鼻子為分界線,兩只眼睛、耳朵、左右臉頰等器官也是對稱的。所以很多研究者利用人臉的這個特點,成功檢測出了人臉。這里比較著名的有盧春雨和Zabrodsky等人,盧春雨在各個不同方向上對人臉考察對稱性,我們稱之為定義方向上的對稱變換,這種方法既可以找到最強的對稱點,又可以描述出對稱性強的物體的有關形狀信息,這種方法對人臉器官定位更為有效和準確。Zabr

38、odsky提出的方法叫做連續(xù)對稱性法,在一個圓形區(qū)域內的對圖片進行對稱性的檢測,根據檢測結果判斷是否為人臉。</p><p>  2.1.5 運動規(guī)則法</p><p>  我們可以利用相對運動法來檢測人臉。如果加載的圖像是動態(tài)的序列,人臉相對于背景是運動的,我們可以根據這種方法來對人臉進行檢測,比如我們可以根據眨眼或嘴唇等動作來將背景和人臉的區(qū)分開來。Marques基于動態(tài)圖像序列,分

39、別使用分割投影和連接算子方將人臉和背景分割開來,并取得了令人滿意的檢測結果。上述的這些方法都是利用到已經存在的的人臉特征信息,然后根據規(guī)則找到每一個分布特征之間的相互的聯(lián)系,最后進行人臉特征的的提取。</p><p>  2.2 模板匹配人臉檢測方法</p><p>  這種方法需要大量的人臉特征作為數據庫,首先在計算機中存儲大量的人臉模板,包括正面人臉和五官等比如眼睛、鼻子、嘴唇、耳朵

40、等。然后輸入待測圖像,根據算法將待測圖與標準模板進行的相似程匹配,達到一定相似度以上及判斷為人臉,否則為非人臉,這種方法需要的數據量比較大,需要大量存儲人臉和非人臉模型,對數據庫要求比較高。</p><p>  2.2.1 鑲嵌圖法</p><p>  此方法是將待測圖像分割成方格圖,每個方格大小要一樣,每一個方格的灰度值為格中各個像素的平均值。每個格子的值應該滿足的一定的約束規(guī)則。以Y

41、ang為代表的一些研究者把五官區(qū)分割成小方格塊,然后利用一組規(guī)則進行人臉檢驗,接著使用邊緣特征進行再次驗證。盧春雨等人改善了鑲嵌圖法,在檢測中自動調整各方格塊的大小,使用一組基于各方格塊的灰度和梯度,對人臉特征進行統(tǒng)計,判斷待測圖像是否為人臉,實驗結果相當令人滿意。</p><p>  2.2.2 預定模板匹配法</p><p>  這種方法是用已有的知識知識確定出人臉輪廓模板和每一個器

42、官特征的子模板,第一步通過計算分析待測圖像,選定區(qū)域和人臉輪廓模板,用相關值匹配方法來來對人臉候進行候選區(qū)域檢測,第二步用已有的五官特征子模板來對前面檢測出來的候選人臉區(qū)域進行檢測,檢測待測圖像是否包含人臉。這種方法比較著名的有“雙眼一人臉”法,將人的眼睛從模板中裁剪出來,過濾波形時首先先使用雙眼模板規(guī)則,然后再采用人臉匹配模板,這樣使匹配速度大大的提高,而且檢測性能也非常高。另一種思路是先得到人臉輪廓,接著與人臉庫進行相關值匹配,找到

43、合適的人臉模板。</p><p>  2.2.3 變形模板法</p><p>  這種方法是結合模板和函數來對人臉進行檢測的,利用一個非線性方法,找到最優(yōu)的,函數方法最簡單的參數作為模板,這個人模板就被當做是人臉特征。著名的Yullie則根據此方法,使用彈性模板的方法對人臉進行檢測。使用這種方法,可以隨意的調整參數,當找到一個關于此函數的最小值的情況下,根據人臉位置和調整模板參數,使模板

44、中的人臉與待測圖像中的人臉最大程度的匹配,從而實現人臉特征的檢測。</p><p>  2.3 基于統(tǒng)計的人臉檢測方法</p><p>  所謂統(tǒng)計,就是從大量的人臉特征中尋找一些特定的規(guī)律,不是單單從單一的器官出發(fā),而是著眼于整個人臉特征。然后利用這些規(guī)律使用到檢測人臉中。此方法的核心是訓練一個訓練集,然后建立一個分類器,訓練集是從大量的非人臉與人臉圖像得到的,然后根據這些樣本建立一個

45、正確率較高的分類器。這種方法的好處是不需要人為的對人臉分析,也不需要對圖片進行處理,檢測時只需要用掃描儀對圖片進行掃描,然后分類器判斷是否存在人臉。</p><p>  2.3.1 人工神經網絡法</p><p>  CMU的Rowley對于這種方法具有很大的貢獻,這種方法是把統(tǒng)計得到的人臉特征通過一定形式隱藏在函數和網絡框架之中,最終得到一個網絡結構。這種方法的優(yōu)勢在于可以描述復雜的、

46、難以顯示的特征。</p><p>  2.3.2 特征空間法</p><p>  以Turk為代表的研究人員提出使用DFFS距離度量概念,然后將人臉空間的距離與待測圖像進行比較,通過把人臉區(qū)域變換到某一個特征的空間,采用主分量分析的方法。根據特定空間的特定規(guī)律來劃分人臉和非人臉。</p><p>  2.3.3 支持向量機法</p><p&g

47、t;  SVM(Support Vector Machine)是一種新的檢測人臉的方法,這種方法首先是由Osuna提出的[6]。它是依據與統(tǒng)計學發(fā)展而來的,提到這種方法前,必須先介紹下人工神經網絡法,人工神經網絡法是一種基于經驗風險最小化的方法,不過它很難解決一些技術性的問題,比如極小局部點問題、過度學習和模型選擇問題、維數災難和非線性問題,而SVM方法可以很好地解決這些問題首先是搜索大量的人臉樣本,然后用和“自舉”的方法得到一些的“非

48、人臉”特征,訓練出樣本。</p><p>  2.3.4 概率模型法</p><p>  Schneiderman等人首先提出了一種基于后驗概率估計的檢測方法。這種方法的思想是計算機計算待測圖片區(qū)域(region),然后得到屬于人臉特征object的后驗概率P(object/region),根據概率對所有可能是人臉的的圖像窗口進行判斷。另外一種概率模型是應用隱馬爾可夫模型(Hidden

49、Markov Models, HMM)。這種方法方法主要用來檢測臉部和肩部的圖像。</p><p>  2.3.5 基于積分圖像特征法</p><p>  基于積分圖像特征法是由Viola等人所提出的這種方法結合了Adaboost學習算法、積分圖和分類器還有訓練方法等。這種方法一般用于照片的預處理。</p><p><b>  2.4 結束語</

50、b></p><p>  由于人臉自身的多變性與環(huán)境的復雜度,至今仍然沒有一種統(tǒng)一權威的的人臉檢測方法,研究者只能通過結合多種混合的檢測方法來提高檢測的正確率,而提高檢測率的同時帶來的反作用則是檢測速度的放慢,所以要研究出一項正確率高,檢測速度快的實時人臉檢測方案成為現在亟待解決的問題。</p><p>  3 Adaboost算法在人臉檢測中的應用</p><

51、p>  3.1 Adaboost算法簡介</p><p>  Adaboost是一種迭代算法,其核心思想是針對同一個訓練集訓練不同的分類器(弱分類器),第二步是結合這些弱分類器來,利用這些弱分類器建立一個強分類器。通過變換數據,對每一次訓練出的訓練集中的樣本進行分類,根據正確率,得到權重。然后將得到的權重發(fā)送給下一級分類器,集合每一次正確檢測樣本的分類器建立一個最終的強分類器。使用Adaboost算法的優(yōu)

52、點是可以把重點放在有用的數據上,而不用著眼于那些影響檢測結果的數據上。使用Adaboost分類器可以排除一些不必要的訓練數據特征,并將關鍵放在關鍵的訓練數據上面。</p><p>  Michael Jones和Paul Viola在2001年提出了Adaboost人臉檢測算法[7],此算法的核心思路是分類器的訓練和選擇。剛開始每一個樣本的權值是相等的,用h1進行第一次分類,錯誤的,增加樣本的權值,正確的樣本,減

53、小其權值。然后得到新的樣本U2。然后進行第二次分類,訓練得到h2弱分類器。按照這種方法,循環(huán)T次,得到了T個弱分類器,把這些分類器的權值疊加起來,建立一個強的分類器。AdaBoost算法訓練過程就是要找到最佳的Harr特征,然后訓練出分類器,對人臉進行檢測。</p><p>  本論文將訓練過程分成以下幾個步驟:第一步:首先輸入樣本集,利用給定的矩形特征,計算出樣本特征,并得到矩形特征集;第二步:輸入上一步得到的

54、特征集,采用弱學習算法,得到一個閥值,把弱分類器與特征逐一對應起來,得到一些弱分類器集;第三步:輸入第二步的弱分類器集,利用正確率和錯誤率,根據AdaBoost 算法選擇最佳的弱分類器建立最終的強分類器;第四步:輸入上一步的強分類器,把這些強分類器組合成級聯(lián)分類器;第五步:輸入不是人臉的照片,把強分類器作為臨時的級聯(lián)分類器,篩選并補充非人臉樣本,得到新的樣本。下圖為系統(tǒng)訓練框架圖:</p><p>  圖3-1

55、 訓練系統(tǒng)框架圖</p><p>  訓練的樣本必須是人臉特寫,但是人臉姿態(tài)千變萬化,這就要求我們在樣本的選擇過程中盡可能地做到廣泛。非人臉樣本的選擇有很多種。</p><p>  樣本訓練步驟分為三步:第一步Haar特征的提取;第二步把Haar特征與弱分類器相互對應起來;第三步挑選出最優(yōu)的弱分類器。</p><p>  (1) Haar特征的提取</p>

56、;<p>  圖3-2 常用的四種Haar特征[8]</p><p>  常用的Haar特征有4種,如圖3-2所示。除了這四種常見的特征,我們也可以設計出更多的特征。訓練樣本的像素(24×24),以上四種特征所達到的個數為160000個以上。這么多的數據,就要求我們更加龐大的計算任務,所以AdaBoost算法訓練過程非常的費時間,這也正是我們以后研究需要改進的問題。</p>

57、<p>  (2)弱分類器的生成</p><p>  在AdaBoost算法中,我們訓練出的弱分類器可以是任何類型的,可以是基于決策樹,基于隱馬爾科夫模型,也可以是基于神經網絡,比如說弱分類器是基于線性神的網絡結構模型,那么就要求AdaBoost算法每次都要建立多層感知器節(jié)點。每一個弱分類器都對應Harr特征,并且都是根據它所對應的Haar特征的參數來定義的。根據前面所說的Haar特征的區(qū)域信息,然后統(tǒng)

58、計訓練樣本就能夠得到相應特征的參數。</p><p>  (3)利用AdaBoost算法選取優(yōu)化的弱分類器</p><p>  我們所說的AdaBoost算法,就是在訓練過程中篩選出最佳的弱分類器,并且要給出計算權值的過程,如下圖所示:</p><p>  圖3-3 AdaBoost算法訓練示意圖</p><p>  主要解決的問題:目前,

59、人們對AdaBoost算法的研究和應用領域,主要在分類器的研究問題上,人們對Adaboost算法的研究帶來了很多實際效果,解決了很多問題:比如分類問題、多類型單一標簽和多標簽多類問題等等。</p><p>  分析過程:Adaboost算法就是采用循環(huán)多次的訓練,不斷強化分類器對數據分析的能力,簡單地說就是不斷強化簡單分類器,最終建立一個強大的分類器的過程,其步驟在下面給出: 第一步:對多個樣本進行訓練。建立第一

60、個簡單分類器,第二步是對第一步檢錯的樣本進行訓練建立第二個簡單分類器 ,第三步是將前兩步檢測錯誤的樣本訓練得到下一個分類器,最后是訓練出強分類器。</p><p>  Adaboosting算法有兩大問題需要解決: 一是怎樣挑選訓練集以及訓練集的大??;二是怎樣組合弱分類器,使它們建立成一個強的分類器。 通過對上面兩個問題的研究,我們改善了Adaboost算法: 第一步對訓練樣本進行加權,篩選出較復雜的訓練樣本,這

61、樣問題就比較有針對性;第二步根據權值對分類器進行分類,權重大的分類器效果比較好,反之亦然。 </p><p>  根據在線分配算法Schapire和Freund提出了Adaboost算法,對Adaboost算法做了深入的研究,比如檢錯率和最優(yōu)迭代次數問題[9]。這種方法與Boosting算法是不一樣的,Boosting算法必須要知道弱分類器的誤差即正確率和錯誤率,而Adaboost算法不需要,Adaboost算法

62、是根據計算每個樣本的權重最終建立強分類器的。剛開始每一個樣本的權值是相等的,用h1進行第一次分類,錯誤的,增加樣本的權值,正確的樣本,減小其權值。然后得到新的樣本U2。然后進行第二次分類,訓練得到h2弱分類器。按照這種方法,循環(huán)T次,得到了T個弱分類器,把這些分類器的權值疊加起來,建立一個強的分類器。Adaboost算法訓練過程就是要找到最佳的harr特征,然后訓練出分類器,對人臉進行檢測。</p><p>  

63、Adaboost算法的詳細過程如下: </p><p>  1. 給定訓練樣本集S,其中X和Y分別對應于人臉樣本和非人臉樣本;T為訓練的最大循環(huán)次數; </p><p>  2. 初始化樣本權重為1/n ,即為訓練樣本的初始概率分布; </p><p>  3. 第一次迭代: </p><p>  1) 訓練樣本的概率分布相當下,訓練弱分類器

64、; </p><p>  2) 計算弱分類器的錯誤率; </p><p>  3) 選取合適閾值,使得誤差最?。?</p><p>  4) 更新樣本權重值; </p><p>  4.經T次循環(huán)后,得到T個弱分類器,按更新的權重疊加,最后建立強分類器。 </p><p>  根據Boosting算法Adaboost算

65、法做了很大的調整,Adaboost算法可以對弱學習獲得的簡單分類器的錯誤進行一定的調整。一共循環(huán)了T次,每一次都要重新計算權值,根據權值重新劃分樣本,接著根據這個樣本分布對這個分布下的樣本使用弱學習算法得到建立一個一個弱分類器,每次迭代,對權重更新一次,采用的方法是:效果好的弱分類器減小其權值,效果差的弱分類器提高其權值。最后根據這些弱分類器的權值,求平均得到最終強分類器。</p><p>  3.2 Adab

66、oost算法的原理</p><p>  3.2.1 Adaboost算法基本原理</p><p>  Adaboost是一種迭代算法,上一章已經有所描述。這種方法的關鍵思路是是針對同一個訓練集訓練不同的分類器(弱分類器),再把這些分類器組合起來,建立一個強分類器。</p><p>  通過對每一個樣本集權值的改變得到新的訓練集。起先每一個樣本具有相同的權值,訓練得

67、到第一個弱分類器。加大檢測錯誤樣本的權重,減小分類正確樣本的權值,這樣就得到了一個在新的樣本,然后多次循環(huán),在循環(huán)T次后,得到T個弱分類器,最后根據一定規(guī)則把這T個弱分類器的權重疊加起來,得到最終的強分類器。</p><p>  3.2.2 Adaboost算法的具體步驟</p><p>  設輸入的n個訓練樣本為:{(x1,y1),(x2,y2),L,(xn,yn)},其中xi是輸入的

68、訓練樣本,yi屬于{0,1},分別表示正樣本和負樣本,其中正樣本數為L,負樣本數m,n=l+m,具體步驟如下[10]:</p><p>  ⑴對每個樣本的權重wi初始化,i屬于D(i);</p><p>  ⑵對每個t=1,L,T (T為弱分類器的個數);</p><p>  ①把權重歸一化為一個概率分布

69、 (1)</p><p> ?、趯γ總€特征,訓練一個弱分類器hj計算對應所有特征弱分類器的加權錯誤率 (2)</p><p> ?、圻x取最佳的弱分類器ht (最小錯誤率):</p><p> ?、馨凑者@個最佳弱分類器,調整權重(3),其中,表示被正確地分類;,

70、表示被錯誤地分類</p><p> ?、亲詈蟮膹姺诸惼鳛椋海?), (5)</p><p>  隨著算法的發(fā)展,目前Adaboost算法被廣泛的應用在人臉檢測、目標識別等領域,尤其在對人臉識別、汽車識別和駕駛員眨眼識別等方面的研究產生重大的意義。</p><p>  4 Opencv圖像處理軟件的介紹</p><p> 

71、 4.1 OpenCV簡介</p><p>  4.1.1 OpenCV的基本概念及應用領域</p><p><b>  (1) 基本概念</b></p><p>  OpenCV的全稱是:Open Source Computer Vision Library。1999年,Intel建立了OpenCV現在由Willow Garage提供支持

72、[11]。OpenCV是一個基于BSD許可證授權(開源)發(fā)行的跨平臺計算機視覺庫,適用于很多操作系統(tǒng),比如Linux、Windows和Mac OS。它很高效,包含了很多C函數和少量 C++ 類,而且提供了很多接口,如Python、Ruby、MATLAB等語言,包含了圖像處理和智能計算機視覺方面的很多通用算法。</p><p> ?。?) 應用領域:OpenCV的應用領域很廣泛。如:人機互動、物體識別、圖象分割、人

73、臉識別、動作識別、運動跟蹤和機器人等領域。</p><p>  4.1.2 OpenCV的優(yōu)勢及項目歷史</p><p> ?。?) OpenCV的優(yōu)勢</p><p>  雖然計算機視覺不斷發(fā)展,但到現在仍然沒有標準API,而現在的關于計算機視覺軟件有很大的缺陷:第一是軟件代碼運行慢,不穩(wěn)定,而且與別的庫不能兼容;第二以Halcon, Matlab Simuli

74、nk為例,消耗很高的商業(yè)成本;第三對硬件有較高的依賴性。建立標準的API便可以簡化并解決這些問題。</p><p>  OpenCV圖像處理軟件一直為成為這樣的標準API而不斷努力[12]。OpenCV致力于真實世界的實時應用,通過優(yōu)化的C代碼的編寫對其執(zhí)行速度帶來了可觀的提升,并且可以通過購買Intel的IPP高性能多媒體函數庫(Integrated Performance Primitives)得到更快的處理

75、速度。下圖為OpenCV與現在其他主流視覺函數庫的性能比較。</p><p>  圖4-1 為OpenCV與現在其他主流視覺函數庫的性能比較圖</p><p> ?。?) OpenCV的項目歷史</p><p>  1999年1月,CVL項目啟動。主要研究目標是人機界面問題,可以被UI調用的實時計算機視覺庫,為Intel處理器做了特定優(yōu)化。   </p>

76、;<p>  2000年6月,發(fā)布了首個開源版本的OpenCV alpha 3。   </p><p>  2000年12月,發(fā)布了適用于linux平臺的OpenCV beta 1。在此期間,各種研究仍在繼續(xù)。   </p><p>  2006年,發(fā)布了適用于Mac OS系統(tǒng)的OpenCV 1.0。   </p><p>  2009年9月,Open

77、CV 1.2(beta 2.0)發(fā)布。   </p><p>  2009年10月1日,Version 2.0發(fā)布。   </p><p>  2010年12月6日,OpenCV 2.2發(fā)布。  </p><p>  2011年8月,OpenCV 2.3發(fā)布。   </p><p>  2012年4月2日,發(fā)布OpenCV 2.4.   &l

78、t;/p><p>  OpenCV軟件具有涵蓋了500 多個C函數的跨平臺的中、高層API,而且能夠調用某些外部庫,但它并不依賴于它們。OpenCV 是完全免費的,它使用類BSDlisence,為Intel Integrated Performance Primitives(IPP)提供了透明接口。此軟件的優(yōu)點是如果有為特定處理器優(yōu)化的IPP 庫,OpenCV可以在運行時自動加載這些庫。軟件關于視覺處理算法的提供廣泛

79、而且豐富,而且部分可以用C語言編寫,具有開源性的特征,如果處理得當,可以不用添加新的外部支持,可以獨立的對代碼進行編譯鏈接并執(zhí)行,在算法的移植方面,OpenCV也起到很大的作用。可以將代碼移植到單片機系統(tǒng)和DSP系統(tǒng)中。</p><p>  4.2 Opencv在vc6.0下的安裝與配置</p><p>  4.2.1 OpenCV的安裝</p><p>  假

80、如要將OpenCV安裝到C:\Program Files\OpenCV。在安裝時選擇“將\OpenCV\bin加入系統(tǒng)變量”(Add\OpenCV\bin to the systerm PATH)。(下面附圖為OpenCV 1.0安裝界面):</p><p>  圖4-2 安裝目錄界面</p><p>  圖4-3 添加路徑界面</p><p>  4.2.2 配

81、置Windows環(huán)境變量</p><p>  檢查C:\Program Files\OpenCV\bin是否已經被加入到環(huán)境變量PATH,如果沒有,請加入。加入后需要注銷當前Windows用戶后重新登陸(或重啟)才能生效。下圖為啟動環(huán)境變量界面:</p><p>  圖4-4 系統(tǒng)屬性啟動界面</p><p>  圖4-5 添加環(huán)境變量界面</p>&

82、lt;p>  4.2.3 配置Visual C++ 6.0</p><p> ?。?)系統(tǒng)功能設全局設置[13]</p><p>  打開Visual C++ 6.0,選擇菜單Tools->Options->Directories:先設置lib路徑,選擇Library files,在下方填入路徑:C:\Program Files\OpenCV\lib,然后選擇inclu

83、de files,在下方填入路徑:</p><p>  C:\Program Files\OpenCV\cxcore\include</p><p>  C:\Program Files\OpenCV\cvaux\include</p><p>  C:\Program Files\OpenCV\ml\include</p><p>  C:

84、\Program Files\OpenCV\otherlibs\highgui</p><p>  C:\Program Files\OpenCV\cv\include</p><p>  C:\Program Files\OpenCV\otherlibs\cvcam\include</p><p>  圖4-6 添加路徑界面</p><p&g

85、t;  然后選擇source files[14],在下面填入路徑信息:</p><p>  C:\Program Files\OpenCV\cv\src</p><p>  C:\Program Files\OpenCV\otherlibs\highgui</p><p>  C:\Program Files\OpenCV\cvaux\src</p>

86、<p>  C:\Program Files\OpenCV\cxcore\src</p><p>  C:\Program Files\OpenCV\otherlibs\cvcam\src\windows</p><p>  最后點擊“ok”,完成設置。</p><p> ?。?) 項目設置[15]</p><p>  每次創(chuàng)建一個

87、OpenCV的VC Project,都要給它指定相應的lib。菜單:Project->Settings,然后將Setting for選為All Configurations,然后選擇右邊的link標簽,在Object/library modules附加上cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib,也可以只添加需要的lib。</p><

88、;p>  5 人臉檢測功能的實現</p><p>  5.1 Harr特征的提取</p><p>  下圖為Rainer Lienhart等人給出了擴展的Haar特征圖:</p><p>  圖5-1 Harr特征圖</p><p>  我們把Haar特征分為三類:邊緣特征、線性特征、中心特征和對角線特征[16],組合成特征模板。

89、特征模板里包黑色跟白色兩種類型的矩形,而且我們規(guī)定該模板的特征值等于白色矩形像素和值減去黑色矩形像素和值。我們在確定了特征形式以后,Harr- like特征的數量就取決于訓練樣本圖像矩陣的大小,特征模板在子窗口內任意放置,一種形態(tài)稱為一種特征,找出所有子窗口的特征是進行弱分類訓練的關鍵和基礎。</p><p><b>  5.2 積分圖</b></p><p>  

90、積分圖方法是一種快速計算RectSum的方法[17]。我們對一幅圖像的每個象素灰度定義為i( x, y ) ,則該幅圖像的積分圖中的每個像素值為ii,對于一幅圖像在任意點的積分圖值,分別對行值和列值的進行累加,通過一次循環(huán)得到:</p><p>  s ( x , y ) = s ( x , y - 1 ) + i ( x , y ) (6)</p><

91、p>  i i ( x , y ) = i i ( x - 1 , y ) + s ( x , y ) (7)</p><p>  其中,s ( x , y )為點( x , y )所在位置的列積分值,但不包含( x , y )點的值.迭代初始時s ( x , y - 1 )= 0(8),i i ( x , y ) = 0(9)。圖5-2(a)中點( x , y )的積分

92、圖值為灰色矩形區(qū)域的象素灰度值求和.利用積分圖可以方便地對圖像中任意一個矩形內的灰度值求和,如圖5-2(b)所示:</p><p>  圖5-2 點(x, y)積分圖像值和象素灰度值的求和圖[18]</p><p>  5.3 Adaboost人臉檢測算法</p><p>  Adaboost人臉檢測方法過程用到了積分圖和級聯(lián)檢測器.此方法的核心:首先訓練出大量

93、的簡單分類器,這種分類器的分類比較差,然后根據一定規(guī)則一疊加(boost),最后建立一個強分類器最后這個分類器的分類能力最強.然后再把這些得到的強分類器組合成級聯(lián)分類器,對圖像進行檢測.</p><p>  Adaboost算法描述如下:假設有n個訓練樣本從( x1, y1 )到( xn, yn )的訓練集,其中yi= { 0, 1}, ( i = 1, 2, , n)1和0分別代表真和假.訓練集中一共有L個人臉

94、樣本和M個非人臉樣本,把待測圖片分成K個特征,用fj( · )表示,這里1≤j≤K。xi代表第i個訓練樣本,{ f1( xi) , f2( xi) , , fj( xi) , , fk( xi)}為此樣本的K個特征的特征值,對每一個輸入的特征的特征值fj有一個簡單二值分類器。第j個特征的弱分類器由一個指示不等式方向的偏置pj(只有±1兩種情況)、一個閾值θj和一個特征值fj構成。第j個特征為真,則得到這個樣本為真,用

95、hj= 1表示,如果是假樣本則hj= 0。訓練就是分析真假樣本的過程,篩選出分類檢錯率最小的T個弱分類器,然后將它們疊加成最后的強分類器。下面是分類器訓練過程:</p><p> ?。?)初始化訓練樣本的誤差權值,設wt, i為第t次循環(huán)中第i個樣本的誤差權重: 對于yi= 1的樣本wt, i= 1 / ( 2L );對于yi= 0的樣本wt,i= 1/(2M);for t=1, ,T。</p>&

96、lt;p>  (2)對權值進行歸一化處理,使得wt, i為wt, i←wt, i/ ∑ni =1wt,i;根據每個特征j,訓練得到對應的弱分類器,然后得到閾值θj和偏置pj,最終使得特征j的誤差函數εj=∑ni = 1wt, i| hj( xi) - yi|經過本次循環(huán)達到最小值;從上一步確定的所有弱分類器中找出一個具有最小誤差函數的弱分類器ht,其誤差函數為εt,并把該弱分類器ht加入到強分類器中;更新每個樣本所對應的權重,確定

97、的方法為:若第i個樣本xi被正確分類,則ei= 0;反之ei= 1,βt=εt/ ( 1-εt) 。</p><p>  (3) 循環(huán)T次后,能夠得到由T個弱分類器疊加建立的最終強分類器</p><p><b> ?。?)</b></p><p>  這里αt= log (1/βt) [19]。</p><p>  雖然

98、級數越來越多,但是計算的數據卻在減少,系統(tǒng)運行的速度也在提升,其中的原因是:因為將強分類器疊加在一起建立成一個級聯(lián)分類器的過程,每次的權重都要進行調整,為人臉的圖像通過了樣本,而非人臉樣本則被拒之門外,由于上一步使用的舉行特征匹配數量少,計算速度非???而后面通過檢測的人臉樣本越來越少,所以檢測的速度變得更快,這種分級方法采用的思想遵循先重后輕規(guī)則。</p><p>  5.4 用OpenCV實現Adaboos

99、t算法的人臉檢</p><p>  OpenCV(Open Source Computer Vision Library)是一個基于BSD許可證授權(開源)發(fā)行的跨平臺圖像處理軟件,適用于很多操作系統(tǒng),比如Linux、Windows和Mac OS。它很高效,包含了很多C函數和少量C++類,而且提供了很多接口。</p><p>  5.4.1O OpenCV中Haar分類器的數據結構<

100、;/p><p>  下面給出了Haar分類器中的結構體:</p><p>  CvHaar Classifier Cascade結構形式如下:</p><p>  typedef struct CvHaar Classifier Cascade</p><p><b>  {</b></p><p>

101、  int flags; /*標志*/</p><p>  int count;/*分級分類器中強分類器的數量*/</p><p>  CvSize orig_win_dow_size;/*訓練中原始目標的大小*/</p><p>  CvSize real_window_size;/*待檢測物體的大小*/</p><p>  double

102、scale; /*Haar塊縮放的尺寸*/</p><p>  CvHaar Stage Classifier * stage_classifier;/*定義強分類器數組*/</p><p>  CvHidHaar ClassifierCascade * hid_cas;</p><p>  }CvHaarClassifierCascade;</p>

103、<p>  CvHaar Stage Classifier結構形式如下: </p><p>  #define CV-HAAR-FEATURE-MAX 3</p><p>  typedef struct CvHaar Stage Classifier</p><p><b>  {</b></p><p> 

104、 int count;/*構成強分類器的弱分類器的數量*/</p><p>  float threshold; /*疊加分類器的閾值*/</p><p>  CvHaar Classifier * classifier;/*定義分類器數組*/</p><p>  int parent;</p><p>  int child;</p&

105、gt;<p><b>  int next;</b></p><p>  }CvHaar Stage Classifier;</p><p>  5.4.2 OpenCV人臉檢測模塊及相關函數</p><p>  Adaboost算法的人臉檢測器主要包括訓練和檢測2個模塊,下圖為檢測模塊的流程。</p><p

106、>  圖5-3 檢測程序流程圖</p><p>  下面對OpenCV中的檢測模塊進行簡單的介紹。</p><p> ?。?) 函數LoadHaar Classifier Cascade。用來裝載級聯(lián)分類器,格式如下:CvHaar Classifier Cascade * cvLoadHaar Classifier Cascade (const char * directory,

107、CvSize orig_win_dow_size);其中directory為級聯(lián)分類器文件的路徑。Orig_window_size為級聯(lián)分類器檢測目標的尺寸大小。</p><p> ?。?) 因為OpenCV只可以處理內部優(yōu)化格式的分類器。第二步把分類器轉換成OpenCV視覺庫內部格式,這個是關鍵步驟,不可缺少。</p><p>  (3) 整個檢測過程中需要用到函數Haar Detect

108、 Objects。這個函數是針對某目標物體訓練的級聯(lián)分類器,作用是在圖像中找到包含目標物體的矩形區(qū)域,最后把這些區(qū)域作為列的矩形框返回。函數格式為CvSeq * cvHaar Detect Objects ( const CvArr*image, CvHaar Classifier Cascade * cascade,CvMemStorage * storage, double scale_factor = 1.1, int min_n

109、eighbors = 3,int flags = 0, CvSize min_size = cvSize(0, 0) );其中image代表被檢測的圖像。 cascade haar是級聯(lián)分類器內部的標志形式。storage用來存儲檢測到的一系列候選目標矩形框的內存區(qū)域。scale_factor是在前后兩次相繼的掃描中,搜索窗口的比例系數。min_neighbors是構成檢測目標的相鄰矩形的最小個數(默認為- 1)。flags是操作方式。

110、min_size是檢測窗口的最小尺寸。默認情況下被設為分類器訓練</p><p> ?。?) 標定要用到函數RunHaar Classifier Cascade。該函數在給定位置的圖像中運行級聯(lián)分類器,用于對單幅圖片進行檢測。其格式為int cvRunHaar Classifier Cascade ( CvHaarClassifierCascade * cascade,CvPoint pt,int start_s

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論