未来智讯 > 无人驾驶论文 > 无人机球面全景图像标注系统研究

无人机球面全景图像标注系统研究

发布时间:2018-05-09 11:33:00 文章来源:未来智讯    
    关键词:无人机;全景图标注;OpenGL;图形渲染
    DOIDOI:10.11907/rjdk.161956
    中图分类号:TP317.4
    文献标识码:A文章编号:16727800(2016)010016403
    0引言
    无人机全景图像在应用中都需要对相关目标物进行标注,以达到在超大视野中快速查询目标物体的目的。无人机全景图与普通平面图不同,传统标注方法不再适用。本文采用射线拾取以及求交方法将计算机屏幕上的二维标注点精确标注在球面全景图的三维坐标上并进行标注渲染,使用球体外包装盒方法实现了无人机全景图片以球体形式展现给用户,该方法已研发成功并应用于相关领域。实践表明该方法标注精确度较高、操作简单,在相关领域发挥了重要作用。
    1无人机全景图像特征
    1.1无人机球面全景图像数据表达
    球面全景图像是空间球面图像,球面上每一个位置都可表达为球坐标形式。对于球面全景图像来说,球面的半径可认为是一个常数,经常认为球面全景图像是半径为1的球体表面,所以球面像素的位置就由水平角和垂直角两个角度来表达。如果以水平角为横坐标、垂直角为纵坐标表达球面全景图像,则可将球面全景图像以平面形式重新表达,这种表达方式不会破坏像素间的相邻关系[1]。这样表达的球面全景图像水平角度为360°,垂直角度为180°,宽高比为2∶1。
    全景图像由全景相机拍摄,360°的视角连续弯曲到平面图像上,x轴对应全景垂直方向角度,也可以称为全景图像的经线[2];y 轴对应水平方向的角度,可以称为全景图像的纬线。
    1.2平面图像与球面图像变换
    为了与球面全景图像区分,平面图像转换为球面图像后水平角度用α表示,垂直角度用β表示。
    α=tan-1v-v0f(1)
    β=tan-1u-u0f2+(v-v0)2(2)
    其中u0、v0表示图像的中心坐标,f为焦距。
    将平面图像变换到球面如图1所示,其中球面的半径为1,是一个归一化后的单位球面[3]。根据公式可得到每个像素变换到球面后对应的角度。将平面图像进行球面变换后的结果如图1所示。
    2无人机全景图像标注算法设计
    2.1球体外包装盒的构造算法
    为了图像显示更为逼真,本系统选择的外包装盒类似地球球体。OpenGL中所有的三维图像都由三角形构成[4],球体也由许多三角形构成。
    对于球上任意一点P的坐标,可通过球形坐标来表示(用半径 r、垂直角θ和水平角α来表示):
    Px=r*sinθ*cosα(3)
    Py=r*cosθ(4)
    Pz=r*sinθ*sinα(5)
    球的属性至少包括球心、球的半径、球体在水平方向的分块数目、球体在竖直方向的分块数目、球体网格顶点、球体网格中三角形索引。本系统通过定义索引来绘制三角形网格,在定义索引时按照先横向、后竖向原则循环。
    2.2射线拾取以及求交算法
    OpenGL本身支持基于图像空间的拾取,这里指的是几何拾取,即由屏幕点击触发一条射线,然后和场景中的物体求交,进而得到交点。
    OpenGL中的拾取是对OpenGL图形管线的应用[5],所以OpenGL中的拾取并不像D3D一样采用射线交叉测试来判断是否选中一个目标,而是在图形管线的投影变换(Projection Transformation)阶段利用拾取矩阵[2]来实现,如图2所示。
    OpenGL利用投影变换中归一化视体操作来实现拾取操作。OpenGL会自动剪裁掉目标归一化视体之外的物体,如果把选择物体的方框转换为投影时的视体, OpenGL会自动将剩余的东西扔掉。OpenGL提供了选择模式glRenderMode(GL_SELECT),当进行拾取时,先进入这个模式,然后设定好选择框的大小,再为要选择的物体命名。接下来操作和投影变换就有异曲同工之妙:先把这个选择框归一化为边长为-1到1的正方体,然后移动到原点,最后放大到窗口大小(这时OpenGL把已选目标以外的东西剪裁掉了,如果这时要显示投影矩阵中的内容,就会只看到选择的东西,并且放大到和窗口一样大)。OpenGL会把选中的物体信息记录在一个叫做SelectBuffer的一维数组缓冲中,这个缓冲保存着名字栈中名字的个数,目标物体的最小最大深度值,也就是z的值,范围是0~1之间的值,也就是离视点最近的为0,最远的为1。SelectBuffer是个整型数组,所以保存的深度值是SelectBuffer乘以0xFFFFFFFF后的值。当然最重要的是储存了选择到的目标物体名字,这样,只要在程序中判断选择物体的名字,就可以判断是否选择到了要选择的目标物体。拾取过程如图3所示。
    图3左边的正方体是已经归一化的视体,拾取时就在这个空间中进行操作。红色的小框是选择框,里面的红色就是选择到的物体一部分。要把这个小框转变为目标视体,目标物体才不会被OpenGL删除。首先,把选框移动到观察坐标系原点,接着,再进行归一化操作,这样,整个视体中就只有选中的目标物体了。图3(b)正方体展示了这个过程。目标视体外的东西已经被OpenGL删除了,选中的记录保存到SelectBuffer中。这些操作是在选择模式下完成的,因此看不到选择过程。如果非要将选择过程显示出来,就会看到图3(c)正方体的样子。在OpenGL中提供了这个设置拾取框函数:
转载请注明来源。原文地址:https://www.7428.cn/page/2018/0509/16165/
 与本篇相关的热门内容: