光流的概念是gibson在2023年首先提出來的。它是空間運動物體在觀察成像平面上的畫素運動的瞬時速度,是利用影象序列中畫素在時間域上的變化以及相鄰幀之間的相關性來找到上一幀跟當前幀之間存在的對應關係,從而計算出相鄰幀之間物體的運動資訊的一種方法。一般而言,光流是由於場景中前景目標本身的移動、相機的運動,或者兩者的共同運動所產生的。
簡單來說,光流是空間運動物體在觀測成像平面上的畫素運動的「瞬時速度」。光流的研究是利用影象序列中的畫素強度資料的時域變化和相關性來確定各自畫素位置的「運動」。研究光流場的目的就是為了從序列中近似得到不能直接得到的運動場。
光流法的前提假設:
(1)相鄰幀之間的亮度恆定;
(3)保持空間一致性;即,同一子影象的畫素點具有相同的運動
這裡有兩個概念需要解釋:
運動場,其實就是物體在三維真實世界中的運動;
光流場,是運動場在二維影象平面上的投影。
如上圖所示,h中的畫素點(x,y)在i中的移動到了(x+u,y+v)的位置,偏移量為(u,v)。
光流法用於目標檢測的原理:
給影象中的每個畫素點賦予乙個速度向量,這樣就形成了乙個運動向量場。在某一特定時刻,影象上的點與三維物體上的點一一對應,這種對應關係可以通過投影來計算得到。根據各個畫素點的速度向量特徵,可以對影象進行動態分析。如果影象中沒有運動目標,則光流向量在整個影象區域是連續變化的。當影象中有運動物體時,目標和背景存在著相對運動。運動物體所形成的速度向量必然和背景的速度向量有所不同,如此便可以計算出運動物體的位置。需要提醒的是,利用光流法進行運動物體檢測時,計算量較大,無法保證實時性和實用性。
光流法用於目標跟蹤的原理:
(3)如果某一幀出現了前景目標,找到其具有代表性的關鍵特徵點(可以隨機產生,也可以利用角點來做特徵點);
(5)如此迭代進行,便可實現目標的跟蹤;
由基本光流約束方程ixvx+iyvy+it=0可知,對於二維的運動場,單靠乙個畫素無法確定其運動向量(vx,vy)根據假設三,我們可以使用當前畫素的鄰域畫素新增更多約束條件;如經典的horn-schunck光流法所加的運動平滑約束。同時,對於二維運動場,只需包含兩條或以上邊緣則可以解系統方程,因此在進行光流法時,先選擇好跟蹤的特徵點,如harris角點。
光流場是運動場在二維影象上的投影,而光流就是在影象灰度模式下,畫素點的運動向量。光流法技術的核心就是求解出運動目標的光流,即速度。根據視覺感知原理,客觀物體在空間上一般是相對連續運動的,在運動過程中,投射到感測器平面上的影象實際上也是連續變化的。為此可以假設:瞬時灰度值不變,即灰度不變性原理。由此可以得到光流基本方程,灰度對時間的變化率等於灰度的空間梯度與光流速度的點積。此時需要引入另外的約束條件,從不同的角度引入約束條件,導致了不同的光流分析方法。
光流的計算方法大致分為五類:
基於匹配的方法、基於梯度的方法、基於頻域的方法、基於相位的方法和神經動力學方法。
基於梯度的方法也稱為微分法,該類方法是建立在影象亮度為常數的假設基礎之上的,利用序列影象亮度的時空梯度函式來計算二維速度場。由於計算簡單而且效果比較好,該方法成為使用最廣泛的一種光流估計方法,此類方法的最具代表性的是horn-schunck光流法,它計算出的光流場是在光流基本方程的基礎上引入了另外乙個約束條件,即全域性光流平滑約束假設。後來人們根據這種思想又提出了大量的改進演算法。基於梯度的光流法在使用中存在一些問題:第一,為了在計算光流方程時方便,一般會通過一階泰勒級數逼近來線性化,因此當有大的運動向量存在時會產生較大的誤差,從而導致估計精度降低;第二,在進行預處理時,部分幀中雜訊的存在、影象採集過程中的頻譜混疊現象都將嚴重影響該類方法的計算精度。第三,在有些非連續區域(比如邊緣等),影象亮度在運動方向上的平滑性約束條件會被破壞,從而會導致計算錯誤。
基於頻率的方法又稱為基於能量的方法,在使用該類方法的過程中,要獲得均勻流場的準確的速度估計,就必須對輸入的影象進行時空濾波處理,即對時間和空間的整合,但是這樣會降低光流的時間和空間解析度。基於頻率的方法往往會涉及大量的計算,另外,要進行可靠性評價也比較困難。
基於相位的方法是由fleet和jepson提出的,fleet和jepson最先提出將相位資訊用於光流計算的思想。當我們計算光流的時候,相比亮度資訊,影象的相位資訊更加可靠,所以利用相位資訊獲得的光流場具有更好的魯棒性。基於相位的光流演算法的優點是:對影象序列的適用範圍較寬,而且速度估計比較精確,但也存在著一些問題:第一,基於相位的模型有一定的合理性,但是有較高的時間複雜性;第二,基於相位的方法通過兩幀影象就可以計算出光流,但如果要提高估計精度,就需要花費一定的時間;第三,基於相位的光流計算法對影象序列的時間混疊是比較敏感的。
神經動力學方法是利用神經網路建立的視覺運動感知的神經動力學模型,它是對生物視覺系統功能與結構比較直接的模擬。
下面詳細介紹一下在實際中經常使用的lucas-kanada演算法
lucas-kanada即l-k光流法最初於2023年提出,該演算法假設在乙個小的空間鄰域內運動向量保持恆定,使用加權最小二乘法估計光流。由於該演算法應用於輸入影象的一組點上時比較方便,因此被廣泛應用於稀疏光流場,l-k演算法的提出是基於以下三個假設: (1) 亮度恆定不變。目標畫素在不同幀間運動時外觀上是保持不變的,對於灰 度影象,假設在整個被跟蹤期間,畫素亮度不變。 (2) 時間連續或者運動是「小運動」。影象運動相對於時間來說比較緩慢,實際 應用中指時間變化相對影象中運動比例要足夠小,這樣目標在相鄰幀間的運動就比較小。 (3) 空間一致。同一場景中同一表面上的鄰近點運動情況相似,且這些點在影象上的投影也在鄰近區域。
1.對於假設條件:
(1)亮度恆定,就是同一點隨著時間的變化,其亮度不會發生改變。這是基本光流法的假定(所有光流法變種都必須滿足),用於得到光流法基本方程;
(2)小運動,這個也必須滿足,就是時間的變化不會引起位置的劇烈變化,這樣灰度才能對位置求偏導(換句話說,小運動情況下我們才能用前後幀之間單位位置變化引起的灰度變化去近似灰度對位置的偏導數),這也是光流法不可或缺的假定;
(3)空間一致,乙個場景上鄰近的點投影到影象上也是鄰近點,且鄰近點速度一致。這是lucas-kanade光流法特有的假定,因為光流法基本方程約束只有乙個,而要求x,y方向的速度,有兩個未知變數。我們假定特徵點鄰域內做相似運動,就可以連立n多個方程求取x,y方向的速度(n為特徵點鄰域總點數,包括該特徵點)。
2.對於方程求解
多個方程求兩個未知變數,又是線性方程,很容易就想到用最小二乘法,事實上opencv也是這麼做的。其中,最小誤差平方和為最優化指標。
3.對於前面說到了小運動這個假定,如果目標速度很快該怎麼辦呢?幸運的是多尺度能解決這個問題。首先,對每一幀建立乙個高斯金字塔,最大尺度在最頂層,原始在底層。然後,從頂層開始估計下一幀所在位置,作為下一層的初始位置,沿著金字塔向下搜尋,重複估計動作,直到到達金字塔的底層。這樣搜尋不僅可以解決大運動目標跟蹤,也可以一定程度上解決孔徑問題(相同大小的視窗能覆蓋大尺度上盡量多的角點,而這些角點無法在原始上被覆蓋)。
光流法詳解之一 LK光流)
lucas kanade光流演算法是一種兩幀差分的光流估計演算法。它由bruce d.lucas 和 takeo kanade提出 1 lk光流法有三個假設條件 1.亮度恆定 乙個畫素點隨著時間的變化,其亮度值 畫素灰度值 是恆定不變的。這是光流法的基本設定。所有光流法都必須滿足。2.小運動 時間的...
光流法的學習
光流法是比較經典的運動估計方法。在空間中,運動可以用運動場描述。而在乙個影象平面上,物體的運動往往是通過影象序列中不同圖象灰度分布的不同體現的。從而,空間中的運動場轉移到影象上就表示為光流場,光流場反映了影象上每一點灰度的變化趨勢。光流可以看作帶有灰度的畫素點在影象平面運動產生的瞬時速度場。下面我們...
光流法簡單介紹
光流的概念是 gibson 在1950 年首先提出來的。它是空間運動物體在觀察成像平面上的畫素運動的瞬時速度,是利用影象序列中畫素在 時間域上的變化以及 相鄰幀之間的相關性來找到上一幀跟當前幀之間存在的對應關係,從而計算出相鄰幀之間物體的運動資訊的一種方法。一般而言,光流是由於場景中前景目標本身的移...