俞騁
(寧波第二技師學院,寧波315012)
人臉姿態估計作為機器視覺中的一項重要課題,在人機交互、虛擬現實、智能控制等領域均有十分廣泛的應用前景[1]。高精度的人臉姿態估計算法由于具有較高的運算復雜度,并不能很好地應用于動態視頻等實時系統,而快速算法雖然具有運算復雜度低的優勢,但由于其精度不高,估算結果往往具有較大的誤差。在視頻檢測中,由于許多視頻圖像本身的質量欠佳,更進一步降低了算法的估算效果。針對這種情況,本文提出在視頻圖像的人臉姿態估計中運用Kalman 濾波算法慮除觀測噪聲,以提高估測精度。
1960 年,Kalman 提出用遞歸方法解決離散數據線性濾波問題。Kalman 濾波的工作原理是采用k-1 時刻的預測值與k時刻的觀測值對當前的狀態變量進行更新,根據以上信息計算得出t時刻的狀態最優估計值[2]。設有一隨機動態系統,其數學模型可由以下兩個方程描述:

其中Xk為n 維狀態向量,代表系統在k 時刻的狀態。Ak,k-1為n×n 階的狀態轉換矩陣。Wk為系統在K時刻的隨機噪聲。Zk為m 維觀測向量,Hk為m×n 階觀測矩陣,Vk為觀測噪聲。在本文中,我們用Z1,Z2,…,Zk去更新當前系統狀態Xk,并估算下一狀態Xk+1。由于Wk和Vk都為均值為零的高斯白噪聲且互不相關,其協方差矩陣Qk和Rk可分別表示為:
(1)在t0時刻,通過X 的均值初始化,并計算出P0:

(2)在tk時刻,系統估算方程可表示為:

同時,系統更新方程可記為:

增益矩陣為:

誤差協方差矩陣為:

根據上述公式可知,只要為參數Ak,k-1,Hk,Qk,Rk設置合適的值,即可計算出
(1)狀態轉換矩陣和觀測矩陣
令狀態參數Xk=(yk,xk,yvk,xvk),xk和yk分別為人臉質心位置的坐標參數。xvk和yvk分別為人臉在X 軸和Y 軸方向的運動速度。令觀測向量為Zk=(ywk,xwk),其中ywk和xwk分別為通過定位算法計算得到的人臉質心位置的坐標參數。假設人臉在單位時間內為勻速運動,則可得:

由于Xk為四維度,而Yk僅為二維度,狀態轉換矩陣和觀測矩陣可分別定義為:

其中?t 為在tk-1和tk時刻的時間差。
(2)噪聲協方差矩陣

其中covab可表示為:
若a=b,則:

若a ≠b,則:

其中A、B 代表y,x,yv 和xv 的排列組合。同理,觀測噪聲協方差矩陣可表達為:

由于Wk與Vk為零均值噪聲,且相互獨立,可知當a=b 時,covab=0。由于難以獲得目標的精確位置,cov11,cov22,cov33,cov44 的精確值未知。雖然在本文中,狀態向量Xk未知,系統噪聲和觀測噪聲未知,但由于其在x 和y 方向上相互獨立,Qk與Rk可分別設為如下表達式:

其中,q 和r 為常數,根據測試r=5,q=0.1 時的跟蹤誤差最小。
(3)誤差協方差矩陣
由于目標在t0 時刻的準確位置未知,誤差協方差矩陣的初始化時應選擇“合適的大數值”[3]。為找出該“合適的大數值”,測試了P0的系數取不同值時觀測位置與跟蹤位置之間的距離,如圖1 所示。

圖1 不同系數下觀測值與實際值之間誤差的收斂情況
從圖1 可知,當P0=I 時,在被測視頻的最初幾幀中,觀測值與實際定位值之間存在很大的誤差,當P0=100×I 時,誤差在最初幾幀即可快速收斂。由此可得:

由于人臉轉動的角度隨時間的變化呈非線性,Kalman 濾波算法并不能直接應該用于姿態估計。筆者曾提出一種關于人臉姿態估計的快速算法,即根據對視頻圖像中人臉和嘴部的定位快速計算出人臉的姿態[4]。而人臉和嘴部質點在視頻圖像中的運動軌跡隨時間的變化可近似視為一種線性變化,因此,本算法將Kalman 濾波應用于人臉和嘴部的跟蹤。由于經過Kalman 濾波,人臉和嘴部的定位會更加精確,因此,得到的人臉姿態估計值也將更加精確。
運用Kalman 濾波算法,對不同人臉轉動視頻中的人臉姿態進行了跟蹤測算,結果如圖2 所示。在圖2中,白框為根據Anil.K.Jain[5]所提出的基于膚色的人臉定位算法得到的人臉定位,綠框為運用Kaman 濾波算法后的目標定位。從圖2 即可直觀地看出,綠框比白框對目標的定位更加精確(如視頻1 中的第97 幀,視頻2 中的第12 幀,視頻3 中的第20 幀)。由此可見,Kalman 濾波算法可有效過濾觀測噪聲,運動目標可獲得更加精確的定位。
視頻1:

視頻2:

視頻3:

圖2 不同視頻中Kalman濾波算法的測試結果
圖3 和4 分別顯示了視頻1 中人臉和嘴部在X 和Y 軸方向上的運動軌跡。圖5 顯示了該視頻中測得的人臉姿態角度變化。從這些圖中可以看出,總體而言,Kalman 濾波算法在目標跟蹤中具有較強的魯棒性。但在部分視頻幀中,誤差可以達到2 個像素,如圖6 所示。

圖3 視頻1中人臉在X和Y方向上的運動軌跡

圖4 視頻1 中嘴部在X 和Y 方向上的運動軌跡

圖5 視頻1中人臉姿態角度變化

圖6 視頻1中人臉和嘴部的跟蹤誤差
造成這種結果的原因在于Kalman 濾波算法只適用于線性系統。但在實際中,人臉運動隨時間變化并非嚴格意義上的線性變化,因此導致個別幀誤差較。但是,應該看到,Kalman 濾波算法具有較強的自適應性,可以迅速減小誤差。所有被測視頻的平均誤差如表1 所示。

表1 Kalman 濾波算法在不同視頻中的跟蹤誤差
從表1 可見,在多段不同視頻的測試中,Kalman算法對人臉和嘴部這兩個關鍵點的跟蹤誤差均得到了較小值。由此可以得出,在人臉姿態估計中,Kalman濾波算法能有效地降低觀測噪聲,獲得更為精確的觀測結果。
針對視頻圖像中人臉姿態估計算法的運算結果存在較大誤差,本文提出將Kalman 濾波算法應用于人臉姿態估計。在MATLAB 仿真中發現,通過設置合適的參數,Kalman 濾波算法可以有效降低視頻定位中形成的觀測噪聲,獲得更為精確的人臉姿態估計結果。測試還發現,在被測目標運動軌跡并非嚴格線性的情況下,Kalman 濾波算法能迅速降低觀測誤差,具有較強的自適應性。