稀疏光流特征點跟蹤(KLT)


稀疏光流原理

光流(optical flow)是空間運動物體在觀測成像面上的像素運動的瞬時速度。物體在運動的時候,它在圖像上對應點的亮度模式也在做相應的運動,這種圖像亮度模式的表觀運動就是光流。它的基本假設是體素和圖像像素守恆,即一個物體的顏色在前后兩幀沒有巨大而明顯的變化。不同的光流算法解決了假定了不同附加條件的光流問題。根據所形成的光流場中二維矢量的疏密程度可以分為稠密光流與稀疏光流兩種。

稠密光流是一種針對圖像或指定的某一片區域進行逐點匹配的圖像配准方法,它計算圖像上所有的點的偏移量,從而形成一個稠密的光流場。通過這個稠密的光流場,可以進行像素級別的圖像配准。

稀疏光流並不對圖像的每個像素點進行逐點計算。它通常需要指定一組點進行跟蹤,這組點最好具有某種明顯的特性,例如Harris角點等,那么跟蹤就會相對穩定和可靠。稀疏跟蹤的計算開銷比稠密跟蹤小得多,計算更便捷,其建立在下面三個假設上:

  1. 亮度恆定。\(I(x, y, t-1) = I(x+u(x,y), y+v(x,y), t)\),即運動物體在圖片上的灰度值在很短的時間內不會改變;

  2. 時間連續或者是運動是“小運動”;

  3. 空間一致,臨近點有相似運動,保持相鄰,即同一個窗口中的點偏移量都相等。

\(I(x, y , t-1) \approx I(x, y, t) + I_x u(x,y)+I_y (x, y)\)做一階泰勒展開,得到

\[\begin{align*}​ 0 \approx \nabla I_t + \nabla I_x \cdot u(x, y) + \nabla I_y \cdot v(x, y)\end{align*} \]

上式中存在兩個變量\(u(x, y)\)\(v(x, y)\),再利用假設三,即空間一致性,如果選擇的窗口大小是5,那么就可以得到25個等式,即

\[\begin{align*} \begin{bmatrix} I_x(P_1) & I_y(P_1)\\ I_x(P_1) & I_y(P_1)\\ \vdots & \vdots \\ I_x(P_25) & I_y(P_25)\\ \end{bmatrix} \begin{bmatrix} u \\ v \end{bmatrix} = - \begin{bmatrix} I_t(P_1) \\ I_t(P_2) \\ \vdots \\ I_t(P_25) \\ \end{bmatrix}\end{align*} \]

\[\begin{align*} A &= \begin{bmatrix} I_x(P_1) & I_y(P_1)\\ I_x(P_1) & I_y(P_1)\\ \vdots & \vdots \\ I_x(P_25) & I_y(P_25)\\ \end{bmatrix}\end{align*} \]

\[\begin{align*} d &= \begin{bmatrix} u \\ v \end{bmatrix}\end{align*} \]

\[\begin{align*} b &= \begin{bmatrix} I_t(P_1) \\ I_t(P_2) \\ \vdots \\ I_t(P_25) \\ \end{bmatrix}.\end{align*} \]

可以看出,上述問題是一個最小二乘問題\(Ad = b\),即\(A^TAd = A^Tb\)。當\(A^T A\)可逆式,且不稀疏,\(A^T A\)的條件數比較合適時求解速度更快。

\[\begin{align*} A^T A &= \begin{bmatrix} \sum I_x I_x & \sum I_x I_y \\ \sum I_y I_x & \sum I_yI_y \end{bmatrix}\\ &= \sum \nabla I (\nabla I)^T\end{align*} \]

\(A^T A\)的特征根和特征值與邊的方向和幅度有關,當\(A^T A\)兩個特征值都比較大時,說明該點在\(x\)\(y\)方向上變換都比較大,更可能是角點;當兩個特征值都比較小時,說明該點更可能在“平滑”的區域。因此只有當該點是角點的時候,上述方程才能解。

Lucas-Kanade flow

Lucas-Kanade flow極小化下面式子得到\((u,v)\)

\[\begin{align*} E(u, v) &= \sum_{(x, y) \in W} w(x, y) (I_x(x, y)\cdot u + I_x(x, y)\cdot v + I(x, y, t) - I(x, y , t-1))^2\\ & = \begin{bmatrix} u & v& 1\end{bmatrix} M \begin{bmatrix} u \\ v \\ 1 \end{bmatrix}\end{align*} \]

其中

\[\begin{align*} M & = \sum_{(x, y) \in W} w(x, y) \begin{bmatrix} I_x^2 & I_x I_y & I_xI_t \\ I_xI_y & I_y^2 & I_yI_t \\ I_xI_x & I_t I_y & I_t^2 \\\end{bmatrix}\end{align*} \]

其中的權重\(w\)一般使用高斯核,則通過\(\frac{\partial E(u, v)}{\partial (u, v)}=0\)可以得到

\[\begin{align*}G_{\sigma} \ast \begin{bmatrix} I_x^2 & I_x I_y \\ I_xI_y & I_y^2 \end{bmatrix} \begin{bmatrix} u \\ v \end{bmatrix} = -G_{\sigma} \ast \begin{bmatrix} \sum w(x, y)I_xI_t \\ \sum w(x, y)I_yI_t \end{bmatrix}\end{align*} \]

光流法用於目標跟蹤的原理為:

  1. 針對每一個視頻序列,利用一定的目標檢測方法,檢測可能出現的前景目標

  2. 如果某一幀出現了前景目標,找到其具有代表性的關鍵特征點(可以隨機 產生,也可以利用角點來做特征點)

  3. 對之后的任意兩個相鄰視頻幀而言,尋找上一幀中出現的關鍵特征點在當 前幀中的最佳位置,從而得到前景目標在當前幀中的位置坐標

  4. 如此迭代進行,便可實現目標的跟蹤

Lucas-Kanade光流法可能會面臨下述問題:

  1. 物體運動幅度較大,大於一個像素。解決方法是Iterative refinement,coarse-to-fine estimation;

  2. 像素點和它周圍點的運動不相似,可以通過動作分割來解決;

  3. 違背亮度值一致假設。

多尺度迭代光流估計

上面說到當物體運動超過一個像素時,Lucas-Kanade光流法可能會遇到問題。時間混淆就是一個例子,

Temporal aliasing

圖像有多個亮度點匹配,如果選擇臨近點則會對動作造成錯誤估計。多尺度能解決這個問題。首先,對每一幀建立一個高斯金字塔,最大尺度圖片在最頂層,原始圖片在底層。然后,從頂層開始估計下一幀所在位置,作為下一層的初始位置,沿着金字塔向下搜索,重復估計動作,直到到達金字塔的底層。其算法流程如下:

Iprip.png

Ip5c0.png

參考資料

  1. _木頭人, Lucas–Kanade光流算法學習
  2. Moondark, Kanade-Lucas-Tomasi(KLT)進行目標跟蹤


免責聲明!

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



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