光流 學習筆記

本博客內(nèi)容來源于網(wǎng)絡以及其他書籍,結(jié)合自己學習的心得進行重編輯,因為看了很多文章不便一一標注引用,如圖片文字等侵權(quán),請告知刪除。

傳統(tǒng)2D計算機視覺學習筆記目錄------->傳送門
傳統(tǒng)3D計算機視覺學習筆記目錄------->傳送門

前言

本來這篇想寫HDR的,但是發(fā)現(xiàn)里面有光流的知識,感覺光流這一塊知識挺多的,而且現(xiàn)在應用也蠻多的,所以就先來看一下光流吧。我第一次接觸光流,大概是5年前吧,當時一個師兄用光流去做四旋翼飛機的空中穩(wěn)定,時間過得好快啊。

最近發(fā)現(xiàn)自己的文章還都挺長的,其實能夠閱讀下去還是挺難的,對于想系統(tǒng)的學習算法的原理蠻好的,但是我自己再讀起來,也難以有耐心讀下去。接下來調(diào)整一下,盡量能夠讓自己讀下去,也能夠把知識都覆蓋掉。我感覺很大的原因還是這是前期,需要描述的東西太多了。

路漫漫長修遠兮,吾將上下而求索。

光流理念簡介

初次見到光流這個概念,大家應該會比較陌生,光會流動?還有就是大家可以想到上圖的樣子,汽車燈在眼石曝光下留下的連續(xù)的光影,其實這也是光流。下面我們從幾個方面,來了解一下光流。首先靈魂三問What,Where,Why?

  • 光流是什么?

我們知道當物體在運動時,它在圖像上對應點也在運動,我們成圖像上像素點的瞬時運動稱為光流(就感覺一個光像素點在圖片上流動一樣)。它的概念是由 James J. Gibson于20世紀40年代首先提出的,是指時變圖像中模式運動速度,即是空間運動物體在觀察成像平面上的像素運動的瞬時速度。這個速度是矢量,帶有大小和方向。

  • 光流是怎么產(chǎn)生的呢?

一般而言,光流是由于場景中前景目標本身的移動、相機的運動,或者兩者的共同運動所產(chǎn)生的。

  • 那么光流有什么意義呢?

光流是三維空間內(nèi)物體的運動在二維成像平面上的投影的瞬間速度。得到的是一個描述位置變化的二維矢量,但在運動間隔極小的情況下,我們通常將其視為一個描述該點瞬時速度的二維矢量u=(u,v),稱為光流矢量。光流表達了圖像的變化,由于它包含了目標運動的信息,因此可被觀察者用來確定目標的運動情況。

在了解了光流的基本概念后,我們引入另一個概念

  • 光流場
    在空間中,運動可以用運動場描述,而在一個圖像平面上,物體的運動往往是通過圖像序列中不同圖像灰度分布的不同體現(xiàn)的,從而,空間中的運動場轉(zhuǎn)移到圖像上就表示為光流場。

光流場是一個二維矢量場,它反映了圖像上每一點灰度的變化趨勢,可看成是帶有灰度的像素點在圖像平面上運動而產(chǎn)生的瞬時速度場。它包含的信息即是各像點的瞬時運動速度矢量信息,是圖像上所有像素點光流的有序集合。

研究光流場的目的就是為了從序列圖像中近似計算不能直接得到的運動場。光流場在理想情況下,光流場對應于運動場。

這也是就為什么我的師兄要用光流來穩(wěn)定四旋翼飛行器了,因為通過光流計算可以得到一個近似的運動,但是我也不知道最后那個項目的效果怎么樣。

我們介紹完了,基礎(chǔ)的概念以及定義,其實很簡單也很容易懂,下面我們介紹一些怎么計算光流。

常見光流計算方法

光流的計算方法有很多種,但是基本的思想就是利用圖像序列中像素在時間域上的變化以及相鄰幀之間的相關(guān)性來找到上一幀跟當前幀之間存在的對應關(guān)系,從而計算出相鄰幀之間物體的運動信息。我們先列舉一些基礎(chǔ)的計算方法,不詳細解釋:

1. 基于梯度的方法:

基于梯度的方法又稱為微分法,它是利用時變圖像灰度的時空微分來計算像素的速度矢量,例如Horn-Schunck算法與Lucas-Kanade(LK)算法,由于計算簡單和較好的結(jié)果,該方法應用較多。

2. 基于匹配的方法:

基于匹配的方法包括特征和區(qū)域匹配?;谔卣鞯姆椒ú粩嗟貙δ繕酥饕卣鬟M行定位和跟蹤,對目標大的運動和亮度變化具有魯棒性。存在的問題是光流通常很稀疏,而且特征提取和精確匹配也十分困難?;趨^(qū)域的方法先對類似的區(qū)域進行定位,然后通過相似區(qū)域的位移計算光流,其光流也比較稀疏,而且計算量也比較大。

3. 基于能量的方法

