日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Lucas-Kanade算法

發(fā)布時間:2023/12/20 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Lucas-Kanade算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Lucas-Kanade 方法

其原論文鏈接:http://cseweb.ucsd.edu/classes/sp02/cse252/lucaskanade81.pdf


光流法

在目標跟蹤的領域引入光流法是一個突破性進展,這還得歸功于Barron,他在1994年發(fā)布了論文“Performance of optical flow techniques”,并提出了光流這一概念。


雖然這一方法能夠?qū)δ繕烁玫剡M行跟蹤,但同時也存在一些限制性因素,包括運動連續(xù)性、運動剛性、光的變化、地表實況等。現(xiàn)在大多數(shù)的光流算法都是針對全局能量函數(shù)的優(yōu)化問題而提出的,這里的能量函數(shù)可以看作為代價函數(shù),它的作用是保持系統(tǒng)狀態(tài)的穩(wěn)定。其中它的表達式為:
EGlobal=EData+λEPrior(1)E_{Global} = E_{Data} + \lambda E_{Prior} (1)EGlobal?=EData?+λEPrior?1
第一項 EDataE_{Data}EData? 表示測量光流與輸入圖像的一致性問題,因為Data中的約束方程小于未知量個數(shù),所以需要一個先驗條件來優(yōu)化該函數(shù),即使用 EPriorE_{Prior}EPrior? 來表示,并用 λ\lambdaλ 作為系數(shù)進行參數(shù)調(diào)整。


以上是基本的光流約束方程




Lucas-Kanade方法原理

Lucas-Kanade算法是根據(jù)兩幀圖像之間像素點的變化進行處理的,而且具有一定的稀疏性

