• 沒有找到結果。

第四章 使用者影像追蹤

4.2 使用者偵測

4.2.2 人臉偵測

在人臉偵測方面,本論文希望能準確找到使用者人臉,如果直接使用膚色偵 測來找尋畫面中人臉區域,容易造成錯誤的人臉偵測發生,所以透過 Kinect 取 得一張 320×240 的彩色影像後,一開始先採用 OpenCV (Open Source Computer Vision)[25]所提供的 Haar-Like Features 來找出畫面中可能的人臉區域。

Haar-Like Features 是由 Viola[26]以及 Lienhart[27]所提出的人臉偵測方法,

因為人的眼睛周圍、鼻子下方或是嘴唇下方等都是容易形成陰影的區域,造成明 顯的亮度差異,所以可以將此亮度差異當作特徵來使用。

透過 AdaBoost Learning Algorithm 從上千張的人臉樣本中,挑選出具有代表 人臉特徵的矩形圖案,其矩形圖案可以為不同型式,但都是由黑白兩色所構成,

這些矩形圖案就稱為 Haar-Like Features,如圖 4-6 所示,有邊緣特徵、線特徵以 及中心包圍特徵等類型。Haar-Like Features 是利用黑白區塊間的亮度差異來進行 人臉偵測,Haar-Like Features 會移動到影像畫面中每一個區域來計算此區域的亮 度差異是否超過閥值(此閥值為訓練階段所決定),如果超過閥值,則為人臉特 徵,否則為不是人臉特徵。

為了在畫面中快速準確地找出人臉區域,透過不停改變 Haar-Like Features 的大小和位置,讓 Haar-Like Features 能在畫面中找出大量的人臉特徵,並且透 過 Integral Image 運算的協助,來減少大量運算時間,達到及時偵測效果。如圖

4-7 所示,Integral Image 運算方法是將像素點(x, y)位置的左上角所有灰色方塊範 圍內的像素值進行加總,求得所有像素點所包含的像素值,如此一來,在計算黑 白區塊間的亮度差異時,只要引用 Integral Image 的結果,就能輕鬆推求出畫面 中任何矩陣所包含的像素值(比如要求得 R1234 ,可以透過 RD-RC-RB+RA來獲得),

而不用重新計算。

最後使用 Cascaded Classifier 方法來判斷感興趣的影像區域是否為人臉區 域。每一個代表人臉特徵的 Haar-Like Features 都是一種 Classifier,當感興趣的 影像區域成功地通過一連串的 Classifier 後,就會被判定為人臉區域,反之,如 果在其中一個 Classifier 遭到否決,就不為人臉區域,如圖 4-8 所示。

圖 4-6 Haar-Like Features[26]

圖 4-7 Integral Image 運算[27]

圖 4-8 Cascaded Classifier 應用於人臉偵測

圖 4-9 Haar-Like Features 人臉偵測之結果

由於 Haar-Like Features 人臉偵測可能會找出畫面中為人臉與多個非人臉的 影像區域,如圖 4-9 所示。因此,在 Haar-Like Features 人臉偵測所找出的這些區 域中,本論文透過人臉膚色密度來協助找出何者為真正的人臉區域。

在進行人臉膚色計算之前,由於在 RGB 空間的影像會因為光源的亮度強 弱,使得同一個物體的顏色在影像畫面中呈現出不同的顏色,這樣可能會造成錯 誤 的 人 臉 膚 色 計 算 , 所 以 要 先 將 RGB 空 間 轉 換 到 Normalized Color Coordinates(NCC)[28]空間以減少 R 與 G 對光源變化的靈敏度(在實際應用上,B

對光線的靈敏度較低,因此忽略),其轉換的公式如(4-2)、(4-3)所示:

透過人臉膚色公式就可以計算出每一個 Haar-Like Features 人臉偵測所找出的影 像區域之人臉膚色範圍大小,並且將人臉膚色範圍大小除以影像區域大小即可得

出人臉膚色密度,如(4-8)所示:

最後,計算出每一個 Haar-Like Features 人臉偵測所找出的影像區域之人臉膚色 密度後,將人臉膚色密度最大的影像區域定義為真正的人臉區域,其結果如圖

width、height 為彩色畫面中的人臉區域之寬和長

DU_RGB為彩色畫面中的人臉寬度

透過人臉的中心座標可以讓機器人修正自身方向來轉向使用者,而透過人臉的寬 度數值可以估測機器人與使用者的遠近關係,決定是否要前進到使用者面前或是 緊急後退以免撞上使用者,讓機器人能與使用者保持安全上的距離。

圖 4-10 人臉膚色在 rg 座標中的分佈[29]

圖 4-11 人臉偵測之結果

圖 4-12 人臉偵測流程圖