1. 程式人生 > >OpenCV中光流法跟蹤器的使用方法學習

OpenCV中光流法跟蹤器的使用方法學習

一、基於特徵點的目標跟蹤的一般步驟
(1)探測當前幀的特徵點
(2)通過當前幀和下一幀的灰度比較,估計當前幀特徵點在下一幀的位置
(3)過濾位置不變的特徵點,餘下的點就是目標了
基於特徵點的目標跟蹤演算法和1,2兩個步驟有關,特徵點可以是Harris角點,也可以是邊緣點等等,第二步估計特徵點的位置也有很多方法,比如光流法,卡爾曼濾波法。下面介紹是改進的Hariis角點來提取特徵點,用Lucas-Kanade光流法實現目標跟蹤。
二、光流法
光流法將二維速度場與灰度聯絡,引入光流約束方程,得到光流計算的基本演算法。它是空間運動物體在觀察成像平面上的畫素運動的瞬時速度,是利用影象序列中畫素在時間域上的變化以及相鄰幀之間的相關性來找到上一幀跟當前幀之間存在的對應關係,從而計算出相鄰幀之間物體的運動資訊的一種方法。光流是空間運動物體在觀測成像平面上的畫素運動的“瞬時速度”。
1.光流法的假設條件:
(1)亮度恆定,同一個點在隨著時間的變化過程中該點的亮度不會發生任何變化。這是光流法的基本假設,所有的光流法都必須滿足這個基本條件,用於得到光流法的基本方程。
(2)小運動,這個也必須滿足,指的是隨著時間的變化,特徵點的位置不會發生劇烈的變化,這樣灰度才能對位置求偏導,只有小運動的情況下才能使用前後幀之間單位位置的變化引起的灰度變化取近似灰度對位置的偏導數。目標在幀間的運動比較小。
(3)空間一致,一個場景上的近鄰的點投影到影象上也是近鄰點,而且鄰近點的速度一致,這是Lucas-Kanade光流法特有的假設,假定了特徵點的鄰域內做相似運動,然後可以建立N多個方程求取x,y方向的速度,N就是特徵點鄰域的總個數,包括特徵點本身。
2.方程求解
多個方程來求解兩個未知變數,又是線性方程,很容易就想到使用最小二乘法,其中,最小誤差平方和為最優化指標。
3.針對目標運動速度快的時候,小運動的假設沒辦法成立,所以採用多尺度來解決這個問題,。
(1)對每一幀都建立一個高斯金字塔,最大尺度圖片在最頂層,原始圖片在底層。
(2)從頂層開始估計下一幀的位置作為下一層的初始位置,沿著金字塔向下搜尋,重複估計動作,直到到達金字塔的底層。
4.公式化
(1)第一點假設:亮度恆定,被跟蹤的部分畫素不隨時間變化而變化,則:
f(x,t) = I(x(t),t) = I(x(t+dt),t+dt);
這裡寫圖片描述


(2)第二點假設:時間連續,相鄰幀之間的運動較小。

這裡寫圖片描述

這裡寫圖片描述