本作品採軟硬體共同設計的方式,完成一套高性能的即時影像辨系統。該系統整合數個不同的智慧型演算法以提昇系統之運算效能。演算法實作的部份主要可分為三種模組:硬體模組、軟核心模組與自定義模組,其實現方法分述如下:
A. 硬體模組
硬體模組具有並行處理高效能之特性,因此主要功能在於擷取視訊影像後進行影像區塊化處理並取得手部影像。實現之演算法根據其步驟可分為:中值濾波器、膚色偵測與移動偵測。當視訊接收成功後,首先透過視訊解碼模組取得影像資訊,並透過中值濾波器進行影像前處理。由於主要目的在於解析動態手勢,因此將「兼具膚色與動態的物件」視為主要辨識對象,且為了避免外在環境干擾與降低運算複雜度,本作品結合光流梯度與膚色偵測,針對膚色區域做光流梯度偵測,經測試後可於連續影像中取得運動中的手部位置資訊,並兼具速度與準確率。其實現方法如下:
(1) 中值濾波器
影像前處理的目的是對所擷取的影像,在未進行主要演算法前,以影像處理方法去除環境雜訊以利後續的處理工作。本作品對每幅輸入影像以中值濾波前處理,其方法係以3×3子框架掃描,對涵蓋到範圍內的9個像素值取中值代表該區塊,如此可濾除極端的雜訊,亦可使影像邊緣較為平滑。
(2) 膚色偵測
膚色偵測主要透過實際環境的膚色分布情形,透過限制範圍以遮罩方式濾除非膚色區域,我們選擇以YCbCr色彩空間進行膚色偵測,原因為視訊影像由Video端子輸入,經ADV7180視訊解碼IC解譯後為ITU-R 656格式的YCbCr 訊號無需轉換,而膚色範圍在YCbCr色彩空間中的值是連續的,且對環境光源容忍度較大。如公式(1)對Cr與Cb通道進行範圍限制,忽略Y(亮度)以避免亮度的干擾,其膚色分佈情形如圖9所示。
(1)

圖9 膚色於YCbCr色彩空間分布情形
(3) 光流梯度
光流梯度之計算係採用Horn和Schunck所提出之光流估測公式,其中的光流梯度可記錄光流資訊,藉此可反推出影像平面中物件的運動方向,其餘的追蹤運算由於遞迴運算較複雜且龐大而以其他追蹤演算法加以取代,並於軟核心中進行運算。抽離追蹤運算的結果,經實驗測試後證實仍能保有光流演算法抵抗微量干擾變動的優點。
光流法的基礎原理主要來自於亮度守恆定律,意指在一影像平面中,隨著時間的推演(
)與空間中光流的位移量(
與
),影像平面將會始終維持亮度
,此即為亮度守恆定律。
(2)
經過若干運算後可取得公式(3),其中
、
、
表示
分別對
、
、
進行偏微分:
(3)
令
(可視為
方向的瞬時速度),
(可視為
方向的瞬時速度):
(4)
公式(4)即為為亮度守恆方程式,因此可看出光流的瞬時速度可透過亮度對x、y、t進行偏微取得,但亦可得知,在已知亮度的情況下,光靠亮度守恒方程式無法取得u、v值(因為僅有一個方程式無法取得唯一解),故需加入平滑限制條件以取得一般情況下的光流值。本作品著重於即時處理之效能,因此利用公式(5)、(6)計算x、y方向動量與公式(7)計算光流梯度,整合出光流梯度強度。為簡化其運算式,以3×3的區塊為例,如圖10所示,
為時間
的影像子區塊,
則為時間
的影像子區塊,其光流梯度運算方式僅需根據區塊內的像素所對應到
,並將
代入式(8)即可取得區域的光流值,以此類推更大區塊面積之運算。
(5)
(6)
(7)

圖10 光流梯度對照圖
(8)
硬體實作上,各點運算結果以箭號標記向量大小與方向,以18×18為單位,可表達16個方位、4種線段長度(向量大小),總共有64種箭號,如圖11所示。

