一种混合并行方式栅格影像金字塔构建方法

文档序号:9910855阅读:689来源:国知局
一种混合并行方式栅格影像金字塔构建方法
【技术领域】
[0001] 本发明属于地理空间信息处理技术领域,涉及一种混合并行方式栅格影像金字塔 构建方法。
【背景技术】
[0002] 随着卫星传感器技术以及无人机航拍技术的快速发展,遥感影像的空间和时间分 辨率都大幅度地提高,单幅遥感影像文件的数据量也急剧增加。对于大规模栅格影像进行 快速显示和服务发布时,通过预先构建金字塔是提高可视化和服务性能的有效手段,但大 数据量为金字塔的构建效率带来了巨大挑战。已有串行算法以及商业遥感软件构建金字塔 的效率已远远跟不上数据的获取速度,高效快速创建金字塔已经成为栅格数据高效管理和 可视化必须要解决的重要问题。
[0003] 金字塔是一种栅格数据的多分辨率组织结构。简单来说,金字塔结构就是由原始 栅格影像开始,建立起一系列不同分辨率的栅格影像,不同分辨率的栅格影像对应不同的 金字塔级。同时,金字塔也是栅格影像的一种有损压缩方式。构建金字塔以后,可以改善栅 格影像显示性能,当用户需要对栅格影像进行不同分辨率地放大、缩小或平移时,通过选择 一个与用户视图相近分辨率的数据进行可视化,从而系统只需进行少量的计算和查询就可 以返回结果,不需要进行逐级采样计算,大大减少数据显示时间。
[0004] 并行构建金字塔主要有三种思路。一种是基于GPU(Graphic Processing Unit,图 形处理单元)进行并行加速,利用GPU的计算能力加快金字塔的构建速度,这种方法与GPU硬 件能力相关,会提高系统架构的成本;另一种是利用分布式集群系统,将大规模栅格影像文 件的金字塔构建任务划分为多个子任务,在多个分布式节点上同时进行。这种方法扩展性 较好,可以充分利用分布式并行环境来处理大规模数据,但需要将栅格影像分布存储在多 个节点,数据的分布存储以及结果的合并都是比较耗时的。还一种是基于MPI (Message Passing Interface,消息传递接口)的多进程方式进行影像金字塔的并行构建,这种方法 利用共享外存的高性能集群,实现对栅格影像并行重采样,然后将重采样结果并行写入到 文件系统,这种方法现阶段存在一些问题,由于任务划分的不同容易产生黑边现象以及类 型溢出。目前基于MPI以及0penMP(0pen Muti-Processing,共享存储并行编程)利用共享外 存的高性能集群系统采用多进程与多线程混合并行方式的大规模影像金字塔构建方式研 究较少。

【发明内容】

