1. 程式人生 > >光流法的理解

光流法的理解

光流法是比較經典的運動估計方法,本文不僅敘述簡單明瞭,而且附程式碼,故收藏.


在空間中,運動可以用運動場描述。而在一個影象平面上,物體的運動往往是通過影象序列中不同圖象灰度分佈的不同體現的。從而,空間中的運動場轉移到影象上就表示為光流場,光流場反映了影象上每一點灰度的變化趨勢。


光流可以看作帶有灰度的畫素點在影象平面運動產生的瞬時速度場。下面我們推導光流方程:


假設E(x,y,t)為(x,y)點在時刻t的灰度(照度)。設t+dt時刻該點運動到(x+dx,y+dy)點,他的照度為E(x+dx,y+dy,t+dt)。我們認為,由於對應同一個點,所以


E(x,y,t) = E(x+dx,y+dy,t+dt)   —— 光流約束方程


將上式右邊做泰勒展開,並令dt->0,則得到:Exu+Eyv+Et = 0,其中:


Ex = dE/dx   Ey = dE/dy   Et = dE/dt   u = dx/dt   v = dy/dt


上面的Ex,Ey,Et的計算都很簡單,用離散的差分代替導數就可以了。光流法的主要任務就是通過求解光流約束方程求出u,v。但是由於只有一個方程,所以這是個病態問題。所以人們提出了各種其他的約束方程以聯立求解。但是由於我們用於攝像機固定的這一特定情況,所以問題可以大大簡化。


攝像機固定的情形


在攝像機固定的情形下,運動物體的檢測其實就是分離前景和背景的問題。我們知道對於背景,理想情況下,其光流應當為0,只有前景才有光流。所以我們並不要求通過求解光流約束方程求出u,v。我麼只要求出亮度梯度方向的速率就可以了,即求出sqrt(u*u+v*v)。


而由光流約束方程可以很容易求到梯度方向的光流速率為 V = abs(Et/sqrt(Ex*Ex+Ey*Ey))。這樣我們設定一個閾值T。


V(x,y) > T 則(x,y)是前景 ,反之是背景