圖11 表達光流梯度用的64種向量箭號
B. 軟核心模組
軟核心模組首先取得硬體模組處理後的特徵資料,進行手勢追蹤、辨識與指令解譯之工作。由於該類演算法需採用進階的智慧型演算法,以硬體基本運算單元較不易實現,因此利用軟核心可程式化的特性以達到其目的。
(1) 動態手勢追蹤
手勢追蹤主要目的為記錄手移動的軌跡以供後續手勢辨識使用,追蹤時須滿足準確性與流暢性。為了達到追蹤之準確性,本作品使用卡曼濾波器(Kalman filter)進行追蹤,追蹤過程將以密度區塊方式進行搜尋,藉此可避免單點極端值影響。膚色範圍的光流密度最大區域是從自定義模組3×3、5×5、7×7區塊的特徵值暫存器取得,計算平均強度,以最強區塊質心位置為中心點,隨著時間推演記錄其中心點之移動軌跡,追蹤軌跡如圖12所示。其中F為狀態轉換矩陣,代表手勢質心位置的移動模型,本作品選擇加速度模型;u為手勢質心位置,H為觀測矩陣,表示推測值與實際值間的關係;S為轉換矩陣共變異數,K為卡曼增益以公式(11)計算。以卡曼濾波器追蹤,記錄軌跡,得到平滑軌跡。
(9)
(10)
(11)

圖12 卡曼濾波器追蹤軌跡分佈圖
(2) 動態手勢辨識
每個連續動作可藉由手勢的移動和停頓切割為數個分解動作,再個別對分解動作進行辨識。手勢中的招手、揮手的辨識方法,主要針對每個分解動作以上下振幅、波形重複頻率等做為特徵資料來與手勢模型庫中的樣本進行比對藉此判別其手勢意圖。而向上、下、左、右揮動的手勢只有在招手動作被辨識後才進入辨識階段,故只須分析手勢的運動方向與其相對位置變化狀態來判斷其含意,接下來再依辨識出的手勢動作產生相對應的控制訊號來驅動電器的動作。圖13即為上揮手勢由左至右的分解畫面,第一列為原始畫面;第二列為膚色偵測的結果;第三列為光流梯度的結果;第四列為手勢追蹤的結果。

圖13 手勢辨識的分解畫面
(3) 動態手勢定義
本作品將手勢辨識應用於目標電器來進行開啟、關閉、轉台與音量控制等操作。以六種動態手勢操作電視為例,如圖14所示,啟動辨識系統後,起手動作或稱喚醒動作用於開啟電視電源或啟動一般手勢辨識用,設定為上下揮手數次,由於其軌跡具有上下迅速來回移動的特點,一般生活中較少出現,如此可避免誤動作而開啟電器的情形發生。當起手動作被辨識後有一段短暫時間允許一般手勢的辨識,此時往右揮或往左揮可增減音量,往上揮或往下揮則可選擇頻道,一旦停止操控手勢後數秒鐘,則停止一般手勢的辨識,以防止不特定動作被辨識為操控手勢。另定義左右連續揮手類似”No”的手勢代表關閉電視電源。

圖14 動態手勢操控電視定義
C. 自定義模組
在整個系統規劃中硬體負責高速影像處理部分,NIOS II軟核執行目標追蹤、辨識及I/O控制等工作,由於須考慮目標影像與攝影機之間距離遠近造成的目標物特徵群大小的問題,若直接將硬體擷取到的影像特徵值交由NIOS II處理會有運算量過大及Avalon bus頻寬上的問題,故採用自定義模組方式將每張影像特徵點分別以3×3、5×5、7×7的區塊進行特徵量計算,如圖15所示,並篩選出各區塊中特徵值最大的10個位置做為目標追蹤用,NIOS II則經由Avalon bus取得這些特徵位置值分別交給RTOS中的追蹤演算法任務(Task)執行3×3、5×5、7×7區塊的物件軌跡追蹤,並分析出目標物的特徵軌跡,藉此提高辨識成效。

圖15 目標物區塊特徵量計算