一种时序影像瓦片金字塔的快速构建方法与流程

文档序号:17843364发布日期:2019-06-11 21:28阅读:650来源:国知局
一种时序影像瓦片金字塔的快速构建方法与流程

本发明涉及一种构建方法,尤其涉及一种时序影像瓦片金字塔的快速构建方法,属于地理信息系统技术领域。



背景技术:

时序影像(time-seriesimages)是同一遥感平台获取并按照获取时间、获取范围顺序排列的遥感影像数据,构建瓦片金字塔是实现时序影像高效可视化和网络发布的基础,其本质是对遥感影像实现顾及视点范围的分层分块处理,通过对原始遥感影像进行重采样,形成不同分辨率的瓦片并构建金字塔,从而提高影像浏览缩放的响应速度。随着当前遥感影像数据量的不断增加和网络分发需求的不断提升,如何实现时序影像瓦片金字塔的快速构建,成为当前遥感影像网络化应用亟待解决的问题。

近年来,国内外学者对时序影像瓦片金字塔的构建进行了广泛的研究,主要集中在瓦片的瓦片切分方法和金字塔构建并行处理两个方面,即根据操作将瓦片金字塔的构建分为瓦片的切分和瓦片输出存储两个步骤。已有的方法对于切分实际上已有了大量且较为成熟的研究,但采用的并行策略大多是多进程并行。多进程并行主要是根据并行个数创建对应数量的进程,进程内部再细分瓦片的切分和输出存储两种操作。由于进程自身的创建、切换、撤销消耗计算量较大,且分配给不同进程的任务难以保证完全均衡,使进程无法同时结束,难以充分发挥并行优势;此外,瓦片切分和瓦片输出两种操作的速度通常是不匹配的,切分速度主要依赖于cpu性能,输出速度主要依赖于内存和磁盘性能,由于cpu计算速度快过内存计算速度,每个进程内部的计算能力难以均衡分配,因此很难最优化利用运行环境的整体性能。而时序影像的体量大、瓦片数量多,利用现有的并行处理方法所开展的瓦片金字塔整体构建效率仍旧较低。



技术实现要素:

为了解决上述技术所存在的不足之处,本发明提供了一种时序影像瓦片金字塔的快速构建方法。

为了解决以上技术问题,本发明采用的技术方案是:一种时序影像瓦片金字塔的快速构建方法,包括以下步骤:

步骤1、构建瓦片金字塔构建总进程:

分别构建切分线程池和输出队列;切分线程池和输出队列中的每个线程均设置休眠、激活以及消亡三种状态;

步骤2、计算时序影像对应的瓦片金字塔最底层的层级数lmax:

根据影像元数据中的空间参考信息,确定所构建瓦片金字塔的世界范围[xmin,ymin,xmax,ymax],根据瓦片尺寸tile_size,采用公式一循环计算得到瓦片金字塔的各层级对应地面分辨率l_resolution;

l_resolution=(xmax-xmin)/(tile_size*2level),level=0,1,2,…,n公式一

在循环求取的过程中,每一次求得l_resolution值与影像分辨率imageresolution进行比较,若l_resolution<imageresolution,则该l_resolution对应的level等级为瓦片金字塔最底层的层级数lmax。

步骤3、计算第一景影像最底层lmax瓦片行列号:

根据影像覆盖范围extent,以及对应最底层lmax的地面分辨率lmax_resolution,采用公式二计算得到该影像所占据的瓦片行列号,其中函数floor为向下取整,ceil为向上取整;

tile_xmin=floor((extent_xmin-xmin)/(lmax_resolution*tile_size))

tile_xmax=ceil((extent_xmax-xmin)/(lmax_resolution*tile_size))

tile_ymin=floor((ymin-extent_ymin)/(lmax_resolution*tile_size))

tile_ymax=ceil((ymax-extent_ymin)/(lmax_resolution*tile_size))公式二

步骤4、进行最底层lmax瓦片渲染及切分:

采用常规方法对最底层瓦片进行切分,切分时采用切分线程池控制程序,池中每个线程负责一个瓦片的切分;新创建切分线程先处于休眠状态,控制命令根据预先设置的切分线程总数,对应激活相应数量的线程进行切分操作,当某一个线程的操作完成后,控制命令将该线程消亡并移出线程池;

步骤5、切分形成的瓦片实时进入到输入队列:

将输出队列的总长度设置为切分线程池一次性能够切分产生的瓦片总量,使切分形成的瓦片实时进入到输入队列;

步骤6、输出队列中瓦片写入数据库:

瓦片入队出队的顺序保持先进先出,控制命令根据设置的并行输出线程数激活输出线程,将瓦片输出存放到数据库中;

步骤7、对第二景瓦片重复步骤3和步骤5,直至所有影像的最底层lmax瓦片切分完毕并输出到输入队列,等待写入数据库;

步骤8、其他层级瓦片生成:

