賈振堂, 王計(jì)元
(上海電力學(xué)院 電子與信息工程學(xué)院, 上海 200090)
安防是社會(huì)生活中的一個(gè)重要話題,目前市場(chǎng)上可以買到各種各樣的防盜報(bào)警系統(tǒng),包括紅外線感應(yīng)、電磁感應(yīng)、視頻監(jiān)控系統(tǒng)等。視頻監(jiān)控系統(tǒng)具有安裝簡(jiǎn)便、監(jiān)控范圍大等諸多優(yōu)點(diǎn),因此得到了廣泛的應(yīng)用。
在視頻監(jiān)控的視野范圍內(nèi),并不是所有的區(qū)域都需要設(shè)防,畫面中的有些部分屬于公共區(qū)域,如果不加區(qū)分,則會(huì)頻繁發(fā)生誤報(bào)警。因此,現(xiàn)有的視頻監(jiān)控中,普遍支持敏感區(qū)域的劃分(可以讓用戶在監(jiān)控畫面中指定一定的范圍,作為敏感區(qū)域)。只有在敏感區(qū)域中發(fā)現(xiàn)運(yùn)動(dòng)目標(biāo)時(shí)才予以報(bào)警,可以大大提高系統(tǒng)的可用性和可靠性。然而,目前的視頻監(jiān)控系統(tǒng)只能對(duì)畫面進(jìn)行“平面分割”,不能進(jìn)行三維空間的判別。例如商鋪里面的攝像頭,對(duì)準(zhǔn)門口進(jìn)行視頻監(jiān)控,如果是玻璃門,則可能檢測(cè)到玻璃門外馬路上的行人,從而發(fā)生誤報(bào)。安裝在陽(yáng)臺(tái)上的攝像頭,也可能將外邊大街上的行人和車輛當(dāng)做可疑目標(biāo)而誤報(bào)警。
盡管目前的視頻監(jiān)控技術(shù)增加了很多智能化的處理[1],并采用了多種視頻傳輸?shù)募夹g(shù)手段[2],但是目前鮮有在三維空間上實(shí)施監(jiān)控的報(bào)道。本文采用雙目攝像機(jī)來(lái)構(gòu)建三維立體視頻監(jiān)控系統(tǒng),并設(shè)計(jì)了快速視差計(jì)算方法,從而可在三維空間中劃出敏感區(qū)域,實(shí)時(shí)檢測(cè)到目標(biāo)與警戒面的距離,實(shí)現(xiàn)立體空間的監(jiān)控和入侵報(bào)警。
(1)
敏感區(qū)域可以是一個(gè)較大的連通區(qū)域,也可以是由若干互不連通的子區(qū)域組成,即
R=R1∪R2∪R3∪…∪RN
(2)
其中,R1,R2,R3,…,RN為N個(gè)獨(dú)立的子區(qū)域。
圖1為一個(gè)應(yīng)用的實(shí)例,院墻內(nèi)部為敏感區(qū)域,即這里只有一個(gè)敏感區(qū)域(N=1),而院墻外為非敏感區(qū)域。
圖1 視頻監(jiān)控敏感區(qū)域的劃分
然而,以上這些區(qū)域都是二維的,即把監(jiān)控畫面看作一個(gè)平面,而沒(méi)有考慮不同像素的深度層次。這在有些場(chǎng)合下是不適用的,例如圖2的監(jiān)控畫面。圖2中,攝像頭對(duì)陽(yáng)臺(tái)實(shí)施入侵監(jiān)控,以防竊賊從陽(yáng)臺(tái)爬入。顯然,圖2中圈出的在地面上施工的人員和車輛會(huì)被監(jiān)控系統(tǒng)檢測(cè)為運(yùn)動(dòng)目標(biāo)。目前的二維監(jiān)控系統(tǒng)無(wú)法區(qū)分畫面當(dāng)中的運(yùn)動(dòng)目標(biāo)是在陽(yáng)臺(tái)上還是遠(yuǎn)離陽(yáng)臺(tái)。其特點(diǎn)是敏感區(qū)域和非監(jiān)控對(duì)象在不同深度層次上疊加在一起,極易引起誤報(bào)警。
圖2 敏感區(qū)域中包含非敏感對(duì)象
為此,本文采用雙目立體攝像機(jī)構(gòu)建了三維空間的視頻監(jiān)控系統(tǒng)。立體攝像機(jī)能夠計(jì)算物體的距離,并在此基礎(chǔ)上建立面向三維空間的入侵檢測(cè)系統(tǒng)。
采用固定的平行攝像機(jī),焦距固定、攝像機(jī)間距也固定。由于入侵監(jiān)測(cè)并不需要真實(shí)的世界坐標(biāo),因此在攝像機(jī)坐標(biāo)系內(nèi)完成報(bào)警計(jì)算,或者說(shuō)就是將攝像機(jī)坐標(biāo)(Xc,Yc,Zc)作為世界坐標(biāo)(X,Y,Z)。這樣可以在設(shè)備安裝前,預(yù)先對(duì)立體攝像機(jī)系統(tǒng)進(jìn)行內(nèi)部參數(shù)標(biāo)定并予以存儲(chǔ)。調(diào)用OpenCV實(shí)現(xiàn)對(duì)攝像機(jī)的立體標(biāo)定。
在圖像得到矯正的情況下,立體標(biāo)定后的兩個(gè)攝像機(jī)等效于一套理想的平行攝像系統(tǒng)[3]。根據(jù)平行立體攝像系統(tǒng)的原理,可將圖像坐標(biāo)點(diǎn)p(x,y)反投影到三維空間坐標(biāo)點(diǎn)P(X,Y,Z),計(jì)算公式為
(3)
式中:d——視差,單位為像素;
B——兩攝像機(jī)之間的物理距離;
F——立體矯正后的理想焦距,單位為像素。
其中,圖像坐標(biāo)均以校正后的圖像中心為原點(diǎn)。
由式(3)可見,在攝像機(jī)參數(shù)F和B確定的情況下,像素的視差d和距離Z成單調(diào)的反比例關(guān)系。因此,在進(jìn)行入侵判別時(shí),并不需要計(jì)算目標(biāo)的真實(shí)距離,而只需要做視差比較即可,即設(shè)置一個(gè)特定的視差平面作為警戒面,并檢測(cè)目標(biāo)視差是大于警戒面視差還是小于警戒面視差。
當(dāng)監(jiān)控系統(tǒng)采用立體視覺(jué)技術(shù)時(shí),敏感區(qū)域?qū)⒉辉傧薅ㄓ诙S坐標(biāo)平面(x,y) 上,而可以擴(kuò)展到三維坐標(biāo)空間(X,Y,Z)中。圖3(a)為基于攝像機(jī)坐標(biāo)系的立體敏感區(qū)域模型,圖3(b)為對(duì)應(yīng)的真實(shí)三維空間區(qū)域邊界(警戒面),即敏感區(qū)域被設(shè)定為陽(yáng)臺(tái)護(hù)欄所在的警戒面以內(nèi),之外的則不作為敏感區(qū)域。
圖3 三維敏感區(qū)域
三維敏感區(qū)域Ω是由若干獨(dú)立的三維空間子區(qū)域組成的,理論上可以是若干個(gè)任意形狀的三維子空間所組成的并集。
Ω=Ω1∪Ω2∪Ω3∪…∪ΩN
(4)
其中,Ω1,Ω2,Ω3,…,ΩN為N個(gè)獨(dú)立的子空間。為了方便,將每個(gè)子空間Ωi的形狀簡(jiǎn)化為從攝像機(jī)光心發(fā)出的椎體,椎體的截面就是警戒面,如圖3(a)中的兩個(gè)面α和β。當(dāng)運(yùn)動(dòng)目標(biāo)區(qū)域O位于任何一個(gè)或多個(gè)三維子空間內(nèi),則報(bào)警(AO=1),否則不報(bào)警(AO=0),即
(5)
敏感區(qū)域和非敏感區(qū)域采用空間平面來(lái)分界,便于報(bào)警判別。平面以內(nèi)為報(bào)警區(qū)域。攝像機(jī)的視野已經(jīng)確定了一個(gè)立體角,因此只需要設(shè)置攝像機(jī)視野前方的界面即可,如圖3中的平面α和β。
系統(tǒng)安裝完成后,首先由人工在監(jiān)控圖像上設(shè)置警戒面的角點(diǎn),然后由軟件自動(dòng)計(jì)算這些角點(diǎn)的視差,并予以存儲(chǔ)。為了提高準(zhǔn)確度,如果角點(diǎn)處沒(méi)有明顯的紋理,可在這些點(diǎn)所對(duì)應(yīng)的真實(shí)空間位置上粘貼特定的圖案,并在計(jì)算視差后予以清除。
為了便于描述和存儲(chǔ),軟件自動(dòng)將警戒平面分解為一系列空間三角形,稱為警戒三角形平面(Warning Triangle Plane,WTP)。三維報(bào)警區(qū)域由多個(gè)WTP圍合而成。
如果發(fā)生越界的像素?cái)?shù)量大于一定的閾值T,則予以報(bào)警,那么式(5)就具體化為
(6)
顯然,計(jì)算可疑目標(biāo)的視差是實(shí)施三維立體空間入侵檢測(cè)的關(guān)鍵技術(shù)環(huán)節(jié)。立體視差的計(jì)算有多種方法,主要分為局部算法和全局算法兩大類[4]。全局視差算法一般是對(duì)視差構(gòu)建某種全局能量函數(shù),通過(guò)反復(fù)的迭代過(guò)程使得能量函數(shù)最小化。全局算法效果較好,但是時(shí)間復(fù)雜度更高。相比之下,雖然局部算法的效果不如全局算法,但是局部算法的計(jì)算速度往往比較快。局部算法的一般步驟是:計(jì)算代價(jià)空間,然后進(jìn)行代價(jià)空間的聚合操作,最后做視差計(jì)算。為了剔除錯(cuò)誤視差,通常還需要分別計(jì)算左視差和右視差,并進(jìn)行一致性檢測(cè)。
為了擇優(yōu),本文設(shè)計(jì)了兩種局部視差算法:算法1,面向像素,采用以上的全部基本步驟,包括代價(jià)空間計(jì)算、代價(jià)聚合、利用動(dòng)態(tài)規(guī)劃計(jì)算視差,以及左右視差的一致性檢測(cè)等步驟[1];算法2,著重考慮計(jì)算速度。相對(duì)于算法1,算法2的改進(jìn)主要在于以下3個(gè)方面:
(1) 采用基于圖像塊的下采樣代價(jià)空間,視差的計(jì)算以塊為單位,降低計(jì)算量;
(2) 免去代價(jià)聚合操作,直接在代價(jià)空間上采用動(dòng)態(tài)規(guī)劃算法計(jì)算最終視差;
(3) 動(dòng)態(tài)規(guī)劃算法采用了“局部動(dòng)態(tài)規(guī)劃”,以加快速度。
因?yàn)樗惴?是常規(guī)的處理過(guò)程,不再贅述,后面實(shí)驗(yàn)部分直接給出結(jié)果。下面著重對(duì)算法2做詳細(xì)介紹。
假設(shè)左圖像和右圖像的大小相等,寬度和高度分別為W和H,并經(jīng)過(guò)了立體矯正。以左圖像為基準(zhǔn),把左圖像劃分成寬度和高度分別為m和n的不重疊小圖像塊,為每一塊圖像計(jì)算一個(gè)視差值,將原圖像中的一個(gè)圖像塊映射到視差圖中作為一個(gè)點(diǎn)。這樣,視差圖的寬度和高度分別為w=W/m和h=H/n。
視差代價(jià)平面和動(dòng)態(tài)規(guī)劃(Dynamic Program,DP)的視差曲線如圖4所示。視差計(jì)算每次處理一行圖像塊,這樣對(duì)于內(nèi)存空間的要求比較小。考察左圖像中的某一行圖像塊,例如第y行,對(duì)其中的每個(gè)圖塊(例如第x塊)在右圖像中做水平匹配搜索,搜索過(guò)程中以單像素為移動(dòng)步長(zhǎng),搜索的移動(dòng)范圍為0~dmax,dmax為可能的最大視差。這樣,得到該塊行的一個(gè)代價(jià)平面C(x,d),代價(jià)平面的一個(gè)維度為塊序號(hào)x,另一個(gè)為視差d。這里為了描述簡(jiǎn)潔,省略了行變量y,則計(jì)算公式為
0≤x≤w-1,0≤d≤dmax
(7)
式中:B(x)——左圖像中該塊行的第x塊子圖;
IL(i,j),IR(i,j)——左右圖像中坐標(biāo)為(i,j)點(diǎn)的像素。
圖4 視差代價(jià)平面和動(dòng)態(tài)規(guī)劃的視差曲線
顯然,這里用平均絕對(duì)差來(lái)表示左右圖像的匹配程度。代價(jià)平面C(x,d)是二維的,需要針對(duì)每一個(gè)x值,尋找一個(gè)視差最優(yōu)值,使得C(x,d)最小。一個(gè)簡(jiǎn)單的方法是在所有可能的視差中直接搜尋C(x,d)的最小值。這樣計(jì)算量很小,但是因?yàn)闆](méi)有考慮圖像塊之間的相關(guān)性約束,容易受噪聲干擾。
因此,接下來(lái)采用動(dòng)態(tài)規(guī)劃來(lái)計(jì)算視差。代價(jià)聚集的過(guò)程,實(shí)際上等效于在代價(jià)空間上的濾波過(guò)程[5-6]。相對(duì)于基于像素匹配的代價(jià)空間,下采樣塊匹配所產(chǎn)生的代價(jià)空間相當(dāng)于已經(jīng)做了一定的濾波處理,因此,本文免去代價(jià)聚合操作,直接在代價(jià)空間上采用動(dòng)態(tài)規(guī)劃算法計(jì)算視差。
動(dòng)態(tài)規(guī)劃常被用來(lái)處理多階段決策問(wèn)題。一行像素的視差計(jì)算是逐個(gè)依次計(jì)算的,屬于多階段決策問(wèn)題,因此動(dòng)態(tài)規(guī)劃也常被用于視差計(jì)算[7]。其基本方法這里不再贅述。如果直接引用常規(guī)的DP算法,在C(x,d)的更新計(jì)算過(guò)程中需要考察前一像素塊x-1處的全部可能d值,其搜索過(guò)程為
(8)
式中:d(-1)——前一圖像塊的視差值,取值范圍為0~dmax。
式(8)中大括號(hào)里面是兩項(xiàng)的和,第一項(xiàng)表示代價(jià)最小化,第二項(xiàng)表示視差的連續(xù)性約束,a和(1-a)表示前后兩項(xiàng)的權(quán)重。
由于對(duì)前一圖像塊的可能視差值d(-1)做了全搜索,因此會(huì)消耗較長(zhǎng)的時(shí)間。實(shí)際上,相鄰圖像塊在視差上具有連續(xù)性,通常變化不大。鑒于此,受文獻(xiàn)[8]的啟發(fā),本文對(duì)算法作了改進(jìn),將全搜索改為局部搜索。這樣可降低計(jì)算復(fù)雜度,搜索范圍從(0,dmax)縮小為(d1,d2),代價(jià)平面的計(jì)算公式為
(9)
其中
式中:Δd——預(yù)設(shè)的視差偏移量門限,為dmax的1/4~1/3。
(12)
(13)
將其與式(9)的結(jié)果比較,在二者之中擇優(yōu),用于替代式(8)的搜索過(guò)程,即
C(x,d)=min{cmin(x,d),C(x,d)}
(14)
首先,采用標(biāo)準(zhǔn)立體測(cè)試圖像對(duì)視差算法進(jìn)行測(cè)試,以便比較視差算法的效果。用C++編寫程序,程序?yàn)橹苯拥乃惴ㄔ韺?shí)現(xiàn),暫時(shí)沒(méi)有做任何代碼優(yōu)化。測(cè)試了tsukuba,cones,teddy,venus等4對(duì)圖像,測(cè)試結(jié)果如表1,圖5,圖6所示。
表1 算法1和算法2的用時(shí)比較 ms
圖5 算法1的測(cè)試結(jié)果
圖6 算法2的測(cè)試結(jié)果
由測(cè)試結(jié)果可以看到,算法1的結(jié)果比較好,各個(gè)物體的棱角比較清晰,然而計(jì)算時(shí)間比較長(zhǎng);而對(duì)于算法2,盡管結(jié)果比較粗糙,但整體上看視差的層次依然分明,并且速度提高了30倍左右。
根據(jù)上面的測(cè)試結(jié)果,在效果尚可的情況下,算法2的速度有明顯優(yōu)勢(shì),因此在實(shí)際監(jiān)控系統(tǒng)中,暫時(shí)采用了算法2。對(duì)算法2做初步的代碼級(jí)優(yōu)化,在分辨率為320×240像素畫面下,可以達(dá)到15幀/s。圖7展示了視差測(cè)試結(jié)果。圖7中一個(gè)人從門外(較遠(yuǎn)處)走過(guò)來(lái),直到跨進(jìn)門來(lái)。可以看出,當(dāng)人由遠(yuǎn)及近走來(lái)時(shí),視差的變化是明顯的。
圖7 實(shí)際攝像畫面及視差計(jì)算結(jié)果
由于視差計(jì)算并不是面向像素的,因此視差圖有些粗糙。考慮到視頻監(jiān)控通常只需要檢測(cè)運(yùn)動(dòng)對(duì)象,因此結(jié)合運(yùn)動(dòng)檢測(cè)來(lái)彌補(bǔ)這一不足,從而實(shí)現(xiàn)較為準(zhǔn)確的報(bào)警判決。
常規(guī)的視頻監(jiān)控系統(tǒng)中,根據(jù)畫面目標(biāo)的運(yùn)動(dòng)特征實(shí)施報(bào)警是一個(gè)基本的功能。本文將運(yùn)動(dòng)檢測(cè)與視差檢測(cè)結(jié)合起來(lái),實(shí)現(xiàn)三維空間的入侵檢測(cè)和報(bào)警。首先,進(jìn)行運(yùn)動(dòng)目標(biāo)檢測(cè),確定運(yùn)動(dòng)目標(biāo)的區(qū)域;然后,針對(duì)運(yùn)動(dòng)區(qū)域計(jì)算視差,即進(jìn)一步減少了視差的計(jì)算量。
圖像差分法是運(yùn)動(dòng)目標(biāo)檢測(cè)的最直接方法,可以采用相鄰幀之間的差分來(lái)檢測(cè)運(yùn)動(dòng),也可以采用當(dāng)前圖像與背景圖像的差分來(lái)檢測(cè)。鑒于視頻監(jiān)控多為靜態(tài)背景,本文采用與背景差分的方法來(lái)檢測(cè)。其中,背景的生成是關(guān)鍵環(huán)節(jié),需要在視頻監(jiān)控的過(guò)程中自動(dòng)生成?;旌细咚鼓P偷男Ч?但是計(jì)算量更大。考慮到本文應(yīng)用情景的實(shí)際情況,選擇時(shí)間平均法來(lái)生成背景,背景的更新過(guò)程為
Bt=(1-α)Bt-1+αIt
(15)
式中:Bt,Bt-1——當(dāng)前時(shí)刻和前一時(shí)刻的背景圖矩陣;
It——當(dāng)前時(shí)刻圖像矩陣;
α——比例系數(shù),取一個(gè)比較小的值,本文取0.01,以適應(yīng)基本靜止的背景。
圖8為將運(yùn)動(dòng)目標(biāo)檢測(cè)結(jié)果疊加在視差圖上的效果。盡管視差圖有部分毛刺以及不準(zhǔn)確的地方,比如圖8(a)中門框部分以及人腿邊緣的鋸齒,但是通過(guò)對(duì)運(yùn)動(dòng)區(qū)域檢測(cè),如圖8(b)中虛線所示,并提取對(duì)應(yīng)區(qū)域視差后,基本上消除了其他部分的視差影響,效果如圖8(c)所示。據(jù)此可以準(zhǔn)確計(jì)算出運(yùn)動(dòng)物體的視差。
圖8 結(jié)合運(yùn)動(dòng)區(qū)域檢測(cè)的運(yùn)動(dòng)對(duì)象視差提取
以圖7中大門、玻璃窗等為三維空間的檢測(cè)界面,大門或玻璃窗之內(nèi)為敏感區(qū)域,根據(jù)以上算法原理,通過(guò)反復(fù)實(shí)驗(yàn),證明絕大多數(shù)場(chǎng)合都能準(zhǔn)確判別,可以達(dá)到實(shí)用的要求。個(gè)別誤報(bào)主要發(fā)生在逆光的情況下,這時(shí)人體外觀的紋理很不明顯,視差計(jì)算有較大的誤差。
本文提出了一種在三維空間中檢測(cè)運(yùn)動(dòng)目標(biāo)入侵的算法。采用了雙目平行攝像系統(tǒng),在對(duì)視頻圖像做實(shí)時(shí)立體矯正的基礎(chǔ)上,通過(guò)快速的下采樣塊匹配以及局部動(dòng)態(tài)規(guī)劃來(lái)計(jì)算視差圖,最后結(jié)合運(yùn)動(dòng)區(qū)域檢測(cè)提取目標(biāo)視差區(qū)域,并直接在視差圖像上進(jìn)行入侵判別。通過(guò)驗(yàn)證,絕大多數(shù)場(chǎng)合下都可以準(zhǔn)確判別。然而對(duì)于逆光的情況,目前的視差結(jié)果有較大的誤差,需要采用動(dòng)態(tài)范圍更大的攝像頭或者外加濾光處理,在以后的工作中將做進(jìn)一步的測(cè)試和算法上的改進(jìn)。