光流跟蹤


一 簡介

    在視頻序列中,物體幀間移動可表示為物體的運動速度 ,該運動速度即為光流。通過數學建模,光流可表示為圖像空域差分(XY平面梯度)與圖像幀間差分(相鄰兩幀圖像差)的函數。理想情況下,我們可以計算出圖像上每一個點的運動速度,但存在兩點問題:

    1)光滑平面上圖像空域差分與圖像幀間差分均為0,故計算出光流速度為0;

    2)在圖像邊緣上,由於光流計算觀察一個較小鄰域,無法計算出邊緣方向上的運動速度(即孔徑問題)。

    因此,在光流跟蹤中,需要對特殊點進行跟蹤以避免以上問題。該特殊點稱為角點,角點在鄰域上至少兩個方向上存在明顯梯度變化,這就避免了無法跟蹤問題。同時,在圖像匹配應用中,角點或者類似的特征點也是多幅圖像之間關聯點。

    通過定位角點,在角點上應用光流算法計算出對應角點的運動速度 ,其應用包括:

    1)在視頻監控中,可以估計監控視頻中的物體運動,或者通過監視場景來估計攝像機自運動;

    2)對於晃動視頻,通過對光流速度估計,可以消除視頻晃動。

 

二 Harris角點

    考慮一個固定小的圖像區域,相對於該圖像區域做任意一個小的平移 ,其變化量可用自相關函數定義:

   ,其中   表示固定小的圖像區域內的點, 表示對其進行任意平移后的點, 表示對區域內求所有點加權和。

    對於該公式需要注意以下兩點:

    1)對於圖像上任意一個固定點,其變化量隨着  的取值不同而不同,但該點作為角點的性質取決於圖像鄰域數據本身。也就是說,如果考察點為角點,使用不同方向的 代入上式,其變化量在兩個正交方向上都會得到較大值;如果考察點為邊緣,則僅在邊緣梯度方向上表現為較大值;如果考察點為平滑區域,則在每個方向上都沒有較大值。

    2)圖像梯度函數為 ,當兩個梯度分量都較大時,該點可能是角點,也可能不是角點。比如,斜率為45度角的直線,在兩個方向上均有較大梯度,但不是角點。總的來說,這兩個概念是兩個不同的測量。

    對以上公式進行數學變換:

    假設圖像函數在 (x,y) 平面上連續且二階可導(圖像一般滿足該性質),針對較小變化量 

    由於圖像某一點梯度為, 對  進行泰勒級數展開,

    可得 ,其中 e 為二階及以上高階分量,可忽略並簡化為:

    ,對 自相關函數 使用泰勒級數得:

    , 

    ,進一步整理得:

    

    則固定小區域的自相關矩陣為:

    自相關矩陣A包含對應區域的變化的全部信息,通過分析該矩陣,可以判斷相應區域是否為角點區域。

    由於 , 則矩陣A為正定矩陣,矩陣A存在兩個正交的特征向量,將矩陣A可分解為:

    , 其中  為矩陣A的單位特征向量,自相關變量可進一步表示為:

    ,當  與  共線時, 取值為 

    當  與  共線時, 取值為 。也就是說, 在特征向量方向上取值取決於對應特征值。

    在其他方向上,  取值介於兩個特征值之間。為了確保區域為角點,考察較小特征值大於某個閾值即可。

    另外,如果將  分解為關於x,y的函數,發現  實際上為 關於x, y的二次函數,即一個向上的拋物面。

    令 ,則得到一個橢圓平面,其長軸表示變化最快方向,其短軸表示變化最慢方向,當橢圓接近圓形時,該區域則為較好的角點區域。

    在實際計算中,一般不直接計算出特征值,而是通過矩陣的行列式與矩陣的跡來判斷是否為角點區域,如:

    1)

    2)

 

三  Lucas-Kanade光流

    LK光流基於以下假設:

    1)被追蹤點幀間亮度保持恆定;

    2)被追蹤點幀間移動較小;

    3)被追蹤點鄰域運動一致。

    根據假設1),可得: 

    ,對  進行一階泰勒展開:

    

    根據假設 2),幀間移動距離較小,也即幀間間隔時間較短,令 趨近於 0, 消除冗余並同時除以  得:

    ,其中 表示光流運動。

    上式表明,被追蹤點的運動速度 由圖像梯度與幀間差分約束,我們無法通過上式求出被追蹤點的運動速度。

    根據假設3),由於被追蹤點鄰域運動一致,對鄰域點做相同計算,並建立其聯立方程組,即可求解被追蹤點的運動速度。

    理論上來說,只需要兩個線性不相關的方程即可求解光流速度。實際應用中,可以對鄰域內每一個點建立方程,構成超定的(overdetermined)線性方程組,從而提升計算准確度,超定線性方程組求解為:

    以上建立了光流跟蹤的一般方法。方程組 Ax = b 具體表示為 

     具體表示為 ,矩陣 決定了方程是否存在准確解;

    當矩陣  可逆時,方程組有確定解。在角點檢測中,當自相關矩陣存在兩個較大的特征值時,該點被認作角點;此時的自相關矩陣是可逆的,接近正定矩陣。這也是光流跟蹤所需要的良好條件。

    對於鄰域大小選擇,當選擇鄰域較大時,可能違背 鄰域運動 一致性原則;當選擇鄰域較小時,可能遇到孔徑問題,而良好角點正好可以在較小鄰域上避免孔徑問題。

    總的來說,Harris 角點特性正好避免 LK 光流跟蹤約束方程的孔徑問題,所以,使用 LK 算法跟蹤 Harris 角點可以獲得較好的結果。

    在Learning OpenCV中,給出了一維圖像的光流計算解釋,這可以更直觀理解光流計算,具體如下:

    針對一維圖像,有 ,其中  為一維圖像的光流速度,則 ,其圖形如下:

              

    使用 Newton 插值方法可以進一步精確光流速度,如下圖:

            

    

    在實際應用中,LK光流跟蹤假設2)會經常難以滿足,使用圖像金字塔可以跟蹤幀間較大移動。首先在頂層金字塔上估計光流運動,然后在下一層金字塔中使用上層運動進一步精確光流運動。

    在OpenCV中,使用 cv::goodFeaturesToTrack 提取角點,在精確度要求較高時,可使用 cv::CornerSubPix 對提取到的角點計算亞像素精度,該算法基本思想是邊緣上點與角點的連線垂直於邊緣上點梯度方向;然后使用函數 cv::calcOpticalFlowPyrLK 對提取的角點在兩幀圖像上計算對應的光流速度;最后,由於部分點的光流速度可能受到干擾影響,可以使用統計的方法剔除部分掉。  

 

參考資料 :Learning OpenCV 3    Adrian Kaehler & Gary Bradski

                Computer Vision: Algorithms and Applications    Richard Szeliski


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM