文稿教程說明_第1頁
文稿教程說明_第2頁
文稿教程說明_第3頁
文稿教程說明_第4頁
文稿教程說明_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

本人時(shí)間:20145Captureandtransmissionofthree-dimensionalimagebasedonOpenNIAuthor:ZhangTutor:ShengWiththedevelopmentoftechnology,moreandmoreabundantexpressionofinformation,theneedsofinformationalsotendtodiversify.Peoplewanttobeabletoquicklyandeasilyaccessinformationthroughdata,voice,imageand,etc..3Dtechnologyinrecentyearshasdevelopedrapidly,andiswidelyusedinmilitary,medical,education,entertainment,etc..3Dtechnologybreakstheshacklesoftheplaneofthedisplay,bringingasenseofdepth,three-dimensionalvisualandimmersive.Basedonthe2Dconferencesystem,thecolorimagesanddepthimageswhicharecapturedbyOpenNIwillbeencodedandtransferred.Andthecolorimagesandassociatedper-pixeldepthinformationareusedinthegenerationthe“virtual”stereoscopic3Dimages.AfterthatthestereoscopicimageswillbedisplayedinthewaycalledRedandBlue3Ddisplay.Themainresearchcontentsare:OpenNI,XtiondeviceandJavamediaFrameworkarefirstlyWeproposeawaytocalculatetherealdepthofthesceneaccordingtothedepthimage,usingthecharacteristicsofXtiondevice.Inthatway,weusethesimplifiedDIBRtechnologytorealizetheviewpointtransformations.Distinguishingthedifferenceofthereasonoftheholeinthedepthimageandvirtualviewpointimage,weproposeawaytorepairtheholeintheimageaccordingtothereasonoftheholeformation.AndwecomparethewayofholerepairingwithotherTheframestructureof3Dconferencesysteminthecontextofthedescribedindetail,andhowtorealizethe3Dconferencesystem.Finally,wefinishareal-time3Dconferencesystem,andinthelastchapterwewillrepresentthestatisticdataobtainedbythetest.:OpenNI,JavaMediaFramework,DIBR,conference 摘 緒 研究背景和意 3D技 基于OpenNI的體感設(shè) 國內(nèi)外研究現(xiàn) OpenNI與Xtion體感設(shè) 編碼技 多傳輸技 JAVA多框 YUV格式說 3D顯示原理與常見的3D顯示技 開源會(huì)議系統(tǒng) 研究內(nèi) 結(jié) RGB-D與編碼傳輸技 OpenNI框架與Xtion體感設(shè) OpenNI圖像流 OpenNI的實(shí) JMF編碼功能的實(shí) JMF傳輸功能的實(shí) 資源共享方 本章小 基于DIBR方法的虛擬視點(diǎn)繪 基于深度圖的虛擬視點(diǎn)繪 DIBR原 簡(jiǎn)化的DIBR技 空洞修 空洞的形成與常見的修復(fù)方 深度圖像的空洞修 虛擬視點(diǎn)圖像的空洞修 本章小 基于OpenNI的三維會(huì)議呈現(xiàn)系 三維會(huì)議系統(tǒng)的關(guān)鍵技 基于OpenNI.......................................................................................Java多框 資源共享方 簡(jiǎn)化的DIBR技 紅藍(lán)3D顯 三維會(huì)議系統(tǒng)的實(shí) 數(shù)據(jù)流模 模 ................................................................................................................總結(jié)與展 工作總 工作期 致 參考文 緒比如3D,3D技術(shù)為人們帶來了更強(qiáng)的沉浸感和真實(shí)感,所以會(huì)被應(yīng)用于軍事以本將兩者結(jié)合起來,使用3D技術(shù)增強(qiáng)會(huì)議的真實(shí)感,利用OpenNI實(shí)3D技人們希望能夠方便快捷地通過數(shù)據(jù)、語音、圖像與等方式獲取信息。而視覺信息占近幾年,隨著3D技術(shù)突飛猛進(jìn)的發(fā)展,3D技術(shù)廣泛應(yīng)用于軍事、醫(yī)學(xué)、教育、等各個(gè)方面,融入到了人們的生活當(dāng)中。3D技術(shù)突破了平面顯示屏的沉浸感的基礎(chǔ)上提高了人機(jī)之間的交互性。這使得3D技術(shù)在醫(yī)學(xué)應(yīng)用場(chǎng)景取得了矚目的成效[1]。總而言之,3D技術(shù)為人們帶來的沉浸感與交互性,都是傳統(tǒng)的2D技術(shù)無法比擬的,3D技術(shù)有著更加廣泛的應(yīng)用前景Xtion作為一感設(shè)備,為用戶提供了的語音、影像輸入及處理,其中包括了對(duì)圖像的捕捉與對(duì)場(chǎng)景深度的分析。另外,Xtion可為用戶提供手勢(shì)識(shí)別、語音OpenNI跨平臺(tái)框架對(duì)其技術(shù)上的支撐,使得開發(fā)者可以用熟悉的開發(fā)語言,如C++、JAVA,開發(fā)在Xtion上的應(yīng)用程序。所以,Xtion適合作為3D工具以及3D技術(shù)研發(fā)的工具。OpenNIXtionOpenNIOpenNaturalInteraction(開放式的自然交互),是一個(gè)跨平臺(tái)的開源體感框架[12]。OpenNIAPI和另外一組由中間設(shè)備組件實(shí)APIOpenNIAPI開發(fā)的RGB圖像;第二部分,由一組紅外線和的深度圖像。編碼技術(shù)的主要目的在于保證重新繪制圖像時(shí)圖像的質(zhì)量,以此為前提,國際電信(ITU-T)和標(biāo)準(zhǔn)組織(ISO)負(fù)責(zé)制定了編碼標(biāo)準(zhǔn)。國際電信(ITU-T)已經(jīng)發(fā)H.26x系列標(biāo)準(zhǔn),H.26xH.261、H.262H.263與視、會(huì)議等。國際標(biāo)準(zhǔn)化組織(ISO)主要研究制定消費(fèi)類應(yīng)用,制定了MPEG系列標(biāo)準(zhǔn),MPEGMPEG1、MPEG2MPEG4,MPEG系列標(biāo)準(zhǔn)主要應(yīng)用于有線電視網(wǎng)(CATV),以及電纜網(wǎng)絡(luò)。由于ITU-T與ISO這兩個(gè)國際組織的基如聯(lián)合小組(JVT),該小組定義了H.264編技術(shù),這種技術(shù)在MPEG系列標(biāo)準(zhǔn)中又被稱為MPEG4-Part10或MPEG4高級(jí)編(AVC)三維數(shù)據(jù)量龐大,需要進(jìn)行高效的壓縮編碼。目前主要基于已有圖像編碼標(biāo)準(zhǔn),例如MPEG-X與H.26X系列標(biāo)準(zhǔn)對(duì)三維進(jìn)行壓縮。編碼標(biāo)準(zhǔn)化工作的基于需求分析以及前期的探索研究,多視點(diǎn)被廣泛認(rèn)為是3DV系統(tǒng)中有效的三維場(chǎng)景表示方法,因此MPEG3DAV小組于2004年開始準(zhǔn)備多視點(diǎn)編碼(Multi-viewCoding,MVC)的標(biāo)準(zhǔn)化工作。2005年,3DAV小組開始接受MVC相關(guān)技MVC的標(biāo)準(zhǔn)化工作正式開始。2006年,MPEGMVC作為擴(kuò)展H.264/AVC標(biāo)準(zhǔn)之中,并將標(biāo)準(zhǔn)化工作移交JVT。自此,在每三個(gè)月一次的JVT會(huì)議中,國內(nèi)外研究機(jī)構(gòu)紛紛提交技術(shù)提案,不斷改進(jìn)MVC參考軟件模型JMVM(JointMultiviewModel)。MVC標(biāo)準(zhǔn)化工作已于2008年初步完成,并起草得到聯(lián)合草案。出于標(biāo)準(zhǔn)化工作計(jì)劃以及市場(chǎng)接受度方面的考慮,目前H.264/AVC的MVCslice級(jí)及以上部分的改動(dòng),而不包括宏塊及以下部分相關(guān)技術(shù)。目前主要集中在深度估計(jì)與虛擬視圖合成兩個(gè)方面,同時(shí)也對(duì)多視點(diǎn)+深度格式數(shù)三維編碼結(jié)束后需要傳輸?shù)?DV系統(tǒng)終端。三維傳輸技術(shù)發(fā)展經(jīng)歷了模擬廣播、數(shù)字廣播、與基于IP網(wǎng)絡(luò)的流傳輸三個(gè)階段。隨著IP網(wǎng)絡(luò)傳輸技術(shù)的蓬勃發(fā) 務(wù)。與此同時(shí),也已出現(xiàn)2.5G與3G移動(dòng)通信網(wǎng)絡(luò)中基于IP的服務(wù)。這里不再贅比,傳輸多信息所需要的帶寬也是原來的數(shù)百倍,數(shù)千倍。多應(yīng)用的另一大特塞,致使多信息的連續(xù)性受到破壞,所以對(duì)多的實(shí)時(shí)傳輸并不適用,流迫的需求下應(yīng)運(yùn)而生。實(shí)時(shí)傳輸協(xié)議(RTPReal-TimeTransportProtocol,RTP)是針對(duì)Internet上多數(shù)據(jù)流的一個(gè)處于應(yīng)用層的傳輸協(xié)議。實(shí)時(shí)傳輸協(xié)議(RTP)是由互聯(lián)網(wǎng)專家任務(wù)組(IETF)RFC1889發(fā)布。RTP的工作目的是在多點(diǎn)傳輸(多播)或單點(diǎn)(單播)中,提供時(shí)間信息流同步,但RTP本身并不提供可靠地傳輸機(jī)制,流量控制和擁塞機(jī)制,這些功能都靠RTCP來提供服務(wù)[4]。SIP(SessionInitiationProtocol)是一個(gè)應(yīng)用層的信令控制協(xié)議。用于創(chuàng)建、修改和釋放一個(gè)或多個(gè)參與者的會(huì)話。這些會(huì)話可以是Internet多會(huì)議、IP或多分SIP的一個(gè)重要特點(diǎn)是它不定義要建立的會(huì)話的類型,而只定義應(yīng)該如何管理會(huì)話。有點(diǎn)播以及語音、和Web會(huì)議JAVA多框Java多框架為基于時(shí)間的信息提供統(tǒng)一的框架結(jié)構(gòu)和相應(yīng)的協(xié)議[5]。這些分多格式比如AIFF,AU,AVI,GSM,MIDI,MPEG,QuickTime,RMF,通過Java平臺(tái)的優(yōu)勢(shì),開發(fā)者可以利用Java多框架提供的API編程接口,處般的開發(fā)者而言,可以利用Java多框架編寫程序,進(jìn)而、處理、顯示或是多文件處理內(nèi)容,甚至是在JMF中添加新的處理機(jī)制[18]。為了理解JMF的原理,可以將JMF與日常生活中用到的多設(shè)備進(jìn)行對(duì)比。比基于時(shí)間的。當(dāng)使用VCR時(shí),通過插入帶為VCR提供了一個(gè)多流。如圖1.1,JMF利用了相同的基礎(chǔ)模型。數(shù)據(jù)源像帶一樣壓縮了流,器像VCR一樣提供處理和控制流的機(jī)制[19]。JMF和顯示多文件也同樣需要恰當(dāng)?shù)妮斎肱c輸出設(shè)備,比如,麥克風(fēng)、機(jī)、音響等。CCD攝影機(jī)進(jìn)行取像,YUV色彩空間表示。YUV格式的好處在于可以向后兼容黑白電視[13],因?yàn)槿绻娨曋唤邮盏結(jié)YUV色彩空間的重要性是它的亮YUV格式通常有兩大類:打包(packed)格式和平面(planar)YUV分量[Y1,U1,Y2,V1][Y3,U3,Y4,V3]每個(gè)中括號(hào)內(nèi)都表示對(duì)原圖像兩個(gè)像素的采樣情況,YiiY分量。Ui和Vi表示對(duì)第i個(gè)像素的U和V分量??梢钥闯雒績蓚€(gè)像素進(jìn)行一次信號(hào)U和信號(hào)V的采樣。65mm左右,所以在實(shí)際中觀察物體時(shí),人的左右眼觀察到的景象具有細(xì)微的差別。景的深度信息,從而獲得現(xiàn)實(shí)場(chǎng)景的縱深感[16]。下面將介紹常見的3D顯示技術(shù)。3D顯示技術(shù),主要是把原始圖像光信息分離成不同的光譜,然后分以透過紅片,右眼的藍(lán)色鏡片可以透過藍(lán)片。紅片與藍(lán)片雖然是觀察3D3D3D3D3D技術(shù)[14]3D顯示3D技術(shù)屬于主動(dòng)收到幀畫面;同理當(dāng)顯示設(shè)備右眼圖像的時(shí)候,快門式3D眼鏡只允許右眼接收到由于快門3D技術(shù)需要顯示頻率120Hz的顯示屏以及與之配套的眼鏡,不適合適用。與之相比色差式3D技術(shù),只需要價(jià)格低廉的眼鏡,就可以體驗(yàn)3D效果,適合是用戶可以選擇使用不同種類的協(xié)議,比如標(biāo)準(zhǔn)的XMPP(ExtensibleMessagingandPresenceProtocol)SIP(SessionInitiationProtocol),甚至是一些私人專有的,比如雅Windows系統(tǒng),蘋果系統(tǒng),Linux系統(tǒng)。大部分的系統(tǒng)代碼都是用Java語言編寫的,但是代碼中還是包括了一些用C++寫的native方法。JitsiJava語言編寫的,所以在某種程度上符合了會(huì)議系統(tǒng)的第二個(gè)目標(biāo)。因?yàn)镴avaRuntimeEnvironment本身提供了跨平臺(tái)的運(yùn)JavaRuntimeEnvironment無法支持的,比如從網(wǎng)絡(luò)攝像頭數(shù)據(jù)的部分。Java并不支持對(duì)頭的操作,所以在不同的平臺(tái)上要使用不同的工具來操作頭。比如,在Windows系統(tǒng)上使用DirectShow,在蘋果系統(tǒng)上使用QTKit,在Linux系統(tǒng)上使用“forLinux2”??偨Y(jié)起來,會(huì)議系統(tǒng)Jitsi擁有如下幾個(gè)特點(diǎn),各部分功能的代碼相對(duì)獨(dú)立;常運(yùn)行;會(huì)議系統(tǒng)的某些功能容易關(guān)閉或者開啟,方便開發(fā)者進(jìn)行調(diào)試。本文首先總結(jié)了國內(nèi)外3D技術(shù)和編碼與傳輸技術(shù)的研究現(xiàn)狀,之后調(diào)研了OpenNI場(chǎng)景三維數(shù)據(jù)的優(yōu)勢(shì)。并提出要利用OpenNI場(chǎng)景數(shù)據(jù)為會(huì)議系統(tǒng)提供實(shí)時(shí)的深度圖像與RGB圖像,最終實(shí)現(xiàn)3D會(huì)議系統(tǒng)的目標(biāo)。利用深度圖像對(duì)RGBDIBR算法中加入了本文中深度值與實(shí)際深度的轉(zhuǎn)換函數(shù)。并且解決在此過出現(xiàn)的兩種空洞現(xiàn)象,在利用色差3D顯示原理,并將虛擬視點(diǎn)圖像與原始的RGB圖像合成紅藍(lán)3D圖在緒論中,總結(jié)了國內(nèi)外3D技術(shù)和編碼與傳輸技術(shù)的研究現(xiàn)狀,在此基礎(chǔ)上,對(duì)畢設(shè)用到的Java多框架與開源會(huì)議系統(tǒng)Jitsi進(jìn)行了介紹。OpenNIXtion體感設(shè)OpenNI的使用流程進(jìn)行了簡(jiǎn)單說明,在此基礎(chǔ)上詳細(xì)講解了在3D會(huì)議系統(tǒng)中如何使用OpenNI獲取場(chǎng)景三維數(shù)據(jù)之后說明了在3D會(huì)議3D會(huì)議系統(tǒng)需求的資源共享方法。DIBR技術(shù)原理,本文Xtion體感設(shè)備的使用對(duì)RGB圖像進(jìn)行視點(diǎn)轉(zhuǎn)換。在Xtion深度圖像的過與虛擬視點(diǎn)圖像轉(zhuǎn)化的在第四章中,首先對(duì)在3D會(huì)議系統(tǒng)中使用的技術(shù)與本文方法進(jìn)行了總的類進(jìn)行了劃分與說明。最后給出了對(duì)系統(tǒng)的,證明了3D會(huì)議系統(tǒng)的實(shí)1.7RGB- 與編碼傳輸技然用戶界面來更加自然的和計(jì)算機(jī)交互。Kinect和WaviXtion就是這種設(shè)備。OpenNIAPIAPI接口的目的在于形成一個(gè)標(biāo)準(zhǔn),持:1.語音和語音命令識(shí)別,2.手勢(shì)識(shí)別,3.身體運(yùn)動(dòng)追蹤OpenNI提供了一組基于體感設(shè)備實(shí)現(xiàn)的API和另外一組由中間設(shè)備組件實(shí)現(xiàn)的APIOpenNIAPI開發(fā)應(yīng)用OpenNI兼容的應(yīng)用程序。OpenNI的這套標(biāo)準(zhǔn)化API使得開發(fā)者可以編寫程序利用體感設(shè)備并處理場(chǎng)景的圖像數(shù)據(jù),很方便的處理場(chǎng)景。本文使用Xtion在PC端通過OpenNI實(shí)現(xiàn)場(chǎng)景的彩2.1OpenNI2.1OpenNI以為用戶提供API。使用普通的機(jī)只能得到一般的彩像,而Xtion深度機(jī)無論在任何的光照條件下,都可以在獲得彩像的同時(shí),獲得被測(cè)物體到頭的深度信息。測(cè)量深光,通過測(cè)量時(shí)間差計(jì)算出設(shè)備與目標(biāo)物體之間的距離。Xtion體感設(shè)備是通過PrimeSense公司開發(fā)的光編碼技術(shù)(LightCoding)來獲得深度信息的。本質(zhì)上講,LightCoding技術(shù)理論,是利用連續(xù)光(近紅外線)對(duì)測(cè)量空間進(jìn)行編碼,經(jīng)感應(yīng)器編碼的光線,交由運(yùn)算進(jìn)行后,生成一幅具有深度信息的圖像。Xtion就是以紅外線發(fā)出人眼看不見的第一級(jí)鐳射光,透過鏡頭前的光柵,將鐳射可以通過OpenNI獲取場(chǎng)景的深度圖像。圖2.3展示了Xtion的原理。2.3XtionOpenNI圖像流現(xiàn)如今,OpenNIXtionPCAPI,本文使用的Xtion系統(tǒng)即是在PC端通過OpenNI框架來實(shí)現(xiàn)場(chǎng)景中深度圖像和彩像的,從而為后續(xù)工作的開展打下基礎(chǔ)。在場(chǎng)景的三維數(shù)據(jù)的過的重要步驟如下:JavaXtioninitialize()方法對(duì)其進(jìn)行初始化。在此過將會(huì)載入所有與OpenNI設(shè)備相關(guān)的驅(qū)動(dòng),并且檢測(cè)可用的OpenNI設(shè)備。擇使用的OpenNI設(shè)備。具體的做法是使用enumerateDevices(),列出所有可用的OpenNI設(shè)備,再通過其對(duì)應(yīng)的URI地址與設(shè)備進(jìn)行連接。JavaOpenNI的設(shè)備對(duì)象不僅可以URI連接或是關(guān)閉設(shè)備。它還為用戶提供了查詢和修改設(shè)備參數(shù)信息的方法。如果用戶需要通過OpenNI設(shè)備流,就需要在對(duì)應(yīng)的設(shè)備上流(深度流或是彩流)。設(shè)備對(duì)象,另一個(gè)就是用戶希望創(chuàng)建的流類型。流類型有三類,RGB流、圖像的頻率和圖像的格式。對(duì)于RGB流來說,圖像格式包括JPEG流與流到流數(shù)據(jù),需要添加Frame。Frame可以返回每一幀,將流以字節(jié)流會(huì)議系統(tǒng)中的main()方法中初始化OpenNI,加載需要的動(dòng)態(tài)庫與相關(guān)設(shè)備動(dòng),之后列出系統(tǒng)可以檢測(cè)到的設(shè)備,如果沒有檢測(cè)到OpenNI設(shè)備就會(huì)結(jié)束程序,否則,根據(jù)設(shè)備的URI地址,進(jìn)行設(shè)備連接。因?yàn)樵?D會(huì)議系統(tǒng)中,需要同時(shí)獲取場(chǎng)景的RGB圖像與深度圖像,所以我們要使用一個(gè)OpenNI設(shè)備對(duì)象構(gòu)造彩像視相同的,第二個(gè)流類型是不同的,分別是Color類型和Depth類型。創(chuàng)建兩種流后,要對(duì)兩種流分別進(jìn)行參數(shù)設(shè)置,因?yàn)榭紤]到流的同步問題,所以要采用相同頻率與相同的圖像分辨率,除此之外,對(duì)于Color類型的流,我們使用RGB格式。為了可以獲取每一幀,并對(duì)其進(jìn)行處理,需要對(duì)實(shí)例化的流類進(jìn),每一個(gè)實(shí)例化的流對(duì)象只能添加一次,在3D會(huì)議系統(tǒng)中,我們要分別對(duì)彩像流與深度圖像流添加。并且重寫方法,分別處理每一幀彩像與深度圖像。流是以字節(jié)流的方式、小尾端的格式提供給開發(fā)者的。我們?cè)趯?shí)現(xiàn)3D會(huì)議系統(tǒng)的過,也是按照字節(jié)流的順序保存圖像的。如果需要停止對(duì)流,就要先移除對(duì)流的,再關(guān)閉流。最終結(jié)束整個(gè)程序。流OpenNI的實(shí)講解在會(huì)議系統(tǒng)中OpenNI的具體實(shí)現(xiàn)。在3D會(huì)議系統(tǒng)的實(shí)現(xiàn)過,OpenNI場(chǎng)景三維信息主要涉及兩個(gè)類,如圖2.5,是兩個(gè)類的類圖。在類圖中列出了主要用到的變量與方法。第一個(gè)類是OpenniApplication類,它的主要變量是設(shè)備對(duì)象、流的分辨率、流頻率流程,首先實(shí)例化OpenniApplication類對(duì)象,之后調(diào)用初始化方法,由于每一個(gè)3D視頻會(huì)議系統(tǒng)只涉及使用一個(gè)OpenNI設(shè)備,所以默認(rèn)使用檢測(cè)到的第一個(gè)OpenNI設(shè)備。也就是說,在初始化的方法中加入了對(duì)OpenNI設(shè)備的檢測(cè)這一步驟,如果沒有檢測(cè)到任何OpenNI設(shè)備,則會(huì)返回false,意味著初始化失敗。相反,如果在初始化方法中檢測(cè)到了可用的OpenNI設(shè)備,則會(huì)將這個(gè)設(shè)備對(duì)象賦值給OpenniApplication類的設(shè)備參數(shù)。在創(chuàng)建流之前,我們可以先與將流有關(guān)參數(shù)賦值給OpenniApplication類中的變量。之后在調(diào)用OpenniViewer 類創(chuàng)建流時(shí),如果流的參數(shù)值不是NULL,則會(huì)直接調(diào)用OpenniViewer的方法,設(shè)置流的參數(shù)。量有流和幀,主要的方法有創(chuàng)建流、設(shè)置流參數(shù)、開始流的采集、結(jié)束流和添加流的。在OpenniViewer類的構(gòu)造方法中,有OpenniApplication對(duì)象的參數(shù),也就是說在創(chuàng)建流時(shí),需要用到設(shè)備對(duì)象。并且如果在創(chuàng)建流之前,OpenniApplication對(duì)象中與流參數(shù)有關(guān)的變量已被賦動(dòng)的調(diào)用。在開始流之前,需要調(diào)用添加的方法,對(duì)流進(jìn)行,如圖2.6所示,JMF中的編碼功能與功能是以插件的形式提供給用戶的。編碼許用戶控制處理的過程,編提供給用戶EncodingControl和DecodingControl兩個(gè)對(duì)利用getSupportedInputFormats()getSupportedOutputFormats()方法獲取編碼插件支持的編碼或是的輸入和輸出的格式。在用戶獲取編碼插件支持的格式以后,從中選取需要的格式,并且使用2.6JMFJMFjavax.media.rtp,javax.media.rtp.eventjavax.media.rtp.rtcp,這三個(gè)包中定義了與RTP相關(guān)的API,開發(fā)者可以使用相應(yīng)的方法對(duì)RTP流進(jìn)行傳輸或者。開發(fā)者還可以通過JMF的插件對(duì)RTP支持的格式進(jìn)行擴(kuò)展。2.7如圖2.7,對(duì)于接收到的數(shù)據(jù),開發(fā)者有3種處理方法。第一種是對(duì)數(shù)據(jù)進(jìn)行處理,將處理后的數(shù)據(jù)進(jìn)行保存;第二種是接收到的數(shù)據(jù);最后一種是對(duì)數(shù)據(jù)不做任何處理,直接保存在本地。比如,將RTP的API應(yīng)用于會(huì)議中,用戶可以聽見并回答RTPAPI作為數(shù)據(jù)的發(fā)送方,可以發(fā)送到的數(shù)據(jù)或是本地的數(shù)據(jù)。如圖2.8。2.82.9JMFRTP的框架結(jié)構(gòu)圖。JMFRTPAPI設(shè)計(jì)比較完善,可以滿處理RTP數(shù)據(jù)。下面是RTP操作的具體流程。使用SessionManager創(chuàng)建,初始化并開始一次會(huì)話使用DataSource(到的數(shù)據(jù)或是本地多數(shù)據(jù))構(gòu)造Processor對(duì)象調(diào)用通過SendStream的start()和stop()方法控制傳輸?shù)拈_始和結(jié)束之后,SessionManager會(huì)作為發(fā)送方,對(duì)會(huì)話進(jìn)行發(fā)送。當(dāng)傳輸結(jié)束之后,SendStream被釋放,SessionManager又會(huì)變?yōu)榻邮辗剑却硪欢说捻憫?yīng)。2.9RTPJavastatic變量是在編譯時(shí)就分配好內(nèi)存空間。在運(yùn)行時(shí)無論生成多少實(shí)例,static變量的值都是唯一的,開發(fā)者可以用類名直接調(diào)用static變量??梢詫⒉氏衽c深度圖像存入static變量中,使用的時(shí)候直接調(diào)用覆蓋的圖像資源??梢栽诔绦蛑袆?chuàng)建一個(gè)專門保存圖像的類,此類為部分提供set()方法,為編碼需要或者寫入時(shí),只需要調(diào)用相應(yīng)方法,即可使用資源。傳統(tǒng)的Java的IO操作是基于字節(jié)的,所以速度緩慢。本文要介紹的方法,是在JDK1.4NIO操作。NIO(buffer)(Channel)和選擇時(shí)操作直接轉(zhuǎn)操作系統(tǒng),使Java的IO速度得以提高。在實(shí)現(xiàn)的過,可以為彩色圖像設(shè)計(jì)大小為320*240*3的字節(jié)數(shù)組作為彩像的通道。為深度圖像設(shè)計(jì)大小為320*240的字節(jié)數(shù)組作為深度圖像的通道。在編碼與傳輸部分需要使用這部分資源時(shí),可以直接通道中的內(nèi)容,改善了原有的IO操作的性能,并且經(jīng)過測(cè)試,此方案的三的效率穩(wěn)定,并且NIO中提供對(duì)通道加鎖的操作,可以滿足每一幀的處OpenNIXtion體感設(shè)備獲取深度圖像的原理。對(duì)OpenNI的使用流程進(jìn)行了簡(jiǎn)單說明,在此基礎(chǔ)上詳細(xì)講解了在3D視頻會(huì)議系統(tǒng)中如何使用OpenNI獲取場(chǎng)景三維數(shù)據(jù)。之后說明了在3D會(huì)議系統(tǒng)中的資源進(jìn)行數(shù)據(jù)交流,所以在2.6小節(jié)提出了三種資源共享的方法,并選擇了符合3D會(huì)議系統(tǒng)需求的資源共享方法。DIBR方法的虛擬視點(diǎn)繪的公式對(duì)RGB圖像進(jìn)行視點(diǎn)轉(zhuǎn)換,本文提出了深度值與實(shí)際深度的轉(zhuǎn)化公式。DIBR要用戶提供場(chǎng)景的某一視點(diǎn)的彩像和與圖像對(duì)應(yīng)的深度信息。簡(jiǎn)單的來說,DIBR視點(diǎn)合成技術(shù)可以理解成如下兩個(gè)步驟:首先,原始的點(diǎn)被投影到3D世界,在這3D空間的點(diǎn)再被投影到另一個(gè)圖像平面,這個(gè)圖像平面可以代表一個(gè)虛擬機(jī)圖像平面[15]。這種圖像平面的變換稱作3D圖像變換。下面是具體的公式推導(dǎo)。不妨假設(shè)m是三點(diǎn)M在第一個(gè)照相機(jī)的平面中的投影,??′是點(diǎn)M在第二個(gè)照相機(jī)的平面中的投影。假設(shè)世界坐標(biāo)系等于第一個(gè)相機(jī)的坐標(biāo)系,兩個(gè)相機(jī)的投??? ??′? 第二個(gè)等式中,4*4的矩D包含了旋轉(zhuǎn)矩陣R和位移矩陣t,矩D表示了第二個(gè)圖像平面與世界坐標(biāo)系的轉(zhuǎn)換關(guān)系。3*3A代表了相機(jī)內(nèi)參數(shù)矩陣,P3*4的單??= ??′??′=????′?????1??+ 3D圖像變換公式,可以用來產(chǎn)生與已知圖像相關(guān)的任的內(nèi)參數(shù)3D空間的點(diǎn)的位置與深度已知,便可以根據(jù)公3.4合成3.1如圖3.1,位移感知方法中,兩臺(tái)相機(jī)的CCD傳感器位移距離h,匯聚距離????。由于兩臺(tái)相機(jī)是對(duì)稱放置的,他們的CCD感應(yīng)器與鏡頭的位置的相對(duì)位移相等。 ???=??+ 示左右兩個(gè)虛擬機(jī)的內(nèi)參數(shù)矩陣。 ????????1=