基于能量的方法又稱為基于頻率的方法,在使用該類方法的過程中,要獲得均勻流場的準確的速度估計,就必須對輸入的圖像進行時空濾波處理,即對時間和空間的整合,但是這樣會降低光流的時間和空間分辨率,而且計算量也比較大,另外,要進行可靠性評價也比較困難。

4. 基于相位的方法

基于相位的方法是由Fleet和Jepson提出的,F(xiàn)leet和Jepson最先提出將相位信息用于光流計算的思想。當我們計算光流的時候,相比亮度信息,圖像的相位信息更加可靠,所以利用相位信息獲得的光流場具有更好的魯棒性?;谙辔坏墓饬魉惴ǖ膬?yōu)點是:對圖像序列的適用范圍較寬,而且速度估計比較精確,但也存在著一些問題:第一,基于相位的模型有一定的合理性,但是有較高的時間復雜性;第二,基于相位的方法通過兩幀圖像就可以計算出光流,但如果要提高估計精度,就需要花費一定的時間;第三,基于相位的光流計算法對圖像序列的時間混疊是比較敏感的。

5. 基于深度學習的方法

基于深度學習的方法,通過神經(jīng)網(wǎng)絡,學習出相鄰幀之間的光流場。神經(jīng)網(wǎng)絡方法是光流技術(shù)的一個發(fā)展方向。

以上是從5個不同的研究路徑區(qū)分的方法,除此,我們還可以將其方法根據(jù)得出的光流場的密度,可以分為稠密光流法與洗漱光流法。
那為什么有這么多的方法呢,他們有什么差異以及有什么共同點呢?我們一起來看一下,光流的基本原理。

  • 光流的基本假設(shè):

  1. 亮度恒定不變。即同一目標在不同幀間運動時,其亮度不會發(fā)生改變。這是基本光流法的假定(所有光流法變種都必須滿足),用于得到光流法基本方程;

  2. 時間連續(xù)或運動是“小運動”。即時間的變化不會引起目標位置的劇烈變化,相鄰幀之間位移要比較小。同樣也是光流法不可或缺的假定。

根據(jù)光流的基本假設(shè),我們得出了光流的約束方程。

假設(shè)第一幀圖像中的像素 I(x, y, t) 在時間 dt 后移動到第二幀圖像的 (x+dx, y+dy) 處。根據(jù)上述第一條假設(shè):灰度值不變,我們可以得到:

對上式右邊,進行泰勒展開可得到:

其中ε代表二階無窮小項,可忽略不計,對上式進行化簡得(f和I是一樣的,公式摘抄自其他地方):

其中:

其中,fx,fy,ft均可由圖像數(shù)據(jù)求得,而(u,v)即為所求光流矢量。
但是約束方程只有一個,而方程的未知量有兩個,這種情況下無法求得u和v的確切值。這種不確定性稱為“孔徑問題”。所以要想接觸方程則至少還需要一個約束方程,而上文中提到的方法,都是在基礎(chǔ)原理的約束方程上,在增加一個從不同角度考慮的約束方程,來求解。

其他的方法,我們再通過文章來解釋。

光流的應用

光流作為計算機視覺里面的一個獨特的方法,在很多方面都有涉及,比如目標檢測,目標跟蹤,背景去除,3D結(jié)構(gòu)恢復,視頻流豐富以及運動估計等,屬于應用比較廣泛的算法理念。

通過光流法與其他算法相結(jié)合,可以很明顯的提高算法的速度,以及適應度。

我會在其他文章中來具體展示其應用效果。

總結(jié)

這篇文章因為感冒寫了四天,本來打算把光流的每個方法都解釋一遍,感覺還是太長,不方便讀。這篇文章主要還是基礎(chǔ)簡要的描述一下光流以及光流法,可以看出來光流法的原理還是比較簡單的,但是使用的場景也比較單一,就是在高速采集的視頻流里面會比較有效。


重要的事情說三遍:

如果我的文章對您有所幫助,那就點贊加個關(guān)注唄 ( * ^ __ ^ * )

如果我的文章對您有所幫助,那就點贊加個關(guān)注唄 ( * ^ __ ^ * )

如果我的文章對您有所幫助,那就點贊加個關(guān)注唄 ( * ^ __ ^ * )

傳統(tǒng)2D計算機視覺學習筆記目錄------->傳送門
傳統(tǒng)3D計算機視覺學習筆記目錄------->傳送門

任何人或團體、機構(gòu)全部轉(zhuǎn)載或者部分轉(zhuǎn)載、摘錄,請保留本博客鏈接或標注來源。博客地址:開飛機的喬巴

作者簡介:開飛機的喬巴(WeChat:zhangzheng-thu),現(xiàn)主要從事機器人抓取視覺系統(tǒng)以及三維重建等3D視覺相關(guān)方面,另外對slam以及深度學習技術(shù)也頗感興趣,歡迎加我微信或留言交流相關(guān)工作。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容