前言
本文較為詳細地介紹了一種經典的光流法 - HS 光流法。
光流法簡介
當人的眼睛與被觀察物體發生相對運動時,物體的影像在視網膜平面上形成一系列連續變化的圖像,這一系列變化的圖像信息不斷 "流過" 視網膜,好像是一種光的 "流",所以被稱為光流。
光流是基於像素點定義的,所有光流的集合稱為光流場。通過對光流場進行分析,可以得到物體相對觀察者的運動場。在這過程中分析的算法稱為光流法。
HS 光流法的推導
HS光流計算基於物體移動的光學特性的兩個假設:
1. 運動物體的灰度在很短的間隔時間內保持不變
2. 給定鄰域內的速度向量場變化是緩慢的
由 1 可得:
(1)
上式右邊在 x y 處泰勒展開,得:
(2)
ε 是包含有 δx,δy 和 δt 的二階和更高階項。兩邊減去 I(x,y,t),再除以δt有:
(3)
O (δt) 是含δt的一個小量。在極限中當δt->0時,上式變成:
(4)
令 u = dx/dt v = dy / dt,得:
(5)
這條式子就是光流約束方程,它反映了灰度與速度的一個對應關系。
但,一個式子中有兩個變量:u 和 v,顯然不能將速度解出,因此需要引入一個新的條件:光流的全局平滑約束條件。
即 u 和 v 隨着像素點移動而發生的改變是緩慢的,局部區域的變化不大,尤其是在目標做無變形剛體運動時,局部區域速度的空間變化率為0。
因此,引入以下速度平滑項:
(6)
對於所有的像素點,需要滿足上式和最小。
綜合光流約束條件 (5) 和速度平滑約束條件 (6),可建立以下的極小化方程:
(7)
式中的 α 是平滑權重系數,表示速度光滑項所占的權重。
即:
(8)
采用變分計算,根據歐拉方程,
(9)
(10)
得到:
(11)
(12)
式中,拉普拉斯算子可以用某一點的速度與其周圍速度平均值之差來近似,有:
(13)
(14)
化簡 (13) 和 (14),可得: ( 這一步運算量比較大 )
(15)
(16)
這樣便可以考慮使用迭代法進行求解了,但在此之前,還需要明確其中幾個量的求法。
對於 u 和 v 的均值,采用九點差分格式進行計算:
(17)
(18)
而對於其中的灰度梯度,可以采用以下方法近似計算:
(19)
(20)
(21)
至此,所有的量都已明確下來,輸入前后兩幀灰度進行迭代運算便可以得到速度場了,下面是具體的執行過程。
HS光流法執行流程圖
1. 讀取雷達拼圖數據並初始化
2. 計算求解點的灰度梯度
3. 設定速度平滑權重系數( 一般設為1 ),初始速度( 一般設為0 ),迭代誤差等。
4. 計算 k-1 次速度平均值
5. 計算 k 次迭代的速度值
6. 計算兩次迭代光流值的誤差,如果小於給定誤差閾值,或者者迭代次數超過迭代次數,則計算過程結束,否則進行k+1次迭代。