[0005] 针对上述技术问题,本发明提供一种混合并行方式栅格影像金字塔构建方法。本 发明利用多进程技术对任务进行划分,当单个进程任务过重时,每个进程内部可采用多线 程技术对任务进行细分进行二级并行,不仅解决了传统并行构建金子塔常见的黑边现象, 而且实现了金字塔框架文件的高效创建,金字塔并行重采样,以及重采样数据并行写入。具 体技术方案包括步骤如下:
[0006] (S1)初始化设定金字塔级数level、进程总个数η和金字塔级数迭代初始值lev为0 级;消息传递接口(记为:MPI)为每个进程分配一个进程号i,0<i〈n,作为该进程的唯一标 识,其中i,level,n为整数;后续可以通过对该进程号描述相应进程的操作;
[0007] (S2)获取原始栅格影像,各进程读取原始栅格影像的元数据信息;所述栅格影像 的元数据信息包括原始栅格影像的长,宽,波段数,数据类型;
[0008] (S3)指定一个进程为主进程,创建空金字塔框架文件,并对创建的空金字塔框架 文件采用多线程技术进行结构组织;具有过程为:主进程根据金字塔级数和栅格影像的元 数据信息计算待创建空的金字塔框架文件的大小;若金字塔框架文件不超过4GB,则创建 GeoTIFF格式的金字塔文件;如果金字塔文件大小超过4GB,则创建BigTIFF格式的金字塔文 件;其中,GeoTIFF表示地理参考标签影像文件格式,BigTIFF表示大规模标签影像文件格 式;主进程采用多线程的方式并行设置相应标记位把数据区和标签区的位置划分出来;而 后将每层金字塔的元数据信息写入金字塔文件中标签区相应标记位,将数据区预留;所述 金字塔的元数据信息主要包括该层金字塔的长、宽、波段数、数据类型和该层金字塔各条带 数据在数据区内的物理偏移位置。
[0009] (S4)数据任务划分:按照行划分的方式把栅格影像的数据量平均划分给各个进 程,所述行划分方式具体如下:以像素为单位,栅格影像的长为Xsize,宽为Ysize,波段个数 为nBands,进程总数为n,则每个进程分配得到数据量DataSize等于(Ysize/n) XXsize X nBands;每个进程根据进程号计算其所分配得到的数据块在原始影像上的逻辑偏移位置; [0010]具体计算方式如下:假设当前进程的进程号为i(〇^i〈n),则该进程所读取数据的 逻辑偏移位置DataOffset为i X (Ysize/n) XXsize;
[0011] (S5)读取数据:如果每个进程分配的数据量DataSize < 2147483647各个进程根据 步骤(S4)中的数据划分的逻辑偏移位置,采用GDAL类库的RasterlO函数将栅格影像的各波 段数据依次读取到内存;
[0012] 如果每个进程分配的数据量DataSize>2147483647,即超过整型上限出现类型溢 出的情况,进一步将每个进程下再细分多个线程,细分后的多个线程再对该进程的数据块 进行细分,具体细分过程如下:将DataSize不断除以2进行二分,直到满足以下条件 2147483647x2k- 1《DataSize < 2147483647X2k为止,k为二分次数,取整数;而后采用 OpenMP技术在该进程下细分2kf子线程,将进程的数据量DataSize平均分配给其2k个子线 程,则每个子线程读取的数据量为DataSize/2 k。当子线程对父进程的数据细分后,各线程 分别计算其相对父进程内存空间起始位置的偏移值,具体计算方法如下:假设当前线程的 线程号为it(0 < it〈2k),it取整数,则其偏移值为it X (DataSize/2k)。各线程根据相对父进 程的偏移值以及父进程的逻辑偏移位置,计算得到各线程从栅格影像上读取数据的逻辑偏 移位置tDataOffset等于Data0ffset+it X (DataSize/2k)。由于各子线程是共享父进程的 内存空间,因此各线程根据其偏移值tDataOffset利用GDAL类库的RasterlO函数将 DataSize/2k个数据并行独立读取到父进程的内存空间中。
[0013] (S6)各个进程根据当前金字塔级数采用最邻近内插算法依次对步骤(S5)中读取 的数据进行对应粒度为2 lev的重采样,lev为当前金字塔级数;将各波段重采样后的结果存 入内存中;
[0014] (S7)并行写出结果,各个进程根据进程号以及波段号解算各波段在结果文件中的 写入偏移位置;根据写入偏移位置采用MPI的MPI_File_write_at函数将内存中各波段重采 样后的结果依次并行写入金字塔文件;
[0015] 具体方法如下:首先利用libtiff类库的TIFFGetField函数获取到该层金字塔数 据区起始偏移位置ovrOffset,设当前进程的进程号为i,波段号为iband,0Siband〈 nBands,iband为整数;以像素为单位当前层级金字塔大小为ovrXSize XovrYSize,贝lj各进 程写入偏移位置为ovrOff set+ovrXSize X ovrYSize X iband+resBuff size,resBuff size为 前i个进程重采样数据大小之和。
[0016] (S8)将当前金字塔级数加1,如果当前金字塔级数小于等于设定金字塔级数,则返 回步骤(S6);如果当前金字塔级数大于设定金字塔级数,则金字塔构建完毕。
[0017] 采用本发明获得的有益效果:本发明的有益效果是:(1)本发明所生成的栅格影像 金字塔文件与地理空间数据抽象库GDAL(Geospatial Data Abstract Library,地理数据 抽象库)生成的金字塔文件格式一致,GDAL是一种被广泛应用的金字塔构建工具,其创建的 金字塔文件能够被当前绝大多数地理信息系统软件直接使用,可以无缝集成到各种地理信 息应用中。(2)本发明构建金字塔效率高。创建空金字塔文件时,选择主进程为0号进程,采 用多线程技术加快了创建速度,而且创建时预先规划好金子塔标签区和数据区的位置,使 得标签区和数据区内部可以连续紧凑排列,而标签区和数据区之间则相互独立互不影响, 为后面重采样数据能够快速并行写入创造了条件。(3)本发明算法并行程度高。各个进程在 并行从原始影像读取相应数据,并行对其所属数据重采样,并行将采样数据写入金字塔文 件。(4)本发明算
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1