运动背景下的运动目标检测
from:運動背景下的運動目標(biāo)檢測
各種目標(biāo)檢測方法介紹(懶人可以直接略過)
目標(biāo)檢測是一個老話題了,在很多算法當(dāng)中都有它的身影。目標(biāo)檢測要做的就兩件事:檢測當(dāng)前圖片中有沒有目標(biāo)?如果有的話,在哪?按照先驗知識和背景運動來劃分的話,目標(biāo)檢測方法大概可以分為兩大類:
第一,已知目標(biāo)的先驗知識。在這種情況下檢測目標(biāo)有兩類方法,第一類方法是用目標(biāo)的先驗知識訓(xùn)練一堆弱分類器,然后這些弱分類器一起投票來檢測目標(biāo),如boosting, ?random forest 都是這個思路,大家熟知的adaboost人臉檢測也是如此,這一類方法我會在以后的文章中討論。第二類方法是根據(jù)先驗知識找到目標(biāo)和非目標(biāo)的最佳劃分線,如SVM.這兩類方法各成一家,各有所長,都有著不錯的表現(xiàn)。
第二,未知目標(biāo)的先驗知識。此時不知道要檢測的目標(biāo)是什么,于是什么是目標(biāo)就有了不同的定義。一種方法是檢測場景中的顯著目標(biāo),如通過一些特征表達出場景中每個像素的顯著性概率,然后找到顯著目標(biāo)。另一種方法就是檢測場景當(dāng)中的運動目標(biāo)了,這也是本文下面將要討論的重點內(nèi)容。
在檢測運動目標(biāo)時,如果背景是靜止的,so easy,略過。當(dāng)背景也跟隨一起運動時就比較麻煩了,現(xiàn)如今大概有兩種方法來處理。第一種方法是背景補償,即通過平移,縮放,仿射變換等計算出背景的運動,然后補償背景再做差分。不過這種方法有兩個問題,一是仿射變換運算量巨大,二是即使求出背景補償向量,背景中的遠景和近景的向量也會有相對誤差,所以這種方法幾乎不可行。第二種方法就是傳說中的optical flow(光流)了,下面進入正文。
正文
光流法的大致流程如下:
1.在一幀圖像中選取大量的光流點(具體選取方法可以不同,如fast角點,隨機選,等間隔選...)。
2.計算所有光流點的運動矢量(常用方法有LK光流,HS光流等)。
3.根據(jù)這些矢量和其它一些特征檢測運動目標(biāo)。
下面以一個具體例子進行分析
?
1.首先在一幀圖像內(nèi)隨機均勻選取k個點,并濾除那些鄰域紋理太光滑的點,因為這些點不利于計算光流
2.計算這些點與上一幀圖像的光流矢量,如上右圖,此時已經(jīng)可以看出背景運動的大概方向了
?
?
3.接下來的這一步方法因人而異了。
2007年cvpr的一篇文章Detection and segmentation of moving objects in highly dynamic scenes的方法是把這些光流點的(x, y, dx, dy, Y, U, V)7個特征通過meanshift聚類來聚合到一起,最后形成運動目標(biāo)輪廓。
而我的方法很簡單,只用到了(dx, dy)兩個特征,如上左圖,首先把所有光流點投射到直角坐標(biāo),圖中的坐標(biāo)軸是(dx,dy), 然后通過meanshift找到密度最大的(dx, dy)坐標(biāo)點,也就是背景矢量最集中的位置(圖中點的亮度越大代表該位置矢量的密度越大),如紅圈所示,紅圈外面的矢量就可以認為是運動目標(biāo)了,如上右圖所示。
?
補充:
最近問我問題的人太多了,補充幾組實驗圖片供大家參考:
第一組是用dx,dy兩個特征檢測的結(jié)果:
?
第二組在dx, dy 的基礎(chǔ)上混入了顯著性(saliency)特征:
?
第三組同上
總結(jié)
以上是生活随笔為你收集整理的运动背景下的运动目标检测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 让你的照片更鲜艳------hsv拉伸
- 下一篇: 全栈必备Linux 基础