opencv中calcOpticalFlowPyrLK實現的光流法(Lucas-Kanade Method for Sparse Optical Flow)原理解析 (摘要翻譯)

本文截圖及內容均來自learning opencv 第三版第16章 Keypoints and Descriptors

1.光流法介紹

光流法主要用於尋找不同圖片間的特徵點對應關係。特別是應用在視頻中,因爲對於視頻,可以合理地認爲當前幀中的許多點能夠在下一幀中找到。

一個理想的光流算法輸出應該是圖中每個像素的速度預測集合,或是表示每個像素在相鄰幀間相對位置的位移向量。當對圖中每個像素求解時,就是密集光流法(dense optical flow)。相對的,也存在稀疏光流法(sparse optical flow)。稀疏光流法通過只追蹤圖中的特徵點,同時達到快速和準確的目的。

2.Lucas-Kanade 稀疏光流法(Lucas-Kanade Method for Sparse Optical Flow )

Lucas-Kanade算法最早在1981年提出,最初爲密集光流法。因爲本方法很容易應用在圖片像素子集中,所以變成了一種重要的稀疏光流法。Lucas-Kanade算法只依賴於圍繞關鍵點的小窗口推斷出的局部信息。這導致了Lucas-Kanade算法不能檢測到物體的快速運動到窗口外部的點。這個缺點可以通過改進的金字塔LK光流法解決。

Lucas-Kanade原理

基本假設:

亮度恆定假設:目標物體像素的強度值在幀間亮度不變。對於灰度圖,即對於追蹤的像素點,幀間亮度不變。

時間連續:相鄰幀間運動微小

空間一致性:圖中臨近的點屬於相同的表面,具有相似的移動。


1.亮度恆定假設要求跟蹤部分亮度不隨時間變化:



2.時間連續假定,對上式中的 I(x(t), t) 求導得:


Ix是圖像的偏導數,It是圖像隨時間的偏導數,v是觀察到的速度。對於一維空間中的光流速度等式爲:


3.空間一致性:

若一個局部區域的像素運動是一致的,就可以建立鄰域像素的系統方程求解中心像素的運動。如使用5x5(窗口大小)的鄰域像素亮度值,計算此像素的運動,就可建立25個方程:


注意窗口的大小選擇,窗口太大會違背空間一致性假設,太小又會追蹤不到窗口外的點。

以上方法是基於小而連貫運動的假設,但是對於大多數30Hz的攝像機,大而不連貫的運動是普遍存在的。所以需要更大的窗口來追蹤運動,但這又會違背空間一致性假設。因此引入圖像金字塔解決。最初在較大的空間尺度追蹤,再在小的空間尺度上修正。


追蹤方法:在圖像金字塔最高層計算光流,得到的運動結果作爲下層金字塔的起始點,重複這個過程直至最底層。這樣就將不滿足運動假定的可能性降到最低並實現更快更長的運動追蹤。這個方法就叫金字塔Lucas-Kanade光流法。

在OpenCv中的實現函數爲calcOpticalFlowPyrLK。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章