使用這一方法有幾個假設的前提條件,如下所示:

  • 亮度恒定,從 t 到 t+1 時刻不會出現(xiàn)亮度變化
  • 運動緩慢,從 t 到 t+1 時刻不會引起位置的劇烈變化
  • 空間一致,從 t 到 t+1 時刻像素點的鄰近點不發(fā)生變化


  • 1. 以下是圖像匹配時考慮的問題


    假設圖片的大小為NxN,特征點的大小為MxM

    論文中提到了窮舉搜索(exhaustively search)進行圖像匹配的時間復雜度為 O(M2N2)O(M^2N^2)O(M2N2),消耗太長的時間;也提到了爬山算法(hill-climbing algorithm)是一個局部搜索技術,在一定的情況下無法找到全局最優(yōu)值,其時間復雜度為O(M2N)O(M^2N)O(M2N);還提到了序慣性檢測算法(sequential similarity detection algorithm)中的規(guī)則不確定性。

    然后提出了自己的方法,先對圖 Figure1 中的 h 進行初始估計,再針對每一個像素點使用空間強度梯度(spatial intensity gradient)方法優(yōu)化 h 值,并使用類似于NR的迭代方法(Newton-Raphson iteration)對該過程進行迭代,該方法的時間復雜度為 O(M2logN)O(M^2 log N)O(M2logN)


    2.在簡單的一維情況下進行分析

    通過分析我們得到了 h 的表達式,然后對 h 的值進行優(yōu)化


    最后我們得到了優(yōu)化后的 h 表達式,進而求出更加精確的 h 值,以此來獲得相同的特征點。然后我們可以從一維擴展到多維,利用同樣的方法實現(xiàn),具體步驟論文中詳細介紹了。


    將LK方法應用到光流法中可參考鏈接:https://www.cnblogs.com/gnuhpc/archive/2012/12/04/2802124.html

    其中的 I(x,y,t)I(x,y,t)I(x,y,t)I(x+Δx,y+Δy)I(x+ \Delta x,y+ \Delta y)I(x+Δx,y+Δy) 就相當于是前面圖中所示的 F(x)F(x)F(x)G(x)G(x)G(x) ,而 h 則相當于轉(zhuǎn)變的方位跟大小,用一階泰勒展開后的一階項




    在OpenCV中使用LK方法

    C++: void calcOpticalFlowPyrLK(InputArray prevImg, InputArray nextImg,InputArray prevPts, InputOutputArray nextPts, OutputArray status, OutputArray err, Size winSize=Size(21,21), int maxLevel=3, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 0.01), int flags=0, double minEigThreshold=1e-4 )

    第一個參數(shù) prevImg 表示的是8位輸入圖像 或者是 使用 buildOpticalFlowPyramid() 方法構建的金字塔圖像(pyramid)

    第二個參數(shù) nextImg 表示的是與 prevImg 同樣格式的輸入圖像,且是對應于 preImg 的下一幀圖像

    第三個參數(shù) prevPts 表示的是檢測到的光流(特征)的二維點向量,其中點坐標必須是單精度浮點數(shù)(single-precison floating-point)

    第四個參數(shù) nextPts 表示的是一個 包含了在下一幀圖像中計算得出的新特征位置 的二維點向量

    第五個參數(shù) status 表示的是輸出的狀態(tài)向量,如果能夠找到對應特征的流 即將向量元素置為1,若不能則置為0

    第六個參數(shù) err 表示的是輸出的誤差向量,每一個向量相關聯(lián)的特征點均設置一個誤差值,并且誤差測量的方式由 參數(shù)flags來設定

    第七個參數(shù) winSize 表示的是定義的金字塔圖像每一層的搜索窗口大小

    第八個參數(shù) maxLevel 表示的是定義的金字塔圖像的層次,如果 maxLevel=0 即只有一層圖像, maxLevel=n 即有n+1層圖像。如果金字塔圖像被傳遞給了輸入圖像,該算法會使用不超過maxLevel的層次數(shù)

    第九個參數(shù) criteria 表示的是迭代搜索算法 (iterative search algorithm) 的最終收斂條件

    第十個參數(shù) flags 表示的是操作標志

  • OPTFLOW_USE_INITIAL_FLOW
    使用初始估計將特征點(流)儲存在 nextPts 上;如果該標志未設置,即將prePts復制到nextPts作為初始的估計值
  • OPTFLOW_LK_GET_MIN_EIGENVALS
    使用最小特征值 (minimum eigen values) 作為誤差度量;如果該標志未設置,即取起始點到運動點之間的L1范數(shù) (L1 norm),然后除以窗口的像素大小作為誤差度量
  • 第十一個參數(shù) minEigThreshold 表示的是一個算法,計算2x2標準光流矩陣最小特征值再除以窗口的像素大小;如果求出的值小于minEigThreshold 則過濾掉相應的特征,所以這個方法可以除去不好的特征點并提高性能。



    構建金字塔圖像的方法

    C++: int buildOpticalFlowPyramid(InputArray img, OutputArrayOfArrays pyramid, Size winSize, int maxLevel, bool withDerivatives=true, int pyrBorder=BORDER_REFLECT_101, int derivBorder=BORDER_CONSTANT, bool tryReuseInputImage=true)

    第一個參數(shù) img 為8位的輸入圖像

    第二個參數(shù) pyramid 為輸出的金字塔圖像

    第三個參數(shù) winSize 表示的是實現(xiàn)光流算法的窗口大小,不能小于calcOpticalFlowPyrLK() 中的winSize參數(shù)。并且它需要計算金字塔層次所需的填充。

    第四個參數(shù) maxLevel 表示的是金字塔層次的最大層次數(shù)

    第五個參數(shù) withDerivatives 表示設置一個預計算梯度處理金字塔圖像的每一層圖像

    第六個參數(shù) pyrBorder 表示的是金字塔圖像的邊界模式

    第七個參數(shù) derivBorder 表示的是梯度的邊界模式

    第八個參數(shù) tryReuseInputImage 表示的是是否將輸入圖像的興趣區(qū)域 (ROI : Region of Intretest) 設置到金字塔圖像中,默認為 true


    進行邊界填充是為了避免圖像膨脹后導致的邊界模糊的狀態(tài),填充后才能保證對邊界像素的安全操作,以下有兩種填充邊界(borderType) 的方法

  • ORDER_CONSTANT: 使用常數(shù)填充邊界
  • BORDER_REPLICATE: 復制原圖中最臨近的行或者列

  • 該函數(shù)返回一個int型數(shù)據(jù),表示金字塔圖像的層次大小,不過該值小于 maxLevel



    總結

    以上是生活随笔為你收集整理的Lucas-Kanade算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。