常用的運動目標檢測方法——幀差法
幀差法將鄰近幀圖像相減濾除圖像中的靜止景物得到運動區域,其對環境的光線變化不敏感並可快速檢測出運動目標,但對於運動物體速度太慢的情況則產生不完整的「空洞」現象,太快又易於生成「拖尾」現象,其之後的補償處理比較複雜。
1) 兩幀差法
兩幀差法實現方式:是前後兩幀進行差分得到差分圖像,通過比較所有像素的灰度差(即像素值之間的差)絕對值,設定一個閾值,如果灰度差絕對值超過這個絕對值,則得到一個像素集,即運動目標區域。通過對運動目標區域進行連通性分析,得到一個連通的目標區域。
① 假定P(i, j)對應第n幀圖像和第n-1幀的同一像素點,若第n幀P(i, j)的值用
fn-1(i, j)表示,第n-1幀P(i, j)的值用fn-1(i, j)表示,則:
P(i, j)=|fn(i, j)-fn-1(i, j)|
②假定兩像素之間相差後,判斷運動區域的閾值為T ,因為判定結果得到的是一個二值圖像,設 BW(i, j)為所得二值圖像。
2) 三幀差法
三幀差法是基於兩幀差法的檢測方法,其原理是將相鄰的3幀圖像前後作差,經過像兩幀差法的處理後,再將得到的兩個幀差圖像作「與」運算,最後得到運動目標輪廓。
① 假定P(i, j)對應第n+1、第n幀圖像和第n-1幀的同一像素點,若第n+1幀P(i, j)的值用表示,若第n幀P(i, j)的值用表示,第n-1幀P(i, j)的值用表示,則:
P(i, j)=|fn(i, j)-fn-1(i, j)|∩|fn(i, j)-fn+1(i, j)|
②假定像素作差再「與」運算後,判斷運動區域的閾值為T,因為判定結果得到的是一個二值圖像,設BW(i ,j)為所得二值圖像。
三幀差法的閾值設定與上面兩幀差相似。而幀差法的閾值設定時最難確定最佳閾值,這一步往往也是最容易影響結果的準確性。如果把閾值設置太高了那麼就可能把運動目標也部分去掉了,但是如果閾值設置過低,圖像噪聲就會偏多,影響結果。
效果如下,原始碼見github:https://github.com/Rare0716/targetDetect.git
第一次百家號發文章。對于格式還不太熟練,會慢慢改進。