孔令爱,郭晶晶
(1.临沂市地震台,山东 临沂276000;2.信阳学院大数据与人工智能学院,河南 信阳464000)
我国是一个地震多发的国家,面对地震给人民的生民财产带来的威胁,公众对于地震知识的需求量越来越大。为了向公众普及地震知识、树立地震忧患意识、提高防震减灾技能,防震减灾科普宣传工作在全国范围内广泛开展,地震科普馆相继在各地出现,公众可以通过馆内的展柜、展板、影视资料等学习地震知识。但是,目前建设的大部分地震科普馆多是以讲解员讲解的方式向公众普及知识,耗费了大量的人力资源,而且缺乏互动性和趣味性。随着增强现实技术广泛应用到各个行业,如工业、医疗、军事、娱乐、游戏、教育、商业、家具等领域[1],地震工作者开始思考并尝试将增强现实技术应用于防震减灾科普宣传中。随着便携性、智能化移动设备的快速发展,增强现实技术越来越多地应用到移动设备上,移动增强现实应运而生,可以将移动增强现实应用到地震科普馆导览中,公众借助强大的互联网功能自行获取地震科普馆中的地震知识,这样既减少了人力资源的负担,又能增强公众与展品之间的互动,提高科教效果。
针对上述方案,研究设计一套应用于Android智能手机上的地震科普馆导览原型系统。该系统借助于室内Wi-Fi 定位技术,利用OpenCV[2]和Eclipse开发工具,通过对实时视频流中的特定标志物进行检测识别,实现对智能手机的位姿计算和虚拟信息的融合显示。系统的基本功能是:当手机摄像头对准特定标志物时,屏幕会弹出与该标志物对应展柜(或展板)的介绍信息,帮助用户自行获取地震知识,取代了讲解员的讲解过程,具有较好的导览功能。以此系统对提出的算法进行测试,结果表明,所提方法具有一定的正确性和有效性,达到了预期的研究和应用目标。
原型系统的搭建以Android 系统作为开发平台,具有Android 系统框架的分层结构。系统的基本框架结构如图1 所示,主要由用户层、应用服务层和数据访问层三部分构成。
图1 系统基本框架
用户层由用户界面和增强现实展示组成,位于系统的顶层,是系统的开端,与用户进行交互。
应用服务层由Wi-Fi 定位模块、摄像机模块、姿态计算模块、数据存储模块、图像处理模块和数据处理模块组成。Wi-Fi 定位模块获取用户的位置信息;摄像机模块实现系统的拍摄功能,获取视频图像;姿态计算模块计算摄像机的位置和方向,实现摄像机的空间定位和虚拟信息的空间定位;数据存储模块实现位置信息和标志物信息的存储;图像处理模块实现图像的灰度化、二值化、去噪和轮廓提取;数据处理模块实现用户位置信息与标志物位置信息的算法匹配。
数据访问层由OpenCV、Wi-Fi 和本地数据库组成,OpenCV 提供OpenCV for Android 库函数,为应用服务层的图像处理模块提供图像处理接口函数;Wi-Fi 和本地数据库分别为应用服务层的Wi-Fi 定位模块和数据存储模块调用。
此款地震科普馆导览系统通过检测识别复杂场景中的标志物轮廓区域,跟踪定位摄像机相对于标志物的位置和方向,将虚拟信息叠加到现实中的标志物,实现增强显示。系统运作的基本流程主要包括标志物检测识别、摄像机跟踪定位和虚拟信息注册三个过程,流程图如图2。
图2 系统基本工作流程
标志物检测识别:Android 智能手机借助Wi-Fi定位,获取用户位置信息,与数据库中已有的标志物位置信息匹配,识别标志物;根据标志物具有的四边形特征,结合图像处理中的相关操作,检测定位标志物区域。
摄像机跟踪定位:利用标志物的四个顶点,求解从虚拟空间坐标系到摄像机坐标系的变换矩阵,通过确定坐标系之间的变换关系,计算摄像机位姿。
虚拟信息注册:通过坐标系之间的变换,确定虚拟信息在成像平面上的位置,实现虚拟信息的注册,在Android 智能手机上,以图层叠加的方式,实现虚实融合显示。
标志物检测识别的设计思路为:首先用Android系统中的Wi-Fi 定位功能确定用户与标志物之间的位置关系,识别用户当前面对的标志物;然后,根据标志物四边形及其轮廓的特征,将标志物区域从复杂的场景中提取出来,实现标志物的检测。
此款地震科普馆导览系统应用于室内,由于受室内环境的影响,无法利用GPS 解决一些定位问题。然而随着Wi-Fi 的普及,在大部分室内公共场所都会有Wi-Fi 覆盖,所以在设计中采取Wi-Fi 定位方法。系统利用基于位置指纹识别算法的Wi-Fi定位[3],通过“训练”和“定位”两个阶段的过程,确定用户位置。标志物识别算法具体的实现步骤为:
在训练阶段,选取合理的参考点,在各个参考点测量不同接入点(AP)的接收信号强度(RSS),将参考点的位置信息和相应的MAC 地址存储在Android 系统提供的SQLite 数据库中,建立一个位置指纹识别数据库。
在定位阶段,利用NN 匹配算法,将用户接收的接入点的RSS 与数据库中已存储的数据进行比较,确定用户的位置。假设用户接收的RSS 测量值为s=[ss1,ss2,...,ssn](n 代表用户检测到的不同AP 数);数据库存储的数值为Si= [SS1,SS2,...,SSNi],(i∈[1, NT],NT代表数据库中的参考点个数;Ni代表第i 个参考点中记录的不同AP 数)。NN 算法的表达形式[4]为:
将获取的用户位置信息与数据库中已有的特定标志物的位置信息进行比较,识别标志物。
标志物检测算法的设计思路为:根据标志物具有丰富的边缘信息、具有矩形轮廓、版面是白底黑字等特点,从复杂的场景中提取标志物轮廓区域,定位标志物轮廓,实现标志物检测。该算法具体的实现步骤如下:
首先对视频图像进行灰度变换与自适应二值化。采用自适应二值化之最大类间方差法(Otsu)[5]对灰度图像二值化,并对图像去噪。
然后,提取图像中的轮廓,设定阈值,排除面积过小的轮廓,筛选出面积较大的轮廓。
对获取的轮廓进行多边形近似。由于标志物的轮廓为矩形,所以多边形的近似结果应该满足以下条件:只有四个顶点;一定是凸多边形;每一个边的长度不能过小。根据这些条件,排除绝大部分轮廓,找到最有可能的标志物轮廓。
最后,对筛选出的多边形轮廓求取外接矩形,计算轮廓占外接矩形面积的比例,占比最大的确定为标志物矩形区域。标志物检测定位算法的流程如图3 所示。
图3 标志物检测定位流程图
利用公式F=0.30R+0.59G+0.11B 对视频中的每一帧图像进行灰度化,其中,F、R、G、B 分别表示灰度值、红色分量、绿色分量和蓝色分量。此处采用加权平均值法,能获得效果较好的灰度图像。
图像二值化的作用是把图像中的目标和背景分离开,对图像阈值分割[6]。此处采用Otsu 算法对灰度图像二值化。基本思想是设定一个最佳阈值把图像分割成目标和背景两部分,使得目标与背景的类间方差取最大值。Otsu 算法给出的最佳阈值为:
式中的σ2(t)表示目标与背景的类间方差。二值化后需要进行滤波来降低噪声,在此采用中值滤波对图像去噪,噪声抑制效果较好。
图像二值化后,首先利用函数cvCanny()对二值化图像边缘检测;然后设定阈值,利用函数cvFind Contours()提取符合阈值条件的轮廓,从提取的轮廓中筛选出矩形轮廓;最后,利用函数cvContourArea()计算矩形轮廓的面积,选择面积最大的矩形轮廓,将标志物区域定位出来,并将定位得到的标志物4 个顶点的坐标值保存下来,为摄像机跟踪定位提供数据。
当平移或旋转手机时,人们的视线会随之改变,那么添加到真实场景中的虚拟信息也应该随之做相应的改变。跟踪注册技术的主要任务就是实时地检测出摄像机的位置和方向,准确定位虚拟信息在成像平面上的位置,实时地将虚拟信息融合到真实场景的正确位置[7]。基于移动增强现实的地震科普馆导览系统在标志物识别的基础上,对标志物进行跟踪注册,并实现虚拟信息的融合显示。
本研究选用的摄像机跟踪定位方法,是根据标志物具有二维平面的结构特征,以标志物的四个顶点进行跟踪,对传统的基于六个标志点的跟踪方法进行了改进。
标志物跟踪算法的设计思路为:以标志物的四个顶点为标志点,计算世界坐标系OW(XW,YW,ZW),摄像机坐标系OC(XC,YC,ZC)和成像平面坐标系O2(u,v)之间的变换关系,确定摄像机的位姿。算法的具体实现步骤如下:
1) 确定世界坐标系,并将其设定在标志物上。测量标志物的长为5cm,宽为3cm,以标志物的左上顶点为坐标原点,则标志物的4 个顶点的世界坐标为(0,0)、(5,0)、(0,3)、(5,3),如图4 所示。
图4 标志物的世界坐标系示意图
2) 计算标志物4 个顶点的像素坐标,根据标志物轮廓区域的检测方法,可以获得4 个顶点坐标。
3) 根据透视投影原理,建立成像平面坐标系与世界坐标系中对应点的关系。
4) 求解出坐标系之间的变换矩阵,确定摄像机的位姿。
在上述第三步骤中,根据透视投影原理,实现标志点从世界坐标系到摄像机坐标系,再到成像平面坐标系的变换,具体的实现过程如下:
设世界坐标系与摄像机坐标系之间的变换表达式为:
上式中,(xc,yc,zc)表示摄像机坐标系中的点坐标,(xw,yw,zw) 表示世界坐标系中的点坐标,V 为旋转矩阵,M 为平移向量。其中:
此算法的目的即是计算V 和M 中的12 个参数,求解外参矩阵Tcm,确定摄像机的位姿。由(3)式知,世界坐标系中的点到摄像机坐标系中的对应点的变换为:
根据透视投影原理,建立成像平面坐标系中的点与摄像机坐标系中的点的对应关系,如下式所示:
将(4)式带入(5)式得到:
式中,f 为摄像机的焦距,摄像机标定中已求出,为已知数据。因此(6)式中含有12 个参数,所以需要12个方程,即6 个标志点,才能将所有的参数求解出来。此处根据标志物的二维平面结构,对传统的6 点跟踪法进行了改进,提出一种基于四个标志点的标志物跟踪方法。由图4 可知,4 个标志点在同一个平面上,所以4 个点的绝对坐标可以设为(xw, yw,0);又由于t3只是各参数的比例因子,所以可以设t3=1。因此(6)式可以简化为:
式中只含有8 个参数,所以可通过4 个标志点将8个参数r31,r32,r11,r12,r21,r22,t1,t2求出。再根据V 具有正交规范化矩阵的性质,即VTV=1,求解另外三个参数r13,r23,r33,其中:
通过摄像机标定,求解出了内参矩阵P;通过摄像机的位姿计算,求解出了旋转矩阵V 和平移向量M,即外参矩阵Tcm。至此,便实现了基于标志物识别的摄像机跟踪定位。
虚拟信息的注册是将虚拟信息与目标场景进行配准,确定虚拟信息在成像平面中的位置[8]。Android系统提供了大量功能丰富的UI(User Interface)组件,利用Android 系统中界面布局与组件之间的逻辑关系,通过图层叠加的方式,实现虚拟信息与真实场景的虚实融合显示。虚拟信息注册的设计思路为:根据摄像机跟踪定位过程中获得的坐标系之间的变换关系,将虚拟坐标系中的虚拟信息投影变换到成像平面坐标系。
如图5 所示为虚拟信息投影到成像平面中的坐标变换图。图中,OC(XC,YC,ZC)表示摄像机坐标系,O2(u,v) 表示成像平面坐标系。M 表示虚拟坐标系中一点变换到摄像机坐标系中的对应点。d 表示摄像机中心到成像平面的距离,即摄像机的焦距f。虚拟信息的注册就是计算出点M 在O2(u,v)坐标系中的投影点m 的坐标。
图5 虚拟信息投影坐标变换
虚拟信息注册的具体实现过程为:
首先将虚拟坐标系中的点变换到摄像机坐标系中的对应点,如下式:
设点M 在OC(XC,YC,ZC)中的坐标为(x0,y0,z0),点m在O2(u,v)中的坐标为(u0,v0)。由图5 知,a1和a2是点M 在摄像机坐标系OC(XC,YC,ZC)上的正投影,它们在成像平面上的投影点分别为b1和b2,根据三角形 相 似 关 系△OcO2b1∽△Oca3a1,△OcO2b2∽△Oca3a2,有:
由(9)式可以得到:
通过以上步骤,计算出了虚拟信息在成像平面中的显示位置,即(u0,v0)。至此,便完成了基于标志物识别的虚拟信息注册。
设计搭建的原型系统在Android 操作系统上运行验证,结合Wi-Fi 定位技术,在标志物识别的基础上,进行跟踪注册与虚实融合显示。软件平台的搭建,既需要Android 开发环境,也需要开源的图像处理库OpenCV。在Android 系统上调用OpenCV 库函数,需要搭建NDK 编译环境。
Android 开发环境:Android 程序开发采用Java编程语言,需要安装配置JDK(Java Development Kit)、Android SDK、ADT(Android Development Tools)和Eclipse。
NDK 编译环境:在Android 程序开发中,NDK 用来编译C/C++代码,在Java 层和Native 层之间进行数据通信。通过调用Java 的JNI(Java Native Interface,Java 本地接口)机制,NDK 将相应的C/C++函数编译成so 库文件,供Java 的应用层程序调用,实现Java的本地程序开发(Native development)。
由于系统还处于实验和测试阶段,所以暂时选择某地震局室内的展板作为测试对象。测试效果如图6。图6(a)为用户界面;为了能够快速准确地检测识别标志物区域,系统中增加了聚焦功能,当用户触碰标志物处的屏幕时,交互界面会出现一个光点,如图6(b)所示。图7 为系统运行结果,从图中可以看出当手机摄像头对准标志物时,在地震科普馆的展板上会出现与其对应的地震知识,当手机在不同位置时,虚拟信息会显示在标志物的不同位置。
图6 用户交互界面测试效果
图7 系统运行结果
由测试结果可知,对于不同角度拍摄的标志物,虚拟信息会根据摄像头的角度显示在标志物的不同位置。该系统通过对特定标志物叠加信息,增强了地震科普馆中展柜(或展板)的可视化效果,增加了用户获取地震知识的趣味性,基本实现了地震科普馆的导览功能,具有较好的实用性。
快速发展的现代科技为地震工作者不断提供新的研究课题。将移动增强现实技术应用于地震科普馆导览中,能增强公众与展品之间的互动,激发公众获取地震知识的兴趣,这是防震减灾科普宣传工作的一种尝试和创新,对切实推进新时代防震减灾科普宣传工作发展具有重大意义。所设计的导览系统能够实现标志物的检测识别算法和三维注册算法。对于系统中仍然存在的不足,例如:本文只是以文本信息的形式对真实场景进行增强显示,未对图形、三维模型等虚拟信息进行研究;只是针对特定标志物进行导览,未对整个科普馆的环境进行导览等,有待于今后的研究中加以完善,设计出更加形象具体的地震科普馆导览原型系统。