OpenCV學習筆記(一) 光流法學習

2021-07-31 16:02:33 字數 2029 閱讀 2877

(1) calcopticalflowpyrlk

該方法使用的方法是基於影象金字塔的lucas-kanande演算法,能夠跟蹤稀疏的光流,影象金字塔的作用是通過不斷地下取樣來減小兩幀之間光流點的運動,從而保證識別的準確性(因為l-k演算法只有在位移很小的時候才有作用)。具體用法如下:

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 )

parameters:

previmg – 第乙個8位輸入影象或者通過 buildopticalflowpyramid()建立的金字塔

nextimg – 第二個輸入影象或者和previmg相同尺寸和型別的金字塔

prevpts – 二維點向量儲存找到的光流;點座標必須是單精度浮點數

nextpts – 輸出二維點向量(用單精度浮點座標)包括第二幅影象中計算的輸入特徵的新點位置;當optflow_use_initial_flow 標誌通過,向量必須有和輸入一樣的尺寸

status – 輸出狀態向量(無符號char);如果相應的流特徵被發現,向量的每個元素被設定為1,否則,被置為0

err – 輸出錯誤向量;向量的每個元素被設為相應特徵的乙個錯誤,誤差測量的型別可以在flags引數中設定;如果流不被發現然後錯誤未被定義(使用status(狀態)引數找到此情形)。

winsize – 在每個金字塔水平搜尋視窗的尺寸

count – 特徵點的數目

level – 最大的金字塔層數。如果為 0 , 不使用金字塔 (即金字塔為單層),如果為 1 , 使用兩層,下面依次類推

criteria – 準則,指定在每個金字塔層,為某點尋找光流的迭代過程的終止條件。

(2)calcopticalflowfarneback

用gunnar farneback 的演算法計算稠密光流(即影象上所有畫素點的光流都計算出來)。

(3)calcopticalflowbm

通過塊匹配的方法來計算光流。

(4)calcopticalflowhs

用horn-schunck 的演算法計算稠密光流。

(5)calcopticalflowsf

這乙個是2023年歐洲視覺會議的一篇文章的實現:」******flow: a non-iterative, sublinear optical flowalgorithm」。

(1)光流的概念是gibson在2023年首先提出來的。它是空間運動物體在觀察成像平面上的畫素運動的瞬時速度,是利用影象序列中畫素在時間域上的變化以及相鄰幀之間的相關性來找到上一幀跟當前幀之間存在的對應關係,從而計算出相鄰幀之間物體的運動資訊的一種方法。一般而言,光流是由於場景中前景目標本身的移動、相機的運動,或者兩者的共同運動所產生的。

(2)光流能夠被計算出來的假設

(1)l-k演算法有三個假設

然而,對於大多數30hz的攝像機,大而連貫的運動是普遍存在的情況,所以lk光流正因為這個原因在實際中的跟蹤效果並不是很好。我們需要大的視窗來捕獲大的運動,而大視窗往往違背運動連貫的假設!而影象金字塔可以解決這個問題,於是乎,金字塔lucas-kanade就提出來了。

(2)金字塔lucas-kanade跟蹤方法

在影象金字塔的最高層計算光流,用得到的運動估計結果作為下一層金字塔的起始點,重複這個過程直到到達金字塔的最底層。這樣就將不滿足運動的假設可能性降到最小從而實現對更快和更長的運動的跟蹤。

opencv 光流跟蹤

物件跟蹤三要素 影象表示,外觀模型,移動模型 klt lucas kanade tracker 條件 亮度恆定,近距離移動,空間一致性 稀疏光流 sparse optical flow 找到特徵點 角點檢測法 include include using namespace cv using name...

光流法學習(1) 找Demo

matlab中的cv tool包含了viptrafficof.m,核心就是viptrafficof win 基於simulink 主要用的是horn光流。opencv的例程是 opencv3程式設計入門 opencv2版書本配套示例程式09,主要用的是金字塔 lk光流。從效果上看,matlab的要好...

opencv學習筆記四十一 稀疏光流跟蹤

lucas kanada光流假設 場景中物體被跟蹤的部分的亮度不變 相鄰幀之間的運動較小 相鄰的點保持相鄰。lk演算法只需要每個感興趣點周圍小視窗的區域性資訊,但是較大的運動會將點移除這個小視窗,從而造成演算法無法再找到這些點。金字塔的lk演算法可以解決這個問題,即從金字塔的最高層 細節最少 開始向...