1. 程式人生 > >光流法詳解

光流法詳解

光流法

 Lucas-Kanade光流部分寫得非常詳細,推薦大家看書。我這裡也粘帖一些選自書中的內容。

      另外我對這一部分附上一些個人的看法(謬誤之處還望不吝指正):

      1.首先是假設條件:

       (1)亮度恆定,就是同一點隨著時間的變化,其亮度不會發生改變。這是基本光流法的假定(所有光流法變種都必須滿足),用於得到光流法基本方程;

       (2)小運動,這個也必須滿足,就是時間的變化不會引起位置的劇烈變化,這樣灰度才能對位置求偏導(換句話說,小運動情況下我們才能用前後幀之間單位位置變化引起的灰度變化去近似灰度對位置的偏導數),這也是光流法不可或缺的假定;

       (3)空間一致,一個場景上鄰近的點投影到影象上也是鄰近點,且鄰近點速度一致。這是Lucas-Kanade光流法特有的假定,因為光流法基本方程約束只有一個,而要求x,y方向的速度,有兩個未知變數。我們假定特徵點鄰域內做相似運動,就可以連立n多個方程求取x,y方向的速度(n為特徵點鄰域總點數,包括該特徵點)。

      2.方程求解

      多個方程求兩個未知變數,又是線性方程,很容易就想到用最小二乘法,事實上opencv也是這麼做的。其中,最小誤差平方和為最優化指標。

      3.好吧,前面說到了小運動這個假定,聰明的你肯定很不爽了,目標速度很快那這貨不是二掉了。幸運的是多尺度能解決這個問題。首先,對每一幀建立一個高斯金字塔,

最大尺度圖片在最頂層,原始圖片在底層。然後,從頂層開始估計下一幀所在位置,作為下一層的初始位置,沿著金字塔向下搜尋,重複估計動作,直到到達金字塔的底層。聰明的你肯定發現了:這樣搜尋不僅可以解決大運動目標跟蹤,也可以一定程度上解決孔徑問題(相同大小的視窗能覆蓋大尺度圖片上儘量多的角點,而這些角點無法在原始圖片上被覆蓋)。