運動物體檢測 光流法(攝像機固定)

2021-06-05 17:18:26 字數 1227 閱讀 4707

**

前面的一篇文章談了高斯背景模型在運動物體檢測中的應用。本文主要討論另一種方法——光流法。與高斯背景模型的方法不同,光流法可以用於攝像機固定和攝像機運動的情形,但本文只就攝像機固定的情況進行討論,即不涉及攝像機運動**問題。

光流法的介紹

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

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

假設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)是前景 ,反之是背景

c++實現

在實現攝像機固定情況的光流法時,需要有兩幀連續的影象,下面的演算法針對rgb24格式的影象計算光流:

void calculate(unsigned char* buf)}}

memcpy(prevframe,buf,size);

}

opencv運動物體檢測

參考資料 python opencv實現動態物體追蹤 python opencv實踐 一 基於顏色的物體追蹤 上 在hsv顏色空間識別區域顏色 opencv python tutorials opencv形態學處理 opencvl輪廓檢測函式 樹莓派智慧型小車結合攝像頭,opencv進行物體追蹤 給...

基於OpenCv的運動物體檢測演算法

基於乙個實現的基於opencv的運動物體檢測演算法,可以用於檢測行人或者其他運動物體。include include include include int main int argc,char argv 開啟攝像頭 if argc 1 if pcapture cvcapturefromcam 1 ...

基於OpenCv的運動物體檢測演算法

基於乙個實現的基於opencv的運動物體檢測演算法,可以用於檢測行人或者其他運動物體。include include include include int main int argc,char ar 宣告iplimage指標 iplimage pframe null iplimage pfrimg...