我們會對視頻中運動物體十分感興趣,人們經常用光流法做這項事情。光流法有很多用處,比如物體追蹤、攝像頭矯正等等。
所有的光流法都是基於以下假設:
A、亮度恆定。同一個點隨時間變化,其亮度不會發生改變。用於得到光流法的基本方程;
B、小運動。時間的變化不會引起位置的劇烈變化,這樣灰度才能對位置求偏導數。小運動情況下才能用前後幀之間單位位置變化引起的灰度變化去近似灰度對位置的偏導數。
C、空間一致。一個場景上鄰近的點投影到圖像上也是鄰近點,且鄰近點速度一致。在Lucas-Kanade光流法中,要求x,y的方向速度,但基本方程只有一個,假設特徵點鄰域做相似運動,就可以聯立n多個方程求取x,y方向的速度。
基於這些假設,如果有兩張圖片(比如視頻兩個幀),我們需要發現兩個圖片像素的對應關係。因爲亮度恆定(RGB不變),不要要考慮RGB的值的改變。因爲小運動,可以發現兩張圖片在很小的鄰域範圍內像素的對應關係。
假設亮度恆定,則有方程:
假設小運動,則有(一階泰勒展開):
得到光流約束方程:
1、Horn–Schunck method
Horn-Schunck算法假設整個圖像的流動是平滑的。因此,它試圖最小化流程中的失真,並更喜歡顯示更平滑的解決方案。
流動表示:設定方程爲全局方程,將其最小化。對於二維圖像,有:
Ix,Iy,It是圖像強度值分別沿x、y和時間維度的導數。是光流向量。是正則化的常數。大數值的能夠讓函數平滑。使用多維拉格朗日方程解決:
被積函數L如下:
代表Laplace Operator(拉普拉斯算子)。實際中拉普拉斯算子用有限差分表示。,是在像素(x,y)周圍鄰域內算出的平均。所以,上式可以寫成:
u和v是線性的可以對每張圖片像素求解。
然而,由於解決方案依賴於鄰值,所以必須在鄰域更新後再重複一次。推導出以下迭代:
k表示迭代次數。
其在代碼中,首先使用下面mask計算fx, fy, ft:
將mask1用於每張圖片計算fx。將mask2用於每張圖片,得到fy。將mask4用於第一張圖片,mask3用於第二張圖片,加起來得到ft。
Xav是x鄰域的平均值。