Ladybug全景视频显示系统开发
1、1Ladybug全景视频显示系统主要模块设计 在获取Ladybug3全景相机拍摄的全景视频流文件以后,需要对流文件进行操作,提取并显示全景视频。本小节主要介绍Ladybug全景视频显示系统的主要模块及其功能。

3、3初始化阶段 本系统采用Ladybug专业全景相机拍摄全景视频,Ladybug全景相机拍摄得到的Ladybug图像被存储在一组流文件中,每个流文件的存储上限为2GB。流文件的名字为:[基本名]-[流序号].pgr。流文件包括基本名、流序号两部分;其中,基本名可由用户或应用程序定义;而流序号是由Ladybug自动生成的,用6位数字表示,从'000000'开始,每增加一个流文件,流序号加1。例如,流文件的基本名为“myStream”,则生成的流文件的名字依次为:myStream-000000.pgrmyStream-000001.pgrmyStream-000002.pgr......每个Ladybug流包括一组流文件,流文件用于存储Ladybug图像。每个Ladybug流由一个或多个具有相同基本名的流文件构成。每一个流文件包含一个或多个Ladybug图像。根据相机的配置情况,Ladybug图像可以是压缩的JPEG图像数据,也可以是原始图像数据,本系统使用JPEG压缩格式来存储每一帧图像数据。由Ladybug3全景相机得到的的全景视频流文件格式。

5、1 Ladybug上下文环境配置 系统在读取视频文件之后,需要对Ladybug上下文环境进行初始化,正确的初始化是保证全景视频正确显示的基础。流文件的Ladybug上下文环境对象的配置过程如下:(1)根据流文件所包含的信息对Ladybug上下文环境对象进行初始化。(2)根据流文件的图像数据格式配置Ladybug上下文环境对象的颜色处理方式。由于流文件中的数据采用JPEG方式存储;对于每一帧Ladybug图像,依次存储每一个摄像头所拍摄的图像数据;对于每个摄像头拍摄的图像数据分为4个Bayer通道(Green、Red、Blue、Green)分别进行存储。因此,确定流文件的颜色处理方式为:对图像数据进行下采样,将每个像素点的4个Bayer像素值转换为一个颜色值进行存储。(3)配置Ladybug上下文环境对象的AlphaMask。全景视频的每一帧均由6个摄像头所拍摄的图片拼接而成,为了使6幅图像拼接后得到较好的效果,引入AlphaMask。AlphaMask定义了对于每一个像素点,待拼接的相邻两幅图像的权重。初始化AlphaMask,并使用它配置上下文环境对象。对于AlphaMask分辨率的设置,由于颜色处理方式为对图像数据进行下采样,因此,AlphaMask的分辨率应为每帧图像分辨率的一半。另外,Ladybug图像显示时默认不使用AlphaMask,因此需调用LadybugSetAlphaMask方法进行设置。

6、2Ladybug全景图像漫游显示 为实现全景视频的漫游显示,首先,需获取某一帧的全景图像,获取图像的存储类型为LadybugImage的结构体变量。为了显示该帧全景图像,必须将图像数据存储到一个RGB32型的缓冲区中,调用ladybugConvertImage方法可以将LadybugImage结构体的图像数据转换并存储到一个RGB32缓冲区中。然后,再将缓冲区中的图像数据更新到显卡中,此时,再调用ladybugDisplayImage方法即可在屏幕中显示虚拟相机所拍摄的图像画面。 本系统采用GLUT应用程序框架实现,因此,虚拟相机参数以及GLUT投影矩阵等的设置,在glutReshapeFunc函数的回调函数中加以实现。在glutIdleFunc函数的回调函数中实现获取下一帧图像数据并存储到缓冲区,以及更新到显卡等功能;在glutDisplayFunc函数的回调函数中实现投影图像的显示;利用glutTimeerFunc函数实现间隔特定时间的帧号加1功能。 对于全景视频的漫游是通过鼠标操作实现交互,通过注册glutMouseFunc和glutMotionFunc等函数的回调函数,处理鼠标事件。根据鼠标移动、屏幕分辨率等信息可计算出水平和垂直方向旋转的角度,根据这些角度信息便可重新计算视场中心轴、向上方向等各项信息来可实现图像的旋转,最后将旋转方向后的新图像显示在窗口,即完成了全景视频的漫游显示。