=??+ ???????=??(??+[0])+ 0如果假設(shè)兩臺(tái)相機(jī)的相對(duì)位置只存在水平位移 ???=?? + 其中??=[0 ???=??+????????+?,???= 水平方向的相機(jī)位移????等于相機(jī)距離????的一半,如果將距離帶有方向,則公式如下?????= +2h依賴于選擇的匯聚距離??????′=??′′h?=??? ??在基于深度圖像的虛擬視點(diǎn)的繪制(DIBR)過,會(huì)產(chǎn)生一些問題,例如于第三個(gè)問題,將在3.2.2節(jié)與3.2.3節(jié)加以討論。為了保證3D會(huì)議中每一幀圖像的處理速度,實(shí)際應(yīng)用中將使用簡(jiǎn)化的技術(shù)[7]。下面將對(duì)此方法進(jìn)行介紹3.2如圖3.2,為觀察者在顯示器前觀察的俯視圖,坐標(biāo)為(-e,0)和(e,0)的兩個(gè)點(diǎn)代表觀察者的雙眼。直線Y=D代表了顯示器所在的平面,顯示器所在的平面定義為零像的坐標(biāo)都為(x,D)。凸出顯示器之前,那么令雙眼的視差小于0,相反如果希望表示一個(gè)物體凹入顯示器之內(nèi),那么令雙眼的視差大于0。如果已知??(????,Y)點(diǎn),只需要計(jì)算虛擬視點(diǎn)??′(????+??,通過相似三角形,如圖3.4。我們可以列出表達(dá)式:?????????= 深度。將公式3.12進(jìn)行一步推導(dǎo),得到視差W的表達(dá)式:??=?????× 3.3為了將公3.13應(yīng)用到程序中,以RGB圖像的視點(diǎn)轉(zhuǎn)換,仍然需要解決兩個(gè)素為單位的像素差。在3D會(huì)議系統(tǒng)中,解決這個(gè)問題的方法是用視差W除以一

W=

但是我們從深度圖像中獲取的深度值為0到255的數(shù)值,而不是實(shí)際的深度文根據(jù)Xtion體感設(shè)備深度圖像的有效范圍在0.5米到5米,這一使用特性,將2550.55??=5?5?0.5× depth為深度圖像中的深度值,d為場(chǎng)景的實(shí)際深度。可見當(dāng)depth數(shù)值為0時(shí),d空洞問題一直伴隨著DIBR技術(shù),在本文中不僅在對(duì)RGB圖像進(jìn)行視點(diǎn)轉(zhuǎn)換時(shí)會(huì)Xtion體感設(shè)備獲取場(chǎng)景深度圖像時(shí)也會(huì)出現(xiàn)空洞現(xiàn)象。本節(jié)將根據(jù)DIBR技術(shù)所生成的虛擬視點(diǎn)圖像中,會(huì)存在一些或大或小的無填充空白區(qū)域,通體在生成的虛擬視點(diǎn)中出來了,投影時(shí)虛擬視點(diǎn)中新位置的像素點(diǎn)無法在原視3.5,場(chǎng)景中AB,AB離觀察者更近,觀察者左眼能觀察到兩條BA遮擋無法被看到。而在右眼中應(yīng)當(dāng)能觀察到兩條綠線范圍內(nèi)的物體,可見物體B在左眼中無法看到的部分在右眼中出3.5 ea基于快速行進(jìn)的修復(fù)算法[10],此修復(fù)算法基于的思想是,先處理待OpenCV計(jì)算一張圖像的時(shí)間為20毫秒,符合深度圖像的實(shí)時(shí)性。另外,本文中的深度圖3.7第一組圖的第二張,桌子左側(cè)邊緣出現(xiàn)空洞。所以3.6的方法可以更快的完成空洞的填補(bǔ),使用本文方法平均耗時(shí)為20毫秒而使用OpenCV的算法需要31毫秒。(a)RGB圖 (c)OpenCV算法修 (d)本文算法修D(zhuǎn)IBR技術(shù)引起的。主要原因是因?yàn)殡p眼視差的存在,有一些點(diǎn)會(huì)被右眼觀察到,但不會(huì)被左眼看見,所以利用DIBR技術(shù)將左眼的RGB圖像轉(zhuǎn)換為了符合會(huì)議系統(tǒng)的幀速需求,我們選用在3.2.1節(jié)中提到的第一種空洞修補(bǔ)的紅藍(lán)3D圖像。(a)RGB圖 (d)紅藍(lán)3D圖3.8本章首先解釋了傳統(tǒng)的DIBR技術(shù)原3.2.2小節(jié)根據(jù)Xtion體感設(shè)備的使用特性,提出了根據(jù)深度圖像求解實(shí)際深度的方法,在此基礎(chǔ)上應(yīng)用了簡(jiǎn)化的DIBR技術(shù)對(duì)RGB圖像進(jìn)行視點(diǎn)轉(zhuǎn)換。在3.2.2小節(jié)與3.2.3小節(jié)Xtion深度圖像的過與虛擬基于OpenNI的三維會(huì)議呈現(xiàn)系三維會(huì)議系統(tǒng)的關(guān)鍵技需要的庫文件,并且重新改寫數(shù)據(jù)的方式。需要說明的是會(huì)議系統(tǒng)Jitsi使用的是JAVA語言,而OpenNI需要用C語言來APIJni(JAVA本地調(diào)用)Java1.1開始,JavaNativeInterface(JNI)JavaJava代碼和其他語言寫的代碼進(jìn)行交互。OpenNISDK在2.2版本之后提供相應(yīng)的JNI代碼,所以使用的時(shí)候,只要將OpenNI的相關(guān)庫文件以jar包的形式添加到庫中就可以了。之后列出系統(tǒng)可以檢測(cè)到的設(shè)備,如果沒有檢測(cè)到OpenNI設(shè)備就會(huì)結(jié)束程序,否則,根據(jù)設(shè)備的URI地址,進(jìn)行設(shè)備連接。因?yàn)樵?D會(huì)議系統(tǒng)中,需要同時(shí)獲取場(chǎng)景的RGB圖像與深度圖像,所以我們要使用一個(gè)OpenNI設(shè)備對(duì)象構(gòu)造彩像流要對(duì)兩種流分別進(jìn)行參數(shù)設(shè)置,因?yàn)榭紤]到流的同步問題,所以要采用相同的式。為了可以獲取每一幀,并對(duì)其進(jìn)行處理,需要對(duì)實(shí)例化的流類進(jìn)行,每一個(gè)實(shí)例化的流對(duì)象只能添加一次,在3D會(huì)議系統(tǒng)中,我們要分別對(duì) 現(xiàn)3D會(huì)議系統(tǒng)的過,也是按照字節(jié)流的順序保存圖像的。如果需要停止對(duì)視頻流,就要先移除對(duì)流的,再關(guān)閉流。最終結(jié)束整個(gè)程序。在本文中,我們使用到的是RGB格式的流,大小為320*240,每秒鐘30幀。每一幀所占空間為320*240*3。深度流的大小為320*240,與彩像中的每一點(diǎn)的深度相對(duì)應(yīng),取值范圍是0~255,速度也是每秒30幀。由于OpenNI中提供深度圖像與彩像的同步機(jī)制,所以每次到的深度圖像與彩像也是同一時(shí)刻的畫面在進(jìn)行編碼時(shí)我們采用YUV格式的圖像要利用上文提到的公式對(duì)RGB格式Java多框有針對(duì)3D的特點(diǎn)對(duì)Java多框架進(jìn)行修改,所以在此直接使用Java多框架提供的API。JMF中的編允許用戶控制處理的過程,編提供給用戶EncodingControlDecodingControl兩個(gè)對(duì)象。這兩者提供給用戶調(diào)整編碼參數(shù)的方法,用戶可以自行修getSupportedInputFormats()方法和getSupportedOutputFormats()方法獲取編在用戶獲取編碼插件支持的格式以后,從中選取需要的格式,并且使用使用SessionManager創(chuàng)建,初始化并開始一次會(huì)話使用DataSource(到的數(shù)據(jù)或是本地多數(shù)據(jù))構(gòu)造Processor對(duì)象調(diào)用通過SendStream的start()和stop()方法控制傳輸?shù)拈_始和結(jié)束之后,SessionManager會(huì)作為發(fā)送方,對(duì)會(huì)話進(jìn)行發(fā)送。當(dāng)傳輸結(jié)束之后,SendStream被釋放,SessionManager又會(huì)變?yōu)榻邮辗剑却硪欢说捻憫?yīng)。Javastatic變量是在編譯時(shí)就分配好內(nèi)存空間。在運(yùn)行時(shí)無論生成多少實(shí)例,深度圖像存入static變量中,使用的時(shí)候直接調(diào)用覆蓋的圖像資源。可以在程序中創(chuàng)建一個(gè)專門保存圖像的類,此類為部分提供set()方法,為編碼需要或者寫入時(shí),只需要調(diào)用相應(yīng)方法,即可使用資源。傳統(tǒng)的Java的IO操作是基于字節(jié)的,所以速度緩慢。本文要介紹的方法,是在JDK1.4NIO操作。NIO(buffer)(Channel)和選擇時(shí)操作直接轉(zhuǎn)操作系統(tǒng),使Java的IO速度得以提高。在實(shí)現(xiàn)的過,可以為彩色圖像設(shè)計(jì)大小為320*240*3的字節(jié)數(shù)組作為彩像的通道。為深度圖像設(shè)計(jì)大小為320*240的字節(jié)數(shù)組作為深度圖像的通道。在編碼與傳輸部分需要使用這部分資源時(shí),可以直接通道中的內(nèi)容,改善了原有的IO操作的性能,并且經(jīng)過測(cè)試,此方案的三的效率穩(wěn)定,并且NIO中提供對(duì)通道加鎖的操作,可以滿足每一幀的處W=

