兩種運動檢測算法的介紹:算法
幀差法:數組
幀差法是目前運動目標檢測中最經常使用的算法。幀差法依據的原則是:當視頻中存在移動物體的時候,相鄰幀(或相鄰三幀)之間在灰度上會有差異,求取兩幀圖像灰度差的絕對值,則靜止的物體在差值圖像上表現出來全是0,而移動物體特別是移動物體的輪廓處因爲存在灰度變化爲非0,當絕對值超過必定閾值時,便可判斷爲運動目標,從而實現目標的檢測功能。函數
二維頻域運動目標檢測:測試
經過對動態圖像的行列分解, 將三維頻域內的運動檢測問題轉化到兩組二維頻域內進行, 從而下降了濾波器設計的難度。給出了一種提取主運動能量的自適應濾波算法, 經過剔除背景和噪聲的頻率成分, 有效地檢測出運動目標。優化
複雜度分析:spa
針對幀差法進行分析,代碼複雜度主要集中在absdiff與findContours部分,其中absdiff的迭代次數爲2*500*500=50000次,時間爲88.46ms(取兩百幀計算平均的時間)
針對二維頻域運動目標檢測算法,這裏有兩個代碼版本:設計
針對py-new-fuliye.py,代碼的複雜度主要集中在兩個部分:傅里葉變換以及遍歷,在py-new-fuliye.py中,共使用了兩次傅里葉變換與兩次遍歷,遍歷的迭代次數次數爲2*50*30=300次,時間爲:54.175ms3d
針對pepoplefft.py(改進版)進行分析,使用了兩次傅里葉變換(一次正一次逆),進行了一次嵌套遍歷,遍歷次數爲:50*10=500次,時間爲: ms視頻
針對pepoplefft.py進行優化調參:blog
搜尋噪點:
要找到噪點,就要知道經傅里葉高通濾波變換後,剩餘的邊緣部分在數組中的表現規律,採用numpy繪圖表示出來:
通過閾值去噪後,效果如圖:
在隨後的視頻測試中發現其面對複雜環境表現仍不理想,此時考慮選擇繪製多個矩形來框選標記多個候選目標,暫時不考慮使用其餘的濾波進行去噪,緣由爲一、會佔用本來就很少的處理時間,二、不認爲在通過高通濾波後還未被濾掉的噪點會被其餘濾波函數濾掉,目標被濾掉的可能性反而更大。