1. 程式人生 > >光流(五)--HS光流及稠密光流

光流(五)--HS光流及稠密光流

轉自:

稠密光流

稠密光流是一種針對影象進行逐點匹配的影象配準方法,不同於稀疏光流只針對影象上若干個特徵點,稠密光流計算影象上所有的點的偏移量,從而形成一個稠密的光流場。通過這個稠密的光流場,可以進行畫素級別的影象配準,所以其配準後的效果也明顯優於稀疏光流配準的效果。但是其副作用也是明顯的,由於要計算每個點的偏移量,其計算量也明顯大於稀疏光流[2]

稠密光流目標函式與求解

類似於稀疏光流,稠密光流的目標函式也是含有一個數據項:使得配準後的兩張影象上每個對應點儘可能相同,用數學公式表示就是: 上式中 為參考影象(第一張影象), 為當前影象(第二張影象),也是待配準影象。偏移量 是影象上沒一點的偏移量,
是一個誤差函式,根據不同的需求可以取絕對值函式,二次函式等一些非負對稱且正半軸單調遞增的函式。 由於是稠密匹配,如果單一隻有上面的資料項是不夠的,因為對純色區域的點顯然是沒法通過上式找到準確的偏移量的,因此還需要加入一個平滑項。平滑項的目的就是,對於特徵比較弱的區域的點,其偏移量儘量向強特徵點的偏移量靠近,或者說相鄰兩個特徵點的偏移量相差不能太大,也就是偏移量的變化率不能太大,用數學語言描述就是: 上式中 是梯度的模長, 是一個類似 的誤差函式。 將上面兩個公式合併起來就得到了最終的目標函式: 為了描述簡單,上面的偏移量 就不寫成顯著的函式形式, 是一個權重因子。目前主流的稠密光流演算法中,主要根據誤差函式取絕對值函式和二次函式分成兩大類(其他函式由於複雜度較高,一般比較少討論):L1-光流(L1-範數)和L2-光流(L2-範數)。下面就兩大類光流進行討論:

稠密光流
L2-光流

L2-光流是最早進行研究的稠密光流,由於其兩個誤差函式都是二次函式,因此被稱為L2-光流。由於二次函式是所有誤差函式中最容易進行極值求解的,因此這種方法在快速計算中經常被用到。L2-光流最早是Horn和Schunck在1981年提出並求解的[1],因此也被稱為H-S演算法。 L2-光流的目標函式如下: 為了方便計算,可以考慮用稀疏光流中近似方法,對資料項進行線性近似,從而得到新的目標函式: 原始論文中的標準解法是採用變分法,得到一個Euler-Lagrange方程,然後通過數值方法求解偏微分方程。考慮到一般人沒學過泛函分析,此處我用初等微積分的知識進行求解。 將上面的定積分形式改寫成離散的形式:
注意上面的 的簡寫形式,不是偏導數。由此 可以看成是所有 構成的多元函式,應用多元函式的極值求解不難得到: 平滑項求偏導數含有4項是因為 這三項中均含有 這一項,為了書寫方便,捨去下標得到方程組: 上式中: 上面的方程組實際是一個大型稀疏線性方程組,一般採用迭代法求解,最容易程式設計實現的就是SOR(超鬆弛迭代法),解出上面的二元一次方程就可以得到相應的雅克比迭代公式: Lluís Garrido提供了HS-演算法的c語言實現[3]

稠密光流L1-光流

相對於L2-光流,L1-光流提出的時間就相對要晚很多了[4],具體原因可能是其求解過程比較複雜。但是採用L1-範數有個好處是,誤差函式增長較慢,這樣對於大的偏移量的懲罰項也相對較小,從而可以計算偏移量較大的光流。其目標函式的資料項和平滑項由兩個絕對值函式組成,因此被稱為L1-光流。具體目標函式如下: 由於絕對值函式在0點處沒有導數,因此一般不適合傳統導數方法求極值。有一種近似做法是採用另一個處處可微的函式替代絕對值函式: 其中s是一個非常小的常數,這樣就可以採用傳統的梯度法和牛頓法對上面的函式進行極值求解了[4]。唯一的不足是,採用上面的近似後,導數的計算較為複雜,每次迭代的計算量灰常大,計算速度狠慢。後來有一個哥們發現數學上有個Total Variation(TV)可以用於二次式與絕對值和的求解,因此又整出了一套稱為TV-L1的高大上的解法[5] ,這種解法相對上面的解法的優點就是快,另外也更精確。正因為如此,後面發論文的也基本都採用L1-範數的形式。 TV-L1的基本思想就是把目標函式拆分成兩個:一個標準TV-L1的形式,另一個可以直接求解析解的形式。為了方便書寫,將二元組 用向量 表示, 用向量 表示,引入輔助變數 ,目標函式可以簡寫為: 其中: 然後將其拆分成標準的TV-L1形式: 和可直接求解析解項: 其求解過程採用螺旋法。 稠密光流1. 求解TV-L1項: 首先固定 ,然後採用TV-L1求解第一項中的 可以得到: 其中 由下面的迭代式計算: 其中 ,初始值 ,迭代步長

稠密光流2. 解析解項:

上面求出 後就將其固定,解析解項是一個關於 的分段二次函式,可以很容易求出其極值: 求出 後將其代回1中繼續求解 ,直到 終止迭代。 opencv2.3裡面有TV-L1的原始碼實現[6] ,可以參考其原始碼理解演算法流程。