魚眼圖像的3d交互顯示方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種魚眼圖像的3D交互顯示方法和系統(tǒng)。該方法包括如下步驟:將魚眼圖像根據(jù)預(yù)先選擇的3D顯示模型進(jìn)行3D顯示;在魚眼圖像3D顯示的同時(shí),讀取交互消息進(jìn)行模型狀態(tài)更新,根據(jù)所述交互消息的信息利用3D顯示模型的方法進(jìn)行計(jì)算,對3D顯示的圖像進(jìn)行交互;繼續(xù)等待或處理新的交互消息,直至退出。其使得交互操作更流暢和人性化,體驗(yàn)效果更好。顯示效果更優(yōu)秀,無死角,有身臨其境的直觀感受。
【專利說明】
魚眼圖像的3D交互顯示方法和系統(tǒng)
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及全景顯示技術(shù),特別是針對魚眼鏡頭拍攝的圖像的3D交互顯示方法和系統(tǒng),應(yīng)用于虛擬現(xiàn)實(shí)、科學(xué)研究、娛樂、監(jiān)控等各種領(lǐng)域。
【背景技術(shù)】
[0002]魚眼圖像是指采用魚眼鏡頭拍攝的圖像,如圖1所示,包含的視野范圍廣,通常魚眼鏡頭的水平和垂直視野等于或者超過360°xl80°,近年來應(yīng)用越來越廣泛,例如在虛擬現(xiàn)實(shí)、科學(xué)研究、娛樂、監(jiān)控領(lǐng)域。
[0003]現(xiàn)有的魚眼圖像在顯示時(shí),其畸變非常嚴(yán)重,不是人眼習(xí)慣的矩形,而是一個(gè)圓形,因此需要對魚眼要顯示的魚眼圖像進(jìn)行校正,使其符合人眼的視覺習(xí)慣。
[0004]現(xiàn)有的魚眼圖像的校正方法,如球面成像模型、拋物面成像模型、經(jīng)度校正模型等,現(xiàn)有的魚眼交互顯示技術(shù),通常是在魚眼圖像中預(yù)置幾個(gè)點(diǎn),通過校正算法得到以每個(gè)預(yù)置點(diǎn)為中心的無畸變的局部校正圖像,它們被平鋪在屏幕上進(jìn)行觀看,校正顯示為某一矩形區(qū)域。
[0005]但現(xiàn)有魚眼圖像交互校正顯示技術(shù)在根據(jù)設(shè)備輸入的交互消息進(jìn)行交互的過程中,再進(jìn)行魚眼圖像的再校正的方式這種交互顯示方法的缺點(diǎn)很明顯:只能看到以預(yù)置點(diǎn)為中心的有限的幾個(gè)視角,其它包含在魚眼圖像的信息則被遺漏,使得視野范圍大為縮小,效果與多個(gè)普通攝像頭是類似的,魚眼圖像作為一種全景圖像的優(yōu)越性沒有得到體現(xiàn)。體現(xiàn)在于現(xiàn)有交互校正顯示技術(shù)不夠便捷,操作定位不精確,校正后顯示的效果不理想,畸變較大。
【發(fā)明內(nèi)容】
[0006]本發(fā)明針對現(xiàn)有技術(shù)中存在的上述問題,提出一種魚眼圖像的3D交互顯示方法和系統(tǒng)。其將魚眼圖像轉(zhuǎn)化成3D模型后的交互方法,實(shí)現(xiàn)魚眼照片和/或視頻的多種3D顯示和交互,定位操作更精確,體驗(yàn)效果更好。
[0007]本發(fā)明的技術(shù)方案為:
[0008]提供一種魚眼圖像的3D交互顯示方法,包括如下步驟:
[0009]將魚眼圖像根據(jù)預(yù)先選擇的3D顯示模型進(jìn)行3D顯示;
[0010]在魚眼圖像3D顯示的同時(shí),讀取交互消息進(jìn)行模型狀態(tài)更新,根據(jù)所述交互消息的信息利用3D顯示模型的方法進(jìn)行計(jì)算,對3D顯示的圖像進(jìn)行交互;
[0011 ] 繼續(xù)等待或處理新的交互消息,直至退出。
[0012]為實(shí)現(xiàn)本發(fā)明目的,還提供一種魚眼圖像的3D交互顯示系統(tǒng)。
[0013]本發(fā)明具有如下有益效果:
[0014]本發(fā)明魚眼圖像的3D交互顯示方法和系統(tǒng),其將魚眼圖像轉(zhuǎn)化成3D模型后的交互,魚眼圖像所包含的全景信息沒有任何遺漏。交互操作更流暢和人性化,體驗(yàn)效果更好。顯示效果更優(yōu)秀,無死角,有身臨其境的直觀感受。其實(shí)現(xiàn)魚眼照片和視頻的多種3D顯示和交互,定位操作更精確,體驗(yàn)效果更好。
【附圖說明】
[0015]為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對實(shí)施例描述中所需要的附圖做簡單的介紹,顯而易見地,下面描述的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0016]圖1為原始魚眼圖像不意圖。
[0017]圖2為本發(fā)明實(shí)施例的3D模型坐標(biāo)系和觀察點(diǎn)示意圖。
[0018]圖3(a)為本發(fā)明實(shí)施例圖1的原始魚眼圖像圓盤平面模型示意圖。
[0019]圖3(b)為本發(fā)明實(shí)施例圖1的原始魚眼圖像矩形平面模型示意圖。
[0020]圖4(a)為本發(fā)明實(shí)施例的半球/球面模型分別用于魚眼鏡頭水平向上時(shí)拍攝的魚眼圖像示意圖。
[0021]圖4(b)為本發(fā)明實(shí)施例的半球/球面模型分別用于魚眼鏡頭水平向下時(shí)拍攝的魚眼圖像示意圖。
[0022]圖5為本發(fā)明實(shí)施例的柱面模型示意圖。
[0023]圖6為本發(fā)明實(shí)施例的交互顯示區(qū)域的坐標(biāo)系示意圖。
[0024]圖7為本發(fā)明實(shí)施例魚眼圖像的3D交互顯示方法示意圖。
[0025]圖8為本發(fā)明實(shí)施例的記錄的表征量示意圖。
[0026]圖9為本發(fā)明實(shí)施例的成像在XY平面,旋轉(zhuǎn)軸為Z軸的坐標(biāo)軸示意圖。
[0027]圖10為本發(fā)明實(shí)施例的成像在XY平面,旋轉(zhuǎn)軸為Z軸平面展開圖像的旋轉(zhuǎn)方法流程圖。
[0028]圖11為本發(fā)明實(shí)施例的除成像在XY平面,旋轉(zhuǎn)軸為Z軸外的平面展開圖像的旋轉(zhuǎn)方法流程圖。
【具體實(shí)施方式】
[0029]下面結(jié)合說明書附圖對本發(fā)明實(shí)施例的魚眼圖像的3D交互顯示方法和系統(tǒng)【具體實(shí)施方式】作詳細(xì)說明。
[0030]本發(fā)明利用3D渲染技術(shù),例如OpenGL,建立3D模型,例如球、半球、圓柱、立方體、平面等;將魚眼圖像作為紋理圖像貼在3D模型上;通過交互操作,改變模型大小/方位、視點(diǎn)位置、視線方向及視野大小等等;最終將3D渲染結(jié)果顯示在屏幕上。
[0031]如圖2所示,3D模型坐標(biāo)系與OpenGL世界坐標(biāo)系的定義【笛卡爾(Descartes)右手坐標(biāo)系】是一致的,便于采用OpenGL技術(shù)進(jìn)行3D渲染。其中,顯示窗口位于xy平面內(nèi),z軸正方向指向顯示窗口外。
[0032]對于大多數(shù)模型而言,觀察位置為從Z軸正方向朝Z軸負(fù)方向查看,如圖2所示。
[0033]圖3(a)圓盤模型通常用于展示圖1的原始魚眼圖像。圖3(b)矩形模型通常用于展示各種展開圖,例如360°展開、180°展開、定點(diǎn)局部展開等。平面模型的中心點(diǎn)位于坐標(biāo)系中(0,0,0)位置。
[0034]圖4(a)(b)半球/球面模型分別用于魚眼鏡頭水平向上和向下時(shí)拍攝的魚眼圖像。
[0035]圖5的柱面模型支持鏡頭水平向上、向下兩種模式。
[0036]為了使3D渲染后的圖像更適合觀察者的角度,本發(fā)明實(shí)施例實(shí)現(xiàn)了一種魚眼圖像的3D交互顯示方法,其通過在顯示區(qū)域內(nèi)的交互操作,動(dòng)態(tài)調(diào)整模型位置和朝向。
[0037]其中,交互顯示區(qū)域的坐標(biāo)系如圖6所示,區(qū)域的左上角為坐標(biāo)原點(diǎn)(0,0),向右為X正方向,向下為Y軸正方向,區(qū)域的右下角坐標(biāo)為(W,h),w為顯示區(qū)域的寬度(單位:像素Pixel),h為高度(單位:像素Pixel)。
[0038]如圖7所示,模型的顯示包含兩個(gè)主要過程,上部是多媒體流水線顯示流程,下部是交互消息循環(huán)流程。上部從下部的流程中得到模型狀態(tài)。
[0039]本發(fā)明實(shí)施例中的魚眼圖像的3D交互顯示方法,可應(yīng)用OpenGL或者D3D技術(shù)中實(shí)現(xiàn)。
[0040]下面以O(shè)penGL為例,本發(fā)明實(shí)施例的魚眼圖像的3D交互顯示方法,包括如下步驟:
[0041]將魚眼圖像根據(jù)預(yù)先選擇的3D顯示模型進(jìn)行3D顯示;
[0042]在顯示3D圖像的同時(shí),讀取交互消息進(jìn)行模型狀態(tài)更新,根據(jù)交互消息的信息利用3D顯示模型的方法進(jìn)行計(jì)算,對3D顯示的圖像進(jìn)行交互;
[0043]繼續(xù)等待或處理新的交互消息,直至退出。
[0044]下面詳細(xì)描述本發(fā)明實(shí)施例的步驟:將魚眼圖像根據(jù)預(yù)先選擇的3D顯示模型進(jìn)行3D顯示。
[0045]首先,在將魚眼圖像處理為紋理圖像后,根據(jù)預(yù)先選擇3D顯示模型,得到對應(yīng)的3D頂點(diǎn)坐標(biāo)數(shù)組、紋理坐標(biāo)數(shù)組和頂點(diǎn)索引數(shù)組。
[0046]魚眼圖像可以直接或者經(jīng)過簡單處理,例如裁剪掉沒有圖像信息的黑色區(qū)域,作為紋理圖像。
[0047]根據(jù)系統(tǒng)當(dāng)前設(shè)置選擇具體的3D顯示模型(如圓盤、半球、圓柱、360度水平展開、任意視角平面展開、小行星等),得到對應(yīng)的3D頂點(diǎn)坐標(biāo)數(shù)組、紋理坐標(biāo)數(shù)組和頂點(diǎn)索引數(shù)組。
[0048]然后,根據(jù)當(dāng)前模型的查看狀態(tài),使用OpenGL的模型變換、視口變換、投影變換功能函數(shù)設(shè)置模型位置、觀察位置、顯示區(qū)域等參數(shù)。
[0049]其后,使用OpenGL的綁定紋理功能函數(shù)綁定好紋理圖像。
[0050]最后,使用OpenGL渲染函數(shù)進(jìn)行3D渲染。
[0051]本發(fā)明實(shí)施例,作為一種可實(shí)施方式,以視頻為例進(jìn)行說明:
[0052 ]從視頻中分離出圖像流數(shù)據(jù);
[0053 ]將圖像流數(shù)據(jù)進(jìn)行解碼得到幀圖像;
[0054]將幀圖像直接或者經(jīng)過簡單處理后作為紋理圖像,與魚眼圖像的處理相同。
[0055]下面詳細(xì)描述本發(fā)明實(shí)施例的步驟:在顯示3D圖像的同時(shí),讀取交互消息進(jìn)行模型狀態(tài)更新,根據(jù)交互消息的信息利用3D顯示模型的方法進(jìn)行計(jì)算,對3D顯示的圖像進(jìn)行交互。
[0056]為了使展開后的圖像更適合觀察者的角度,因此本發(fā)明實(shí)施例通過魚眼圖像的3D交互顯示方法,實(shí)現(xiàn)在顯示區(qū)域內(nèi)交互來調(diào)節(jié)模型位置。
[0057]首先,分析交互消息的類型,解析成為基本操作類型。
[0058]所述交互消息的類型,包括但不限于鼠標(biāo)、觸控、傳感器等計(jì)算機(jī)的輸入類型輸入的消息。
[0059]將交互消息解析成為基本操作類型,如控制點(diǎn)從位置(X0,y0)移動(dòng)到位置(xl,yl),或以(x0,y0)為中心放大或縮小delta倍。其是一種現(xiàn)有技術(shù),因此在本發(fā)明實(shí)施例中,不再詳細(xì)描述。
[0060]然后,將輸入消息根據(jù)3D顯示模型的方法進(jìn)行計(jì)算,得到新的模型狀態(tài),將新的模型狀態(tài)應(yīng)用到當(dāng)前魚眼圖像進(jìn)行交互顯示。
[0061 ]作為一種可實(shí)施方式,下面通過多個(gè)實(shí)施例詳細(xì)描述本發(fā)明實(shí)施例中所述的模型狀態(tài)及3D顯示模型的方法。
[0062]作為一種較佳的實(shí)施方式,每一種3D模型都有對應(yīng)的顯不狀態(tài),在切換模型時(shí),先保存記錄原模型的狀態(tài),加載模型數(shù)據(jù)后再應(yīng)用新的模型狀態(tài),在短暫的切換瞬間可以達(dá)到無縫顯示,提高用戶體驗(yàn)效果。
[0063]模型狀態(tài)包括但不限于當(dāng)前模型的世界坐標(biāo)系矩陣(worldmatrix)、模型坐標(biāo)系矩陣(project matrix)、觀察矩陣(view matrix)、視口(viewport)。
[0064]在本發(fā)明實(shí)施例中,當(dāng)窗口顯示區(qū)域變化時(shí),視口進(jìn)行相應(yīng)的變化,其它情況下視口保持不變。作為一種可實(shí)施方式,視口值(viewport)為整個(gè)繪制緩沖區(qū)(backbuffer)的大小。
[0065]為了靈活計(jì)算得到模型狀態(tài)的變化結(jié)果,本發(fā)明實(shí)施例中,如圖8所示,除了記錄初始的三個(gè)狀態(tài)矩陣(world matrix、pro ject matrix、view matrix),還記錄了每個(gè)模型對應(yīng)于這三個(gè)矩陣的表征量,包括在X、Y、Z三個(gè)坐標(biāo)軸的旋轉(zhuǎn)角度dx、dy、dz、以及三個(gè)方向上的位移量 off setX、off setY、off setZ、觀察點(diǎn)狀態(tài)(eye、at、up、aspect、fovy、zn、zf)。將模型狀態(tài)量用一個(gè)結(jié)構(gòu)體形式表不如下:
[0066]struct model_state
[0067]{
[0068]float eye[3];
[0069]float at[3];
[0070]float up[3];
[0071]float fovy ;
[0072]float aspect;
[0073]float zn;
[0074]float zf ;
[0075]float offsetX,offsetY,offsetZ;
[0076]float dx,dy,dz;
[0077]};
[0078]其中,eye表示在坐標(biāo)系中觀察點(diǎn)的坐標(biāo),at表示觀察視線的方向位置,up表示相對于觀察方向的向上正方向,fovy是觀察角度,aspect是觀察角的橫縱比例,zn是投影近平面的距離,zf是遠(yuǎn)平面的距離,off setX、off setY、off setZ依次為模型在坐標(biāo)系三個(gè)坐標(biāo)軸方向上的位移,dx、dy、dz依次模型相對于三個(gè)坐標(biāo)軸的旋轉(zhuǎn)角度。
[0079]實(shí)施一:
[0080]作為一種可實(shí)施方式,當(dāng)需要放大或縮小模型比例為原來的delta倍時(shí),調(diào)整當(dāng)前模型狀態(tài)的fovy,3D顯示模型的方法為:
[0081]fovy = fovy/delta
[0082]即視角變小時(shí),看到的范圍變小,在同等大小的顯示區(qū)域里顯示圖像變大;視角變大時(shí),同等大小的顯示區(qū)域里圖像變小。
[0083]實(shí)施二:
[0084]作為另一種可實(shí)施方式,在本發(fā)明實(shí)施例中,當(dāng)控制點(diǎn)移動(dòng)時(shí),對應(yīng)不同的模型會(huì)帶來不同的效果。在模型查看時(shí),有不同的平移和旋轉(zhuǎn)等效果,因此,所述3D顯示模型的方法為:
[0085]旋轉(zhuǎn)幅度的判斷根據(jù)實(shí)際的顯示區(qū)域像素值大小設(shè)定一個(gè)閾值后采用點(diǎn)(x0,y0)至IJUl,yl)的距離D作為逼近值計(jì)算,這個(gè)距離D與顯示區(qū)域?qū)挾萕的比值即為本實(shí)施例操作z軸的旋轉(zhuǎn)角度,并將結(jié)果累加到狀態(tài)結(jié)構(gòu)的dz變量上。
[0086]作為另一種更佳的實(shí)施例,本發(fā)明實(shí)施例中,利用三種不同的3D顯示模型的方法得到新的模型狀態(tài):
[0087]A)平面展開圖像的旋轉(zhuǎn)方法;
[0088]B)平面展開圖像的平移方法;
[0089]C)球環(huán)類立體圖像的交互方法;
[0090]下面詳細(xì)描述三種方法:
[0091]實(shí)施三:
[0092]A)平面展開圖像的旋轉(zhuǎn)方法:
[0093]步驟AlOO,設(shè)成像在XY平面,旋轉(zhuǎn)軸為Z軸,而且旋轉(zhuǎn)軸位于點(diǎn)(x,y)上,如圖9所示,其中的十字線交點(diǎn),操作方法為控制點(diǎn)從(xO,yO)移動(dòng)到(XI,y I),交互為一個(gè)繞點(diǎn)(x,y)的順時(shí)針或逆時(shí)針移動(dòng)交互,然后進(jìn)入步驟三;
[0094]111)如果xO等于X,即移動(dòng)位置的起始點(diǎn)在Y軸上,執(zhí)行步驟112;否則執(zhí)行步驟121;
[0095]112)如果yO大于y,即起始點(diǎn)在Y軸下半軸上,執(zhí)行步驟113;反之執(zhí)行步驟114;
[0096]113)若xl大于x0,即得到旋轉(zhuǎn)方向?yàn)槟鏁r(shí)針,反之為順時(shí)針,然后進(jìn)入步驟三;
[0097]114)若xl大于x0,即得到旋轉(zhuǎn)方向?yàn)轫槙r(shí)針,反之為逆時(shí)針,然后進(jìn)入步驟三;
[0098]121)如果xl等于X,即移動(dòng)位置的終止點(diǎn)在Y軸上,執(zhí)行步驟122;否則執(zhí)行步驟A200;
[0099]122)如果yl大于y,即終止點(diǎn)在Y軸下半軸上,執(zhí)行步驟123,反之執(zhí)行步驟124;
[0100]123)如果xl大于x0,即得到旋轉(zhuǎn)方向?yàn)槟鏁r(shí)針,反之為順時(shí)針,然后進(jìn)入步驟三;
[0101]124)如果xl大于x0,即得到旋轉(zhuǎn)方向?yàn)轫槙r(shí)針,反之為逆時(shí)針,然后進(jìn)入步驟三。
[0102]步驟A200,否則,以(x,y)作為坐標(biāo)軸原點(diǎn)重新定義兩個(gè)坐標(biāo)軸X軸和Y軸,并將區(qū)域分成四個(gè)象限,右下角為I象限、左下角為2象限、左上角為3象限、右上角為4象限;
[0103]步驟“00,計(jì)算得到詘=(70-7)/(別1),1^1= (71-7)/(叉11);
[0104]步驟A400,根據(jù)kO和kl的比較結(jié)果,將圖像在各個(gè)象限之間進(jìn)行新的模型狀態(tài),然后進(jìn)入步驟二;
[0105]由于信號(hào)采集的連續(xù)性,可以認(rèn)為當(dāng)前情況為在同一象限內(nèi)移動(dòng)。若kO大于kl,則為逆時(shí)針,然后進(jìn)入步驟三;反之為順時(shí)針,然后進(jìn)入步驟三。
[0106]所述步驟A400包括如下步驟:
[0107]132)若kO小于O且kl大于0,即從2或4象限移動(dòng)到I或3象限,執(zhí)行步驟133;否則執(zhí)行步驟139;
[0108]133)若xO小于X且yO大于y,即從2象限開始移動(dòng),執(zhí)行步驟134,否則執(zhí)行136;
[0109]134)若xl大于X且yl大于y,即移動(dòng)到I象限,為逆時(shí)針旋轉(zhuǎn),然后進(jìn)入步驟三;否則執(zhí)行135;
[0110]135)若xl小于X且yl小于y,即移動(dòng)到3象限,為順時(shí)針旋轉(zhuǎn),然后進(jìn)入步驟三;
[0111]136)若別大于1且70小于7,即從4象限開始移動(dòng),執(zhí)行步驟137;
[0112]137)若xl大于X且yl大于y,即移動(dòng)到I象限,為順時(shí)針旋轉(zhuǎn),然后進(jìn)入步驟三;否則執(zhí)行138;
[0113]138)若xl小于X且yl小于y,即移動(dòng)到3象限,為逆時(shí)針旋轉(zhuǎn),然后進(jìn)入步驟三;
[0114]139)若kO大于O且kl小于0,則從I或3象限移動(dòng)到2或4象限,執(zhí)行步驟1310;否則進(jìn)入步驟三;
[0?? 5] 1310)若xO小于X且yO小于y,即從3象限開始移動(dòng),執(zhí)行步驟1311,否則執(zhí)行1313;
[0116]1311)若xl大于X且yl小于y,即移動(dòng)到4象限,為順時(shí)針旋轉(zhuǎn),然后進(jìn)入步驟三;否則執(zhí)行1312;
[0117]1312)若xl小于X且yl大于y,即移動(dòng)到2象限,為逆時(shí)針旋轉(zhuǎn),然后進(jìn)入步驟三;
[0118]1313)若xO大于X且yO大于y,即從I象限開始移動(dòng),執(zhí)行步驟1314;
[0119]1314)若xl大于X且yl小于y,即移動(dòng)到4象限,為逆時(shí)針旋轉(zhuǎn),否則執(zhí)行1315;
[0120]1315)若xl小于X且yl大于y,即移動(dòng)到2象限,為順時(shí)針旋轉(zhuǎn),然后進(jìn)入步驟三。
[0121]實(shí)施例四:
[0122]B)平面展開圖像的平移方法
[0123]只有當(dāng)圖像的完整大小大于顯示區(qū)域時(shí),才允許對圖像進(jìn)行平移顯示。作為一種可實(shí)施方式,當(dāng)圖像的長度大于顯示區(qū)域長度時(shí)允許左右平移,當(dāng)圖像的高度大于顯示區(qū)域的高度時(shí)允許上下平移。
[0124]作為一種可實(shí)施方式,所述平面展開圖像的平移方法包括如下步驟:
[0125]BI)記錄當(dāng)前狀態(tài)的fovy與初始狀態(tài)的fovy的比值,以及當(dāng)前展開圖像對應(yīng)于原始魚眼圖像的弧度值,和當(dāng)前顯示區(qū)域?qū)挾龋?br>[ΟΙ26] B2)計(jì)算得到單位顯示像素對應(yīng)的寬高模型單位ID^Puy;
[0127]B3)計(jì)算水平方向位移得到移動(dòng)幅度為(xl-x0)*ux,并累加到模型狀態(tài)的dx變量;
[0128]B4)計(jì)算垂直方向位移得到移動(dòng)幅度為(yl-y0)*uy,并累加到模型狀態(tài)的dy變量;[ΟΙ29] B5)重新根據(jù)dx和dy生成平面展開圖像。
[0130]實(shí)施例五:
[0131]C)球環(huán)類立體圖像的交互方法
[0132]球環(huán)類立體模型,當(dāng)控制點(diǎn)移動(dòng)時(shí),帶來的效果是對模型進(jìn)行旋轉(zhuǎn),旋轉(zhuǎn)方式是先旋轉(zhuǎn)Z方向,然后旋轉(zhuǎn)Y方向,再旋轉(zhuǎn)X方向。一般地,作為一種可實(shí)施方式,可以不考慮Z方向的旋轉(zhuǎn),只旋轉(zhuǎn)Y方向和X方向。
[0133]根據(jù)觀察點(diǎn)位置的不同,分為兩種計(jì)算模式:
[0134]Cl)對于觀察點(diǎn)在模型外的情況,設(shè)初始狀態(tài)時(shí),觀察到的角度范圍是完整模型,即180度,對應(yīng)的顯示像素寬度為W,高度為h。則計(jì)算X方向移動(dòng)時(shí)旋轉(zhuǎn)的角度為:
[0135]dx = dx+180*(xl_x0)/w
[0136]dy = dy+180*(yl-y0)/h
[0137]然后可在X和Y方向上旋轉(zhuǎn)dx和dy得到模型的最終狀態(tài)。
[0138]C2)對于觀察點(diǎn)在模型內(nèi)的情況,設(shè)當(dāng)前觀察點(diǎn)的位置在模型中心,則計(jì)算公式為:
[0139]dx = dx+f ovy 氺 aspect氺(xl _x0 )/w
[0140]dy = dy+f ovy*(yl-y0)/h
[0141]在模型旋轉(zhuǎn)后,在根據(jù)offSetX、offsetY、offsetZ來進(jìn)行模型位置的平移調(diào)整。
[0142]本發(fā)明實(shí)施例的魚眼圖像的3D交互顯示方法和系統(tǒng),其將魚眼圖像轉(zhuǎn)化成3D模型后的交互,魚眼圖像所包含的全景信息沒有任何遺漏。交互操作更流暢和人性化,體驗(yàn)效果更好。顯示效果更優(yōu)秀,無死角,有身臨其境的直觀感受。其實(shí)現(xiàn)魚眼照片和視頻的多種3D顯示和交互,定位操作更精確,體驗(yàn)效果更好。
[0143]本領(lǐng)域普通技術(shù)人員應(yīng)該還可以進(jìn)一步意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來實(shí)現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。本領(lǐng)域普通技術(shù)人員可以對每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
[0144]結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以用硬件、處理器執(zhí)軌道的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(RAM)、內(nèi)存、只讀存儲(chǔ)器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動(dòng)磁盤、⑶-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。
[0145]以上所述的【具體實(shí)施方式】,對本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)軌道了進(jìn)一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的【具體實(shí)施方式】而已,并不用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【主權(quán)項(xiàng)】
1.一種魚眼圖像的3D交互顯示方法,其特征在于,包括如下步驟: 將魚眼圖像根據(jù)預(yù)先選擇的3D顯示模型進(jìn)行3D顯示; 在魚眼圖像3D顯示的同時(shí),讀取交互消息進(jìn)行模型狀態(tài)更新,根據(jù)所述交互消息的信息利用3D顯示模型的方法進(jìn)行計(jì)算,對3D顯示的圖像進(jìn)行交互; 繼續(xù)等待或處理新的交互消息,直至退出。2.根據(jù)權(quán)利要求1所述的魚眼圖像的交互顯示方法,其特征在于,所述進(jìn)行3D顯示,包括如下步驟: 在將魚眼圖像處理為紋理圖像后,根據(jù)預(yù)先選擇3D顯示模型,得到對應(yīng)的3D頂點(diǎn)坐標(biāo)數(shù)組、紋理坐標(biāo)數(shù)組和頂點(diǎn)索引數(shù)組; 根據(jù)當(dāng)前模型的查看狀態(tài),使用OpenGL的模型變換、視口變換、投影變換功能函數(shù)設(shè)置模型位置、觀察位置、顯示區(qū)域等參數(shù); 使用OpenGL的綁定紋理功能函數(shù)綁定好紋理圖像; 使用OpenGL渲染函數(shù)進(jìn)行3D渲染。3.根據(jù)權(quán)利要求1所述的魚眼圖像的交互顯示方法,其特征在于,所述模型狀態(tài)更新,還包括如下步驟: 在切換模型時(shí),先保存記錄原模型的狀態(tài),加載模型數(shù)據(jù)后再應(yīng)用新的模型狀態(tài)。4.根據(jù)權(quán)利要求1所述的魚眼圖像的交互顯示方法,其特征在于,所述模型狀態(tài)包括當(dāng)前模型的世界坐標(biāo)系矩陣world matrix、模型坐標(biāo)系矩陣project matrix、觀察矩陣viewmatrix、視口 viewport ;以及每個(gè)模型對于所述三個(gè)矩陣的表征量,包括在X、Y、Z三個(gè)坐標(biāo)軸的旋轉(zhuǎn)角度(^、(^、(^、以及三個(gè)方向上的位移量(^€86七乂、(^€86七¥、(^€86七2、觀察點(diǎn)狀態(tài)(eye、at、up、aspect、fovy、zn、zf);將模型狀態(tài)量用一個(gè)結(jié)構(gòu)體形式表示如下: struct model_state { float eye[3]; float at[3]; float up[3]; float fovy; float aspect; float zn; float zf; float offsetX?offsetY?offsetZ; float dx,dy,dz; }; 其中,eye表示在坐標(biāo)系中觀察點(diǎn)的坐標(biāo),at表示觀察視線的方向位置,up表示相對于觀察方向的向上正方向,fovy是觀察角度,aspect是觀察角的橫縱比例,zn是投影近平面的距離,Zf是遠(yuǎn)平面的距離,off setx、off setY、off setz依次為模型在坐標(biāo)系三個(gè)坐標(biāo)軸方向上的位移,dx、dy、dz依次模型相對于三個(gè)坐標(biāo)軸的旋轉(zhuǎn)角度; 視口值viewport為整個(gè)繪制緩沖區(qū)的大小。5.根據(jù)權(quán)利要求4所述的魚眼圖像的交互顯示方法,其特征在于,當(dāng)需要放大或縮小模型比例為原來的de I ta倍時(shí),調(diào)整當(dāng)前模型狀態(tài)的fovy,計(jì)算方法為:fovy = fovy/de Ita 即視角變小時(shí),看到的范圍變小,在同等大小的顯示區(qū)域里顯示圖像變大;視角變大時(shí),同等大小的顯示區(qū)域里圖像變小。6.根據(jù)權(quán)利要求4所述的魚眼圖像的交互顯示方法,其特征在于,當(dāng)控制點(diǎn)移動(dòng)時(shí),旋轉(zhuǎn)幅度的判斷根據(jù)實(shí)際的顯示區(qū)域像素值大小設(shè)定一個(gè)閾值后采用點(diǎn)(xO,yO)到(Xl,yl)的距離D作為逼近值計(jì)算; 這個(gè)距離D與顯示區(qū)域?qū)挾葁的比值即為操作z軸的旋轉(zhuǎn)角度,并將結(jié)果累加到狀態(tài)結(jié)構(gòu)的dz變量上。7.根據(jù)權(quán)利要求4所述的魚眼圖像的交互顯示方法,其特征在于,對應(yīng)不同的3D顯示模型,利用 平面展開圖像的旋轉(zhuǎn)方法 和/或 平面展開圖像的平移方法 和/或 球環(huán)類立體圖像的交互方法 得到新的模型狀態(tài)。8.根據(jù)權(quán)利要求7所述的魚眼圖像的交互顯示方法,其特征在于,所述平面展開圖像的旋轉(zhuǎn)方法,包括如下步驟: 設(shè)成像在XY平面,旋轉(zhuǎn)軸為Z軸,而且旋轉(zhuǎn)軸位于點(diǎn)(X,y)上,操作方法為控制點(diǎn)從UO,yO)移動(dòng)到(Xl,yl),交互為一個(gè)繞點(diǎn)(x,y)的順時(shí)針或逆時(shí)針移動(dòng)交互,然后等待新的交互消息或者退出; 否則,以(x,y)作為坐標(biāo)軸原點(diǎn)重新定義兩個(gè)坐標(biāo)軸X軸和Y軸,并將區(qū)域分成四個(gè)象限,右下角為I象限、左下角為2象限、左上角為3象限、右上角為4象限; 計(jì)算得到kO= (yO-y)/(xO_x),kl = (yl-y)/(xl_x); 根據(jù)kO和kl的比較結(jié)果,將圖像在各個(gè)象限之間進(jìn)行新的模型狀態(tài),然后等待新的交互消息或者退出。9.根據(jù)權(quán)利要求8所述的魚眼圖像的交互顯示方法,其特征在于,所述控制點(diǎn)從(xO,yO)移動(dòng)到(xl,yl),包括如下步驟: 111)如果xO等于X,即移動(dòng)位置的起始點(diǎn)在Y軸上,執(zhí)行步驟112;否則執(zhí)行步驟121; 112)如果yO大于y,即起始點(diǎn)在Y軸下半軸上,執(zhí)行步驟113;反之執(zhí)行步驟114; 113)若xl大于xO,即得到旋轉(zhuǎn)方向?yàn)槟鏁r(shí)針,反之為順時(shí)針,然后等待新的交互消息或者退出; 114)若xl大于xO,即得到旋轉(zhuǎn)方向?yàn)轫槙r(shí)針,反之為逆時(shí)針,然后等待新的交互消息或者退出; 121)如果xl等于X,即移動(dòng)位置的終止點(diǎn)在Y軸上,執(zhí)行步驟122;否則以(x,y)作為坐標(biāo)軸原點(diǎn)重新定義兩個(gè)坐標(biāo)軸X軸和Y軸步驟; 122)如果yl大于y,即終止點(diǎn)在Y軸下半軸上,執(zhí)行步驟123,反之執(zhí)行步驟124; 123)如果xl大于xO,即得到旋轉(zhuǎn)方向?yàn)槟鏁r(shí)針,反之為順時(shí)針,然后等待新的交互消息或者退出; 124)如果xl大于xO,即得到旋轉(zhuǎn)方向?yàn)轫槙r(shí)針,反之為逆時(shí)針,然后等待新的交互消息或者退出。10.根據(jù)權(quán)利要求9所述的魚眼圖像的交互顯示方法,其特征在于,所述將圖像在各個(gè)象限之間進(jìn)行新的模型狀態(tài),包括如下步驟: 132)若kO小于O且kl大于0,即從2或4象限移動(dòng)到I或3象限,執(zhí)行步驟133;否則執(zhí)行步驟 139.’ 133)若xO小于X且yO大于y,即從2象限開始移動(dòng),執(zhí)行步驟134,否則執(zhí)行136; 134)若xl大于X且yl大于y,即移動(dòng)到I象限,為逆時(shí)針旋轉(zhuǎn),然后等待新的交互消息或者退出;否則執(zhí)行135; 135)若xl小于X且yl小于y,即移動(dòng)到3象限,為順時(shí)針旋轉(zhuǎn),然后等待新的交互消息或者退出; 136)若xO大于X且yO小于y,即從4象限開始移動(dòng),執(zhí)行步驟137; 137)若xl大于X且yl大于y,即移動(dòng)到I象限,為順時(shí)針旋轉(zhuǎn),然后等待新的交互消息或者退出;否則執(zhí)行138; 138)若xl小于X且yl小于y,即移動(dòng)到3象限,為逆時(shí)針旋轉(zhuǎn),然后等待新的交互消息或者退出; 139)若kO大于O且kl小于0,則從I或3象限移動(dòng)到2或4象限,執(zhí)行步驟1310;否則進(jìn)入步驟三; 1310)若xO小于X且yO小于y,即從3象限開始移動(dòng),執(zhí)行步驟1311,否則執(zhí)行1313; 1311)若xl大于X且yl小于y,即移動(dòng)到4象限,為順時(shí)針旋轉(zhuǎn),然后等待新的交互消息或者退出;否則執(zhí)行1312; 1312)若xl小于X且yl大于y,即移動(dòng)到2象限,為逆時(shí)針旋轉(zhuǎn),然后等待新的交互消息或者退出; 1313)若xO大于X且yO大于y,即從I象限開始移動(dòng),執(zhí)行步驟1314; 1314)若xl大于X且yl小于y,即移動(dòng)到4象限,為逆時(shí)針旋轉(zhuǎn),否則執(zhí)行1315; 1315)若xl小于X且yl大于y,即移動(dòng)到2象限,為順時(shí)針旋轉(zhuǎn),然后等待新的交互消息或者退出。11.根據(jù)權(quán)利要求7所述的魚眼圖像的交互顯示方法,其特征在于,當(dāng)圖像的長度大于顯示區(qū)域長度時(shí)左右平移,當(dāng)圖像的高度大于顯示區(qū)域的高度時(shí)上下平移; 所述平面展開圖像的平移方法,包括如下步驟: 記錄當(dāng)前狀態(tài)的fovy與初始狀態(tài)的fovy的比值,以及當(dāng)前展開圖像對應(yīng)于原始魚眼圖像的弧度值,和當(dāng)前顯示區(qū)域?qū)挾龋?計(jì)算得到單位顯示像素對應(yīng)的寬高模型單位UX和uy; 計(jì)算水平方向位移得到移動(dòng)幅度為(xl_x0)*ux,并累加到模型狀態(tài)的dx變量; 計(jì)算垂直方向位移得到移動(dòng)幅度為(yl_y0)*uy,并累加到模型狀態(tài)的dy變量; 重新根據(jù)dx和dy生成平面展開圖像。12.根據(jù)權(quán)利要求7所述的魚眼圖像的交互顯示方法,其特征在于,當(dāng)觀察點(diǎn)在模型外的情況,設(shè)初始狀態(tài)時(shí),觀察到的角度范圍是完整模型,即180度,對應(yīng)的顯示像素寬度為W,高度為h; 則所述球環(huán)類立體圖像的交互方法為計(jì)算X方向移動(dòng)時(shí)旋轉(zhuǎn)的角度: dx = dx+180*(xl_x0)/w dy = dy+180*(yl-y0)/h 然后可在X和Y方向上旋轉(zhuǎn)dx和dy得到模型的最終狀態(tài)。13.根據(jù)權(quán)利要求7所述的魚眼圖像的交互顯示方法,其特征在于,當(dāng)觀察點(diǎn)在模型內(nèi)的情況,設(shè)當(dāng)前觀察點(diǎn)的位置在模型中心; 則所述球環(huán)類立體圖像的交互方法為計(jì)算公式: dx = dx+fovy氺 aspect氺(xl_xO)/w dy=dy+fovy*(yl-yO)/h 在模型旋轉(zhuǎn)后,在根據(jù)0fTSetX、0fTSetY、0fTSetZ來進(jìn)行模型位置的平移調(diào)整。14.一種魚眼圖像的3D交互顯示系統(tǒng),其特征在于,包括顯示模塊,交互模塊; 其中: 所述顯示模塊,用于將魚眼圖像根據(jù)預(yù)先選擇的3D顯示模型進(jìn)行3D顯示; 所述交互模塊,用于在魚眼圖像3D顯示的同時(shí),讀取交互消息進(jìn)行模型狀態(tài)更新,根據(jù)所述交互消息的信息利用3D顯示模型的方法進(jìn)行計(jì)算,對3D顯示的圖像進(jìn)行交互;然后繼續(xù)等待或處理新的交互消息,直至退出。15.根據(jù)權(quán)利要求14所述的魚眼圖像的3D交互顯示系統(tǒng),其特征在于,所述交互模塊,包括保存子t吳塊; 所述保存子模塊,用于在切換模型時(shí),先保存記錄原模型的狀態(tài),加載模型數(shù)據(jù)后再應(yīng)用新的模型狀態(tài)。
【文檔編號(hào)】H04N13/02GK105915885SQ201610116572
【公開日】2016年8月31日
【申請日】2016年3月2日
【發(fā)明人】許為, 李偉, 范治江
【申請人】優(yōu)勢拓展(北京)科技有限公司