欢迎来到天天文库
浏览记录
ID:31434457
大小:104.00 KB
页数:4页
时间:2019-01-09
《无人机球面全景图像标注系统研究》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、无人机球面全景图像标注系统研究 摘要:针对无人机全景图精确标注需求,分析了传统平面标注方法的局限性,从无人机全景图自身特点出发,提出了几点改进意见:①综合无人机全景图特征,使用球体包装盒将无人机全景图形象展现给用户;②考虑无人机全景图特征,将射线拾取及求交方法应用到标注中,达到精确标注;③使用OpenGL技术进行图形渲染,大幅度提高渲染效率。实验表明:上述改进适合对无人机全景图的标注。 关键词:无人机;全景图标注;OpenGL;图形渲染 DOIDOI:10.11907/rjdk.161956 中图分类号:TP317.4 文献标识码:A文章编号:16727800(2016)0
2、10016403 0引言 无人机全景图像在应用中都需要对相关目标物进行标注,以达到在超大视野中快速查询目标物体的目的。无人机全景图与普通平面图不同,传统标注方法不再适用。本文采用射线拾取以及求交方法将计算机屏幕上的二维标注点精确标注在球面全景图的三维坐标上并进行标注渲染,使用球体外包装盒方法实现了无人机全景图片以球体形式展现给用户,该方法已研发成功并应用于相关领域。实践表明该方法标注精确度较高、操作简单,在相关领域发挥了重要作用。 1无人机全景图像特征4 1.1无人机球面全景图像数据表达 球面全景图像是空间球面图像,球面上每一个位置都可表达为球坐标形式。对于球面全景图像来说
3、,球面的半径可认为是一个常数,经常认为球面全景图像是半径为1的球体表面,所以球面像素的位置就由水平角和垂直角两个角度来表达。如果以水平角为横坐标、垂直角为纵坐标表达球面全景图像,则可将球面全景图像以平面形式重新表达,这种表达方式不会破坏像素间的相邻关系[1]。这样表达的球面全景图像水平角度为360°,垂直角度为180°,宽高比为2∶1。 全景图像由全景相机拍摄,360°的视角连续弯曲到平面图像上,x轴对应全景垂直方向角度,也可以称为全景图像的经线[2];y轴对应水平方向的角度,可以称为全景图像的纬线。 1.2平面图像与球面图像变换 为了与球面全景图像区分,平面图像转换为球面图像
4、后水平角度用α表示,垂直角度用β表示。 α=tan-1v-v0f(1) β=tan-1u-u0f2+(v-v0)2(2) 其中u0、v0表示图像的中心坐标,f为焦距。 将平面图像变换到球面如图1所示,其中球面的半径为1,是一个归一化后的单位球面[3]。根据公式可得到每个像素变换到球面后对应的角度。将平面图像进行球面变换后的结果如图1所示。 2无人机全景图像标注算法设计 2.1球体外包装盒的构造算法4 为了图像显示更为逼真,本系统选择的外包装盒类似地球球体。OpenGL中所有的三维图像都由三角形构成[4],球体也由许多三角形构成。 对于球上任意一点P的坐标,可通过球形坐
5、标来表示(用半径r、垂直角θ和水平角α来表示): Px=r*sinθ*cosα(3) Py=r*cosθ(4) Pz=r*sinθ*sinα(5) 球的属性至少包括球心、球的半径、球体在水平方向的分块数目、球体在竖直方向的分块数目、球体网格顶点、球体网格中三角形索引。本系统通过定义索引来绘制三角形网格,在定义索引时按照先横向、后竖向原则循环。 2.2射线拾取以及求交算法 OpenGL本身支持基于图像空间的拾取,这里指的是几何拾取,即由屏幕点击触发一条射线,然后和场景中的物体求交,进而得到交点。 OpenGL中的拾取是对OpenGL图形管线的应用[5],所以OpenGL中
6、的拾取并不像D3D一样采用射线交叉测试来判断是否选中一个目标,而是在图形管线的投影变换(ProjectionTransformation)阶段利用拾取矩阵[2]来实现,如图2所示。 OpenGL利用投影变换中归一化视体操作来实现拾取操作。OpenGL会自动剪裁掉目标归一化视体之外的物体,如果把选择物体的方框转换为投影时的视体,4OpenGL会自动将剩余的东西扔掉。OpenGL提供了选择模式glRenderMode(GL_SELECT),当进行拾取时,先进入这个模式,然后设定好选择框的大小,再为要选择的物体命名。接下来操作和投影变换就有异曲同工之妙:先把这个选择框归一化为边长为-1到
7、1的正方体,然后移动到原点,最后放大到窗口大小(这时OpenGL把已选目标以外的东西剪裁掉了,如果这时要显示投影矩阵中的内容,就会只看到选择的东西,并且放大到和窗口一样大)。OpenGL会把选中的物体信息记录在一个叫做SelectBuffer的一维数组缓冲中,这个缓冲保存着名字栈中名字的个数,目标物体的最小最大深度值,也就是z的值,范围是0~1之间的值,也就是离视点最近的为0,最远的为1。SelectBuffer是个整型数组,所以保存的深度值是Select
此文档下载收益归作者所有