光流(Optical Flow)

光流是由觀察者和場景之間的[相對運(yùn)動]引起的視覺場景中物體、表面和邊緣的運(yùn)動模式。一般而言,光流是由于場景中前景目標(biāo)本身的移動、觀測者運(yùn)動,或者兩者的共同運(yùn)動所產(chǎn)生的。

光流

光流在很多領(lǐng)域中都被用到,例如視頻中的運(yùn)動目標(biāo)檢測,視頻壓縮等等。

在分析光流時,需要用到兩個重要假設(shè):1.對象的像素強(qiáng)度在連續(xù)幀之間不會改變。2.相鄰像素具有相似的運(yùn)動。下面我們運(yùn)用這兩個假設(shè)來推導(dǎo)光流公式。

光流法實(shí)際是通過檢測圖像像素點(diǎn)的強(qiáng)度隨時間的變化進(jìn)而推斷出物體移動速度及方向的方法。假設(shè)該移動很小,假設(shè)該移動很小,那么可以根據(jù)泰勒級數(shù)得出:

I(x + \Delta x, y + \Delta y, t + \Delta t)= I(x,y,t) +\frac{\vartheta  I}{\vartheta x }\Delta x + \frac{\vartheta  I}{\vartheta y } \Delta y + \frac{\vartheta  I}{\vartheta t } \Delta t

根據(jù)假設(shè)1,由于移動很小,此時這時對象位移不會改變對象的像素強(qiáng)度:

I(x + \Delta x, y + \Delta y, t + \Delta t)= I(x,y,t)

進(jìn)一步得出:

\frac{\vartheta  I}{\vartheta x }\Delta x + \frac{\vartheta  I}{\vartheta y } \Delta y + \frac{\vartheta  I}{\vartheta t } \Delta t = 0

最終得出光流公式:

\frac{\vartheta  I}{\vartheta x }\ V_{x}  + \frac{\vartheta  I}{\vartheta y } \ V_{y} + \frac{\vartheta  I}{\vartheta t } = 0

這里的V _{x} ,V_{y} 是x, y方向上的速率,或稱為I(x, y, t)的光流。而\frac{\vartheta  I}{\vartheta x }\ ,\frac{\vartheta  I}{\vartheta y } \ , \frac{\vartheta  I}{\vartheta t }則是圖像(x, y, t)在對應(yīng)方向上的偏導(dǎo)數(shù)??梢钥吹焦饬鞴街杏袃蓚€未知量V _{x} ,V _{y} , 無法直接求解。因此我們需要更多的外部條件來求解方程。

Lucas-Kanade 方法

求解光流方程有很多方法,其中最著名的便是 Lucas-Kanade方法。它應(yīng)用了之前提到的第二個假設(shè),即所有相鄰像素都將具有相似的運(yùn)動。對于每一個像素,Lucas-Kanade 方法選取與它相鄰的8個像素進(jìn)行分析。根據(jù)假設(shè),所有 9 個像素都有相同的運(yùn)動。所以現(xiàn)在我們的問題求解 只有2個未知變量的9個方程組。

\frac{\vartheta  I}{\vartheta x }\ V_{x1}  + \frac{\vartheta  I}{\vartheta y } \ V_{y1} + \frac{\vartheta  I}{\vartheta t } = 0

\frac{\vartheta  I}{\vartheta x }\ V_{x2}  + \frac{\vartheta  I}{\vartheta y } \ V_{y2} + \frac{\vartheta  I}{\vartheta t } = 0

......

\frac{\vartheta  I}{\vartheta x }\ V_{x9 }  + \frac{\vartheta  I}{\vartheta y } \ V_{y9} + \frac{\vartheta  I}{\vartheta t } = 0

這樣的方程組沒有唯一解,這里我們使用最最小二乘擬合方法獲得一個最優(yōu)近似解。

Lucas-Kanade方法的局限性

由于上述假設(shè)和分析都是針對較小的運(yùn)動,光流算法會受到突然移動的影響。如果兩幀圖像之間的運(yùn)動太大,光流法可能會失效。對于這個問題我們可以通過圖像金字塔來解決,當(dāng)我們使用更高層的金字塔圖像時,小的運(yùn)動被去除,大的運(yùn)動變成小運(yùn)動。然后再應(yīng)用 Lucas-Kanade,就可以得到正確的光流。

OpenCV 光流演示:https://docs.opencv.org/3.4/d4/dee/tutorial_optical_flow.html?

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

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

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