基於平均背景建模的運動目標檢測(二)

2021-07-24 08:26:00 字數 2027 閱讀 7783

本篇為之前基於背景模型的運動目標檢測的續集,之前主要思想是根據100幀影象的平均影象以及相鄰幀差值均值影象,建立背景模型,再來做後續的運動物體檢測,結果表明雖然可以成功檢測,但受雜訊干擾很嚴重 。

參考《學習

opencv

》,其去除幀間雜訊的方式採用的是對二值影象進行形態學處理(開操作和閉操作),相比較我之前採用的灰度影象去噪方式相比更加直接且有效。

開操作是先腐蝕後膨脹,通常用於去除影象中較小的明亮細節,而保持整體灰度級和較大的明亮特徵不變。

閉操作是先膨脹後腐蝕,通常用於填充影象中明亮部分的小裂縫。

一般去噪則採用開操作

+閉操作,首先去除小雜訊,其後再修復被腐蝕的明亮區域。

在檢測過的二值化影象後採用如下**:

cvmorphologyex(imask,imask,0,ker,cv_mop_open,cvclose_itr);

cvmorphologyex(imask,imask,0,ker,cv_mop_close,cvclose_itr);

cvclose_itr

代表腐蝕或者膨脹的次數,迭代次數越多,消除的雜斑越大,但同時代價是

侵蝕了較大的邊界區域

,如下分別是

cvclose_itr=1

,cvclose_itr=2

的處理結果

,大部分雜訊去除了,但還是有一些較大塊的雜訊

,雜訊全部消除(當然只針對此幀而言)

消除雜訊後,對檢測到的目標進行輪廓計算,目標輪廓檢測可以更方便知道目標的位置、大小資訊,採用邊界框視覺化效果更好。

輪廓檢測opencv函式:

可以理解為檢測imask影象中的外輪廓(而非洞,即內輪廓),並將輪廓點的資訊儲存至scanner

對於較小的輪廓,可認為是雜訊,可通過輪廓周長對其進行篩選:

double len = cvcontourperimeter(c);  //輪廓長度

double q = (imask->height+imask->width)/4; //影象周長的1/4

通過比較兩個引數,可以篩選出輪廓周長大於影象周長

1/4的輪廓。

對輪廓進行多邊形擬合: 用

cvboundingrect

函式可以獲得輪廓的外接矩形,這些《學習

opencv

》書上都有。

最後繪製輪廓以及外接矩形:

cvdrawcontours(imask,c,cvscalar(255),cvscalar(255),-1,2,8);

cvrectangle(imask,cvpoint(rect.x,rect.y),cvpoint(rect.x+rect.width,rect.y+rect.height),cvscalar(255),1,8,0);

最終從實驗結果中隨機截圖出幾幀:

可以看出,暫時不論受雜訊干擾,幀間差分法用來檢測運動目標是有一定效果的,整個演算法十分簡單。但其也有著明顯的不足:就是目標檢測不完整!由於同物相減為0,在重疊

區域會出現缺口。

此外,它也不能區別目標物體離開的位置(空穴,或者上一幀的位置)和目標現在的位置。

基於背景建模的紅外運動目標檢測(一)

基於背景建模的運動目標檢測,其原理主要依賴演算法所建立的接近理想背景的模型。假想一下,如果眼前有一面白牆,突然有個具備一定尺寸的物體闖入視野,假設觀察者方位 對應相機擺放位置和視角 固定不動,那麼前後場景直接相減得到的差異就是運動目標了。然而在現實狀況下,我們不可能有那麼一面理想的白牆。複雜場景 比...

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

各種目標檢測方法介紹 懶人可以直接略過 目標檢測是乙個老話題了,在很多演算法當中都有它的身影。目標檢測要做的就兩件事 檢測當前中有沒有目標?如果有的話,在哪?按照先驗知識和背景運動來劃分的話,目標檢測方法大概可以分為兩大類 第一,已知目標的先驗知識。在這種情況下檢測目標有兩類方法,第一類方法是用目標...

運動目標檢測 背景減法

一 原理 背景減法 background subtraction 是當前運動目標檢測技術中應用較為廣泛的一類方法,它的基本思想和幀間差分法相類似,都是利用不同影象的差分運算提取目標區域。不過與幀間差分法不同的是,背景減法不是將當前幀影象與相鄰幀影象相減,而是將當前幀影象與乙個不斷更新的背景模型相減,...