虚拟三维场景的球面斐波那契像素点阵全景画面渲染与显示
方法
技术领域
[0001] 本
发明属于虚拟三维场景画面渲染与显示技术领域,涉及一种
虚拟三维场景的球面斐波那契像素点阵全景画面渲染与显示方法。
背景技术
[0002] 随着
虚拟现实技术的不断发展,人们对全景视频的需求越来越强烈。制作全景视频的关键是生成其中的每
帧全景画面。全景画面包含360×180°视场范围的场景视觉信息。Vladyslav Zakharchenko等人2016年发表在SPIE会议论文集第9970卷的论文《Quality Metric for Spherical Panoramic Video》对全景画面作了详细介绍。全景画面既可以通过用
全景相机拍摄真实场景生成,也可以利用
计算机图形学技术渲染虚拟三维场景生成。
当前的全景相机通常采用多相机拼接方法,把朝不同方向拍摄得到的局部视
角画面缝合成全景画面。在利用计算机图形学技术渲染生成虚拟三维场景全景画面时,可以借用生成环境立方图的思想,通过生成环境立方图来产生全景画面。Tomas Akenine- 等人撰写的由A K Peters公司出版的《Real-Time Rendering,3rd Edition》对环境立方图的生成作了介绍。全景画面本质上呈现的是三维场景投影到全景视域球上的视觉信息。从这个角度说,全景画面的像素最好在全景视域球上均匀分布,以便使全景视域球上所有区域的像素点
密度相同,从而保证全景画面的所有区域具有相同的清晰度和画质。然而,使用现有的立方图思想生成的全景画面的像素在全景视域球上并非均匀分布。2010年发表在期刊Mathematical Geosciences的第42卷第1期的论文《Measurement of areas on a sphere using Fibonacci and latitude-longitude lattices》介绍了球面斐波那契网格点阵,其可以看作是在球面上均匀分布的点阵。如图1所示,要在半径为1的球面上生成包含N个点的斐波那契网格点阵,可以按如下方式计算第n个点的坐标(xn,yn,zn):
[0003]
[0004] 式中,
[0005] 首先在全景视域球上产生包含N个点的球面斐波那契网格点阵,把球面斐波那契网格点阵的每个点当作全景画面的一个像素,再利用计算机图形学技术获得每个像素的
颜色值,就可以渲染出各个区域具有相同清晰度的全景画面。由于球面斐波那契网格点阵并非二维规则矩形点阵,因此不宜用矩阵来保存球面斐波那契像素点阵全景画面。全景画面最终需要显示给人观看,人在观看全景画面时,在特定时刻只能观看到全景画面的一部分,也就是说特定时刻在显示设备上只需显示全景画面的一个局部区域。另外,当前显示设备的像素点阵通常为二维矩形点阵。要在显示设备上观看球面斐波那契像素点阵全景画面的一个局部区域,需要设计专
门的方法来根据球面斐波那契像素点阵图像计算出特定画面区域的二维矩形像素点阵图像,以便在显示设备上显示。
[0006] 尽管真实的全景相机通常由多个相机拼接而成,在利用计算机图形学技术渲染虚拟三维场景以生成全景画面时,可以定义虚拟全景相机。虚拟全景相机的成像面是一个半径为1的球面(就是全景视域球面,即图1所示的球面)。虚拟全景相机可以用成像球面的球心
位置和北极方向两个参数来描述。虚拟全景相机视点位置就是该球心位置,虚拟全景相机拍摄时的向上方向就是该北极方向。如图1所示,成像球面的球心位置在局部
坐标系x-y-z的原点o处,成像球面的北极方向为z轴方向。
发明内容
[0007] 本发明的目的在于,提供一种虚拟三维场景的球面斐波那契像素点阵全景画面渲染与显示方法,实现虚拟三维场景的全景画面的渲染,并在显示器上显示全景画面的局部区域。
[0008] 本发明的技术方案是这样实现的:首先在如图1所示的虚拟全景相机的成像球面上生成包含N个点的斐波那契网格点阵A001,计算斐波那契网格点阵A001的各个网格点在如图1所示的局部坐标系x-y-z中的坐标;根据世界坐标系X-Y-Z中的虚拟全景相机视点位置和虚拟全景相机拍摄时的向上方向构建从局部坐标系x-y-z到世界坐标系X-Y-Z的变换矩阵,据此计算斐波那契网格点阵A001的各个网格点在世界坐标系X-Y-Z中的坐标;根据世界坐标系X-Y-Z中的虚拟全景相机视点位置和世界坐标系X-Y-Z中的斐波那契网格点阵A001的各个网格点的坐标,确定斐波那契网格点阵A001的各个网格点对应的成像球面像素点对应的光线,并利用
光线跟踪技术求解像素颜色;用一维数组PANORAMA存储斐波那契网格点阵A001的各个网格点对应的成像球面像素点的颜色,即数组PANORAMA的第n个元素存储斐波那契网格点阵A001的第n个网格点对应成像球面像素点的颜色,n=1,2,…,N;最后,把数组PANORAMA保存到磁盘文件PAIMAGE中,完成全景画面的渲染;在显示全景画面时,首先把磁盘文件PAIMAGE中的数组PANORAMA加载到计算机内存中,然后把虚拟透视投影相机A004的视点设置成局部坐标系x-y-z的原点,再用虚拟透视投影相机A004拍摄成像球面以便得到需要显示的全景画面局部区域;如图1所示,矩形ABCD就是虚拟透视投影相机A004的像素平面;根据数组PANORAMA存储的数据插值计算虚拟透视投影相机A004的像素平面上的各个像素的颜色值,从而得到矩形画面A005,并把矩形画面A005显示到显示器上。本方法的具体实现步骤如下:
[0009] 1)本方法的第一部分实现全景画面的渲染,具体实现步骤如下:
[0010] 步骤Step101:在虚拟全景相机的成像球面上生成包含N个点的斐波那契网格点阵A001,计算斐波那契网格点阵A001的各个网格点在如图1所示的局部坐标系x-y-z中的坐标;斐波那契网格点阵A001的第n个网格点的坐标为(xn,yn,zn),其中zn=(2n-1)/N-1,在计算机的内存中创建包含N个元素的一维数组PANORAMA,数组PANORAMA的每个元素保存虚拟全景相机成像球面上的一个像素的颜色值;
[0011] 步骤Step102:计算从局部坐标系x-y-z到世界坐标系X-Y-Z的变换矩阵Mxyz2XYZ:
[0012] 其中px表示虚拟全景相机视点在世界坐标系X-Y-Z中的X坐标,py表示虚拟全景相机视点在世界坐标系X-Y-Z中的Y坐标,pz表T
示虚拟全景相机视点在世界坐标系X-Y-Z中的Z坐标,向量W=[wx,wy,wz]表示虚拟全景相机拍摄时的向上方向在世界坐标系X-Y-Z中对应的单位向量,向量U=[ux,uy,uz]T,向量V=[vx,vy,vz]T;向量V按如下方式计算:令 如果 则
否则V=[0,0,1]T;向量U按如下方式计算:
[0013] 步骤Step103:对于n=1,2,…,N,针对斐波那契网格点阵A001的第n个网格点,做如下操作:
[0014] 步骤Step103-1:令向量 令其中ppix,x表示向量Ppix的第一个分量,ppix,y表示向量Ppix的第二个分量,
ppix,z表示向量Ppix的第三个分量,ppix,w表示向量Ppix的第四个分量;
[0015] 步骤Step103-2:从世界坐标系X-Y-Z中的虚拟全景相机视点位置出发,发射一条穿过世界坐标系X-Y-Z中的点 的光线B001,利用
光线跟踪技术跟踪光线B001在虚拟三维场景中的传播,从而计算得到斐波那契网格点阵A001的第n个网格点对应的虚拟全景相机成像球面像素的颜色B002;把数组PANORAMA的第n个元素赋值为颜色B002;
[0016] 步骤Step103-3:针对斐波那契网格点阵A001的第n个网格点的操作结束;
[0017] 步骤Step104:把数组PANORAMA保存到磁盘文件PAIMAGE中。
[0018] 2)本方法的第二部分实现全景画面的特定局部区域的显示,具体实现步骤如下:
[0019] 步骤Step201:把磁盘文件PAIMAGE中的数组PANORAMA加载到计算机的内存中;在计算机内存中创建包含NRow行、NCol列元素的二维数组IMSH,NRow表示虚拟透视投影相机A004的像素平面上的像素行数,NCol表示虚拟透视投影相机A004的像素平面上的像素列数,数组IMSH的元素用于保存虚拟透视投影相机A004的像素平面上的像素的颜色值,数组IMSH的元素和虚拟透视投影相机A004的像素平面上的像素一一对应;
[0020] 步骤Step202:对于i=1,2,…,NRow,j=1,2,…,NCol,针对虚拟透视投影相机A004的像素平面上的第i行、第j列像素,做如下操作:
[0021] 步骤Step202-1:令 Wpp=2tan(β)、Hpp=2tan(α),如图2所示,W1表示虚拟透视投影相机A004的观察方向对应的单位向量,U1表示虚拟透视投影相机A004拍摄时的向上方向对应的单位向量,单位向量U1与线段AD平行,α表示虚拟透视投影相机A004的垂直视场半角,β表示虚拟透视投影相机A004的
水平视场半角;点A的坐标为其中E表示虚拟透视投影相机A004的视点位置;虚拟透视投
影相机A004的视点设置在局部坐标系x-y-z的原点,因此 虚拟透
视投影相机A004的像素平面上的第i行、第j列像素的中心点Pij为:
[0022]
[0023] 步骤Step202-2:计算中心点Pij在球坐标系中对应的坐标 rij表示中心点Pij与坐标系原点o的距离,θij表示天顶角, 表示方位角,0≤θij≤π,
[0024] 步骤Step202-3:令 round(x)表示对x进行四舍五入取整;在计算机的内存中创建包含NUM个元素的一维数组WT,在计算机的内存中创建包含NUM个元素的一维数组CO;令计数器Counter=0;令偏移δ=1;
[0025] 步骤Step202-3-1:如果 或者 则转步骤Step202-3-2,否则执行如下操作:令 其中 表示对x向下取整;令如果adiff
把数组CO的第Counter+1个元素赋值为数组PANORAMA的第 个元素保存的
颜色值,并且使Counter=Counter+1;ath为角度差异阈值;
[0026] 步骤Step202-3-2:如果 则转步骤Step202-3-3,否则执行如下操作:
[0027] 令
[0028] 如果βdiff
素保存的颜色值,并且使Counter=Counter+1;
[0029] 步骤Step202-3-3:如果 则转步骤Step202-3-4,否则执行如下操作:
[0030] 令
[0031] 如果θdiff
素保存的颜色值,并且使Counter=Counter+1;
[0032] 步骤Step202-3-4:如果Counter≥NUM,则转步骤Step202-4,否则令δ=δ+1,并进一步判断是否 大于N且 小于1,如果是,则转步骤Step202-4,否则转步骤Step202-3-2;
[0033] 步骤Step202-4:计算数组WT从第1个到第Counter个元素的值的累加和SUM;对于J=1,2,…,Counter,把数组WT的第J个元素赋值为数组WT的第J个元素的值除以SUM之商;
[0034] 步骤Step202-5:把数组WT的第1个至第Counter个元素的值当作对数组CO的第1个至第Counter个元素的值进行加权求和时使用的权重系数,计算数组CO的从第1个至第Counter个元素的值的加权求和结果C001;数组WT的第1个元素的值为数组CO的第1个元素的权重系数,数组WT的第2个元素的值为数组CO的第2个元素的权重系数,以此类推;把数组IMSH的第i行、第j列的元素赋值为加权求和结果C001;
[0035] 步骤Step202-6:针对虚拟透视投影相机A004的像素平面上的第i行、第j列像素的操作结束;
[0036] 步骤Step203:把保存在数组IMSH中的矩形画面A005显示到显示设备上。
[0037] 本发明的积极效果是:全景画面的像素点在全景视域球表面上均匀分布,可以保证全景画面所有区域的像素空间分布密度相同,进而使全景画面所有区域具有相同的清晰度。另外,本方法能够正常地把所生成的全景画面的局部区域显示到显示设备上。
附图说明
[0038] 图1为虚拟全景相机的成像面示意图。
[0039] 图2为虚拟透视投影相机示意图。
具体实施方式
[0040] 为了使本方法的特征和优点更加清楚明白,下面结合具体
实施例对本方法作进一步的描述。在本实施例中,计算机配有Intel XeonTM CPU 3.20GHz、金士顿8GB DDR3 1333内存,Buffalo HD-CE 1.5TU2磁盘、英伟达Quadro K2000 GPU。虚拟三维场景为一个虚拟房间场景,在房间中放着一张桌子和一把椅子,在房间的一面墙上挂着一面镜子。
[0041] 本发明的技术方案是这样实现的:首先在如图1所示的虚拟全景相机的成像球面上生成包含N个点的斐波那契网格点阵A001,计算斐波那契网格点阵A001的各个网格点在如图1所示的局部坐标系x-y-z中的坐标;根据世界坐标系X-Y-Z中的虚拟全景相机视点位置和虚拟全景相机拍摄时的向上方向构建从局部坐标系x-y-z到世界坐标系X-Y-Z的变换矩阵,据此计算斐波那契网格点阵A001的各个网格点在世界坐标系X-Y-Z中的坐标;根据世界坐标系X-Y-Z中的虚拟全景相机视点位置和世界坐标系X-Y-Z中的斐波那契网格点阵A001的各个网格点的坐标,确定斐波那契网格点阵A001的各个网格点对应的成像球面像素点对应的光线,并利用光线跟踪技术求解像素颜色;用一维数组PANORAMA存储斐波那契网格点阵A001的各个网格点对应的成像球面像素点的颜色,即数组PANORAMA的第n个元素存储斐波那契网格点阵A001的第n个网格点对应成像球面像素点的颜色,n=1,2,…,N;最后,把数组PANORAMA保存到磁盘文件PAIMAGE中,完成全景画面的渲染;在显示全景画面时,首先把磁盘文件PAIMAGE中的数组PANORAMA加载到计算机内存中,然后把虚拟透视投影相机A004的视点设置成局部坐标系x-y-z的原点,再用虚拟透视投影相机A004拍摄成像球面以便得到需要显示的全景画面局部区域;如图1所示,矩形ABCD就是虚拟透视投影相机A004的像素平面;根据数组PANORAMA存储的数据插值计算虚拟透视投影相机A004的像素平面上的各个像素的颜色值,从而得到矩形画面A005,并把矩形画面A005显示到显示器上。本方法的具体实现步骤如下:
[0042] 1)本方法的第一部分实现全景画面的渲染,具体实现步骤如下:
[0043] 步骤Step101:在虚拟全景相机的成像球面上生成包含N个点的斐波那契网格点阵A001,计算斐波那契网格点阵A001的各个网格点在如图1所示的局部坐标系x-y-z中的坐标;斐波那契网格点阵A001的第n个网格点的坐标为(xn,yn,zn),其中zn=(2n-1)/N-1,在计算机的内存中创建包含N个元素的一维数组PANORAMA,数组PANORAMA的每个元素保存虚拟全景相机成像球面上的一个像素的颜色值;
[0044] 步骤Step102:计算从局部坐标系x-y-z到世界坐标系X-Y-Z的变换矩阵Mxyz2XYZ:
[0045] 其中px表示虚拟全景相机视点在世界坐标系X-Y-Z中的X坐标,py表示虚拟全景相机视点在世界坐标系X-Y-Z中的Y坐标,pz表示虚拟全景相机视点在世界坐标系X-Y-Z中的Z坐标,向量W=[wx,wy,wz]T表示虚拟全景相机拍摄时的向上方向在世界坐标系X-Y-Z中对应的单位向量,向量U=[ux,uy,uz]T,向量V=[vx,vy,vz]T;向量V按如下方式计算:令 如果 则
否则V=[0,0,1]T;向量U按如下方式计算:
[0046] 步骤Step103:对于n=1,2,…,N,针对斐波那契网格点阵A001的第n个网格点,做如下操作:
[0047] 步骤Step103-1:令向量 令其中ppix,x表示向量Ppix的第一个分量,ppix,y表示向量Ppix的第二个分
量,ppix,z表示向量Ppix的第三个分量,ppix,w表示向量Ppix的第四个分量;
[0048] 步骤Step103-2:从世界坐标系X-Y-Z中的虚拟全景相机视点位置出发,发射一条穿过世界坐标系X-Y-Z中的点 的光线B001,利用光线跟踪技术跟踪光线B001在虚拟三维场景中的传播,从而计算得到斐波那契网格点阵A001的第n个网格点对应的虚拟全景相机成像球面像素的颜色B002;把数组PANORAMA的第n个元素赋值为颜色B002;
[0049] 步骤Step103-3:针对斐波那契网格点阵A001的第n个网格点的操作结束;
[0050] 步骤Step104:把数组PANORAMA保存到磁盘文件PAIMAGE中。
[0051] 2)本方法的第二部分实现全景画面的特定局部区域的显示,具体实现步骤如下:
[0052] 步骤Step201:把磁盘文件PAIMAGE中的数组PANORAMA加载到计算机的内存中;在计算机内存中创建包含NRow行、NCol列元素的二维数组IMSH,NRow表示虚拟透视投影相机A004的像素平面上的像素行数,NCol表示虚拟透视投影相机A004的像素平面上的像素列数,数组IMSH的元素用于保存虚拟透视投影相机A004的像素平面上的像素的颜色值,数组IMSH的元素和虚拟透视投影相机A004的像素平面上的像素一一对应;
[0053] 步骤Step202:对于i=1,2,…,NRow,j=1,2,…,NCol,针对虚拟透视投影相机A004的像素平面上的第i行、第j列像素,做如下操作:
[0054] 步骤Step202-1:令 Wpp=2tan(β)、Hpp=2tan(α),如图2所示,W1表示虚拟透视投影相机A004的观察方向对应的单位向量,U1表示虚拟透视投影相机A004拍摄时的向上方向对应的单位向量,单位向量U1与线段AD平行,α表示虚拟透视投影相机A004的垂直视场半角,β表示虚拟透视投影相机A004的水平视场半角;点A的坐标为其中E表示虚拟透视投影相机A004的视点位置;虚拟透视投
影相机A004的视点设置在局部坐标系x-y-z的原点,因此 虚拟透
视投影相机A004的像素平面上的第i行、第j列像素的中心点Pij为:
[0055]
[0056] 步骤Step202-2:计算中心点Pij在球坐标系中对应的坐标 rij表示中心点Pij与坐标系原点o的距离,θij表示天顶角, 表示方位角,0≤θij≤π,
[0057] 步骤Step202-3:令 round(x)表示对x进行四舍五入取整;在计算机的内存中创建包含NUM个元素的一维数组WT,在计算机的内存中创建包含NUM个元素的一维数组CO;令计数器Counter=0;令偏移δ=1;
[0058] 步骤Step202-3-1:如果 或者 则转步骤Step202-3-2,否则执行如下操作:令 其中 表示对x向下取整;令
如果adiff
把数组CO的第Counter+1个元素赋值为数组PANORAMA的第 个元素保存的
颜色值,并且使Counter=Counter+1;ath为角度差异阈值;
[0059] 步骤Step202-3-2:如果 则转步骤Step202-3-3,否则执行如下操作:
[0060] 令
[0061] 如果βdiff
素保存的颜色值,并且使Counter=Counter+1;
[0062] 步骤Step202-3-3:如果 则转步骤Step202-3-4,否则执行如下操作:
[0063] 令
[0064] 如果θdiff
素保存的颜色值,并且使Counter=Counter+1;
[0065] 步骤Step202-3-4:如果Counter≥NUM,则转步骤Step202-4,否则令δ=δ+1,并进一步判断是否 大于N且 小于1,如果是,则转步骤Step202-4,否则转步骤Step202-3-2;
[0066] 步骤Step202-4:计算数组WT从第1个到第Counter个元素的值的累加和SUM;对于J=1,2,…,Counter,把数组WT的第J个元素赋值为数组WT的第J个元素的值除以SUM之商;
[0067] 步骤Step202-5:把数组WT的第1个至第Counter个元素的值当作对数组CO的第1个至第Counter个元素的值进行加权求和时使用的权重系数,计算数组CO的从第1个至第Counter个元素的值的加权求和结果C001;数组WT的第1个元素的值为数组CO的第1个元素的权重系数,数组WT的第2个元素的值为数组CO的第2个元素的权重系数,以此类推;把数组IMSH的第i行、第j列的元素赋值为加权求和结果C001;
[0068] 步骤Step202-6:针对虚拟透视投影相机A004的像素平面上的第i行、第j列像素的操作结束;
[0069] 步骤Step203:把保存在数组IMSH中的矩形画面A005显示到显示设备上。
[0070] 在显示全景画面的特定局部区域时,本方法利用虚拟透视投影相机A004拍摄虚拟全景相机的成像球面,并将拍摄到的画面显示到显示设备上;虚拟透视投影相机A004就是计算机图形学中的普通透视投影相机,在J.F.Hughes等人撰写的由Addison-Wesley出版公司于2014年出版的《Computer Graphics:Principles and Practice(3rd Edition)》的13.3节有关于透视投影相机的详细介绍。
[0071] 在本实施例中,N=4096×4096,W=[0,1,0]T,px=0.1,py=1.0,pz=-1.2,NRow=768,NCol=1024,W1=[cos(π/3),sin(π/3),0]T,U1=[0,0,1]T,NUM=6,角度差异阈值ath=8-3
×10 rad,σ=ath/2;虚拟透视投影相机A004的垂直视场半角为0.6981rad,虚拟透视投影相机A004的水平视场半角为0.8727rad。W1和U1都是在局部坐标系x-y-z中定义的。
[0072] 图1中的球的半径为1。通过改变W1和U1的值可以改变在显示设备上显示的全景画面局部区域。图2中的视点E到矩形ABCD平面的距离为1,线段AB的长度为Wpp,线段AD的长度为Hpp,W1和矩形ABCD平面垂直。步骤Step202-1计算得到的Pij是在图1所示的局部坐标系x-y-z中定义的,步骤Step202-2计算得到的 是Pij对应的在球坐标系中的表示结果。数组IMSH实际上保存了矩形画面A005的各个像素的颜色值。||x表示求向量x的长度。图
2所示的向量U1、向量W1、点A、点B、点C、点D、视点E都是在局部坐标系x-y-z中定义的。