最底层瓦片输出完成后,通过现有瓦片四合一的合并方式形成其他层级瓦片,完成整个瓦片金字塔的构建。

进一步地,步骤6中,若切分后若瓦片为透明瓦片,则放弃输出;若切分后若瓦片为不透明瓦片,则写入数据库。

进一步地,步骤7中,若切分后若瓦片为透明瓦片,则放弃输出;若切分后若瓦片为不透明瓦片,判断是否存在同位瓦片。

进一步地,步骤7中,若存在同位瓦片,则进行瓦片融合,并将融合结果写入数据库;若不存在同位瓦片,则写入数据库。

本发明采用资源消耗少、执行切换快的多线程来替代多进程,整个过程只启动一个进程,并分别对瓦片的切分和输出两类操作开展线程并行处理,即切分操作采用线程池控制、输出操作采用输出队列控制,同时通过已有运行环境的硬件参数,计算两个操作之间平衡点状态,整体提升瓦片金字塔构建效率,适应于海量时序影像的瓦片金字塔的快速构建。

附图说明

图1为本发明的整体流程图。

图2为本发明采用多线程并行策略的流程图。

图3为实施例一中相邻两景重叠影像。

图4为图3中两景影像计算得到的瓦片行列号。

图5为影像1的覆盖瓦片示意图。

图6为影像2的覆盖瓦片示意图。

图7为影像1切分得到的10号瓦片。

图8为影像2切分得到的10号瓦片。

图9为图7和图8中瓦片融合之后的结果瓦片。

图10为实施例一中构建结果的数据范围。

具体实施方式

下面结合附图和具体实施方式对本发明作进一步详细的说明。

图1所示的一种时序影像瓦片金字塔的快速构建方法,包括以下步骤:

步骤1、构建瓦片金字塔构建总进程:

分别构建切分线程池和输出队列;切分线程池和输出队列中的每个线程均设置休眠、激活以及消亡三种状态。

步骤2、计算时序影像对应的瓦片金字塔最底层的层级数lmax:

根据影像元数据中的空间参考信息,确定所构建瓦片金字塔的世界范围[xmin,ymin,xmax,ymax],根据瓦片尺寸tile_size,采用公式一循环计算得到瓦片金字塔的各层级对应地面分辨率l_resolution。

l_resolution=(xmax-xmin)/(tile_size*2level),level=0,1,2,…,n公式一

在循环求取的过程中,每一次求得l_resolution值与影像分辨率imageresolution进行比较,若l_resolution<imageresolution,则该l_resolution对应的level等级为瓦片金字塔最底层的层级数lmax。

步骤3、计算第一景影像最底层lmax瓦片行列号:

根据影像覆盖范围extent,以及对应最底层lmax的地面分辨率lmax_resolution,采用公式二计算得到该影像所占据的瓦片行列号,其中函数floor为向下取整,ceil为向上取整。

tile_xmin=floor((extent_xmin-xmin)/(lmax_resolution*tile_size))

tile_xmax=ceil((extent_xmax-xmin)/(lmax_resolution*tile_size))

tile_ymin=floor((ymin-extent_ymin)/(lmax_resolution*tile_size))

tile_ymax=ceil((ymax-extent_ymin)/(lmax_resolution*tile_size))公式二

步骤4、进行最底层lmax瓦片渲染及切分:

采用已有常规方法对最底层瓦片进行切分,切分时采用切分线程池控制程序,池中每个线程负责一个瓦片的切分。新创建切分线程先处于休眠状态,控制命令根据预先设置的切分线程总数,对应激活相应数量的线程进行切分操作,当某一个线程的操作完成后,控制命令将该线程消亡并移出线程池。

步骤5、切分形成的瓦片实时进入到输入队列:

将输出队列的总长度(存储瓦片总数)设置为切分线程池一次性能够切分产生的瓦片总量,使切分形成的瓦片实时进入到输入队列。

步骤6、输出队列中瓦片写入数据库:

瓦片入队出队的顺序保持先进先出,控制命令根据设置的并行输出线程数激活输出线程,将瓦片输出存放到数据库中。

若切分后若瓦片为透明瓦片,则放弃输出;

若切分后若瓦片为不透明瓦片,则写入数据库。

步骤7、对第二景瓦片重复步骤3和步骤5,直至所有影像的最底层lmax瓦片切分完毕并输出到输入队列,等待写入数据库;

若切分后若瓦片为透明瓦片,则放弃输出;

若切分后若瓦片为不透明瓦片,判断是否存在同位瓦片。若存在同位瓦片(行列号完全相同的瓦片),则采用w3c(worldwidewebconsortium,万维网联盟)提出的dst_over方法进行瓦片融合,并将融合结果写入数据库;若不存在同位瓦片,则写入数据库。

步骤8、其他层级瓦片生成:

最底层瓦片输出完成后,通过现有瓦片四合一的合并方式形成其他层级瓦片,完成整个瓦片金字塔的构建。

