增强现实(AR)技术是一种将现实世界信息与虚拟世界信息无缝集成的技术,通过系统处理来提高使用者对现实世界的感知度,将计算机生成的虚拟场景或物体等元素与现实场景进行叠加,以此达到增强现实的效果[1]。与传统AR技术需要依托专业视觉设备不同,移动端AR(MAR)应用系统具有开发成本低、便携性强、集成度高、推广普及容易等优势[2]。因此,在移动GIS应用中引入AR技术,能使地理要素的识别更具直观性[3]。4 z' q A' B7 o. ^# X6 R3 g- v
国外关于MAR系统的研究起步较早,1999年日本广岛城市大学和美国华盛顿大学共同研发了ARToolKit软件开发工具包;2010年WagnerD[4]等首次在手机设备上采用了基于自然特征的跟踪注册方式;2012年高通公司发布了AR开发工具包Vuforia[5],由于其具有多元化的平台支持,很快成为国内应用最广泛的AR引擎之一。国内对于MAR系统的研究起步相对较晚,北京理工大学在设计三维注册和光学透视设备[6]方面成果颇丰;上海交通大学提出了空间AR流水线概念[7];华中科技大学提出了标示角点与全局单应性矩阵相结合的三维注册手段[8]。同时,我国的一些高科技企业也对AR技术进行了大量研究和应用,如高德和百度均推出过车载AR导航相关产品;视辰信息科技自主研发了AR引擎EasyAR,本文采用该引擎将AR技术应用到海洋地貌可视化中。$ n6 [1 D% }8 h# S& N( }+ ^$ s' h0 r
海洋地貌作为海洋环境的基础地理信息要素,对其进行逼真的模拟和再现,是人们对海底环境进行了解的基本手段和方法[9]。将AR技术与海洋地貌可视化相结合,有助于更加准确地掌握海洋地貌特征,对于开发海洋资源、实施海洋工程以及发展海洋经济等方面都具有很重要的应用价值;再将二者融合到移动端,能为用户提供更好的体验,更加有助于大众了解海底地形地貌、普及海洋知识。 X% T" [5 _) b( }
" y5 Z8 q' g4 Q; U- F/ @
6 a: S6 z7 s# a$ z/ V2 h
1 z y8 ^+ d `, f1 {8 ]- u1 海洋地貌可视化特点与AR技术流程
) Q1 e3 P& g9 H( i; \+ G) v a9 K; p2 t8 r$ |; b% A
/ j# ?. K1 {6 b7 Z3 C6 `海洋地貌是覆盖于海水之下地球固体表面的形态,其复杂程度并不亚于陆地地形,也存在山脉、平原、盆地等不同种类的地貌。传统的二维海图采用水深线或水深点来表达海洋地貌,往往不够直观,包含的信息量也较少;而三维海洋地貌可视化表达则往往脱离了海洋洋体,无法体现海洋环境。海洋地貌的可视化表达不仅需要考虑海洋洋体的可视化,而且需要考虑海底地貌的可视化。对于海洋洋体部分,需充分考虑海水的颜色、波长、波速、反射等基本视觉属性;对于海底地貌部分,需充分考虑地形特征、分层设色规律、纹理设置、垂直夸张度设置等。MAR海洋地貌可视化的实现主要包括模型建立、AR功能实现和移动端交互设计3个部分。其主要技术流程如图1所示。
8 m3 I3 I8 ~8 E# a
* T8 [3 j3 g* ]; F图1 技术流程图( y2 S1 b6 U. {' X( l$ j+ ^
. W5 i# p5 S" J# _8 c( F& }" E2 三维海底地形模型的建设
' J o' M0 T9 `% O/ A z+ b A K9 a
/ }! @7 w+ Y' X9 c/ ?0 ^, B; d1 ~& j2 `/ W7 j) R9 P/ [5 A& m
由于海底地形与陆地地形十分相似,因此海底地形三维建模方法主要借鉴陆地地形的三维建模方法。作为海洋地貌可视化系统的核心组成部分,三维海底地形模型的快速构建决定了系统的质量基础。, c* K1 w. O+ i
2.1 数据预处理# S" a0 ^/ J1 F& x' a' \
建立真实的三维海底地形,需获取目标区域的高精度高程图,本文采用WorldMachine提取目标地区的高度贴图[10]。WorldMachine是一款优秀的地形编辑工具,可通过内置的Generators(生成器)和Effects(效果器)创建一个精细的世界外貌,并提供广泛的地形信息输出格式支持。3 Z- e# g2 x9 [( w
首先,在地理空间数据云网站(http://www.gscloud.cn/)下载目标区域的DEM数据,并将其转换为HF2或其余可被WorldMachine识别的文件类型[11]。在WorldMachine中会自动打开一个DeviceWorkview(设备工作视图,WorldMachine中每个操作都被称为一个设备),在DeviceWorkview中输入地形属性后,导出png格式的图片数据,如图2所示。% |7 w) O5 M( W5 T r
9 [- J! d# Q* y! q* U5 P% A( p; e5 h" A
图 2 World Machine 导出的高程图
/ ^8 x( c' l; h( L7 ]7 `, v9 T% _2.2 地形模型生成
; n7 t% g+ \6 U0 d$ G本文利用Blender软件建立海洋地貌三维模型。Blender是一款跨平台的三维应用工具,与其他3D建模工具相比,其对内存和驱动的需求更低。Blender的软件交互界面基于OpenGL构建,在所有支持的硬件与平台上均能提供一致的用户体验。将高程灰度图导入Blender中,利用平面细分工具和材质纹理工具制作真实海底三维模型。
g; E) O* e$ v6 f0 H2.2.1 细分方式建模与调节) Q$ B( ^% ]$ u+ V* H' ?$ F
为了尽可能还原真实的海底地貌细节,需将海洋地貌模型表面进行多级细分,增大表面面片数,以适应不同地形下模型表面的细微变化。简单来说,即假定一个单独多边形的一级细分为2×2个网格,那么在其二级细分上将为4×4个网格,三级细分为8×8个网格。) I3 ~) y' Z$ G+ z# D- r
对于复杂的海底地貌模型,格网划分得越细,表面呈现得越光滑。利用该特性可使三维模型中不同形状间的融合过渡风格在柔和平滑和锐利参差之间调整,只要有一个规则的拓扑网格,就能轻松调整形状之间的组合及其表现样式[12]。Blender内置的细分修改器在进行操作时没有破坏性,任何时候都能返回并进行修改。三维海底地形模型如图3所示。 Q$ l& I1 o9 P1 C* I
( b' U9 s2 U2 f" C* p8 z+ @
图3 三维海底地形模型
& Q3 J0 o, a. H6 G! E7 O& x5 {3 z9 B; {. D2.2.2 表面色彩渲染% O4 D& g t% G# h. B: n6 l/ W- {
在计算机数字图像处理中常用的颜色模型包括HSL模型和RGB模型[13]。HSL模型通过色相(H)、饱和度(S)和亮度(L)3个颜色通道的变化及其相互之间的叠加得到各式各样的颜色。HSL模型中的H分量代表人眼所能感知的颜色范围,在Blender中H的取值范围为[0,1];S分量代表色彩的饱和度,取值范围为[0,1],用于描述相同色相、亮度下色彩纯度的变化,数值越大颜色越鲜艳;L分量代表色彩的亮度,取值范围为[0,1],用于描述色彩的明暗变化,数值越大色彩越亮越接近白色,数值越小色彩越暗越接近黑色[14]。$ f- F1 Q W5 m" \% Q9 d5 `
HSL模型的多色渐变渲染方法[15]在实际应用中,为了使颜色更加纯正,通常S取值为1.0;L取值过大颜色接近白色,取值过小又接近黑色,因此通常L取值为0.5;鉴于海底地形的色谱通常为红、黄、绿、青、蓝,H的取值范围为[0,1],海水越深,H值越大。当海底最大水深为Zmax,最小水深为Zmin(若存在类似海岛高于水面的情形,Z和Zmin均取水面以上高度的负值)时,H的取值范围为[Hmin,Hmax],则水深为Z时的H值为:
: I- k7 {9 j7 Z) f7 H4 I" w. o" Z2 k) j) j4 S
在Blender中,为了实现更好的人机交互,将HSL模型修改为HSV模型[16],其中V分量代表明度,即所有光的亮度。一般而言,V值为L值的两倍(小于等于1)。在Blender2.80版中,提供了纹理节点编辑器对模型的材质进行编辑。该系统通过将颜色、图案和其他纹理组合在一起来实现流水线式的纹理创建。流水线上每个节点的数据通过曲线链接并传递到下一个节点,直到最后的输出节点。DiffuseBSDF是一个弥散型表面类型的着色器,材质输出栏表示最后输出到模型上的结果,向其添加几何节点、颜色渐变节点等,给整个模型上色。根据需要,还可在不同高度段落内设置不同的基础色相。将多个节点进行组合后,再混合到同一输出,得到的分层设色模型(图4)。5 s) E. F0 ~/ M$ R5 L
' R9 ~- j( E* M
0 ~( T' [# M/ v+ d$ j& f
图 4 分层设色模型 x: j7 C3 N9 \: S7 w
/ b0 ]* x3 c d: f- q' C7 j' @3 O& s8 v
3 AR功能的实现
* Z, s* `$ i8 y' B2 @1 @; x
+ |$ K& S- B% o. }* ~7 o
5 f0 N6 K$ y1 k3.1 技术流程) B3 d# a+ [: O# A" j: u) w/ x
目前,Unity提供的AR插件包括ARkit、ARcore、Vuforia以及EasyAR等。本文通过Unity3D+EasyAR搭建MAR海洋地貌可视化系统。基本开发环节为:3 R* n6 s$ L/ \% K
1)开发环境搭建,安装Unity3D。在EasyAR官网下载EasyAR_SDK,并将其导入Unity3D,构建基本开发环境。- z$ [% e& H6 E: m! d6 x, T5 n* O3 }* G
2)在EasyAR官网注册账号,添加SDKLicense Key,获取项目中EasyAR插件使用权限。
/ ~( ]& h; _* V6 |) ^' I5 ~$ q3)在Unity中利用EasyAR插件相关功能进行AR场景的搭建,删除主相机,添加EasyAR中自带的AR相机。工程中通过添加ImageTarget识别图以及图所对应模型进行编辑与设计工作。
: p" M; q; T; H; ]% m* S# A3.2 交互设计9 x5 o4 R2 X4 J/ l6 j
本文设计开发的MAR海洋地貌可视化系统包括基础功能、拓展功能和重置功能3个基本模块,如图5所示。6 m: ^4 H2 [* k$ ?2 x1 a2 Y! |! G4 O
2 D2 J- ~% k9 m$ R, J图5 功能模块框架图- i' A# V1 b# w
3.3 功能模块与实现% |1 Z' K7 l0 e6 w* I1 }' Y" ~
3.3.1 功能模块1 a' w2 O. a: x* I4 I
1)基础功能模块。该模块主要包括模型平移、旋转和缩放功能,负责对模型空间位置和大小进行基本控制。系统采用单指触控的方式进行模型平移与旋转操作,为解决平移、旋转冲突问题,添加了按钮切换平移与旋转模式。缩放功能通过双指实现,双指向内时缩小,向外时放大。
8 E6 m* `8 g7 `! j. s5 f/ T2)拓展功能模块。该模块包括对海底地貌模型操作和水体模型操作两部分,通过界面右下角纹理切换按钮可实现海底地貌模型纹理切换,还可通过相应的滑动条对模型垂直夸张度、水体颜色、波速、波长、反射进行设置,以满足同一海洋模型在不同情况、不同需求下的可视化显示。 c- K1 N8 a( J# v1 D8 w" M
3)重置功能模块。模型显示后,由于用户操作会出现位置、形状、属性等变化,重新识别时模型仍为改变后的状态,只有重新打开应用才可恢复初始状态。为了方便用户使用,系统设计了重置功能并将其细分为水体模型重置、海底地貌模型重置和水体属性重置功能。
9 ~+ [* V6 U5 L3 u4 h1 u3.3.2 基础功能的实现7 j' \. B7 y9 j3 u
系统包括平移、旋转、缩放3种手势操作,通过添加相应脚本实现。
9 y2 j; t' H E; B- z3 _1)模型平移。系统采用单指触摸移动模型的方式,利用Input.touchCount判断触摸点数量,当数量为1时执行平移功能。模型平移涉及模型的屏幕坐标、世界坐标以及移动端触摸点的屏幕坐标。首先将模型的世界坐标通过矩阵转换为自身的屏幕坐标,并进行存储;再将触摸点的屏幕坐标转换为世界坐标,由于屏幕只有X、Y方向上的值,因此Z值需使用模型的屏幕坐标。利用模型与触摸点的世界坐标计算模型与触摸点在世界空间中的偏移量,再将触摸点的屏幕坐标实时转化为触摸点的世界坐标,并加上偏移量即可得到模型的世界坐标。由于该功能需要选取模型,因此需添加BoxColider(碰撞器),并设置碰撞范围。
$ R1 T6 C- c+ n: J2)模型旋转。旋转功能采用单指触摸的方式实现,为与平移相区别,利用控制按钮切换平移与旋转模式。通过定义一个二维向量Vector2记录屏幕中水平和竖直方向上的偏移量,将Vector2的分向量与世界空间的三维向量Vector3在水平与竖直方向的分向量进行运算,再通过Transform.Rotate对世界空间三维坐标系进行旋转,达到模型旋转的目的。
1 F+ Z. B( i, e" c0 v9 ]3)模型缩放。缩放功能采用双指触摸的方式实现,记录两个触摸点新旧位置的距离差,若为正则表示放大手势,若为负则表示缩小手势。根据实际情况,对距离进行处理,转换成缩放因子。利用模型的Transform组件,根据模型自身比例大小进行运算,实现缩放功能。
4 H0 o. _8 R/ p8 z$ i5 e7 [3.3.3 拓展功能的实现
2 ]2 E/ R2 |% e拓展功能主要包括海底地貌模型与水体模型的垂直夸张度改变功能、海底地貌模型纹理改变功能以及水体属性改变功能(颜色、波长、波速、反射),用于根据用户需求实现个性化设置。为使高度和属性改变得更平滑,系统利用Unity中UI的Slider控件进行滑动调节。# h$ p6 k0 q: ^* ]3 G& m
1)垂直夸张度改变功能。海底地貌模型与水体模型均采用相同原理实现垂直夸张度改变,将Slider控件的值实时赋予模型Transform组件中垂直方向上的比例值,以此实现对垂直夸张度的改变。此外,需将水体模型设置为海底地貌模型的子对象,以避免海底地貌模型垂直夸张度改变时水体模型垂直夸张度上限过高或过低。
1 K4 Z+ q5 k$ \- x2)海底地貌模型纹理改变功能。模型的材质球中的Albedo选项用于放置纹理图片,更换不同图片将改变纹理效果。新建Resources文件夹,将要替换的纹理文件存入该文件夹,替换Albedo中的纹理图片,并利用Button控件切换纹理图片。4 r/ Y1 S+ v- r1 G7 I) q- U9 }+ \' `
3)水体属性改变功能。系统中的动态水体模型是基于Unity3D中的MobileOcean&Water插件构建而成的。水体模型的属性可通过代码直接访问修改。该功能与UI控件Slider相结合,将Slider的值赋予着色器属性,以达到改变属性的目的,且Slider控件自带上下限,有效避免了超限问题。
9 e7 l1 [9 m8 H \3.3.4 重置功能的实现# N, L; p" \; q9 t+ j0 j$ Q6 q
1)模型重置功能。水体模型重置与海底地貌模型重置采用相同的方法,在模型加载期间分别记录水体与海底地貌模型在Transform组件中的位置、旋转、缩放参数。当需要重置时,通过点击重置按钮,将记录的相关参数重新赋予模型,实现重置效果。; U; |9 C- F, @7 \2 @
2)水体属性重置功能。水体属性重置除了相关颜色、波长、波速、反射的参数重置外,还要重置与之关联的Slider控件。因此,该功能代码需要同时将值赋予着色器属性与对应的Slider控件。" t; W5 c5 k+ L6 K# S+ K
3.4 关键技术, F3 a" c2 P8 O( \1 Y" ^% r2 M+ A. C
3.4.1 目标识别技术
) Y) ^( q7 U9 _% [0 `* D! O2 Z在AR的识别技术中,图像指纹和汉明距离是两个关键要素[17]。图像指纹可通过“感知哈希算法”得到,通过将识别图与相机实时图像进行对比得到汉明距离,即可实现目标识别。0 v5 G" n* Q0 C4 p& k& H, E
“感知哈希算法”首先将图像缩小为8×8个像素,去除图像细节,同时将灰度值也分为64级灰度,计算灰度值的平均值;再将所有像素的灰度值与平均值进行比较,当像素灰度值大于或等于平均值时记为1,小于平均值时记为0;最后将所有比较结果组合在一起,组合产生的64位整数即为该图像的“指纹”。
^, W0 Y9 _2 U3 O* F汉明距离是对长度相同的字符串进行对比,字符串中对应位字符不同的数量就是汉明距离。将识别图与相机实时图像的图像指纹进行对比,根据汉明距离识别图像,当汉明距离小于5时,说明图像很相似;当汉明距离大于10时,说明是不同的图像。本文采用“感知哈希算法”通过汉明距离进行目标识别。7 E+ `2 b6 Y; _; U7 j: k( y& U
3.4.2 跟踪注册技术
! u: M( D" h2 s; P8 L' X5 u& W; w跟踪注册技术是AR的核心技术,可实时高效地将真实世界与虚拟世界精准对齐,将真实世界坐标系与虚拟世界坐标系统一起来,统一的过程即为注册。由于AR在使用过程中,用户会不断移动,导致自身与目标坐标系以及相对位置均在实时改变。为了实现AR,需实时注册,不断修改相关参数,该过程称为跟踪。目前的跟踪注册主要分为3种:基于传感器、基于机器视觉和基于混合的跟踪注册[18]。
2 _* O$ N; N g& z2 ?基于传感器的跟踪注册技术利用移动设备自带的传感器(如方向传感器、GPS传感器等)获取当前位置和方向信息,并通过摄像头实现虚拟信息与真实世界的叠加,完成跟踪注册。由于传感器为移动设备内置设备,因此易受外界因素影响,传感器的抖动将影响跟踪注册,使虚拟信息跟随抖动叠加。基于机器视觉的跟踪注册技术是通过摄像头对视频图像进行处理,得到跟踪信息,再根据这些信息得到真实世界中虚拟信息的位置信息[19]。基于混合的跟踪注册技术是结合上述两种方法,先利用传感器粗略确定用户位置姿态,再利用机器视觉跟踪注册技术进行精确处理。本文采用基于混合的跟踪注册技术,在提高注册速度的同时,增加了注册稳定性,提高了用户体验。
% F/ R1 Z' n$ k1 R2 d- D3.4.3 屏幕坐标与世界坐标的转换4 J5 c4 n5 [# m. U, ~7 n$ J
屏幕坐标与世界坐标的转换是实现AR模型识别和基于移动端屏幕操作的关键技术。AR实现过程中涉及屏幕坐标系、摄像机坐标系、世界坐标系3个坐标系。世界坐标系下的点与理想屏幕中投影点的像素坐标关系为:% _ z5 X) z. \* C [
: |+ \! I, M1 F; _! S! ]
式中,(X,Y,Z)为某点在世界坐标系中的坐标;(x,y)为屏幕中投影点的位置;f1、f2、p、q和m为摄像机内参,可由摄像机标定求解;R、T为摄像机外参,即摄像机在世界坐标系中的位置和姿态。) W6 i8 n. g9 a, r3 {
在Unity中,屏幕坐标系是指电脑或手机等设备屏幕的坐标系,屏幕坐标系通过像素进行定义,屏幕左下角为坐标原点(0,0),右上角为(width,height),对应于屏幕的宽与高。摄像机坐标系与屏幕坐标系相似,区别在于摄像机坐标系位于三维空间,而屏幕坐标系位于二维平面。摄像机位于摄像机坐标系原点,X轴向右,Y轴位于摄像机正上方,Z轴方向为摄像机朝向。3 H& s8 a, q" e5 y2 `6 x( K9 l+ R. q
Unity提供了一系列封装好的方法,通过这些方法可快速实现不同坐标系的转换。
, z. Z6 j; ?) U; O1)Camera.WorldToScreenPoint方法可将世界坐标转换为屏幕坐标,其中Camera为场景中的Camera对象。
; }) [) a+ L) ^# t( F# g2)Camera.ScreenToWorldPoint方法可将屏幕坐标转换为世界坐标。8 B* b/ k8 ~* R- Z
3.5 实验效果; d! u* V$ X5 Q! G: y% `
在安卓手机上运行MAR海洋地貌可视化App,系统自动识别笔记本电脑上展示的目标区域,显示海洋洋体模型和海洋地貌模型,移动模型、修改水体模型颜色、旋转模型、改变模型垂直夸张度、改变模型纹理和改变模型波长与反射属性等功能效果如图6所示。
0 j- n1 ]7 c. R( S
, ?: d: B, V$ {5 q* Q$ e图 6 MAR海洋地貌可视化系统实现效果
" Z+ @! Z* ?6 i. d
$ N( T6 i5 Z5 Z/ Q& g1 b1 A$ \6 G8 r$ F& ^( k1 \0 L
4 结语
0 r }; D% V3 E ?% P' X4 l# A3 u
+ j0 f6 w/ h) r$ l$ O0 p! [* k8 R7 g- {* Z& @( T! B
本文在移动端将 AR 技术应用于海洋地貌可视化与多层次展示中,取得了较好的表达效果。本文中海洋被假定为静态水体,但真实的海洋洋体是一个复杂的动态系统,在将来的实验中还有待进一步完善。
8 e: U, }9 q; q. R! ~本文原刊于《地理空间信息》;
; z( ]( n8 n- `" ~5 d; d+ j& q作者/李双宇1 ,吴芳华2 ,徐道柱2 ,杨春成1,吴国佳1
8 s7 E0 B0 \0 {
' c, y# Z: T3 v% A8 k( { q, w该文章来源互联网,如有侵权请联系删除
- p' W4 K! t6 ~) e查看原文:www.52ocean.cn |