人臉檢測 基於Adaboost演算法的實現

2021-07-06 07:50:51 字數 2747 閱讀 4913

畢設的時候,做了基於膚色特徵的人臉檢測之後,通過膚色建模和膚色分割發現檢測率並沒有預想中的那麼好,於是為了提高人臉檢測的效率,對基於膚色特徵的人臉檢測演算法那進行了改進,也就是基於模板匹配的人臉檢測演算法:以下兩篇是人臉檢測實現的兩篇部落格,當然也是從自己的畢設**中搬出來共享給大家的:

1、人臉檢測---基於膚色檢測的實現

2、人臉檢測-基於模板匹配的實現

這兩種方法都是基於膚色特徵實現的,是比較經典的人臉檢測實現的演算法,下面將要介紹一種新的人臉檢測演算法,是一種能夠應用於實時監測,同時擁有高檢測率的人臉檢測演算法,adaboost演算法,下面貼出關於幾個關於人臉檢測演算法介紹比較相近的部落格:adaboost的幾個人臉檢測**(這個部落格將人臉檢測的的相關部落格都貼出來了,可以參考一下);

adaboost核心思想是通過訓練分類器得到檢測的目的,不僅僅是人臉,人的眼睛,人上身都可以作為檢測的物件,在matlab以及opencv中都有相應的訓練結果可以呼叫,

一下是關於matlab中以及opencv使用人臉檢測的例子:

1、matlab官方資料--object detection

2、【opencv入門指南】第十三篇 人臉檢測

下面簡要的介紹一下adaboost的演算法流程以及核心:

viola等人將adaboost演算法應用於人臉檢測,同時將haar特徵和cascade演算法和adaboost演算法結合,大大提高了檢測的速度和檢測的精確率,其**的主要工作是:

①引入了一種計算簡單卻十分有效的矩形特徵(haar特徵),用來描述人臉的灰度分布情況,同時提出了積分圖的概念,矩形特徵和積分圖的結合有助於檢測速度的提高。

②利用 adaboost優秀的資料探勘能力從海量的haar特徵中,挑選出若干個具有最佳樣本分類能力的 haar特徵,將haar特徵轉化為弱分類器,最後以線性組合的方式得到最終的強分類器;

③提出了一種由粗到精的檢測思路,構造了乙個級聯人臉檢測器:先用簡單的強分類器的把中大部分的背景區域剔除,再逐步遞增強分類器的複雜度(即構成它的弱分類器數量),不斷地過濾掉剩餘的背景區域,最後通過所有強分類器的則為人臉視窗。這種檢測思路有效的提公升了檢測速度。

進行adaboost演算法之前,必須要得到的是haar特徵,從而得到提高計算效率的積分圖:對於這些的概念,我放了我的畢業設計的**在相應的鏈結,有興趣的的可以看一下:由於公式較多以及理論有點偏大,部落格篇幅有限這裡就講一下實現的過程:人臉檢測-畢業**(ps:自己的畢業設計的**,當時花了精力做的,分給太低覺得太心痛,如果覺得分給的太高,筆主愛莫能助)

在matlab2012b的computer version toolbox的工具箱下,提供了目標檢測和識別的相關演算法和函式。可以使用模板匹配、blob分析以及viola-jones演算法實現目標檢測。其中的viola-jones演算法也就是本文中研究的演算法,可以實現人臉檢測,分類器的訓練結果是以xml檔案給出的,需要載入相應的訓練器結果,從而得到對人臉較為敏感的分類器:

在使用這個演算法對應的工具箱實現人臉檢測的時候,需要介紹的幾個關鍵函式是:

①traincascadeobjectdetector函式可以使用haar特徵、梯度方向直方圖(histograms of oriented gradients,hog)、區域性二進位制模式(local binary pattern,lbp)等實現目標檢測器的訓練,最後以xml格式的檔案返回目標檢測器的結果。

②cascadeobjectdetector,該函式可以建立乙個目標檢測器,它是通過viola-jones演算法訓練實現的,通過對1中訓練得到的結果來實現對目標檢測器的建立,同時也可以使用工具箱中已經訓練好的檔案實現檢測器的建立。還可以通過制定目標檢測模型指定生成的目標檢測器的模型,這裡的模型實質目標檢測器具體適用的檢測目標,比如眼睛、耳朵、臉等,預設檢測目標是臉。

③檢測器的模型通過casacdeobjectdetector(model)指定,其中model是通過輸入一行字串得到的,model的型別包括frontalface(cart)、frontal face(lbp)、upper body等,預設為frontalfacecart。

④bbox = step(detector, i)可以返回的矩陣bbox,其中矩陣的每一行可以指定檢測到目標的矩形區域,通過矩形左上角橫、縱座標的以及矩形長、寬4個引數確定矩形區域。代表檢測到的目標個數。

最後的**實現很簡單,但是筆主曾經嘗試過寫了一下adaboost演算法的實現**,無奈功力有限,希望在以後的學習過程中,能夠把這份完整的**寫出來:

clc

clear all;

close all;

img_name = input('請輸入影象名字(影象必須為rgb影象,輸入0結束):','s');

while ~strcmp(img_name,'0')

t1=clock;

facedetector = vision.cascadeobjectdetector;

i = imread(img_name);

bboxes = step(facedetector, i);

ifaces = insertobjectannotation(i, 'rectangle', bboxes, 'face','color',[0 255 255]);

figure, imshow(ifaces), title('detected faces');

t2=clock;

img_name = input('請輸入影象名字(影象必須為rgb影象,輸入0結束):','s');

end

最後的實現結果:

AdaBoost人臉檢測原理

對人臉檢測的研究最初可以追溯到 20 世紀 70年代,早期的研究主要致力於模板匹配 子空間方法,變形模板匹配等。近期人臉檢測的研究主要集中在基於資料驅動的學習方法,如統計模型方法,神經網路學習方法,統計知識理論和支援向量機方法,基於馬爾可夫隨機域的方法,以及基於膚色的人臉檢測。目前在實際中應用的人臉...

AdaBoost人臉檢測原理

對人臉檢測的研究最初可以追溯到 20 世紀 70 年代,早期的研究主要致力於模板匹配 子空間方法,變形模板匹配等。近期人臉檢測的研究主要集中在基於資料驅動的學習方法,如統計模型方法,神經網路學習 方法,統計知識理論和支援向量機方法,基於馬爾可夫隨機域的方法,以及基於膚色的人臉檢測。目前在實際中應用的...

AdaBoost人臉檢測原理

對 人臉 檢測的研究最初可以追溯到 20 世紀 70 年代,早期的研究主要致力於模板匹配 子空間方法,變形模板匹配等。近期人臉檢測的研究主要集中在基於資料 驅動的學習方法,如統計模型方法,神經網路學習方法,統計知識理論和支援向量機方法,基於馬爾可夫隨機域的方法,以及基於膚色的人臉檢測。目前在實際中 ...