1. 程式人生 > >2019年11月20日開發手記

2019年11月20日開發手記

兩種運動檢測演算法的介紹:

幀差法:

幀差法是目前運動目標檢測中最常用的演算法。幀差法依據的原則是:當視訊中存在移動物體的時候,相鄰幀(或相鄰三幀)之間在灰度上會有差別,求取兩幀影象灰度差的絕對值,則靜止的物體在差值影象上表現出來全是0,而移動物體特別是移動物體的輪廓處由於存在灰度變化為非0,當絕對值超過一定閾值時,即可判斷為運動目標,從而實現目標的檢測功能。

二維頻域運動目標檢測:

通過對動態影象的行列分解, 將三維頻域內的運動檢測問題轉化到兩組二維頻域內進行, 從而降低了濾波器設計的難度。給出了一種提取主運動能量的自適應濾波演算法, 通過剔除背景和噪聲的頻率成分, 有效地檢測出運動目標。

 

複雜度分析:

針對幀差法進行分析,程式碼複雜度主要集中在absdiff與findContours部分,其中absdiff的迭代次數為2*500*500=50000次,時間為88.46ms(取兩百幀計算平均的時間)

 

針對二維頻域運動目標檢測演算法,這裡有兩個程式碼版本:

針對py-new-fuliye.py,程式碼的複雜度主要集中在兩個部分:傅立葉變換以及遍歷,在py-new-fuliye.py中,共使用了兩次傅立葉變換與兩次遍歷,遍歷的迭代次數次數為2*50*30=300次,時間為:54.175ms

 

針對pepoplefft.py(改進版)進行分析,使用了兩次傅立葉變換(一次正一次逆),進行了一次巢狀遍歷,遍歷次數為:50*10=500次,時間為:  ms

 

針對pepoplefft.py進行優化調參:

搜尋噪點:

要找到噪點,就要知道經傅立葉高通濾波變換後,剩餘的邊緣部分在陣列中的表現規律,採用numpy繪圖表示出來:

 

經過閾值去噪後,效果如圖:

 

在隨後的視訊測試中發現其面對複雜環境表現仍不理想,此時考慮選擇繪製多個矩形來框選標記多個候選目標,暫時不考慮使用其他的濾波進行去噪,原因為1、會佔用原本就不多的處理時間,2、不認為在經過高通濾波後還未被濾掉的噪點會被其他濾波函式濾掉,目標被濾掉的可能性反而更