下面通过具体实施例对本发明的详细过程以及处理结果进行进一步阐述:

实施例一、

图2为本发明采用多线程并行策略的流程图。切分线程池和输出队列中的每个线程均设置休眠、激活以及消亡三种状态。

切分操作中,每张瓦片的切分处理均创建新的独立线程加入到切分线程池中(图2流程2)。切分线程池的容量大小设置为i*j,即为一张大瓦片内所覆盖的瓦片量。新创建的线程先处于休眠状态,控制命令根据设置的并行切分线程数n,对应激活n个线程进行切分操作(图2流程3),当某一个线程的操作完成后,控制命令将该线程消亡并移出线程池(图2流程4)。在这一过程中,切分线程始终保持动态更新过程,使切分线程池中的线程总数始终大于并行处理数直至切分完成,从而确保整个切分过程能够充分利用运行环境的cpu计算能力。

输出操作中,每张切好的瓦片按顺序进入到输出队列中(图2流程5),输出队列的总长度(存储瓦片总数)设置为切分并行处理数n*i*j,即切分线程池一次能够切分产生的瓦片总量。瓦片入队出队的顺序保持先进先出(图2流程6),同样控制命令根据设置的并行输出线程数m激活输出线程,将瓦片输出存放到数据库中(图2流程7、8、9)。

并行切分线程数n和并行输出线程数m之和与运行环境cpu逻辑核心数相等,n和m的具体数值与原始影像分辨率和具体运行环境计算能力相关,由于切分操作更依赖cpu性能,因此通常情况下n>m。在进行大规模时序影像瓦片金字塔正式构建前,可以提前选择部分影像进行实验,来合理分配n和m的数值。

图3~图9为本发明中同位瓦片的处理过程示意图。

时序影像按照获取时间和范围顺序排列,通常情况下,相邻的两景影像在接边处会有30%左右影像重叠。在进行切分时,影像的非重叠区域只产生一张瓦片,而重叠区域则会产生多张行列号相同的瓦片(简称“同位瓦片”)。其中,非重叠区域的影像切分可采用常规方法进行,而重叠区影像的切分,本发明提出采用瓦片融合的思想进行瓦片切分。

如图3所示,当影像1和影像2为先后获取的位置相邻两景影像,根据已有参数得到覆盖区瓦片行列号,如图4所示,在重叠区域会生成15对同位瓦片;如图5和图6所示,对这些同位瓦片采用w3c(worldwidewebconsortium,万维网联盟)提出的dst_over方法进行瓦片融合,具体为:(1)完全重叠同位瓦片,如编号为4、11、18、25、32的同位瓦片,进行dst_over瓦片融合操作,其结果为直接利用时间较新的影像2瓦片替代原影像1瓦片;(2)部分重叠同位瓦片,即处于影像接边处的瓦片,如编号为3、5、10、12、17、19、24、26、31和33的同位瓦片,以图5和图6中编号为10的同位瓦片融合过程为例,图7对应的是影像1切分得到的10号瓦片,左侧为影像1非重叠区域的像素,右侧为影像1重叠区域像素,图8对应的是影像2切分得到的10号瓦片,左侧为透明像素,右侧为影像2重叠区域像素。在进行dst_over瓦片融合操作,即透明像素区域仍旧使用图7中瓦片像素值,重叠区域像素使用图8中瓦片像素值,得到的图9即为结果瓦片。通过瓦片融合,无需影像拼接就能够切分得到重叠区域的瓦片。

为了验证本方法的效率,将本方法与另种常用的多进程并行方法进行对比实验。其实验区域如图10所示,为中国长江三角洲某区域高分二号时序影像数据,获取时间为2017年4月30日至2017年12月31日,共计280景,每景影像数据量在3.7gb~5.3gb之间,数据总量为1.3t,具有较好的代表性。实验数据的影像分辨率为0.81m,空间参考为wgs84,根据公式一计算得到该时序影像对应的瓦片金字塔最底层的层级数为18,最顶层层级数设定为10,瓦片生成的采样方法采用双线性采样。其中,对比实验采用arcgis的镶嵌数据集方法。

实验环境为微软windows1064位操作系统,cpu为intelcorei7-7920hq,主频3.10ghz,内存为16gb,cpu逻辑核心数为8核,磁盘7200转,存储量5t。预先采用4景影像进行本文最优并行线程分配方案确定,得到并行切分线程数为6、并行输出线程数为2。arcgis镶嵌数据集方法采用多进程并行,进程数为8,与本文并行线程总数相等。实验结果如表1和表2所示,可见本文所提方法总体用时比arcgis镶嵌数据集快4.84倍。

表1

表2

上述实施方式并非是对本发明的限制,本发明也并不仅限于上述举例,本技术领域的技术人员在本发明的技术方案范围内所做出的变化、改型、添加或替换,也均属于本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1