樓亮亮++金彥亮
摘 要: 運(yùn)動(dòng)目標(biāo)的檢測(cè)是數(shù)字圖像處理和模式識(shí)別的基礎(chǔ),也是計(jì)算機(jī)視覺(jué)研究的一個(gè)重要領(lǐng)域。以C#為主要研究工具,對(duì)基于相鄰幀差法及背景差分法的視頻目標(biāo)檢測(cè)算法進(jìn)行了研究,主要對(duì)其原理和算法進(jìn)行研究。最后利用以AForge.NET架構(gòu)類庫(kù),利用圖像灰度的絕對(duì)值是否大于設(shè)置的閾值實(shí)現(xiàn)了對(duì)運(yùn)動(dòng)目標(biāo)進(jìn)行檢測(cè),實(shí)驗(yàn)結(jié)果表明,采用該算法可以對(duì)運(yùn)動(dòng)目標(biāo)進(jìn)行較為精確的檢測(cè)。
關(guān)鍵詞: 運(yùn)動(dòng)檢測(cè); AForge.NET; 幀差法; 背景差分法
中圖分類號(hào): TN911.73?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 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 引 言
由于微電子技術(shù)的發(fā)展與社會(huì)生活水平的提高及各種安防需求的增多,運(yùn)動(dòng)目標(biāo)檢測(cè)逐步成為當(dāng)前監(jiān)控系統(tǒng)研究領(lǐng)域的熱點(diǎn),更是計(jì)算機(jī)視覺(jué)領(lǐng)域中視頻跟蹤算法和識(shí)別技術(shù)的基礎(chǔ),該算法的檢測(cè)精度直接影響了后續(xù)的運(yùn)動(dòng)目標(biāo)跟蹤及識(shí)別效果。目前,運(yùn)動(dòng)目標(biāo)檢測(cè)領(lǐng)域比較常用的方法有:光流法、幀間差分法和背景差分法。
光流法是相對(duì)于觀察者的運(yùn)動(dòng)目標(biāo)造成的觀測(cè)目標(biāo)、表面或邊緣的運(yùn)動(dòng)[1]。但是該算法計(jì)算量比較大,并且存在抗干擾能力差,所以對(duì)于實(shí)時(shí)性要求較高的場(chǎng)合,該檢測(cè)算法在視頻運(yùn)動(dòng)檢測(cè)應(yīng)用中并不是特別的適用,目前在運(yùn)動(dòng)檢測(cè)中最常用的方法實(shí)際上是背景差分法[2]和幀間差分法[3]。
幀間差分法是一種通過(guò)對(duì)視頻圖像序列中相鄰兩幀作差分運(yùn)算來(lái)獲得運(yùn)動(dòng)目標(biāo)輪廓的方法,非常適用于存在多個(gè)運(yùn)動(dòng)目標(biāo)和攝像機(jī)移動(dòng)的情況[4]。由于該算法對(duì)光線及場(chǎng)景變化具有較強(qiáng)的抗干擾性,且無(wú)需獲得背景圖像,更新速度快,所以非常適用于實(shí)時(shí)性較強(qiáng)的應(yīng)用場(chǎng)合。但是該算法存在閾值難以確定的問(wèn)題,這個(gè)現(xiàn)象在低對(duì)比度灰度圖像序列中特別明顯,導(dǎo)致對(duì)目標(biāo)對(duì)象的完整區(qū)域提取不完整而產(chǎn)生空洞的現(xiàn)象。
背景差分法是采用圖像序列中的當(dāng)前幀和背景參考模型比較,來(lái)檢測(cè)運(yùn)動(dòng)目標(biāo)的一種方法,其檢測(cè)性能依賴于所使用的背景建模技術(shù)[5]。該算法可以實(shí)現(xiàn)緩慢的背景變化過(guò)程中對(duì)目標(biāo)進(jìn)行精確快速的分割,所以具有很強(qiáng)的適用性,然而對(duì)于突然的光照變化和背景擾動(dòng),對(duì)物體帶有影子的圖像分割出來(lái)的前景圖像可能帶有影子區(qū)域[6],為此可以通過(guò)建立實(shí)時(shí)更新的背景模型機(jī)制將前景區(qū)域分割出來(lái),就可以減少動(dòng)態(tài)場(chǎng)景變化對(duì)運(yùn)動(dòng)分割的影響[7]。
本文利用AForge.NET[8]架構(gòu)類庫(kù),在Microsoft Visual Studio 2010中分別實(shí)驗(yàn)了幀間差分法與背景差分法,并實(shí)現(xiàn)運(yùn)動(dòng)目標(biāo)的檢測(cè)。實(shí)驗(yàn)結(jié)果表明,利用幀間差分法可以快速實(shí)現(xiàn)運(yùn)動(dòng)目標(biāo)的檢測(cè),但是對(duì)于運(yùn)動(dòng)速度較慢的目標(biāo)檢測(cè)效果不是特別理想。為此,對(duì)于緩慢變化的運(yùn)動(dòng)目標(biāo)引入背景差分法,利用類庫(kù)中MoveTowards類建立實(shí)時(shí)有效的背景模型,有效地解決目標(biāo)低速運(yùn)動(dòng)識(shí)別率較低的問(wèn)題,提高了目標(biāo)檢測(cè)的準(zhǔn)確率。
1 AForge.NET簡(jiǎn)介
AForge.NET是一個(gè)專門為開(kāi)發(fā)者和研究者設(shè)計(jì)的基于C#框架,包括計(jì)算機(jī)視覺(jué)與人工智能、圖像處理、神經(jīng)網(wǎng)絡(luò)、遺傳算法、機(jī)器學(xué)習(xí)、模糊系統(tǒng)、機(jī)器人控制等領(lǐng)域[9]。AForge.NET是一個(gè)不斷完善和發(fā)展的計(jì)算機(jī)視覺(jué)和圖像處理庫(kù),目前的最新版本是2.2.5。
這個(gè)框架由一系列的類庫(kù)組成,主要包括有:
AForge.Imaging:日常的圖像處理和過(guò)濾器;
AForge.Vision:計(jì)算機(jī)視覺(jué)應(yīng)用類庫(kù);
AForge.Neuro:神經(jīng)網(wǎng)絡(luò)計(jì)算庫(kù)AForge.Genetic?進(jìn)化算法編程庫(kù);
AForge.MachineLearning:機(jī)器學(xué)習(xí)類庫(kù);
AForge.Robotics:提供一些機(jī)器學(xué)習(xí)的工具類庫(kù);
AForge.Video:一系列的視頻處理類庫(kù);
AForge.Fuzzy:模糊推理系統(tǒng)類庫(kù);
AForge.Controls:圖像,三維,圖表顯示控件。
2 檢測(cè)原理
幀差法及背景差分法主要原理就是圖像的差分技術(shù)。設(shè)在一個(gè)時(shí)間軸上相鄰時(shí)刻點(diǎn)[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]時(shí)刻的背景圖像幀;[m(x,y)]與[m(x+Δx,y+Δy)]分別為兩個(gè)時(shí)刻點(diǎn)的運(yùn)動(dòng)目標(biāo)數(shù)據(jù);[ni(x,y)]與[ni+1(x,y)]分別是[i]與[i+1]時(shí)刻的噪聲數(shù)據(jù)。
那么從式(1),式(2)中可以得出[ti+1]與[ti]時(shí)刻點(diǎn)的差圖像。
[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)]]為運(yùn)動(dòng)目標(biāo)引起的圖像變化數(shù)據(jù);[[bi+1(x,y)-bi(x,y)]]為當(dāng)前幀與背景圖像的差值圖像;[[ni+1(x,y)-ni(x,y)]]為視頻的殘留噪聲。對(duì)于噪聲的處理,在實(shí)際圖像處理過(guò)程中采用腐蝕技術(shù),通過(guò)確定有效的檢測(cè)閾值進(jìn)行判斷,當(dāng)差圖像大于該閾值時(shí),就可以認(rèn)為有運(yùn)動(dòng)事件發(fā)生。
[di+1(x,y)=1,f(x,y,ti+1)-f(x,y,ti)>Tg0,其他] (4)
式中:[Tg]為檢測(cè)閾值;[di+1(x,y)]用來(lái)確定[ti+1]時(shí)刻與[ti]時(shí)刻點(diǎn)圖像灰度是否有差異。如果差值圖像大于設(shè)定的閾值,說(shuō)明當(dāng)前幀檢測(cè)到運(yùn)動(dòng)目標(biāo)的存在,進(jìn)而可以開(kāi)展后續(xù)工作,如遠(yuǎn)程報(bào)警及其他相關(guān)工作。
3 具體實(shí)現(xiàn)方法
本實(shí)驗(yàn)以Microsoft Visual Studio 2010的AForge.NET庫(kù)為基礎(chǔ)實(shí)現(xiàn)了運(yùn)動(dòng)目標(biāo)的檢測(cè),主要用到了AForge.NET的AForge.Vision.Motion庫(kù)。該庫(kù)包含了基本的運(yùn)動(dòng)檢測(cè)和處理算法類。本文在算法方面通過(guò)對(duì)這幾個(gè)類進(jìn)行實(shí)例化并調(diào)用其中的算法函數(shù),就可以建立實(shí)時(shí)更新的背景模型機(jī)制實(shí)現(xiàn)背景的建模及前景運(yùn)動(dòng)目標(biāo)的分割,進(jìn)而實(shí)現(xiàn)運(yùn)動(dòng)目標(biāo)的檢測(cè)。
幀間差分法是一種最簡(jiǎn)單的運(yùn)動(dòng)檢測(cè)方法,其特點(diǎn)是兩用前后兩個(gè)時(shí)間點(diǎn)的相鄰幀做差分,能快速對(duì)運(yùn)動(dòng)物體實(shí)現(xiàn)檢測(cè)。因?yàn)閿z像頭會(huì)產(chǎn)生一定的噪聲,為了提高檢測(cè)的精度,對(duì)于前后兩幀的差值需要進(jìn)行腐蝕[10]濾波處理,具體實(shí)現(xiàn)流程如圖1所示。
幀間差分法相關(guān)代碼如下:
//初始化一個(gè)差幀比較類
Difference differenceFilter = new Difference();
//設(shè)置閾值
IFilter thresholdFilter = new Threshold(15);
// 把前一幀圖像復(fù)制給差幀比較類
differenceFilter.OverlayImage = backgroundFrame;
//當(dāng)前幀數(shù)據(jù)比較
Bitmap tmp1=differenceFilter.Apply(currentFrame);
//計(jì)算出兩幀的差別數(shù)據(jù)
Bitmap tmp2=thresholdFilter.Apply(tmp1);
//實(shí)例化腐蝕濾波器
IFilter erosionFilter = new Erosion();
//對(duì)兩幀數(shù)據(jù)差值進(jìn)行數(shù)據(jù)濾波
Bitmap tmp3 = erosionFilter.Apply(tmp2);
上面幾行代碼可以計(jì)算出當(dāng)前幀與上一幀這兩幀數(shù)據(jù)相差的像素?cái)?shù)據(jù),通過(guò)設(shè)定特定的閾值,就可以實(shí)現(xiàn)對(duì)運(yùn)動(dòng)目標(biāo)的報(bào)警功能。在本文所做的實(shí)驗(yàn)中,為了形象展示當(dāng)前幀與上一幀數(shù)據(jù)的差值數(shù)據(jù),把連續(xù)兩幀數(shù)據(jù)差值用過(guò)紅色高亮數(shù)據(jù)進(jìn)行顯示。實(shí)驗(yàn)結(jié)果表明,通過(guò)差幀法可以快速實(shí)現(xiàn)運(yùn)動(dòng)目標(biāo)的檢測(cè),由于幀差檢測(cè)法存在閾值難以確定的問(wèn)題,特別是對(duì)于低速運(yùn)動(dòng)的運(yùn)動(dòng)目標(biāo),如果設(shè)定較低的閾值則存在誤觸發(fā)虛報(bào)的問(wèn)題,而對(duì)于設(shè)定的高閾值,因?yàn)榫哂休^低的檢測(cè)靈敏度,則存在漏警的問(wèn)題,實(shí)驗(yàn)結(jié)果如圖2所示。
為此,本文引入了背景差分法技術(shù),相對(duì)幀差檢測(cè)算法,該算法使用AForge.NET的MoveTowards類實(shí)現(xiàn)實(shí)時(shí)背景的建模,再通過(guò)當(dāng)前圖像幀與建模形成的背景幀數(shù)據(jù)進(jìn)行差分運(yùn)算,實(shí)現(xiàn)運(yùn)動(dòng)目標(biāo)的檢測(cè)。該算法可以解決幀差檢測(cè)法閾值難以確定的問(wèn)題,可以實(shí)現(xiàn)低速運(yùn)動(dòng)目標(biāo)精確的定位與檢測(cè)。
背景差分法與幀間差分法的區(qū)別只是有了一個(gè)背景更新的過(guò)程,本文新背景的建立是通過(guò)AForge.NET視頻庫(kù)中類實(shí)現(xiàn),該類背景提取算法原理是當(dāng)前幀與前一個(gè)背景幀求加權(quán)平均得出當(dāng)前背景幀數(shù)據(jù)。背景差分法的具體算法流程如圖3所示。
背景差分法相關(guān)實(shí)現(xiàn)代碼如下:
// 初始化背景類
MoveTowards moveTowardsFilter = new MoveTowards();
// 把當(dāng)前幀復(fù)制給該類
moveTowardsFilter.OverlayImage = currentFrame;
// 通過(guò)前一幀與當(dāng)前幀建立新的背景
Bitmap tmp = moveTowardsFilter.Apply(backgroundFrame);
// 把原先老的背景去除掉
backgroundFrame.Dispose();
//把當(dāng)前計(jì)算出來(lái)的背景幀保存下來(lái),為下一背景幀計(jì)算做準(zhǔn)備
backgroundFrame = tmp;
背景差分法運(yùn)動(dòng)檢測(cè)算法的相關(guān)實(shí)驗(yàn)結(jié)果如圖4所示。
從圖4可以看出,背景差分法具有更好的目標(biāo)輪廓,通過(guò)當(dāng)前幀與背景幀比較的運(yùn)動(dòng)檢測(cè)算法,可以很好地解決運(yùn)動(dòng)目標(biāo)低速運(yùn)行的問(wèn)題,可以較為精確地實(shí)現(xiàn)與運(yùn)動(dòng)目標(biāo)的檢測(cè)。所有背景差分法與幀差法相比,具有更高的檢測(cè)精度,非常適合工程中的應(yīng)用。
4 結(jié) 語(yǔ)
本文利用AForge.NET類庫(kù),分別采用幀差法及背景差分法對(duì)運(yùn)動(dòng)目標(biāo)進(jìn)行實(shí)時(shí)檢測(cè)。實(shí)驗(yàn)結(jié)果證明,利用AForge.NET可以實(shí)現(xiàn)運(yùn)動(dòng)目標(biāo)的檢測(cè)功能,并且具有很強(qiáng)的實(shí)時(shí)性。幀差法可以快速地檢測(cè)運(yùn)動(dòng)目標(biāo),但是由于其特性決定了其對(duì)于低速運(yùn)動(dòng)目標(biāo)的檢測(cè)較背景差分法檢測(cè)靈敏度要低。本文只針對(duì)運(yùn)動(dòng)目標(biāo)進(jìn)行簡(jiǎn)單的檢測(cè),對(duì)于更進(jìn)一步的問(wèn)題將在后續(xù)工作中繼續(xù)研究。
參考文獻(xiàn)
[1] 陳銀,任侃,顧國(guó)華,等.基于改進(jìn)的單高斯背景模型運(yùn)動(dòng)目標(biāo)檢測(cè)算法[J].中國(guó)激光,2014(11):245?253.
[2] 紀(jì)青華,禹素萍.基于Surendra背景減除法和四幀差分法的目標(biāo)檢測(cè)算法[J].計(jì)算機(jī)應(yīng)用與軟件,2014(12):242?244.
[3] 邱斌,干紅華,張亶.基于時(shí)空信息的運(yùn)動(dòng)目標(biāo)分割算法[J].激光雜志,2014(12):40?44.
[4] 柴池.基于背景差分和三幀差分的運(yùn)動(dòng)目標(biāo)檢測(cè)[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2014(11):75?76.
[5] 黃素茵.基于視頻監(jiān)控運(yùn)動(dòng)目標(biāo)檢測(cè)算法研究[D].廣州:華南理工大學(xué),2013.
[6] 余啟明.基于背景減法和幀差法的運(yùn)動(dòng)目標(biāo)檢測(cè)算法研究[D]. 贛州:江西理工大學(xué),2013.
[7] 嚴(yán)曉明.一種基于改進(jìn)幀差法的運(yùn)動(dòng)目標(biāo)檢測(cè)[J].莆田學(xué)院學(xué)報(bào),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] 陳立平,曹麗萍,黃增喜,等.基于腐蝕?膨脹比的視頻場(chǎng)景運(yùn)動(dòng)狀態(tài)魯棒檢測(cè)[J].四川大學(xué)學(xué)報(bào):工程科學(xué)版,2011,43(4):95?100.