車 森,楊 輝,葛 磊,陳曉慧
(信息工程大學,河南 鄭州 450001)
全景圖(panorama)是一種運用數碼相機進行多角度環視拍攝,然后進行后期處理實現的三維虛擬展示技術[1],是虛擬現實技術的主要研究方向之一[2]。全景圖一般以攝影圖片直接制作而成,具有現場真實感強、播放要求配置較低、開發周期短/成本低、導覽性/交互操作性強、圖像畫質更高、數據量小,適合網絡觀看等優點[3], 全景圖通過多角度多方面三維視覺大幅提升地圖的實景效果。因此,近年來如何將全景圖加入地理信息系統成為地理信息領域的熱點研究內容[4]。
全景圖根據其外在表現形式分為柱面全景和球面全景兩大類[5]。球面全景是目前最常用的一種全景圖,球面全景照片的寬高比為2∶1,包含了360°×180°視角空間,寬度對應水平方向的360°,高度對應垂直方向的180°。這種全景圖就是“矩形球面投影”型的全景圖。全景圖一般是由相機拍攝,然后后期利用專門軟件拼接而成,隨著技術發展,目前市場上也有很多專門拍攝全景照片的全景相機,一鍵拍攝并合成全景圖。
目前對全景圖的研究主要集中在兩個方面:一是全景圖像拼接方法研究[6-10];二是三維全景技術與電子地圖進行集成,主要運用頁面鑲嵌的方式實現電子地圖與全景數據的融合,構建相應的信息系統[11-16],主要將全景圖作為地理要素的多媒體進行查詢以及增強可視化效果。
本文對全景圖像拼接不做深入研究,主要針對拍攝好的球面全景照片,使用相關工具制作全景漫游,實現全景圖熱點鏈接,并實現全景漫游、地圖聯動和在全景圖上進行測量。
文中技術流程如圖1所示。

圖1 整體技術流程
目前主流的全景漫游的制作工具有:Pano2VR、Krpano、基于Krpano內核制作的工具(軟件)或平臺(網站)等。
Pano2VR是非Krpano核心流行的全景漫游制作工具,界面化設計,不需要編程,但只能生成簡單的漫游,無法實現個性化的全景漫游設計。
Krpano是一個小型的全景漫游制作軟件,主要用于在Web端顯示各種全景圖像,可以用于非常詳細的高分辨率圖像、交互式虛擬漫游、自定義設計的用戶界面以及其他用途,是一個優秀且強大的全景漫游制作工具, Krpano的使用比較方便,簡單拖拽生成具有基本功能的全景漫游作品,若增添其它功能,需要自行開發[11]。
基于Krpano內核制作的工具,是在Krpano核心基礎上制作界面化的軟件或系統,如全景客、全景旅行者、720云、得圖云等,這些工具實現Krpano界面可視化,具有友好的操作界面,使不具備編程基礎的用戶也可以使用Krpano的技術制作全景漫游。這些界面化的Krpano工具,功能基本上大同小異,用戶群體多是我國商業用戶、攝影師或是三維建模工程師,可以較低門檻、較少花費地步入全景行業。
鑒于kprano的開放性,提供的接口易于擴展,能更好地實現全景漫游制作及與三維GIS的集成,選擇Krpano作為全景漫游的制作工具。
制作滿足地圖定位和視角同步要求的全景漫游需要兩個條件:全景圖需要有GPS坐標信息;全景圖必須與虛擬北方向對齊,即包含正確的EXIF GPSImgDirection 屬性標簽。每個全景圖分配GPS坐標,可以使用LightRoom的Map選項卡將全景圖放置在地圖上(使用GeoSetter程序來同步全景圖坐標和GPS軌跡信息,將其寫入EXIF GPSLongitude和GPSLatitude 屬性標簽)。
如果照相機到每個全景圖的中心與照相機到真北方向有一個恒定的方位,那么全景圖能正確地對齊。全景圖中同樣的虛擬北方向對制作全景漫游來說是非常重要的。如果全景圖沒有相同的虛擬北角度,需要使用工具將此信息添加到EXIF GPSImgDirection屬性標簽,如圖2所示。

圖2 全景圖虛擬北方向調整
要實現全景漫游,需要將各個全景圖(每個全景圖是一個場景)根據地理位置通過熱點“串聯”起來,這樣才能從一個場景切換到別的場景,繼續瀏覽觀看,單純切換場景,通過縮略圖或導航圖的方式實現,但最符合習慣、最便捷的方式還是通過熱點鏈接的方式切換。
本文使用第三方插件Autogarrows-For-Krpano來實現全景圖的熱點鏈接,它可以根據GPS坐標位置自動創建導航。
全景圖的串聯有兩種方法,一是通過搜索半徑(Search_Radius)實現,半徑范圍內的全景將被視為鄰居,并將被鏈接。需要注意搜索半徑的設置,過大可能無法生成熱點鏈接,過小可能導致過多的鏈接,如圖3所示。

