吴迪,陈密密,宋杰丽
(1.北京61683部队,北京 100094;2.北京61512部队,北京 100088)
在大区域遥感影像处理中,影像镶嵌是通过在相邻影像的重叠区内定义镶嵌线来实现影像的拼接,并将镶嵌后的影像整体按照标准分幅或自定义范围进行裁切。随着遥感影像镶嵌成果的应用范围越来越广,对遥感影像镶嵌信息(如景号、摄影时间及偏移量等)的查询要求也越来越高。而现有的遥感影像处理软件(Image Station、PCI、ERDAS等)生成的镶嵌信息均以文本格式记录,不便于浏览和信息的查询。为此,可以开发软件将文本格式的镶嵌信息转换为栅格图像,并制作镶嵌线索引图,使信息的浏览和查询更加直观、方便。
软件主要功能如图1所示。该软件能在图幅内精确显示镶嵌线的位置,同时在由镶嵌线和图廓线形成的各闭合区域内标注镶嵌信息,最后将镶嵌信息以镶嵌线索引图的形式批量输出。
镶嵌线索引图是将镶嵌线按照图幅(图像)范围输出的栅格图像,用以标明图幅(图像)中镶嵌线的分布情况及所用影像的相关信息,如图2所示。图中显示了索引图中镶嵌线与图廓线构成的多个闭合区域,分别代表相邻影像在镶嵌图幅中的使用范围,同时对镶嵌信息进行了标注。
图2 镶嵌线索引图示例
软件的开发应用了OpenGL、GDAL(Geospatial Data Abstraction Library)函数库和Microsoft Visual C++6.0编程环境。解决了以下几个关键问题。
遥感影像的镶嵌信息可以分为两类:矢量信息和文字信息。矢量信息指的是镶嵌过程中定义的镶嵌线和图幅(影像)的轮廓。文字信息对应的是镶嵌所用的影像名称、摄影时间、相机的偏移量及镶嵌图幅名称等等。在进行信息的绘制之前,首先要进行信息格式的转化。由于我们采用的是OpenGL顶点数组绘制技术,因此需要提取镶嵌矢量信息并构建绘制所需的顶点数组和索引数组。
①镶嵌线信息的提取与转化
遥感影像镶嵌软件生成的镶嵌信息如图3所示,其中包括:镶嵌线所在的影像名、节点的坐标、镶嵌线缓冲区宽度。
图3 镶嵌线信息格式
第一个结点坐标 55.0319056 36.0582056
第二个结点坐标 55.1385778 36.0582056
第三个结点坐标 55.1385778 35.9865556……
尾结点坐标 55.0319056 36.0582056
我们将其按照顶点数组的结构重新进行组织,并建立相应的索引数组,结构表1所示。
②图幅(图像)轮廓的提取与转化
我们采用GDAL(Geospatial Data Abstraction Library)函数库来读取各种格式的镶嵌图幅(图像)文件,获取图像的宽高信息,并根据影像分辨率计算四个角点的坐标。同时,生成相应的顶点数组,其结构与表1相同。
应用OpenGL实现镶嵌线和图幅(图像)范围的绘制,需要初始化OpenGL环境,设置投影方式,生成顶点数组与索引数组并完成图形的绘制。其绘制流程如图4所示,其中最为关键的部分是对投影方式的设置。对于二维图形的绘制,一般采用正射投影方式。通过指定OpenGL窗口实际对应的坐标范围来控制图形在窗口中的显示。为了能够在OpenGL窗口中显示镶嵌线和相应的图幅(图像)范围,需要用镶嵌区域的最小外接矩形的信息来设置正射投影中的相关参数。此时,我们通过对镶嵌线的顶点数组进行坐标比较得到整个镶嵌区域的最小外接矩形。对于顶点数组的构建如①节所示,这里不再赘述。绘制的结果如图5所示。
图4 矢量信息绘制流程
图5 镶嵌矢量信息的绘制
为了提高镶嵌信息表达的示意性,还必须对每个图幅(图像)的镶嵌信息进行标注。这部分功能可以分为镶嵌信息的提取、显示、选择和标注四部分。%
(1)镶嵌信息的提取与显示
在读取镶嵌线文件时开辟一个动态数组用于存储每块影像的影像名、摄影时间及相机偏移量等镶嵌信息。通过对顶点数组中的坐标进行比较、计算得出每景影像上所有镶嵌线形成闭合多边形的最小外接矩形,将其中心点作为镶嵌信息的显示位置。并应用OpenGL的文字(英文)显示功能将镶嵌信息显示在该位置上(如图6所示)。
(2)镶嵌信息的选择与标注
镶嵌信息的选择与标注通过点选该信息获取相应的字符串,并将其标注在图幅(图像)中适当的位置。点选影像名时,需要我们记录鼠标点击时的位置(地理坐标),并计算其与影像名的定位点(最小外接矩形的中点)之间的距离,当该距离小于我们给定的阈值时,就视为该影像名被选定,并提取相应的字符串。而信息的标注,与前面所述的显示方法相同,这里不再赘述。
图6 镶嵌文字信息的绘制
在OpenGL环境中实现镶嵌线索引图的输出,需要实现单幅镶嵌线索引图的栅格化输出,然后在此基础上完成输出操作的批量化。
(1)单幅镶嵌线索引图的栅格化输出
应用OpenGL保存栅格图像与在OpenGL窗口上进行绘制图形的过程是相似的。不同之处在于,它是将图形绘制在内存中,作为栅格图像进行保存,而非显示在屏幕上。当显示和标绘镶嵌线图幅时,我们用整个镶嵌区域来设置OpenGL窗口的投影区域;当输出镶嵌线索引图时,我们在内存中用输出图幅 (图像)的范围来设置OpenGL窗口的投影区域。这样在保存图幅(图像)时,镶嵌线与图幅标注只能显示在图幅(图像)范围内的部分,从而实现了单幅镶嵌线索引图的栅格化输出。
(2)批量输出的实现
在绘制镶嵌图幅(图像)时,我们采用遍历文件夹的方式提取每个图幅(图像)的名称和宽高信息,并开辟动态数组保存该信息。批量输出镶嵌线索引图,只需我们给定文件保存的路径,并利用循环结构对每个索引图进行名称与尺寸的设定,同时采用单个索引图的保存原理来实现所有图幅的栅格化输出。
遥感影像镶嵌要求原始影像在接边处的颜色保持一致,这样镶嵌成果在颜色上才能自然过渡。然而在镶嵌前期的预调色工序中,对后期镶嵌线所在的位置不明确,因此只能针对重叠区进行整体的色彩调整,容易导致镶嵌线附近的颜色不能达到镶嵌的要求。这就要求在镶嵌后期,根据镶嵌线的位置在颜色差异大的地方对影像进行精调色。此时按照影像范围输出的镶嵌线索引图,可以实现镶嵌线与原始影像的叠加(如图7所示),为精调色中待处理影像范围的精确选取提供准确的依据。
图7 镶嵌线与原始影像的叠加
对镶嵌图幅进行检查,需要沿着镶嵌线查看地物的接边精度及颜色过渡的情况。将镶嵌线按照图幅范围输出成镶嵌线索引图,在Photoshop中可以将镶嵌线的位置以选区的方式直观地显示在镶嵌图幅上,从而大大提高成果检查的精度和效率。
镶嵌图幅图历薄用于记录镶嵌图幅中镶嵌影像的影像名、镶嵌质量、作业员完成情况等多方面信息,为镶嵌成果的评定提供了重要依据。在图历薄中加入镶嵌线索引图可以增强其示意性,便于使用者直观地了解影像拼接情况(如图8所示)。
图8 镶嵌图幅图历薄
应用OpenGL实现镶嵌线索引图的制作与批量输出,弥补了镶嵌软件在镶嵌线格式转换与栅格化输出方面的不足,为镶嵌生产及成果检查带来了方便。OpenGL的图形绘制原理只要求绘制单位的统一,对具体的坐标系及投影方式不做要求,加强了程序的通用性。同时,OpenGL还可以实现整个区域镶嵌线的快速浏览。
[1]Paul Martz,邓郑祥(译).OpenGL2.0精髓[M].北京:人民邮电出版社,2006.
[2]Richard S,Wright Jr,Benjamin Lipchak,徐波(译).OpenGL超级宝典(第三版).北京:人民邮电出版社,2005.
[3]陈鹰.遥感影像的数字摄影测量.上海:同济大学出版社,2004.