,,
(福建工程學(xué)院 信息科學(xué)與工程學(xué)院,福建 福州,350118)
隨著視頻監(jiān)控技術(shù)的發(fā)展,從最初需要人力監(jiān)控完成到現(xiàn)在可使用智能化監(jiān)控系統(tǒng)進(jìn)行自動(dòng)監(jiān)測(cè)。智能視頻監(jiān)控的優(yōu)點(diǎn)在于它幾乎不需要人為干預(yù)的情況下即可通過(guò)分析攝像頭采集的圖像,對(duì)靜態(tài)背景下動(dòng)態(tài)物體進(jìn)行識(shí)別,并能夠處理異常發(fā)生的情況[1]。視頻監(jiān)控系統(tǒng)可應(yīng)用于普通場(chǎng)合上的倉(cāng)庫(kù)管理中。
對(duì)于圖像序列或者視頻流,目前移動(dòng)物體檢測(cè)算法主要有利用幀間關(guān)系進(jìn)行目標(biāo)檢測(cè)和利用單幀進(jìn)行統(tǒng)計(jì)分析進(jìn)行目標(biāo)分類的兩大類[2]。傳統(tǒng)的視頻監(jiān)控系統(tǒng)中,對(duì)于監(jiān)測(cè)動(dòng)態(tài)物體的主要算法有:幀差法、光流法、平均背景法、背景建模等;固定背景下的方法常見(jiàn)的有相減法和建模法[3]。Horn 和 Schunck[4]在 1981 年率先提出物體運(yùn)動(dòng)光流的計(jì)算方法,將物體的二維運(yùn)動(dòng)速度和灰度結(jié)合,通過(guò)光流的變化來(lái)檢測(cè)運(yùn)動(dòng)物體的運(yùn)動(dòng)速率,但其擁有明顯的缺點(diǎn)就是光流法必須假設(shè)檢測(cè)物體的亮度條件不變[2,4-6], 在倉(cāng)庫(kù)管理等自動(dòng)監(jiān)控場(chǎng)合中,很難做到此點(diǎn),因此僅利用光流法將無(wú)法進(jìn)行實(shí)時(shí)運(yùn)算。而背景建模法能夠很好的避免以上缺點(diǎn),其可應(yīng)用在無(wú)需提前截取背景幀以及背景光照條件變化的場(chǎng)合,其主要有單高斯模型建模等[7]。硬件方面,普通的動(dòng)態(tài)監(jiān)控系統(tǒng)大都直接調(diào)用opencv視覺(jué)庫(kù)進(jìn)行運(yùn)算,但難以適用嵌入式監(jiān)控的環(huán)境[1,8-9],鑒于以上的問(wèn)題,在普通倉(cāng)庫(kù)管理應(yīng)用前提下,系統(tǒng)對(duì)比傳統(tǒng)動(dòng)態(tài)物體檢測(cè)中幀差法等算法,采用高斯混合算法提取前景目標(biāo),再利用前景二值化圖像計(jì)算其輪廓特征,隨后為避免因噪聲等因素產(chǎn)生的誤差,系統(tǒng)計(jì)算其輪廓面積和周長(zhǎng),排除周長(zhǎng)及面積較小的噪聲點(diǎn),對(duì)于超過(guò)一定閾值的動(dòng)態(tài)物體才進(jìn)行預(yù)警。
目前流行的幀差法,主要由背景差分法與幀間差分法兩種,幀間差分法是一種通過(guò)對(duì)視頻圖像序列中相鄰兩幀作差分運(yùn)算來(lái)獲得運(yùn)動(dòng)目標(biāo)輪廓的方法,而背景差分法通常選取視頻信號(hào)中的第一幀做為背景幀,而后在視頻序列中間隔固定的時(shí)間選取視頻幀與背景幀進(jìn)行差分比較,最后得到運(yùn)動(dòng)目標(biāo)的輪廓。
背景建模的主要思想是利用概率學(xué)原理,統(tǒng)計(jì)視頻幀中像素分布的不同從而辨別出前景和背景,其中高斯混合模型算法是對(duì)樣本的概率密度分布進(jìn)行估計(jì),而估計(jì)采用的模型是幾個(gè)高斯模型的加權(quán)和。每個(gè)模型就代表了一個(gè)類,然后利用樣本數(shù)據(jù)對(duì)模型進(jìn)行投影,從而得到在各個(gè)類上的概率。然后選取概率最大的類為判決結(jié)果?;旌细咚鼓P偷亩x為:
(1)
其中K為模型的個(gè)數(shù);πk為第k個(gè)高斯的權(quán)重;p(x|k)則為第k個(gè)高斯概率密度,若均值為uk,方差為σk。那么估計(jì)概率密度的值就是要求出πk,uk和σk各個(gè)變量。最后p(x)的表達(dá)式中,求和式的各項(xiàng)的結(jié)果就分別代表樣本x屬于各個(gè)類的概率。其中在做參數(shù)估計(jì)的時(shí)候,采用的是最大似然方法,使樣本點(diǎn)在估計(jì)的概率密度函數(shù)上的概率值最大。為避免浮點(diǎn)數(shù)下溢,通常將概率值取log,即將目標(biāo)改寫成:
(2)
也就是最大化對(duì)數(shù)似然函數(shù),完整形式為:
(3)
主要的步驟可以分為2步:其中第1步,假設(shè)已知各個(gè)高斯模型的參數(shù),然后估計(jì)每個(gè)高斯模型的權(quán)值;第2步,基于估計(jì)的權(quán)值,再次去確定高斯模型的參數(shù)。重復(fù)這2個(gè)步驟,直到波動(dòng)很小,近似達(dá)到極值。具體表達(dá)如下:
(1)第1步
假設(shè)高斯模型的參數(shù)和是已知的,對(duì)于第i個(gè)樣本xi來(lái)說(shuō),它由第k個(gè)model 生成的概率為:
(4)
(2)第2步
(5)
(6)
(7)
系統(tǒng)為適應(yīng)各種不同硬件的要求及提高視頻采集速率,整體采用分層結(jié)構(gòu)來(lái)實(shí)現(xiàn)。底層使用V4L2的驅(qū)動(dòng)編程接口,直接對(duì)攝像頭數(shù)據(jù)進(jìn)行采集,避免了opencv庫(kù)因不同硬件平臺(tái)攝像頭型號(hào)的不同而導(dǎo)致的視頻幀數(shù)據(jù)類型無(wú)法識(shí)別的問(wèn)題,從而提高了視頻幀采集的速率,并提高整體系統(tǒng)監(jiān)控的兼容性。
V4L2是在Linux的底層視頻驅(qū)動(dòng),系統(tǒng)將其封裝成video_init自定義類,用于實(shí)現(xiàn)視頻采集,其配合相關(guān)的驅(qū)動(dòng)程序以及攝像頭設(shè)備,可實(shí)現(xiàn)視頻采集。V4L2內(nèi)部主要是采用相關(guān)的回調(diào)函數(shù)來(lái)完成,具體流程如圖1。
圖1 V4L2采集視頻流程圖Fig.1 Flow chart of video collection through V4l2
利用V4L2編程將采集的視頻數(shù)據(jù)的內(nèi)容封裝進(jìn)自定義的video_init類中,通過(guò)成員函數(shù)分別實(shí)現(xiàn):打開(kāi)設(shè)備、設(shè)置參數(shù)、申請(qǐng)幀緩沖、開(kāi)始采集、用戶內(nèi)存映射、將幀緩沖放入隊(duì)列等過(guò)程。其中打開(kāi)設(shè)備文件,設(shè)備名以設(shè)備驅(qū)動(dòng)安裝后的設(shè)備名“/dev/video0”;查詢?cè)O(shè)備主要調(diào)用VIDIOC_QUERYCAP命令實(shí)現(xiàn),并根據(jù)開(kāi)發(fā)板硬件要求,設(shè)計(jì)將視頻采集參數(shù)設(shè)置為640*480、編碼格式設(shè)置為MJPEG ,以上的設(shè)置需調(diào)用VIDIOC_S_FMT命令通過(guò)ioctl進(jìn)行設(shè)置;設(shè)計(jì)采用VIDIOC_REQBUF命令申請(qǐng)4個(gè)幀緩存,并使用mmap函數(shù)將其映射到用戶內(nèi)存中;并通過(guò)VIDIOC_QUERY命令將申請(qǐng)到的幀緩沖放入采集輸出隊(duì)列;隨后可通過(guò)VIDIOC_STREAMON開(kāi)始視頻數(shù)據(jù)采集,采集到數(shù)據(jù)后可采用VIDIOC_DQBUF命令取出幀緩沖,再通過(guò)VIDIOC_QBUF將幀緩沖重新排入輸入隊(duì)列,完成步驟后按照需求停止設(shè)備采集及關(guān)閉設(shè)備。
系統(tǒng)采用opencv視覺(jué)庫(kù)聯(lián)合V4l2視頻接口分層編程方式,完成視頻數(shù)據(jù)的采集及分析。攝像頭底層數(shù)據(jù)的采集通過(guò)V4l2的驅(qū)動(dòng)編程實(shí)現(xiàn),并結(jié)合qt將其封裝成自定義的video_init類,采集視頻幀數(shù)據(jù),采集后的數(shù)據(jù)定義為3通道、8位無(wú)符號(hào)整型數(shù)據(jù),即CV_8CU3。采集完的視頻數(shù)據(jù)可采用opencv的視覺(jué)庫(kù)進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換后,調(diào)用相應(yīng)函數(shù)循環(huán)分離前景圖像,并通過(guò)腐蝕降噪后,顯示于界面上,同時(shí)更新背景,流程如圖2。
圖2 改進(jìn)后高斯算法處理流程Fig.2 Processing flow of the improved Gaussian algorithm
設(shè)計(jì)在實(shí)現(xiàn)過(guò)程中,將采集后CVmat格式的視頻幀需先轉(zhuǎn)換成mat格式,然后調(diào)用opencv庫(kù)中的backgroundmog2構(gòu)造函數(shù)分離背景及前景,并將前景信號(hào)進(jìn)行腐蝕、dliate、而后對(duì)前景圖片的二值化結(jié)果調(diào)用cvFindContours進(jìn)行輪廓描述,并使用cvArcArea以及cvArclength計(jì)算前景輪廓面積及周長(zhǎng)大小,對(duì)于面積及周長(zhǎng)超過(guò)閾值,進(jìn)行預(yù)測(cè)。
系統(tǒng)利用opencv2.4.9版本,使用qt4.7.0庫(kù)進(jìn)行界面程序的設(shè)計(jì),對(duì)比幀差法以及改進(jìn)后調(diào)用高斯混合模型提取背景的結(jié)果如下。
在白天正常光照情況下,見(jiàn)圖3、圖4。
圖3 正常視頻監(jiān)控界面Fig.3 Normal video monitoring interface
圖4 提取前景圖片對(duì)比結(jié)果Fig.4 Comparison results of extracted foreground pictures
圖3為視頻采集后播放的結(jié)果,圖4為提取前景的結(jié)論對(duì)比,左側(cè)是高斯背景提取后的結(jié)果,右側(cè)為幀差法提取背景的結(jié)果,從圖3、圖4可知,在日常光照的情況下,改進(jìn)后的高斯背景能夠更完整的提取前景目標(biāo)。
圖5為輪廓描述后的結(jié)果,左側(cè)為混合高斯模型法提取出的前景圖片,右側(cè)為描述出的前景目標(biāo)的輪廓,在描述輪廓的過(guò)程中,系統(tǒng)通過(guò)計(jì)算輪廓的周長(zhǎng)以及面積,將小面積和周長(zhǎng)的噪聲濾除,得出前景目標(biāo)的輪廓。
系統(tǒng)在黑夜或者光照條件弱的情況下,見(jiàn)圖6、圖7。
圖5 輪廓描述結(jié)果Fig.5 Contour description results
圖6為光照弱的情況下視頻幀采集后播放的結(jié)果,圖7為提取前景的運(yùn)算結(jié)果,其中左側(cè)為幀差法經(jīng)過(guò)二值化后的結(jié)果,右側(cè)圖片為采用混合高斯背景分離后提取的前景圖像,經(jīng)過(guò)對(duì)比可以得到在光照弱的情況下,混合高斯背景法能夠更好的提取前景圖像。
圖6 正常視頻監(jiān)控界面(光照弱)Fig.6 Normal video monitor interface (weak illumination)
圖7 提取前景結(jié)果對(duì)比(光照弱)Fig.7 Comparison results of extracted foreground pictures(weak illumination)
經(jīng)過(guò)高斯背景提取出的前景圖像經(jīng)過(guò)輪廓描述(見(jiàn)圖8),可得到完整的輪廓描述結(jié)果,同時(shí)將計(jì)算其面積和周長(zhǎng)并報(bào)警。
圖8 描述前景輪廓的結(jié)果Fig.8 Contour description results of foreground objects
基于倉(cāng)庫(kù)存儲(chǔ)應(yīng)用背景下設(shè)計(jì)的自動(dòng)監(jiān)控系統(tǒng),采用分層的軟件結(jié)構(gòu)完成,無(wú)論在光照條件好或者差的情況下,通過(guò)混合高斯背景模型截取的前景目標(biāo)都更為完整?;旌细咚鼓P碗m然能較好的提取前景目標(biāo),但開(kāi)始監(jiān)測(cè)時(shí)需要經(jīng)過(guò)10幀的計(jì)算時(shí)間,并在光照條件強(qiáng)的情況下會(huì)出現(xiàn)較多噪點(diǎn),因此系統(tǒng)在后續(xù)的輪廓提取過(guò)程中通過(guò)計(jì)算輪廓而將噪聲濾除。