邵剛
【摘要】運(yùn)動物體自動識別是視覺識別中的重要研究內(nèi)容之一。本文通過介紹DirectShow的視頻圖像處理技術(shù),闡述了DirectShow系統(tǒng)架構(gòu),構(gòu)造了一種目標(biāo)識別運(yùn)動物體系統(tǒng)模型。通過采用過濾技術(shù)實(shí)現(xiàn)復(fù)雜環(huán)境準(zhǔn)確自動物體識別功能,結(jié)合實(shí)驗(yàn)論證了基于DirectShow的目標(biāo)識別物體系統(tǒng)的可行性。最后探討了下一步的研究方向。
【關(guān)鍵詞】視頻圖像處理;DirectShow;目標(biāo)識別;過濾技術(shù)
引言
在社會信息化日益發(fā)展的今天,信息技術(shù)、網(wǎng)絡(luò)技術(shù)、通信技術(shù)以及多媒體技術(shù)已經(jīng)滲透到人類生活的各個(gè)領(lǐng)域中,視頻監(jiān)控以其直觀、方便和內(nèi)容豐富等特點(diǎn),日益受到人們的青睞。視頻監(jiān)控是多媒體、計(jì)算機(jī)網(wǎng)絡(luò)、工業(yè)控制和人工智能等多種技術(shù)的綜合運(yùn)用,目前正從傳統(tǒng)的圖像采集朝著音視頻的數(shù)字化、系統(tǒng)的網(wǎng)絡(luò)化和管理的智能化方向發(fā)展。
人體檢測和跟蹤是智能視覺監(jiān)控中的重要研究內(nèi)容之一,也是近年來計(jì)算機(jī)視覺領(lǐng)域中備受關(guān)注的前沿方向。對圖像序列中的運(yùn)動人體快速而準(zhǔn)確的檢測和跟蹤是一項(xiàng)十分重要且極具挑戰(zhàn)性的工作,同時(shí)準(zhǔn)確的檢測和跟蹤也是對行為進(jìn)行有效理解的基礎(chǔ)除了視覺監(jiān)控之外,人體檢測和跟蹤在高級人機(jī)交互動畫制作等方面也有著廣泛的應(yīng)用。
基于智能空間的機(jī)器視覺是計(jì)算機(jī)視覺領(lǐng)域一個(gè)新興的研究方向,它與傳統(tǒng)意義上的系統(tǒng)的區(qū)別在于其智能性。簡單而言,不僅用攝像機(jī)代替人眼,而且用計(jì)算機(jī)替代人協(xié)助人,來完成監(jiān)視或控制任務(wù),從而減輕人的負(fù)擔(dān)。本論文工作的主要任務(wù)就是基于DirectShow技術(shù)的智能識別系統(tǒng)對攝像機(jī)拍錄的圖像序列進(jìn)行自動分析來對被場景中人物的變化進(jìn)行定位、跟蹤和識別,并結(jié)合人體朝向等分析的基礎(chǔ)上判斷有關(guān)目標(biāo)的行為。
1.DirectShow系統(tǒng)原理
DirectShow是一套高效的多媒體開發(fā)系統(tǒng),與DirectX開發(fā)包一起發(fā)布。它是建立在組建對象模型(COM)基礎(chǔ)上的,由許多模塊化的組件組成。DirectShow將應(yīng)用程序、復(fù)雜的數(shù)據(jù)傳輸、硬件設(shè)備的差異以及同步等問題隔離開,多媒體軟件開發(fā)者只需要按照統(tǒng)一的COM接口來編寫應(yīng)用程序,從而簡化了在Windows平臺上數(shù)字媒體應(yīng)用程序的開發(fā)任務(wù),DirectShow系統(tǒng)框架應(yīng)用程序與DirectShow系統(tǒng)以及DirectShow所支持的軟件、硬件之間的關(guān)系如圖1所示。
圖1 DirectShow系統(tǒng)架構(gòu)
DirectShow主要由Filter Graph構(gòu)成,F(xiàn)ilter Graph中包含了各種Filter,這些Filter在Filter Graph Manager的統(tǒng)一控制下,按一定順序連接在一起,從而使數(shù)據(jù)在由Filte組成的鏈表中流動,圖1中的箭頭表示Filter鏈表中的數(shù)據(jù)流的方向。在DirectShow系統(tǒng)框架外,是與用戶直接交互的應(yīng)用程序。應(yīng)用程序要根據(jù)實(shí)際的功能需求引入相應(yīng)的Filter, 建立Filter Graph, 然后通過Filter GraphManager來控制系統(tǒng)的數(shù)據(jù)處理過程。DirectShow通過事件通知機(jī)制,實(shí)現(xiàn)應(yīng)用程序與Filter Graph Manager之間的交互控制。Filter Graph運(yùn)行的時(shí)候接收到各種事件,通過消息的方式發(fā)送到用戶應(yīng)用程序,用戶應(yīng)用程序則根據(jù)事件類型做出相應(yīng)的處理。
2.基于DirectShow目標(biāo)識別系統(tǒng)
2.1 目標(biāo)是識別系統(tǒng)總體框架
采集圖像端創(chuàng)建一個(gè)Source Filter讀取內(nèi)存緩沖區(qū)數(shù)據(jù),并加入到Filter Graph Manager,F(xiàn)ilter Graph Manager負(fù)責(zé)視頻信息采集,同時(shí)通過數(shù)據(jù)發(fā)送線程將從數(shù)據(jù)流發(fā)送。圖像處理端接受采集端傳送的視頻信息,通過Filter Graph Manager創(chuàng)建一個(gè)filter graph來對圖像幀進(jìn)行控制,見圖2。
圖2 自動識別系統(tǒng)總體架構(gòu)
2.2 圖像過濾
圖像采集和后端圖像處理兩個(gè)部分組成(如圖2)所示。前端圖像采集部分包括:高清攝像機(jī)、傳輸線纜、后端圖像處理部分、數(shù)據(jù)管理和圖像顯示。采用DirectShow提供的輔助組件Capture Graph Builder來創(chuàng)建Filter Graph,流程如圖3所示。
圖3 Filter Graph Manager創(chuàng)建過程
在Filter Graph Manager創(chuàng)建完成后,調(diào)用該組件的QueryInterfaces接口,獲取并存儲IMediaControl、IMediaEventEx、IBasicVideo、IBasicAudio、IVideoWindow等接口對象。在多媒體軟件中,利用這些接口對象可以開發(fā)出如圖像預(yù)覽、圖片快照、音視頻播放控制、屏幕控制等具體應(yīng)用。
用Filter鏈路建立調(diào)用Capture Graph Builder組件的RenderStream接口對PIN_CATEGORY_PREVIEW類型的Pin完成后續(xù)連接,代碼如下:
ICaptureGraphBuilder *pBuild;
//第二步獲取的對象
Capture Graph BuilderIBaseFilter *pCap;
//第三步獲取的對象
Videocapture filterhr=pBuild->RenderStream
(&PIN_CATEGORY_PREVIEW,&MEDIATYPE_Video,
pCap,NULL,NULL);
視頻顯示部分調(diào)用IVideoWindow對象進(jìn)行指定窗口的顯示,調(diào)用IMediaControl對象的Run方法控制Filter Graph開始運(yùn)行, 代碼如下:
RECT winRect;
//應(yīng)用程序傳入的窗口對象
IVideoWindow *pIVideoWin;
//第三步獲取的
IVideoWindow 對象
IMediaControl *pIMediaCtrl;
//第三步獲取的
IMediaControl對象
pIVideoWind->put_Left(0);
pIVideoWind->put_Top(0);
pIVideoWind->put_Width(winRect.right
-winRect.left);
pIVideoWind->put_Height(winRect.bottom
-winRect.top);
pIVideoWind->put_WindowStyle(WS_CHILD|WS
_CLIPCHILDREN|WS_CLIPSIBLINGS);
pIMediaCtrl->Run();
目標(biāo)識別系統(tǒng)將上述開發(fā)過程的DirectShow部分封裝為一個(gè)獨(dú)立的類,包括Filter Graph Manager的創(chuàng)建、系統(tǒng)設(shè)備的枚舉以及對設(shè)備各種控制接口的操作等,上層應(yīng)用程序只需實(shí)例化該類的對象,即可調(diào)用該類提供的公共接口。
2.3 圖像目標(biāo)識別處理
DirectShow采集進(jìn)來的圖像是BMP格式的。圖像處理的大致流程是:一是灰度化;二是二值化;三是標(biāo)記;四是計(jì)算目標(biāo)區(qū)域位置;五是判決當(dāng)前目標(biāo)是否被命中。本系統(tǒng)的圖像處理采用基于DirectShow系統(tǒng)架構(gòu)的圖像處理流程。圖象處理主要實(shí)現(xiàn)步驟如下:
(1)初始化COM。
(2)創(chuàng)建Capture Graph Builder組件 , 獲取 CaptureGraph接口。
(3)在Filter Graph加入視頻源過濾器。
(4)在Filter Graph加入AVI Decompressor Filter。
(5)在Filter Graph加入Sample Grabber Filter并設(shè)置媒體類型、緩沖模式。
(6)連接各Filter pBuilder->RenderStre
am(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Video,m_pFilter,pAviDecompressorF,pGrabberF);
pBuilder->RenderStream(NULL,&MEDIATY
PE_Video,pGrabberF,NULL,NULL);
pBuilder->Release();
(7)定義一個(gè)類 CSampleGrabberCB: public IsampleGrabberCB在該類中重載 BufferCB方法。在BufferCB中可以加入用戶具體的圖像處理函數(shù)。在類中可以定義一些公用屬性, 用于傳遞相關(guān)參數(shù)。
(8)設(shè)置Sample Grabber回調(diào)模式CSample-
GrabberCB CB;//向類CsampleGrabberCB傳遞圖像類型信息。
CB.Width = vih- >bmiHeader.biWidth;
CB.Height = vih- >bmiHeader.biHeight;
FreeMediaType(mt);
pGrabber- >SetBufferSamples(true);
pGrabber- >SetOneShot(false);
pGrabber- >SetCallback(&CB,1);
(9)用接口對Filter Graph進(jìn)行控制。
3.實(shí)驗(yàn)結(jié)果與分析
本實(shí)驗(yàn)使用采集人體運(yùn)動視頻來驗(yàn)證系統(tǒng)的有效性,視頻1是一段正對面向攝像頭行進(jìn)的運(yùn)動人體序列。視頻采集處理的圖像如下圖4所示。從圖上可以清晰的看出人體被標(biāo)黑,并且可以準(zhǔn)確的跟蹤人體運(yùn)動,達(dá)到預(yù)期的目標(biāo)。
圖4 正對面向鏡頭行進(jìn)的運(yùn)動人體識別圖
為了進(jìn)一步測試自動識別系統(tǒng)對圖像的處理識別能力,下圖5所示為垂直于鏡頭的運(yùn)動人體序列的情況,自動識別系統(tǒng)依然可以正確識別人體。
實(shí)驗(yàn)表明采用基于DirectShow的自動人體識別系統(tǒng)可以在不同的角度對運(yùn)動的物體進(jìn)行識別捕獲,具有較好的識別能力和推廣使用價(jià)值。
4.結(jié)束語
本文介紹了基于DirectShow的自動識別運(yùn)動系統(tǒng),通過分析DirectShow的視頻圖像處理技術(shù),闡述了DirectShow系統(tǒng)架構(gòu),構(gòu)造了一種目標(biāo)識別物體物體系統(tǒng)。采用過濾技術(shù)實(shí)現(xiàn)復(fù)雜環(huán)境準(zhǔn)確人體識別功能,結(jié)合實(shí)驗(yàn)論證了基于DirectShow的目標(biāo)識別運(yùn)動物體系統(tǒng)的可行性。下一步我們將對圖像處理過濾部分進(jìn)行優(yōu)化設(shè)計(jì),提高過濾效率。
參考文獻(xiàn)
[1]Kalman R E.A new approach to linear filtering and prediction problems[J].Journal of Basic Engineering,1960,82D:34-45.
[2](美)Simon Haykin,鄭寶玉譯.自適應(yīng)濾波器原理[M].北京:電子工業(yè)出版社,2008.
[3]DirectX 9.0 SDK Document[M].US:Microsoft Corporation,2002.