D為零視差平面的深度,d為物體深度,e為雙眼之間的距離,??????????為一個(gè)像素對(duì)應(yīng)實(shí)際的物理尺寸,需要根據(jù)屏幕的大小與分辨率來確定。因?yàn)閺纳疃葓D像0255Xtion??=5?5?0.5× 的3D會(huì)議系統(tǒng)中。過配戴紅藍(lán)3D眼鏡,就可以觀察到場(chǎng)景的立體效果。有如下關(guān)系,RGBout=(Rl,Gr,Br)。就是說將左眼彩的紅色通道提取出來,右眼彩像的綠色與藍(lán)色通道提取出來,賦值給合成的紅藍(lán)圖像,最后便可得到紅藍(lán)3D三維會(huì)議系統(tǒng)的實(shí)圖4.2會(huì)議系統(tǒng)框如圖4.2,可以按照開源會(huì)議系統(tǒng)為用戶提供的服務(wù),簡(jiǎn)單的將其劃分為三部分,多種協(xié)議服務(wù)、多服務(wù)和UI界面服務(wù)。在畢設(shè)中,針對(duì)多服務(wù)部分進(jìn)圖4.3多服務(wù)結(jié)塊、模塊與數(shù)據(jù)流模塊。畢設(shè)主要針對(duì)其中模塊與數(shù)據(jù)流模塊進(jìn)行了修改,下面將根據(jù)模塊闡述3D會(huì)議系統(tǒng)的實(shí)現(xiàn)方法。資源交流通暢,比如,在會(huì)議系統(tǒng)剛剛啟動(dòng)時(shí),數(shù)據(jù)流模塊會(huì)對(duì)的設(shè)備進(jìn)行嘗 Format類中。Stream類,Datasource類。OpenNIURI地址。主要的方法有設(shè)置可用設(shè)備列表、設(shè)置或者獲取URI地址和設(shè)置或者獲取設(shè)備對(duì)象。Manager類的主要功能是,保存可以使用的OpenNI設(shè)備列表和正在使用的OpenNI設(shè)備。Manager類的存在主要是為了保留原會(huì)議系統(tǒng)的設(shè)備檢測(cè)功能。在會(huì)議系統(tǒng)啟動(dòng)的時(shí)候就會(huì)進(jìn)行一次設(shè)備的檢統(tǒng)代碼時(shí),將Manager類改進(jìn)成可以保留已連接的OpenNI設(shè)備地址。在會(huì)議進(jìn)行4.5CaptureDevice類的主要變量是幀的地址、設(shè)備支持的格式和設(shè)備狀態(tài),CaptureDevice類中出現(xiàn)了幀的地址,如果將這個(gè)long型的數(shù)值轉(zhuǎn)化為指向字用了Jni實(shí)現(xiàn)的native方法(native表示用其他語言編寫的方法之后通過Jni進(jìn)行調(diào)用)。除此之外,獲取幀地址的方法也是用Jni實(shí)現(xiàn)的native方法。 CaptureDevice類還會(huì)將設(shè)備支持的格式保留下來,可以方便用戶進(jìn)行格式切換。另外,CaptureDevice類還會(huì)將設(shè)備的狀態(tài)作為變量保存下來,比如設(shè)備是否連接。量都是以數(shù)組的形式保存在Format類中的,因?yàn)樵谑褂脮?huì)議功能的時(shí)候,要OpenNI支持的格式,一方面要獲取編碼與傳輸支持的格式,并且將兩者進(jìn)行比較。Format類的主要方法是將格式從String類型轉(zhuǎn)換到需要的參數(shù)值的方法Format類在連接編碼傳輸部分與部分起到重要作用Stream類的主要變量有時(shí)間戳和幀的緩沖區(qū),主要的方法有幀與為緩沖區(qū)中的幀加時(shí)間戳。Stream處理即將編碼與傳輸?shù)膸?,為其加成正在處理的幀與即將處理的幀這樣做可以提高并行效率,進(jìn)而實(shí)現(xiàn)3DDatasource類也會(huì)在編碼模塊與傳輸模塊中被使用,在緒論中介紹Java多框架時(shí),數(shù)據(jù)源主要就是指Datasource類。Datasource類主要的變量有CaptureDevice對(duì)象、Manager對(duì)象、Stream對(duì)象和幀速率。前三者在本小節(jié)詳細(xì)介紹過,它們的存在可以為Datasource類提供獲取設(shè)備與幀的方法,并且可以將幀到緩沖區(qū)中。Datasource類中的創(chuàng)建編碼傳輸?shù)牧鞯姆椒ň褪腔谶@三個(gè)對(duì)象。除此之外,幀速率的調(diào)節(jié)也是依靠Datasource類實(shí)現(xiàn)的。4.2.2模現(xiàn)了利用OpenNI對(duì)場(chǎng)景的三維數(shù)據(jù),并且通過重寫方法,實(shí)現(xiàn)了對(duì)每一幀OpenniApplication類,它的主要變量是設(shè)備對(duì)象、流的分辨率、流化OpenniApplication類對(duì)象,之后調(diào)用初始化方法,由于每一個(gè)3D會(huì)議系統(tǒng)只涉及OpenNIOpenNI設(shè)備。也就是說,在初OpenNIOpenNI設(shè)備,則會(huì)返回false,意味著初始化失敗。相反,如果在初始化方法中檢測(cè)到了可用的OpenNIOpenniApplication類的設(shè)備參數(shù)。在創(chuàng)建視OpenniViewer類創(chuàng)建流時(shí),如果流的參數(shù)值不是NULL,則會(huì)直接調(diào)用OpenniViewer的方法,設(shè)置流的參數(shù)。開始流、結(jié)束流和添加流的。在Open

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論