• 沒有找到結果。

第三章 自動建置電影角色的社群網路

3.1 人臉軌跡

首先,我們偵測一部電影的鏡頭切換,依據鏡頭的切換點將一部電影分割成

若干個鏡頭,之後我們是以一個分鏡作為後續處理的基本單位。接著我們利用

OpenCV 函式庫[10]中以 Haar-like 特徵為基礎的 Adaboost 演算法[11]來偵測每一 張影像所包含的人臉,此外,我們以局部二元圖樣(Local Binary Pattern, LBP)

特徵法[12]來描述每一張人臉。此特徵主要描述一張影像的結構(Texture)資訊,

基於它的實作簡單、計算複雜度也不高,因此常作為人臉辨識的主要特徵。以下

概略描述 LBP 的實作過程,詳情請參考原始文獻。

一個 LBP code 是一個二元序列(Binary Code),用來描述一個像素周遭的特

徵資訊,以下我們舉一個 的例子,包含 1 個中心像素 p 與 8 個近鄰像素 q,

說明如何計算一個像素(p)的 LBP code。首先,以 p 的灰階值作為門檻值,若

q 的灰階值是大於或等於門檻值時,將其設為 1,否則設為 0,最後再將這 8 個 0 或 1 串接起來,即可得到一個長度為 8 的二元序列,實作過程如圖 3.1 所示。其

中,串接的起始位置與方向(順時針或逆時針)只需在計算每個像素的 LBP code

保持一致的串接方式即可。

圖 3.1 實作一個像素的 LBP code 之示意圖

而 LBP 的種類又可分為 uniform pattern 與 non-uniform pattern 兩種,uniform

pattern 的定義為在一個二元序列中,最多只能有兩次 0 到 1 或 1 到 0 的轉換,而 大於兩次位元轉換(Bitwise Transition)的二元序列則為 non-uniform pattern。舉

8 個位元的二元序列來說,00000000 與 01110000 皆為 uniform pattern,而 11001001 與 01010011 則為 non-uniform pattern。這裡特別注意的是,由於二元序列是以循

環的方式做串接,所以也要考慮第一個位元與最後一個位元有無發生位元轉換的

情況,因此二元序列是不會有只發生一次位元轉換的情形,所以更確切地說,

uniform pattern 只會是沒有發生或發生兩次位元轉換的二元序列。此外,當一張 影像考慮只保留 uniform pattern 的資訊時,除了可節省記憶體的空間外,也較能

偵測到重要的局部特徵,像是點(Spot)、線端(Line End)、邊緣(Edge)及角

(Corner),如圖 3.2 所示。

圖 3.2 uniform pattern 的二元序列描述不同特徵之示意圖(紅色方塊為中心像素、

白色方塊為二元序列中的 1、灰色方塊為二元序列中的 0)

在瞭解 LBP 的概念後,現在我們可以開始使用 LBP 於人臉特徵的實作上。

首先,我們將人臉切割成 9 個大小相同的區域,分別統計每個區域的 LBP 直方

圖,其中每個區域的直方圖分成 59 個欄(Bins),包含 58 種 uniform patterns 與

1 種 non-uniform pattern,最後,將這 9 個直方圖的向量串接在一起,可以得到一 個 531 維的特徵向量來描述一張人臉影像。此外,我們以卡方距離(Chi-Square

公式 其中,S , T 為測試的兩張人臉影像。

在偵測完一部電影所包含的人臉之後,會產生出大量的人臉資料,然而,我

們希望將相同的人臉整理成一個人臉軌跡的形式來表示,以減少之後計算人臉距

離的次數。我們由電影拍攝的手法中發現,在單一鏡頭中,攝影師通常會讓同一

個角色的人臉在畫面中保持大致相同的位置,換句話說,在連續的 frames 中,

相同角色的人臉位移及人臉大小其差異程度並不會太大。所以,對於連續的畫面,

只要偵測到的人臉影像同時滿足下列兩個條件(公式 3.2 與公式 3.3),我們就將

相似的人臉串接在一起。由圖 3.3 所示,在單一鏡頭中(本例包括連續的 5 張

frames),原本偵測到的是有 15 張人臉,但在經過人臉軌跡的整理之後,就會減 少至 3 個人臉軌跡。

公式 其中, 與 分別為目前畫面與前一畫面的人臉座標, 為前一畫面的人臉

半徑。

公式 其中, 與 分別為目前畫面與前一畫面的人臉大小。

圖 3.3 人臉軌跡示意圖

相關文件