翁勝偉
摘 要:為實(shí)現(xiàn)行人運(yùn)動目標(biāo)檢測,需要對目標(biāo)運(yùn)動場景進(jìn)行采集,包括彩色信息和深度信息。然而在圖像形成和傳輸過程中,會受到環(huán)境、光照等多種因素影響,采集到的信息與實(shí)際場景相比存在降質(zhì)或退化問題。因此,在進(jìn)行行人運(yùn)動目標(biāo)識別分割之前,需要對原始圖像進(jìn)行預(yù)處理。介紹了采集原始圖像的硬件設(shè)備Kinect 2.0傳感器;根據(jù)深度成像原理,分析了深度圖像的預(yù)處理算法。
關(guān)鍵詞:Kinect傳感器;圖像采集;深度成像
DOIDOI:10.11907/rjdk.171254
中圖分類號:TP317.4
文獻(xiàn)標(biāo)識碼:A 文章編號:1672-7800(2017)007-0202-03
0 引言
大型城市人口過度集中已經(jīng)成為一個公認(rèn)的社會問題,對一些場所和地區(qū)進(jìn)行人流統(tǒng)計,基于人流統(tǒng)計信息進(jìn)行決策管理,以合理利用與分配社會公共資源。在展覽館、博物館、大型商場、飛機(jī)場、火車站、地鐵站和旅游景區(qū)等人流高密集場所,人流數(shù)量、滯留人數(shù)、人流規(guī)律、人數(shù)趨勢等信息能夠幫助決策與調(diào)度,有效提高行人的便捷出行。同時,根據(jù)人流統(tǒng)計數(shù)據(jù),可以提前進(jìn)行區(qū)域限流,防止由于人群密度過高、不容易疏散而引起踩踏等安全隱患或社會動亂,避免人身安全受到威脅。
目前,針對機(jī)器視覺的視頻人流統(tǒng)計,主要涉及到行人目標(biāo)的識別、檢測和跟蹤、計數(shù),有很多相對成熟的算法,但大多算法面臨背景和光線的干擾,以及多目標(biāo)的遮擋和偽目標(biāo)的誤檢等問題,高準(zhǔn)確率、高魯棒性的人數(shù)統(tǒng)計是研究熱點(diǎn)和難點(diǎn)?;谝曨l的人數(shù)統(tǒng)計面臨很多技術(shù)難題。因此,無論在技術(shù)上,還是在學(xué)術(shù)研究領(lǐng)域,運(yùn)動目標(biāo)的分割與檢測技術(shù)均具有深遠(yuǎn)的現(xiàn)實(shí)意義及研究價值。
1 國內(nèi)外研究現(xiàn)狀
人流統(tǒng)計的智能化、無監(jiān)督化、自動化是目前發(fā)展的重點(diǎn)。國外針對運(yùn)動跟蹤等機(jī)器視覺領(lǐng)域有專門的ICCV(International Conference on Computer Vision)、ECCV(European Conference on Computer Vision)、CVPR(IEEE conference on Computer Vision and Pattern Recognition)等頂級國際會議,還有PAMI(IEEE Transaction on Pattern Analysis and Machine Intelligence)、CVIU(Computer Vision and Image Understanding)、IJCV(International Journal on Computer Vision)和PR(Pattern Recognition)等權(quán)威期刊[1]。學(xué)者在這些會議和期刊上發(fā)表的關(guān)于視頻人數(shù)統(tǒng)計的最新進(jìn)展,具有巨大的參考意義和研究價值。
國內(nèi)也舉辦一些機(jī)器視覺方面的學(xué)術(shù)會議。自2002年始,全國智能視覺監(jiān)控學(xué)術(shù)會議(Chinese Conference on Intelligent Visual Surveillance,IVS)已成功舉辦了4屆,還有中國機(jī)器學(xué)習(xí)及其應(yīng)用研討會(China Workshop on Machine Learning and Applications,MLA)、亞洲計算機(jī)視覺會議(Asian Conference on Computer Vision,ACCV)等,為計算機(jī)視覺研究者和企業(yè)提供了技術(shù)交流平臺。
2 Kinect軟件結(jié)構(gòu)
Kinect 2.0傳感器可根據(jù)微軟公司的Kinect For Windows的NUI庫,結(jié)合用戶開發(fā)的算法程序和OpenCV等開源庫進(jìn)行軟件設(shè)計。Kinect For Windows架構(gòu)如圖1所示。
Kinect傳感器把圖像數(shù)據(jù)、深度信息和音頻通過USB 3.0接口傳輸至NUI庫,NUI庫隱藏了復(fù)雜的硬件操作,用戶應(yīng)用程序只需調(diào)用NUI API訪問,包括彩色圖像、深度圖像、音頻信息和骨骼信息等幾種類型數(shù)據(jù)。使用NUI庫獲取并處理數(shù)據(jù)源流程如圖2所示。
Sensor代表一個具體的硬件實(shí)體,一個應(yīng)用程序可以調(diào)用一個或者一個以上的傳感器(默認(rèn)為1個),隨后調(diào)用Source,顯示數(shù)據(jù)源的元數(shù)據(jù),并為閱讀器(Reader)提供獲取途徑,傳感器的深度幀、彩色幀以及音頻源等都會提供一種數(shù)據(jù)源供用戶調(diào)用。Reader提供獲取幀的途徑,包括事件機(jī)制(觸發(fā)模型)和輪詢機(jī)制(“拉”模型),一種數(shù)據(jù)源可以有多個閱讀器(Reader),閱讀器也可以被暫停。幀F(xiàn)rame分為Frame References和Frames,F(xiàn)rame References發(fā)送幀事件參數(shù),包括獲得實(shí)際幀使用方法、被引用幀的時間戳等具體信息;Frames提供獲取幀數(shù)據(jù)的途徑(建立本地副本或直接訪問底層緩沖區(qū)),包含諸如幀格式、寬度和高度等幀中元數(shù)據(jù)。此外,F(xiàn)rames大大減少了獲取幀的時間,用戶可以根據(jù)需要得到不同類型幀的數(shù)據(jù)Data[2]。
2.1 Kinect深度成像原理
Kinect傳感器的深度成像,是利用一個紅外發(fā)生器在視場區(qū)域內(nèi)發(fā)射近紅外光譜,另外一個深度(紅外)攝像頭接收發(fā)生變化的紅外光,紅外光譜的投影區(qū)域和紅外接收區(qū)域重疊,兩者共同作用形成深度圖像。其中,紅外深度成像大致分為兩類[3]:
(1)基于光飛行時間(Time of Flight,ToF)原理。光飛行時間技術(shù)通過發(fā)射紅外光和測量紅外光脈沖之間的時間差來計算深度信息。Mesa Imaging SwissRanger 4000和PMD Technologies CamCube 2.0價格不菲,而本文使用的Kinect 2.0傳感器也應(yīng)用了ToF技術(shù),價格與它們相比具有非常大的優(yōu)勢[4]。
(2)基于結(jié)構(gòu)光的測量。結(jié)構(gòu)光測量基于光編碼技術(shù),將具有點(diǎn)、線、面結(jié)構(gòu)的紅外光結(jié)構(gòu)投射到場景中。由于紅外線在接觸到物體表面時會產(chǎn)生變形,通過測量其形變程度來計算場景深度信息。使用結(jié)構(gòu)光測量方案有PrimeSensor公司的Light Coding技術(shù)[5]。結(jié)構(gòu)光測量法與傳統(tǒng)的三角測量法比較,能夠快速獲得深度信息。endprint
在Kinect 1.0傳感器上,通過體感偵測裝置PrimeSensor和感測芯片PS 1080,使用基于近紅外光(激光散斑)的Light Coding技術(shù)。Kinect 1.0傳感器使用與PrimeSense的SoC相連的標(biāo)準(zhǔn)CMOS影像傳感器,從場景中讀取經(jīng)過編碼的光線,并執(zhí)行復(fù)雜的并行運(yùn)算邏輯,對編碼光線進(jìn)行解碼,由此獲得一個場景的深度影像。Light Coding技術(shù)利用近紅外光(隨機(jī)激光散斑)對場景進(jìn)行編碼。由于空間中任意兩點(diǎn)的散斑圖案不同,所以通過測量場景中的散斑圖案就可得到場景的深度信息[6]。
Kinect 1.0傳感器使用的激光散斑方案不受環(huán)境光影響,然而Kinect 1.0傳感器測量某點(diǎn)的深度,需要知道鄰域內(nèi)各點(diǎn)深度信息。Kinect 1.0傳感器測量諸如細(xì)頭發(fā)對象時,由于所測頭發(fā)點(diǎn)周圍沒有點(diǎn)群,因此無法獲得深度信息,而Kinect 2.0傳感器解決了這個問題。
Kinect 2.0傳感器使用ToF原理,如圖3所示。Kinect 2.0傳感器的紅外發(fā)生器發(fā)射強(qiáng)度是隨空間變化而變化的正弦波信號,通過深度攝像頭獲得正弦信號的發(fā)射和接收強(qiáng)度差和相位差來計算深度,公式如下:
式(1)中,Depth為紅外攝像頭與場景中物體的距離,即所要的深度信息,c為光在真空中傳播的速度,Φ表示發(fā)射和接收的近紅外正弦信號的相位延遲,f為正弦波的調(diào)制頻率。
利用ToF原理進(jìn)行相位差Φ的測量如圖4(a)所示。ToF利用連續(xù)波(CW)強(qiáng)度調(diào)制(Continuous Wave Intensity Modulation)方法[7],近紅外信號發(fā)生器gill[5]發(fā)射強(qiáng)度調(diào)制、周期性的正弦信號,在傳播方向上碰到物體后發(fā)生反射,在深度(紅外)攝像頭接收器的每個像素上接收到反射信號sill后,根據(jù)基準(zhǔn)信號gref對反射信號進(jìn)行采樣,每個像素點(diǎn)的采樣公式(積分測強(qiáng)度)如式(2)所示。
在實(shí)際的連續(xù)波(CW)強(qiáng)度調(diào)制采樣時,在一個時間周期內(nèi),每個像素點(diǎn)進(jìn)行4次采樣,且采樣的相位各相差90°。如圖4(b)所示,C1、C2、C3、C4代表4次采樣,且在光源發(fā)射的同時啟動第一次采樣C1,在C1采樣階段,若接收到反射光,則在傳感器像素點(diǎn)上采集電荷,采樣階段積累的電荷記為Q1;同樣,C2采樣階段和C1采樣階段相位相差90°,采樣得到的電荷記為Q2,以此類推,共進(jìn)行4次采樣,得到相位差Φ的測量公式[8]如式(3)所示。
式(3)中,Qi=C[gilli,grefi](i=1,2,3,4),gilli(t)=cos(2πft),對于f恒定,通常取值范圍為10-100MHz,本文所使用的Kinect 2.0使用的光源平均頻率為80Hz;grefi(t)=gilli(t+τi),τi為相位偏移量,τi=i×π/2,i=0,1,2,3。
從式(3)可知,由于(Q3-Q4)和(Q1-Q2)的作用,消除了諸如環(huán)境光等常量偏移的影響,同時兩者的商也減小了由于電路放大和衰減或反射的強(qiáng)度等原因引起的增益影響[9]。
綜上所述,結(jié)合式(1)至式(3),通過計算相位差,就能夠計算出物體上的某一點(diǎn)距離紅外攝像頭的距離。
2.2 Kinect深度圖像和彩色圖像采集
2.2.1 深度圖像采集
由Kinect 2.0傳感器軟件架構(gòu)可知,利用NUI Library獲得深度數(shù)據(jù)幀的流程如圖5所示。
首先,要獲取深度數(shù)據(jù)源,需要先打開一個Kinect 2.0傳感器硬件實(shí)體,根據(jù)NUI Library,該硬件實(shí)體類型為IKinectSensor,定義變量mykinectsensor,并利用GetDefaultKinectSensor(&mykinectsensor)函數(shù)對其進(jìn)行賦值,再調(diào)用mykinectsensor→open()即可獲取一個Kinect 2.0傳感器實(shí)體。隨后需要操作深度數(shù)據(jù)源,深度數(shù)據(jù)源類型為IDepthFrameSource,因此定義變量depthsource,通過調(diào)用get_DepthFrameSource(&depthsource)成員函數(shù)對其賦值,即可獲得深度數(shù)據(jù)源。另外,需要獲取深度圖像的分辨率,利用IFrameDescription類型和get_FrameDescription()函數(shù)獲取深度圖像分辨率。設(shè)置好深度數(shù)據(jù)源depthsource和獲取分辨率后,需要定義一個類型為IDepthFrameReader的變量來調(diào)用Reader,并利用Source的成員函數(shù)depthsource→OpenReader(&depthreader)來打開Reader。成功打開Reader后,就可以調(diào)用depthre ader→AcquireLatestFrame(&depthframe)成員函數(shù)來采集最新一幀深度數(shù)據(jù)。若調(diào)用AcquireLatestFrame()返回的值為“S_OK”,說明成功獲取到最新一幀深度數(shù)據(jù),將其保存在depthframe變量中,depthframe的類型為IDepthFrame。隨后,對獲得深度數(shù)據(jù)幀進(jìn)行相關(guān)處理。當(dāng)該數(shù)據(jù)幀處理完畢后,調(diào)用depthrame→Release()對該深度數(shù)據(jù)幀進(jìn)行釋放。根據(jù)需要,再次調(diào)用AcquireLatestFrame(&depthframe)函數(shù)獲取新的一幀深度數(shù)據(jù)進(jìn)行處理。根據(jù)以上流程獲取的深度圖如圖6(a)所示。
2.2.2 彩色圖像采集
根據(jù)NUI Library和數(shù)據(jù)流的獲取流程,讀取彩色圖像流程和讀取深度圖像流程是一樣的,區(qū)別在于數(shù)據(jù)輸出的處理上。Kinect 2.0使用的圖像格式是YUY2,通常需要使用轉(zhuǎn)換函數(shù)CopyConvertedFrameDataToArray()將彩色幀轉(zhuǎn)化成RGB格式。獲取的彩色圖像如圖6(b)所示。
除了使用NUI Library,本文結(jié)合使用OpenNI(開放式自然交互)庫函數(shù),將Kinect傳感器的數(shù)據(jù)流操作包含在OpenNI的驅(qū)動中。這樣做的好處是編程時可以省去直接對Kinect傳感器的硬件操作,所有數(shù)據(jù)流獲取只通過一個API進(jìn)行。endprint
2.3 深度圖像預(yù)處理
深度成像利用近紅外光的發(fā)射和反射時間差來成像。所以,當(dāng)Kinect視場內(nèi)存在吸光物體時,接收紅外脈沖的深度攝像頭無法獲取該物體區(qū)域的近紅外光,成像時該區(qū)域就會產(chǎn)生空洞?;蛘邷y量范圍超過Kinect的視場時,導(dǎo)致Kinect的深度攝像頭在接收紅外光時,容易出現(xiàn)物體邊緣的深度值為0,從而造成場景深度圖像邊緣和行人運(yùn)動目標(biāo)邊緣產(chǎn)生一些毛刺。
深度圖像中的空洞區(qū)域和邊緣毛刺都會對行人目標(biāo)頭部區(qū)域特征提取產(chǎn)生很大干擾。在進(jìn)行特征提取之前,消除空洞區(qū)域和毛刺的深度圖像預(yù)處理是必不可少的工作。
3 結(jié)語
本文對Kinect 2.0傳感器進(jìn)行了介紹,對基于光飛行時間(ToF)的深度圖像成像原理進(jìn)行了分析,根據(jù)Kinect NUI Library分析Kinect 2.0傳感器的彩色圖像和深度圖像獲取流程。根據(jù)深度成像特點(diǎn),對原始深度數(shù)據(jù)幀進(jìn)行中值濾波、閉運(yùn)算和開運(yùn)算等預(yù)處理分析,為行人運(yùn)動目標(biāo)的特征識別打下堅實(shí)基礎(chǔ)。
參考文獻(xiàn):
[1]CHEN T H.An automatic bi-directional passing-people counting method based on color image processing[C].IEEE,2003 International Carnahan Conference on Security Technology,2003:200-207.
[2]吳國斌.KINECT人機(jī)交互開發(fā)實(shí)踐[M].北京:人民郵電出版社,2013.
[3]黃露丹,嚴(yán)利民.基于Kinect深度數(shù)據(jù)的人物檢測[J].計算機(jī)技術(shù)與發(fā)展,2013(4):119-121.
[4]SARBOLANDI H,LEFLOCH D,KOLB A.Kinect range sensing:structured-light versus time-of-flight kinect[J].Computer Vision & Image Understanding,2015.
[5]L LI.Time-of-flight camera-an introduction[Z].Texas Instruments-Technical White Paper.
[6]CORTI A,GIANCOLA S,MAINETTI G,et al.A metrological characterization of the Kinect V2 time-of-flight camera[J].Robotics & Autonomous Systems,2015,75(8):584-594.
[7]楊召君.基于視頻人數(shù)統(tǒng)計與跟蹤改進(jìn)算法的研究與實(shí)現(xiàn)[D].南京: 南京郵電大學(xué),2013.
[8]郭秀杰.基于Kinect的人流量統(tǒng)計系統(tǒng)研究[D].重慶: 重慶大學(xué),2014.
[9]吳曉陽.基于OpenCV的運(yùn)動目標(biāo)檢測與跟蹤[D].杭州: 浙江大學(xué),2008.endprint