運動背景下的運動目標檢測


各種目標檢測方法介紹(懶人可以直接略過)

  目標檢測是一個老話題了,在很多算法當中都有它的身影。目標檢測要做的就兩件事:檢測當前圖片中有沒有目標?如果有的話,在哪?按照先驗知識和背景運動來划分的話,目標檢測方法大概可以分為兩大類:

  第一,已知目標的先驗知識。在這種情況下檢測目標有兩類方法,第一類方法是用目標的先驗知識訓練一堆弱分類器,然后這些弱分類器一起投票來檢測目標,如boosting,  random forest 都是這個思路,大家熟知的adaboost人臉檢測也是如此,這一類方法我會在以后的文章中討論。第二類方法是根據先驗知識找到目標和非目標的最佳划分線,如SVM.這兩類方法各成一家,各有所長,都有着不錯的表現。

  第二,未知目標的先驗知識。此時不知道要檢測的目標是什么,於是什么是目標就有了不同的定義。一種方法是檢測場景中的顯著目標,如通過一些特征表達出場景中每個像素的顯著性概率,然后找到顯著目標。另一種方法就是檢測場景當中的運動目標了,這也是本文下面將要討論的重點內容。

  在檢測運動目標時,如果背景是靜止的,so easy,略過。當背景也跟隨一起運動時就比較麻煩了,現如今大概有兩種方法來處理。第一種方法是背景補償,即通過平移,縮放,仿射變換等計算出背景的運動,然后補償背景再做差分。不過這種方法有兩個問題,一是仿射變換運算量巨大,二是即使求出背景補償向量,背景中的遠景和近景的向量也會有相對誤差,所以這種方法幾乎不可行。第二種方法就是傳說中的optical flow(光流)了,下面進入正文。

正文


光流法的大致流程如下:

1.在一幀圖像中選取大量的光流點(具體選取方法可以不同,如fast角點,隨機選,等間隔選...)。

2.計算所有光流點的運動矢量(常用方法有LK光流,HS光流等)。

3.根據這些矢量和其它一些特征檢測運動目標。

下面以一個具體例子進行分析

 

1.首先在一幀圖像內隨機均勻選取k個點,並濾除那些鄰域紋理太光滑的點,因為這些點不利於計算光流

2.計算這些點與上一幀圖像的光流矢量,如上右圖,此時已經可以看出背景運動的大概方向了

 

 

3.接下來的這一步方法因人而異了。

2007年cvpr的一篇文章Detection and segmentation of moving objects in highly dynamic scenes的方法是把這些光流點的(x, y, dx, dy, Y, U, V)7個特征通過meanshift聚類來聚合到一起,最后形成運動目標輪廓。

而我的方法很簡單,只用到了(dx, dy)兩個特征,如上左圖,首先把所有光流點投射到直角坐標,圖中的坐標軸是(dx,dy), 然后通過meanshift找到密度最大的(dx, dy)坐標點,也就是背景矢量最集中的位置(圖中點的亮度越大代表該位置矢量的密度越大),如紅圈所示,紅圈外面的矢量就可以認為是運動目標了,如上右圖所示。

 

  補充:

  最近問我問題的人太多了,補充幾組實驗圖片供大家參考:

  第一組是用dx,dy兩個特征檢測的結果:

 

  第二組在dx, dy 的基礎上混入了顯著性(saliency)特征:

 

  第三組同上


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM