1. 程式人生 > >光流(optical flow)

光流(optical flow)

概念
光流是Gibson在1950年首先提出的,它是指空間運動物體在觀察成像平面上的畫素運動瞬時速度。是利用影象序列中畫素在時間域上的變化以及相鄰幀之間的相關性來找到上一幀跟當前幀之間存在的相應關係。一般而言,光流是因為場景中前景目標本身的移動、相機的運動,或者兩者的共同運動所產生的。

在這裡有兩個概念要解釋:
運動場,事實上就是物體在三維真實世界上的運動。
光流場,是運動場在二維影象平面上的投影。

Lucas-Kanade演算法原理
LK演算法基於以下三個假設:
1)相鄰幀之間的亮度恆定。
2)相鄰視訊幀的取幀時間連續,或者相鄰幀之間物體的運動比較微小。
3)保持空間一致性。一個場景中同一表面上鄰近的點具有相近的運動,在影象平面上的投影也在鄰近區域。

這裡寫圖片描述

這裡寫圖片描述

我們的假設可能不是十分正確,即影象的亮度實際上不是恆定的,時間步長也不是如我們期望的相對於運動足夠短,所以我們求解的速度不是十分準確,但是,如果我們求解到的速度與實際速度“足夠接近”,就可以用迭代方法來解決這個問題。

對於大多數30Hz的攝像機,大而不連貫的運動是普遍存在的,而Lucas-Kanada光流正因為這個原因在實際中的跟蹤效果並不是很好:我們需要一個大的視窗來捕獲大的運動,而大視窗往往會違背運動連貫的假設!影象金字塔可以解決這個問題,即最初在較大的空間尺度上進行跟蹤,再通過對影象金字塔向下直到影象畫素的處理來修正初始運動速度的假定。

所以建議的跟蹤方法是:在影象金字塔的最高層計算光流,用得到的運動估計結果作為下一層金字塔的起始點,重複這個過程直到達到金字塔的最底層。這個更精緻的演算法叫金字塔Lucas-Kanada光流,函式是cvCalcOpticalFlowPyrLK()