一种空间经纬网的地表面影像填图方法
2022-03-31秦中
秦 中
(遵义师范学院信息工程学院,贵州 遵义 563006)
采用计算机图像模拟地表面场景具有较广阔的应用范围,若能熟练应用立体影像贴图模拟技术,亦可满足地理信息系统设计的若干技术需求。相对于复杂曲面的场景处理技巧而言,球面纹理贴图方法虽然有些复杂[1],却是一种可以通过渐变方式加以处理的较规则类型[2,3]。
近些年来出现的新型立体环绕扫描成像技术,可以高效率地支持一次性直接获得物体外表面、周围场景的环绕影像[4]。该项技术由于依靠专用硬件及其所属影像数据结构的处理软件,在推广应用时难免会受到一些约束。
在球面上进行立体影像贴图,比较常见的方法之一就是将三维曲面细划分为若干微小的准平面矩形块,然后根据空间坐标对应关系,给每个小矩形块都贴上对应的影像块,构建出球形立体表面的效果,即达到了球面纹理贴图的目的。
1 坐标匹配处理
1.1 平面影像的切分与坐标
在对地表面影像进行准确分析运算处理之前,需要为具体的一幅影像建立确定的平面坐标系。在此坐标系内,理论上可以给影像内的每一个像素点确定唯一的二维坐标,并与像素点的RGB数据构成可匹配的联结关系。
在实际操作测试时,针对每一幅具体的平面影像,可以采取规则切分的矩形图块像素批量处理方法,以简化操作程序或者减少程序运算量。
1.2 影像的矩形块处理
对于已经定格于平面坐标系内的目标栅格影像,可以分别沿其长、宽方向按确定的等长度单位,将影像切分为面积大小相同的若干图块。于是,该影像就成为了被切分后的、由若干细小矩形图像块组成的集合体。
据此切分获得的每小块图像的四个顶点坐标值,可以通过计算获得。由于图像内各像素点的颜色数据是与坐标系绑定而联结在一起的,所编程序就可以根据每个图像块的四个顶点坐标,分别调用各个图像块内像素点的RGB数值了。
2 球面的矩形块划分
2.1 球面影像坐标的关联
在划分球体表面之前,需要先给球体建立球面坐标系。由于球面坐标系内的球面上各点都有唯一的经纬度坐标,于是可以为地表面影像内的对应测试点赋予相同的经纬度值。另一方面,经纬网“矩形块”的划分方法是沿经纬线方向分别进行等角度划分的,球面上的测试点坐标也需要换算为三维坐标表示,才能更好地体现相同测试点在球面、平面影像的坐标对应关系。正因为两种坐标之间存在一一对应关系,就可为其建立空间坐标关联换算公式。
球体三维直角坐标系的建立,是以球心为原点,但要求Z轴与南北极的连线重合,XOY平面位于赤道面上,X轴必须经过零度经线与赤道面的交点。在此基础之上,分别计算拟测试点在XYZ轴上的坐标值,即可获得球面上各点的三维坐标(x、y、z),换算公式如下:
x[i][j]=radius*(float)(cos((float)i*PI)*sin((float)j*PI));
y[i][j]=radius*(float)(sin((float)i*PI));
z[i][j]=radius*(float)(cos((float)i*PI)*cos((float)j*PI));
式中:radius为球体半径;i,j为纬度/经度;PI为圆周率;float按浮点精度运算。
2.2 球面的矩形块处理
整个球体表面按经纬网划分为若干个近似的矩形块,但是在南北极点(N/S)则表现为环绕的三角面,这是因为此处的矩形块有两个角点为重合关系(图1)。球体表面上经过划分获得的每个准矩形块(梯形块),都可以用四个顶点的三维坐标来标识 (极点位置只需要三个坐标点)。
图1 平面影像切分与球面经纬网相对应
3 贴图程序设计
3.1 图块间的关联处理
整个球面被划分为经纬网格的同时,也就与平面影像块之间建立了对应的关系。根据球面与影像对应关系的一致性划分结果及坐标转换公式[5],就可以编写程序来计算两种坐标系间各测试点的坐标转换关系了。
由于平面图像块之间表现为左右、上下的延展关系,而球面上的图像块为环形闭合关系,因此在处理矩形块间的对应关系时,程序必须明确两者的起点和终点,以便于在平面影像与球面之间形成可完全覆盖的关系。
3.2 贴图程序设计
通过编程实现所切分影像块的贴图,也就是将图块对应地绘制(填充)到球面上相应位置的矩形块内(变形难免)。这在Visual C++编程环境内测试时,需要调用OpenGL绘图函数进行纹理贴图,其中使用的绘图函数主要有:加载图像文件函数auxDIBI-mageLoad()、生成纹理索引 glGenTextures()、绑定图像或纹理glBindTexture()、2D纹理映射gluBuild2 DMipmaps()等。
4 结果分析及讨论
此影像贴图方法处理的是球面与平面影像的矩形块坐标匹配,程序执行时的处理方法为:将球面矩形块按对角线划分为两个三角面,分别对其进行映射贴图。此贴图方式可处理“矩形块”四个顶点不在同一平面上的情况[6]。在极点(N/S)处只须按一个“三角面”处理更为简化。
球面3D影像的贴图效果还与比例尺(分辨率)放大或缩小的尺度以及变形处理方法有关。对照图1可以看出,从原点O分别向N/S方向“投影”到球面上时,表现为从“矩形块”逐渐过渡到“梯形面”“三角面”的情形。因此,越是靠近极点(N/S),受影像变形影响的幅度将会更加显著,那需要另作处理。
为了使得影像贴图具有清晰的显示效果,应当尽量调整平面栅格图像与球面“矩形块”之间的尺度范围一致。除了受影像本身变形影响外,贴图后的球面放大或缩小的比例,也会影响到图像的分辨率[7]。
5 结论
利用OpenGL提供的图像处理函数,测试了将平面影像贴图到球面的编程模拟实现方法,并对球面影像模拟显示方法进行了分析说明。这对于编程实现任意曲面的模拟效果及空间贴图的技巧练习具有参考意义。值得一提的是,由于空间坐标变换处理方法不同、影像变形处理等原因,难免存在显示效果模糊的现象,这也是在程序设计时需要考虑的处理技巧之一。
由于没有考虑影像插值的处理技巧,本次测试效果难免存在边缘变形等诸多缺陷。采用此编程测试方案对复杂球面(曲面)进行了较详细的图块划分处理,以及空间场景的模拟贴图实现,虽然还存在一些问题,但对于3D影像的编程贴图练习仍然是值得参考的捷径之一。将来在此基础上,再以更加精准优化的算法测试变形处理及分辨率等问题,估计效果会更好。