樓亮亮++金彥亮
摘 要: 運動目標的檢測是數字圖像處理和模式識別的基礎,也是計算機視覺研究的一個重要領域。以C#為主要研究工具,對基于相鄰幀差法及背景差分法的視頻目標檢測算法進行了研究,主要對其原理和算法進行研究。最后利用以AForge.NET架構類庫,利用圖像灰度的絕對值是否大于設置的閾值實現了對運動目標進行檢測,實驗結果表明,采用該算法可以對運動目標進行較為精確的檢測。
關鍵詞: 運動檢測; AForge.NET; 幀差法; 背景差分法
中圖分類號: TN911.73?34 文獻標識碼: A 文章編號: 1004?373X(2015)17?0058?03
Moving target detection for videos based on AForge.NET library
LOU Liangliang, JIN Yanliang
(School of Communication and Information Engineering, Shanghai University, Shanghai 200072, China)
Abstract: Moving target detection is the foundation of digital image processing and pattern recognition, and an important domain in computer vision research. Taking C# as the main research tool, the algorithms of target detection for videos based on adjacent frame difference method and background difference method are studied, and the principles and algorithms are studied mainly. The moving target detection on the basis of AForge.NET library was achieved when the absolute value of grayscale image was larger than the set threshold. The experimental results show that background difference method can detect moving target accurately.
Keywords: motion detection; AForge.NET; frame difference method; background difference method
0 引 言
由于微電子技術的發展與社會生活水平的提高及各種安防需求的增多,運動目標檢測逐步成為當前監控系統研究領域的熱點,更是計算機視覺領域中視頻跟蹤算法和識別技術的基礎,該算法的檢測精度直接影響了后續的運動目標跟蹤及識別效果。目前,運動目標檢測領域比較常用的方法有:光流法、幀間差分法和背景差分法。
光流法是相對于觀察者的運動目標造成的觀測目標、表面或邊緣的運動[1]。但是該算法計算量比較大,并且存在抗干擾能力差,所以對于實時性要求較高的場合,該檢測算法在視頻運動檢測應用中并不是特別的適用,目前在運動檢測中最常用的方法實際上是背景差分法[2]和幀間差分法[3]。
幀間差分法是一種通過對視頻圖像序列中相鄰兩幀作差分運算來獲得運動目標輪廓的方法,非常適用于存在多個運動目標和攝像機移動的情況[4]。由于該算法對光線及場景變化具有較強的抗干擾性,且無需獲得背景圖像,更新速度快,所以非常適用于實時性較強的應用場合。但是該算法存在閾值難以確定的問題,這個現象在低對比度灰度圖像序列中特別明顯,導致對目標對象的完整區域提取不完整而產生空洞的現象。
背景差分法是采用圖像序列中的當前幀和背景參考模型比較,來檢測運動目標的一種方法,其檢測性能依賴于所使用的背景建模技術[5]。該算法可以實現緩慢的背景變化過程中對目標進行精確快速的分割,所以具有很強的適用性,然而對于突然的光照變化和背景擾動,對物體帶有影子的圖像分割出來的前景圖像可能帶有影子區域[6],為此可以通過建立實時更新的背景模型機制將前景區域分割出來,就可以減少動態場景變化對運動分割的影響[7]。
本文利用AForge.NET[8]架構類庫,在Microsoft Visual Studio 2010中分別實驗了幀間差分法與背景差分法,并實現運動目標的檢測。實驗結果表明,利用幀間差分法可以快速實現運動目標的檢測,但是對于運動速度較慢的目標檢測效果不是特別理想。為此,對于緩慢變化的運動目標引入背景差分法,利用類庫中MoveTowards類建立實時有效的背景模型,有效地解決目標低速運動識別率較低的問題,提高了目標檢測的準確率。
1 AForge.NET簡介
AForge.NET是一個專門為開發者和研究者設計的基于C#框架,包括計算機視覺與人工智能、圖像處理、神經網絡、遺傳算法、機器學習、模糊系統、機器人控制等領域[9]。AForge.NET是一個不斷完善和發展的計算機視覺和圖像處理庫,目前的最新版本是2.2.5。
這個框架由一系列的類庫組成,主要包括有:
AForge.Imaging:日常的圖像處理和過濾器;
AForge.Vision:計算機視覺應用類庫;
AForge.Neuro:神經網絡計算庫AForge.Genetic?進化算法編程庫;
AForge.MachineLearning:機器學習類庫;
AForge.Robotics:提供一些機器學習的工具類庫;
AForge.Video:一系列的視頻處理類庫;
AForge.Fuzzy:模糊推理系統類庫;
AForge.Controls:圖像,三維,圖表顯示控件。
2 檢測原理
幀差法及背景差分法主要原理就是圖像的差分技術。設在一個時間軸上相鄰時刻點[ti]采集到的圖像幀分別為[f(x,y,ti),][ti+1]采集到的幀為[f(x,y,ti+1),]則可以得出:
[f(x,y,ti)=bi(x,y)+m(x,y)+ni(x,y)] (1)
[f(x,y,ti+1)=bi+1(x,y)+m(x+Δx,y+Δy)+ni+1(x,y)] (2)
式(1),式(2)中[bi(x,y)]與[bi+1(x,y)]為[i]與[i+1]時刻的背景圖像幀;[m(x,y)]與[m(x+Δx,y+Δy)]分別為兩個時刻點的運動目標數據;[ni(x,y)]與[ni+1(x,y)]分別是[i]與[i+1]時刻的噪聲數據。
那么從式(1),式(2)中可以得出[ti+1]與[ti]時刻點的差圖像。
[di+1(x,y)=f(x,y,ti+1)-f(x,y,ti)=m(x+Δx,y+Δy)-m(x,y)+bi+1(x,y)-bi(x,y)+ni+1(x,y)-ni(x,y)] (3)
式中:[[m(x+Δx,y+Δy)-m(x,y)]]為運動目標引起的圖像變化數據;[[bi+1(x,y)-bi(x,y)]]為當前幀與背景圖像的差值圖像;[[ni+1(x,y)-ni(x,y)]]為視頻的殘留噪聲。對于噪聲的處理,在實際圖像處理過程中采用腐蝕技術,通過確定有效的檢測閾值進行判斷,當差圖像大于該閾值時,就可以認為有運動事件發生。
[di+1(x,y)=1,f(x,y,ti+1)-f(x,y,ti)>Tg0,其他] (4)
式中:[Tg]為檢測閾值;[di+1(x,y)]用來確定[ti+1]時刻與[ti]時刻點圖像灰度是否有差異。如果差值圖像大于設定的閾值,說明當前幀檢測到運動目標的存在,進而可以開展后續工作,如遠程報警及其他相關工作。
3 具體實現方法
本實驗以Microsoft Visual Studio 2010的AForge.NET庫為基礎實現了運動目標的檢測,主要用到了AForge.NET的AForge.Vision.Motion庫。該庫包含了基本的運動檢測和處理算法類。本文在算法方面通過對這幾個類進行實例化并調用其中的算法函數,就可以建立實時更新的背景模型機制實現背景的建模及前景運動目標的分割,進而實現運動目標的檢測。
幀間差分法是一種最簡單的運動檢測方法,其特點是兩用前后兩個時間點的相鄰幀做差分,能快速對運動物體實現檢測。因為攝像頭會產生一定的噪聲,為了提高檢測的精度,對于前后兩幀的差值需要進行腐蝕[10]濾波處理,具體實現流程如圖1所示。
幀間差分法相關代碼如下:
//初始化一個差幀比較類
Difference differenceFilter = new Difference();
//設置閾值
IFilter thresholdFilter = new Threshold(15);
// 把前一幀圖像復制給差幀比較類
differenceFilter.OverlayImage = backgroundFrame;
//當前幀數據比較
Bitmap tmp1=differenceFilter.Apply(currentFrame);
//計算出兩幀的差別數據
Bitmap tmp2=thresholdFilter.Apply(tmp1);
//實例化腐蝕濾波器
IFilter erosionFilter = new Erosion();
//對兩幀數據差值進行數據濾波
Bitmap tmp3 = erosionFilter.Apply(tmp2);
上面幾行代碼可以計算出當前幀與上一幀這兩幀數據相差的像素數據,通過設定特定的閾值,就可以實現對運動目標的報警功能。在本文所做的實驗中,為了形象展示當前幀與上一幀數據的差值數據,把連續兩幀數據差值用過紅色高亮數據進行顯示。實驗結果表明,通過差幀法可以快速實現運動目標的檢測,由于幀差檢測法存在閾值難以確定的問題,特別是對于低速運動的運動目標,如果設定較低的閾值則存在誤觸發虛報的問題,而對于設定的高閾值,因為具有較低的檢測靈敏度,則存在漏警的問題,實驗結果如圖2所示。
為此,本文引入了背景差分法技術,相對幀差檢測算法,該算法使用AForge.NET的MoveTowards類實現實時背景的建模,再通過當前圖像幀與建模形成的背景幀數據進行差分運算,實現運動目標的檢測。該算法可以解決幀差檢測法閾值難以確定的問題,可以實現低速運動目標精確的定位與檢測。
背景差分法與幀間差分法的區別只是有了一個背景更新的過程,本文新背景的建立是通過AForge.NET視頻庫中類實現,該類背景提取算法原理是當前幀與前一個背景幀求加權平均得出當前背景幀數據。背景差分法的具體算法流程如圖3所示。
背景差分法相關實現代碼如下:
// 初始化背景類
MoveTowards moveTowardsFilter = new MoveTowards();
// 把當前幀復制給該類
moveTowardsFilter.OverlayImage = currentFrame;
// 通過前一幀與當前幀建立新的背景
Bitmap tmp = moveTowardsFilter.Apply(backgroundFrame);
// 把原先老的背景去除掉
backgroundFrame.Dispose();
//把當前計算出來的背景幀保存下來,為下一背景幀計算做準備
backgroundFrame = tmp;
背景差分法運動檢測算法的相關實驗結果如圖4所示。
從圖4可以看出,背景差分法具有更好的目標輪廓,通過當前幀與背景幀比較的運動檢測算法,可以很好地解決運動目標低速運行的問題,可以較為精確地實現與運動目標的檢測。所有背景差分法與幀差法相比,具有更高的檢測精度,非常適合工程中的應用。
4 結 語
本文利用AForge.NET類庫,分別采用幀差法及背景差分法對運動目標進行實時檢測。實驗結果證明,利用AForge.NET可以實現運動目標的檢測功能,并且具有很強的實時性。幀差法可以快速地檢測運動目標,但是由于其特性決定了其對于低速運動目標的檢測較背景差分法檢測靈敏度要低。本文只針對運動目標進行簡單的檢測,對于更進一步的問題將在后續工作中繼續研究。
參考文獻
[1] 陳銀,任侃,顧國華,等.基于改進的單高斯背景模型運動目標檢測算法[J].中國激光,2014(11):245?253.
[2] 紀青華,禹素萍.基于Surendra背景減除法和四幀差分法的目標檢測算法[J].計算機應用與軟件,2014(12):242?244.
[3] 邱斌,干紅華,張亶.基于時空信息的運動目標分割算法[J].激光雜志,2014(12):40?44.
[4] 柴池.基于背景差分和三幀差分的運動目標檢測[J].網絡安全技術與應用,2014(11):75?76.
[5] 黃素茵.基于視頻監控運動目標檢測算法研究[D].廣州:華南理工大學,2013.
[6] 余啟明.基于背景減法和幀差法的運動目標檢測算法研究[D]. 贛州:江西理工大學,2013.
[7] 嚴曉明.一種基于改進幀差法的運動目標檢測[J].莆田學院學報,2011(5):69?72.
[8] KIRILLOV A. AForge.NET framework [EB/OL]. (2010?03?02) [2010?12?20]. http://www. aforgenet. com.
[9] SURHONE L M, TENNOE M T, HENSSONOW S F. AForge.NET [M]. Paris: Betascript Publishing, 2010.
[10] 陳立平,曹麗萍,黃增喜,等.基于腐蝕?膨脹比的視頻場景運動狀態魯棒檢測[J].四川大學學報:工程科學版,2011,43(4):95?100.