圖3 通過搜索半徑鏈接全景圖
第二種是通過搜索區(Search_Sector)實現,搜索區以度為單位,其中最近的全景將被視為鄰居,并將被鏈接。如果定義搜索區,那么每個場景周圍的360°空間將被扇區分割,每個扇區中只有最近的全景將被視為鄰居并被鏈接。如圖4所示,在這種情況下,Search_Radius將被忽略。

圖4 通過搜索區鏈接全景圖
需要注意的是這兩個關鍵參數的大小不是恒定的,需要根據實際的數據情況來動態調整,所以制作全景漫游的時候經常需要把數據分成多段,然后通過手工微調的方式去完成。制作完成的全景漫游如圖5所示。
全景漫游制作完成后,進行身臨其境的瀏覽。全景漫游制作過程中,針對不同的顯示效果需求,涉及到的細節較多,比如熱點的位置和樣式、補天/地、場景加載的顯示視角、場景切換的過渡效果動畫、視角限制、投影選擇、VR、重力感應陀螺儀等等。

圖5 全景漫游圖
全景漫游制作完成,實現與三維地圖的聯動,首先要把它嵌入到頁面里,使用它和html、js交互。Krpano使用簡單的xml文本文件來存儲Krpano查看器的設置。Action是Krpano小型的、簡單的動態腳本語言。通過Krpano多種方式進行定制。
頁面加載全景漫游后,可獲取全景漫游里場景的相關信息,根據當前場景的坐標以及視角在三維地圖上標繪場景點和雷達扇形面,并縮放定位到指定位置,在全景漫游中通過交互改變場景視角遠近,切換場景,在三維地圖上同步場景點位置和雷達扇面的形狀和位置,如圖6所示。

圖6 全景漫游與地圖聯動
實現原理:通過計時器實時自動獲取全景漫游的操作返回的視角參數,重繪地圖上的點和雷達扇面。通過全局變量Krpano可得到當前場景的視角大小參數fov和水平方向視角中心的角度坐標hlookat,同時根據照相機到場景(全景圖)的中心點連線與照相機到正北方向的夾角數據(這個包含在全景圖EXIF屬性里),準確地計算出三維地圖上扇面的方向信息。
如果全景圖未提供這個角度信息,則面向中心點的方向指向地圖向正北方向。這要根據全景圖的實際情況來確定,否則扇面的方向是錯誤的。
全景圖本質上是一張二維平面的照片,雖然包含位置信息,但是單靠一張全景圖片是無法進行空間測量的,進行測量時,需采取一些方法才能完成。實現方式不是唯一的[17-18],文中依托實際的三維模型數據來輔助完成全景圖的測量。
測量原理:通過在全景漫游上標記得到的點位置投影到實際三維模型的相應位置,然后在三維模型完成量算。
測量過程步驟如下:
1)利用全景圖像上的像點坐標(u,v),在傾斜三維模型的輔助下計算相應的地面三維坐標(X,Y,Z)。像點坐標系的原點位于圖像左上角點,x軸向右(指向列數增加的方向),y軸向下(指向行數增加的方向)。u為列坐標,v為行坐標。獲取該圖像對應的EO數據(XS,YS,ZS,ω,φ,κ),其中(XS,YS,ZS)為全景圖像球心的位置,也是所有光線的起點,(ω,φ,κ)為全景球體參考坐標系在地面坐標系中的姿態角。構建旋轉矩陣R:
(1)

圖7 全景圖面積測量
2)計算像素點對應的球體坐標(經度θ、緯度ψ):
(2)
式中:W和H為全景圖像的寬度和高度。
(3)
光線的起點為S(XS,YS,ZS)。
3)任意設定光線長度,例如ρ=20 m,計算光線上另外一點A的坐標:
(4)

5)求出空間多邊形面積,根據多段線的坐標計算長度。
以計算多邊形面積為例,在全景圖(見圖6)中使用鼠標繪制多邊形的4個頂點,通過上面的計算得到三維地圖(見圖7)中的4條光線(綠色射線),原始數據坐標系需要轉成WGS84,然后才能在三維地圖上顯示。
S為起點,依次計算射線與三維建筑模型的交點(紅色點,4),交點的計算需要通過碰撞檢測實現,射線與三維場景碰撞,碰撞到3D瓦片模型,得到第一個碰撞結果,返回碰撞的模型和位置信息,如果未檢測到碰撞則返回。
最后再計算空間多邊形的面積,得到最終的結果,見表1。
經過多次量測實驗,長度量測相對誤差基本上在0.5%以內,面積量測相對誤差基本上在1%以內,誤差的大小很大程度上取決于用戶在全景圖上選取點位的準確性,如果點位選取準確,全景圖上的量測精度可以滿足大多數用戶需求。

表1 面積測量結果
全景圖因其真實感強、數據量小等優點,成為虛擬現實技術的主要研究方向之一,本文利用全景漫游制作軟件krpano,實現全景漫游的制作及其與三維地圖的聯動,依托三維模型數據輔助完成全景圖的測量方法,用戶可直接在全景圖片上用鼠標點擊來測量距離和面積,體驗更加直觀形象,但更復雜的分析功能還需進一步研究。