車 森,楊 輝,葛 磊,陳曉慧
(信息工程大學(xué),河南 鄭州 450001)
全景圖(panorama)是一種運(yùn)用數(shù)碼相機(jī)進(jìn)行多角度環(huán)視拍攝,然后進(jìn)行后期處理實(shí)現(xiàn)的三維虛擬展示技術(shù)[1],是虛擬現(xiàn)實(shí)技術(shù)的主要研究方向之一[2]。全景圖一般以攝影圖片直接制作而成,具有現(xiàn)場(chǎng)真實(shí)感強(qiáng)、播放要求配置較低、開發(fā)周期短/成本低、導(dǎo)覽性/交互操作性強(qiáng)、圖像畫質(zhì)更高、數(shù)據(jù)量小,適合網(wǎng)絡(luò)觀看等優(yōu)點(diǎn)[3], 全景圖通過(guò)多角度多方面三維視覺大幅提升地圖的實(shí)景效果。因此,近年來(lái)如何將全景圖加入地理信息系統(tǒng)成為地理信息領(lǐng)域的熱點(diǎn)研究?jī)?nèi)容[4]。
全景圖根據(jù)其外在表現(xiàn)形式分為柱面全景和球面全景兩大類[5]。球面全景是目前最常用的一種全景圖,球面全景照片的寬高比為2∶1,包含了360°×180°視角空間,寬度對(duì)應(yīng)水平方向的360°,高度對(duì)應(yīng)垂直方向的180°。這種全景圖就是“矩形球面投影”型的全景圖。全景圖一般是由相機(jī)拍攝,然后后期利用專門軟件拼接而成,隨著技術(shù)發(fā)展,目前市場(chǎng)上也有很多專門拍攝全景照片的全景相機(jī),一鍵拍攝并合成全景圖。
目前對(duì)全景圖的研究主要集中在兩個(gè)方面:一是全景圖像拼接方法研究[6-10];二是三維全景技術(shù)與電子地圖進(jìn)行集成,主要運(yùn)用頁(yè)面鑲嵌的方式實(shí)現(xiàn)電子地圖與全景數(shù)據(jù)的融合,構(gòu)建相應(yīng)的信息系統(tǒng)[11-16],主要將全景圖作為地理要素的多媒體進(jìn)行查詢以及增強(qiáng)可視化效果。
本文對(duì)全景圖像拼接不做深入研究,主要針對(duì)拍攝好的球面全景照片,使用相關(guān)工具制作全景漫游,實(shí)現(xiàn)全景圖熱點(diǎn)鏈接,并實(shí)現(xiàn)全景漫游、地圖聯(lián)動(dòng)和在全景圖上進(jìn)行測(cè)量。
文中技術(shù)流程如圖1所示。
圖1 整體技術(shù)流程
目前主流的全景漫游的制作工具有:Pano2VR、Krpano、基于Krpano內(nèi)核制作的工具(軟件)或平臺(tái)(網(wǎng)站)等。
Pano2VR是非Krpano核心流行的全景漫游制作工具,界面化設(shè)計(jì),不需要編程,但只能生成簡(jiǎn)單的漫游,無(wú)法實(shí)現(xiàn)個(gè)性化的全景漫游設(shè)計(jì)。
Krpano是一個(gè)小型的全景漫游制作軟件,主要用于在Web端顯示各種全景圖像,可以用于非常詳細(xì)的高分辨率圖像、交互式虛擬漫游、自定義設(shè)計(jì)的用戶界面以及其他用途,是一個(gè)優(yōu)秀且強(qiáng)大的全景漫游制作工具, Krpano的使用比較方便,簡(jiǎn)單拖拽生成具有基本功能的全景漫游作品,若增添其它功能,需要自行開發(fā)[11]。
基于Krpano內(nèi)核制作的工具,是在Krpano核心基礎(chǔ)上制作界面化的軟件或系統(tǒng),如全景客、全景旅行者、720云、得圖云等,這些工具實(shí)現(xiàn)Krpano界面可視化,具有友好的操作界面,使不具備編程基礎(chǔ)的用戶也可以使用Krpano的技術(shù)制作全景漫游。這些界面化的Krpano工具,功能基本上大同小異,用戶群體多是我國(guó)商業(yè)用戶、攝影師或是三維建模工程師,可以較低門檻、較少花費(fèi)地步入全景行業(yè)。
鑒于kprano的開放性,提供的接口易于擴(kuò)展,能更好地實(shí)現(xiàn)全景漫游制作及與三維GIS的集成,選擇Krpano作為全景漫游的制作工具。
制作滿足地圖定位和視角同步要求的全景漫游需要兩個(gè)條件:全景圖需要有GPS坐標(biāo)信息;全景圖必須與虛擬北方向?qū)R,即包含正確的EXIF GPSImgDirection 屬性標(biāo)簽。每個(gè)全景圖分配GPS坐標(biāo),可以使用LightRoom的Map選項(xiàng)卡將全景圖放置在地圖上(使用GeoSetter程序來(lái)同步全景圖坐標(biāo)和GPS軌跡信息,將其寫入EXIF GPSLongitude和GPSLatitude 屬性標(biāo)簽)。
如果照相機(jī)到每個(gè)全景圖的中心與照相機(jī)到真北方向有一個(gè)恒定的方位,那么全景圖能正確地對(duì)齊。全景圖中同樣的虛擬北方向?qū)χ谱魅奥蝸?lái)說(shuō)是非常重要的。如果全景圖沒有相同的虛擬北角度,需要使用工具將此信息添加到EXIF GPSImgDirection屬性標(biāo)簽,如圖2所示。
圖2 全景圖虛擬北方向調(diào)整
要實(shí)現(xiàn)全景漫游,需要將各個(gè)全景圖(每個(gè)全景圖是一個(gè)場(chǎng)景)根據(jù)地理位置通過(guò)熱點(diǎn)“串聯(lián)”起來(lái),這樣才能從一個(gè)場(chǎng)景切換到別的場(chǎng)景,繼續(xù)瀏覽觀看,單純切換場(chǎng)景,通過(guò)縮略圖或?qū)Ш綀D的方式實(shí)現(xiàn),但最符合習(xí)慣、最便捷的方式還是通過(guò)熱點(diǎn)鏈接的方式切換。
本文使用第三方插件Autogarrows-For-Krpano來(lái)實(shí)現(xiàn)全景圖的熱點(diǎn)鏈接,它可以根據(jù)GPS坐標(biāo)位置自動(dòng)創(chuàng)建導(dǎo)航。
全景圖的串聯(lián)有兩種方法,一是通過(guò)搜索半徑(Search_Radius)實(shí)現(xiàn),半徑范圍內(nèi)的全景將被視為鄰居,并將被鏈接。需要注意搜索半徑的設(shè)置,過(guò)大可能無(wú)法生成熱點(diǎn)鏈接,過(guò)小可能導(dǎo)致過(guò)多的鏈接,如圖3所示。
圖3 通過(guò)搜索半徑鏈接全景圖
第二種是通過(guò)搜索區(qū)(Search_Sector)實(shí)現(xiàn),搜索區(qū)以度為單位,其中最近的全景將被視為鄰居,并將被鏈接。如果定義搜索區(qū),那么每個(gè)場(chǎng)景周圍的360°空間將被扇區(qū)分割,每個(gè)扇區(qū)中只有最近的全景將被視為鄰居并被鏈接。如圖4所示,在這種情況下,Search_Radius將被忽略。
圖4 通過(guò)搜索區(qū)鏈接全景圖
需要注意的是這兩個(gè)關(guān)鍵參數(shù)的大小不是恒定的,需要根據(jù)實(shí)際的數(shù)據(jù)情況來(lái)動(dòng)態(tài)調(diào)整,所以制作全景漫游的時(shí)候經(jīng)常需要把數(shù)據(jù)分成多段,然后通過(guò)手工微調(diào)的方式去完成。制作完成的全景漫游如圖5所示。
全景漫游制作完成后,進(jìn)行身臨其境的瀏覽。全景漫游制作過(guò)程中,針對(duì)不同的顯示效果需求,涉及到的細(xì)節(jié)較多,比如熱點(diǎn)的位置和樣式、補(bǔ)天/地、場(chǎng)景加載的顯示視角、場(chǎng)景切換的過(guò)渡效果動(dòng)畫、視角限制、投影選擇、VR、重力感應(yīng)陀螺儀等等。
圖5 全景漫游圖
全景漫游制作完成,實(shí)現(xiàn)與三維地圖的聯(lián)動(dòng),首先要把它嵌入到頁(yè)面里,使用它和html、js交互。Krpano使用簡(jiǎn)單的xml文本文件來(lái)存儲(chǔ)Krpano查看器的設(shè)置。Action是Krpano小型的、簡(jiǎn)單的動(dòng)態(tài)腳本語(yǔ)言。通過(guò)Krpano多種方式進(jìn)行定制。
頁(yè)面加載全景漫游后,可獲取全景漫游里場(chǎng)景的相關(guān)信息,根據(jù)當(dāng)前場(chǎng)景的坐標(biāo)以及視角在三維地圖上標(biāo)繪場(chǎng)景點(diǎn)和雷達(dá)扇形面,并縮放定位到指定位置,在全景漫游中通過(guò)交互改變場(chǎng)景視角遠(yuǎn)近,切換場(chǎng)景,在三維地圖上同步場(chǎng)景點(diǎn)位置和雷達(dá)扇面的形狀和位置,如圖6所示。
圖6 全景漫游與地圖聯(lián)動(dòng)
實(shí)現(xiàn)原理:通過(guò)計(jì)時(shí)器實(shí)時(shí)自動(dòng)獲取全景漫游的操作返回的視角參數(shù),重繪地圖上的點(diǎn)和雷達(dá)扇面。通過(guò)全局變量Krpano可得到當(dāng)前場(chǎng)景的視角大小參數(shù)fov和水平方向視角中心的角度坐標(biāo)hlookat,同時(shí)根據(jù)照相機(jī)到場(chǎng)景(全景圖)的中心點(diǎn)連線與照相機(jī)到正北方向的夾角數(shù)據(jù)(這個(gè)包含在全景圖EXIF屬性里),準(zhǔn)確地計(jì)算出三維地圖上扇面的方向信息。
如果全景圖未提供這個(gè)角度信息,則面向中心點(diǎn)的方向指向地圖向正北方向。這要根據(jù)全景圖的實(shí)際情況來(lái)確定,否則扇面的方向是錯(cuò)誤的。
全景圖本質(zhì)上是一張二維平面的照片,雖然包含位置信息,但是單靠一張全景圖片是無(wú)法進(jìn)行空間測(cè)量的,進(jìn)行測(cè)量時(shí),需采取一些方法才能完成。實(shí)現(xiàn)方式不是唯一的[17-18],文中依托實(shí)際的三維模型數(shù)據(jù)來(lái)輔助完成全景圖的測(cè)量。
測(cè)量原理:通過(guò)在全景漫游上標(biāo)記得到的點(diǎn)位置投影到實(shí)際三維模型的相應(yīng)位置,然后在三維模型完成量算。
測(cè)量過(guò)程步驟如下:
1)利用全景圖像上的像點(diǎn)坐標(biāo)(u,v),在傾斜三維模型的輔助下計(jì)算相應(yīng)的地面三維坐標(biāo)(X,Y,Z)。像點(diǎn)坐標(biāo)系的原點(diǎn)位于圖像左上角點(diǎn),x軸向右(指向列數(shù)增加的方向),y軸向下(指向行數(shù)增加的方向)。u為列坐標(biāo),v為行坐標(biāo)。獲取該圖像對(duì)應(yīng)的EO數(shù)據(jù)(XS,YS,ZS,ω,φ,κ),其中(XS,YS,ZS)為全景圖像球心的位置,也是所有光線的起點(diǎn),(ω,φ,κ)為全景球體參考坐標(biāo)系在地面坐標(biāo)系中的姿態(tài)角。構(gòu)建旋轉(zhuǎn)矩陣R:
(1)
圖7 全景圖面積測(cè)量
2)計(jì)算像素點(diǎn)對(duì)應(yīng)的球體坐標(biāo)(經(jīng)度θ、緯度ψ):
(2)
式中:W和H為全景圖像的寬度和高度。
(3)
光線的起點(diǎn)為S(XS,YS,ZS)。
3)任意設(shè)定光線長(zhǎng)度,例如ρ=20 m,計(jì)算光線上另外一點(diǎn)A的坐標(biāo):
(4)
5)求出空間多邊形面積,根據(jù)多段線的坐標(biāo)計(jì)算長(zhǎng)度。
以計(jì)算多邊形面積為例,在全景圖(見圖6)中使用鼠標(biāo)繪制多邊形的4個(gè)頂點(diǎn),通過(guò)上面的計(jì)算得到三維地圖(見圖7)中的4條光線(綠色射線),原始數(shù)據(jù)坐標(biāo)系需要轉(zhuǎn)成WGS84,然后才能在三維地圖上顯示。
S為起點(diǎn),依次計(jì)算射線與三維建筑模型的交點(diǎn)(紅色點(diǎn),4),交點(diǎn)的計(jì)算需要通過(guò)碰撞檢測(cè)實(shí)現(xiàn),射線與三維場(chǎng)景碰撞,碰撞到3D瓦片模型,得到第一個(gè)碰撞結(jié)果,返回碰撞的模型和位置信息,如果未檢測(cè)到碰撞則返回。
最后再計(jì)算空間多邊形的面積,得到最終的結(jié)果,見表1。
經(jīng)過(guò)多次量測(cè)實(shí)驗(yàn),長(zhǎng)度量測(cè)相對(duì)誤差基本上在0.5%以內(nèi),面積量測(cè)相對(duì)誤差基本上在1%以內(nèi),誤差的大小很大程度上取決于用戶在全景圖上選取點(diǎn)位的準(zhǔn)確性,如果點(diǎn)位選取準(zhǔn)確,全景圖上的量測(cè)精度可以滿足大多數(shù)用戶需求。
表1 面積測(cè)量結(jié)果
全景圖因其真實(shí)感強(qiáng)、數(shù)據(jù)量小等優(yōu)點(diǎn),成為虛擬現(xiàn)實(shí)技術(shù)的主要研究方向之一,本文利用全景漫游制作軟件krpano,實(shí)現(xiàn)全景漫游的制作及其與三維地圖的聯(lián)動(dòng),依托三維模型數(shù)據(jù)輔助完成全景圖的測(cè)量方法,用戶可直接在全景圖片上用鼠標(biāo)點(diǎn)擊來(lái)測(cè)量距離和面積,體驗(yàn)更加直觀形象,但更復(fù)雜的分析功能還需進(jìn)一步研究。