云环境下基于预分片的遥感影像数据并行重采样方法【专利摘要】本发明公开了一种云环境下基于预分片的遥感影像数据并行重采样方法。步骤如下:1)将目标影像数据上传至云平台HDFS分布式文件系统上;2)对影像数据进行预分片处理,使之按照规则格网进行划分;3)将每一个预分片后的影像块作为一个单独的影像分片;4)每个影像分片启用一个map并行任务,在不同集群节点上进行并行处理,对原始影像分片逐层重采样;5)按照影像层级进行归并,对每一个层级的影像分片集合,进行拼接归并;6)将归并后的各分辨率层级影像数据输出到HDFS上。本发明不仅适用于影像数据的重采样,也适用于其他数据可划分的影像数据并行处理领域,是遥感数据云计算服务的关键。【专利说明】云环境下基于预分片的遥感影像数据并行重采样方法【
技术领域:
】[0001]本发明涉及云计算、地理信息系统和遥感影像数据处理领域,尤其涉及一种云环境下基于预分片的遥感影像数据并行重采样方法。【
背景技术:
】[0002]为了对大型高分辨率遥感影像数据进行分层分块组织,建立具有多分辨率层级的影像金字塔,使客户端能够直接请求目标分辨率层级、目标区域的影像数据块,原始影像数据须经过重采样,从而获得低一级分辨率的影像数据。[0003]在影像数据处理过程中,尽管许多操作最终是对某个像素进行处理,但处理过程中通常需要考虑影像邻接的像素点。然而在云计算环境下,MapReduce并行计算框架使用流式数据读取方式,在默认情况下,对数据进行分片读取的方式如图2所示,这种方式忽略了像素之间原有的空间关系,难以用以需要考虑紧邻像素的遥感影像处理领域。【
发明内容】[0004]本发明的目的是克服现有技术的不足,提供一种云环境下基于预分片的遥感影像数据并行重采样方法。[0005]云环境下基于预分片的遥感影像数据并行重采样方法包括如下步骤:(1)目标影像数据上传在并行重采样之前,客户端通过调用Hadoop的JavaAPI,将待处理的遥感影像数据写入云存储的分布式文件系统HDFS集群上,以便通过MapReduce并行计算框架进行处理;(2)影像数据预分片为提供适合影像数据并行计算的数据输入策略,使影像数据在分片时能够保持像素间原有空间位置关系,将步骤(1)中上传至HDFS集群上的目标影像数据按照规则格网方式进行分块,并将这些分块写回HDFS集群上;(3)影像数据输入通过MapReduce框架读取步骤(2)中生成的预分片影像块,将各影像块作为一个独立的分片ImageSplit进行输入,记录影像块的层级号和行列位置,其中原始影像的层级号为O,同时,禁止MapReduce框架进一步对其进行再次分块和分记录,从而使每个影像块作为一个单独的影像分片进行处理;(4)并行重采样通过MapReduce框架为步骤(3)中的每一个影像分片ImageSplite创建单独的重采样map任务,这些map任务并行运行在集群各节点上,分别对相应的影像分片进行重采样处理,生成了不同层级的影像分片,并以层级号和行列号进行唯一标识;(5)影像数据归并通过MapReduce框架为每一个层级的影像数据创建一个单独的reduce任务,这些reduce任务并行运行在集群各节点上,将拥有相同层级号的影像分片分配到对应层级号的reduce任务进行归并处理,归并后的各层影像分片通过层级号进行标识;(6)影像数据输出阶段根据不同分辨率层级号,对步骤(5)中归并后的影像数据根据目标格式进行逐层输出,并写入分布式文件系统HDFS上,从而完成影像数据并行重采样的结果输出;所述的步骤(3)包括设计ImageFileInputFormat类和ImageRecordReader类;ImageFileInputFormat类继承于FileInputFormat类,通过该类控制已经过预分片的影像块不再继续分片,每个影像块作为一个单独的影像分片进行输入;ImageRecordReader类,继承于RecordReader类,通过该类实现每个影像分片作为一个单独的记录进行处理;设计ImageBlockffritable类实现对影像分片的封装,包含了影像块二进制流、行列位置和层级号,便以通过MapReduce程序进行处理。[0006]所述的步骤(4)包括为重采样任务定义了ResaMapper类,继承于Mapper类,在mapO方法中,加载原始影像分片,即第O级影像分片,并进行循环重采样,生成各层级影像数据分片;在进行每一层级重采样之后,对影像分片按照〈IntWritable,ImageBlockffritable)键值对方式进行输出,供下一步继续处理,其中IntWritable为层级号,ImageBlockffritable为可序列化影像数据块。[0007]所述的步骤(5)包括为影像分片的归并设计ResaReducer类,继承于Reducer类,用于实现影像数据归并reduce任务;在进行归并处理时,相同层级的影像分片根据层级号被分配到同一个ResaReducer进行出,通过reduceO方法完成所在分辨率层级所有影像分片的拼接;不同分辨率层级的影像归并reduce任务被分配到不同节点上执行,从而并行生成各层级拼接后的影像数据,并通过层级号进行标识。[0008]所述的步骤(6)包括为实现影像数据的输出设计ImageOutputFormat类和ImageRecordWriter类,ImageOutputFormat类继承于FileOutputFormat类,用于控制数据输出格式,ImageRecordWriter类继承于RecordWriter类,通过writeO方法实现各层影像〈IntWritable,Bytesffritable>键值对的文件文件输出,其中IntWritable为层级号,Bytesffritable为该层级拼接后的影像数据二进制流。[0009]本发明与现有技术相比具有的有益效果:(1)实现了云计算环境下遥感影像数据的并行重采样,与传统重采样方法相比,大大提高了重采样的效率;(2)能够将云计算的高性能计算能力用于遥感影像数据的并行处理,促进了云计算技术与遥感影像数据存储和处理技术的结合,为遥感数据云服务提供技术基础。【专利附图】【附图说明】[0010]图1是本发明的MapReduce中影像预分片方式;图2是本发明的MapReduce中影像默认分片方式;图3是本发明的影像块可序列化类(ImageBlockWritable)定义。【具体实施方式】[0011]云环境下基于预分片的遥感影像数据并行重采样方法包括如下步骤:(I)目标影像数据上传在并行重采样之前,客户端通过调用Hadoop的JavaAPI,将待处理的遥感影像数据写入云存储的分布式文件系统HDFS集群上,以便通过MapReduce并行计算框架进行处理;(2)影像数据预分片为提供适合影像数据并行计算的数据输入策略,使影像数据在分片时能够保持像素间原有空间位置关系,将步骤(I)中上传至HDFS集群上的目标影像数据按照规则格网方式进行分块,并将这些分块写回HDFS集群上;(3)影像数据输入通过MapReduce框架读取步骤(2)中生成的预分片影像块,将各影像块作为一个独立的分片ImageSplit进行输入,记录影像块的层级号和行列位置,其中原始影像的层级号为O,同时,禁止MapReduce框架进一步对其进行再次分块和分记录,从而使每个影像块作为一个单独的影像分片进行处理;(4)并行重采样通过MapReduce框架为步骤(3)中的每一个影像分片ImageSplite创建单独的重采样map任务,这些map任务并行运行在集群各节点上,分别对相应的影像分片进行重采样处理,生成了不同层级的影像分片,并以层级号和行列号进行唯一标识;(5)影像数据归并通过MapReduce框架为每一个层级的影像数据创建一个单独的reduce任务,这些reduce任务并行运行在集群各节点上,将拥有相同层级号的影像分片分配到对应层级号的reduce任务进行归并处理,归并后的各层影像分片通过层级号进行标识;(6)影像数据输出阶段根据不同分辨率层级号,对步骤(5)中归并后的影像数据根据目标格式进行逐层输出,并写入分布式文件系统HDFS上,从而完成影像数据并行重采样的结果输出;所述的步骤(3)包括设计ImageFileInputFormat类和ImageRecordReader类;ImageFileInputFormat类继承于FileInputFormat类,通过该类控制已经过预分片的影像块不再继续分片,每个影像块作为一个单独的影像分片进行输入;ImageRecordReader类,继承于RecordReader类,通过该类实现每个影像分片作为一个单独的记录进行处理;设计ImageBlockffritable类实现对影像分片的封装,包含了影像块二进制流、行列位置和层级号,便以通过MapReduce程序进行处理。[0012]所述的步骤(4)包括为重采样任务定义了ResaMapper类,继承于Mapper类,在mapO方法中,加载原始影像分片,即第O级影像分片,并进行循环重采样,生成各层级影像数据分片;在进行每一层级重采样之后,对影像分片按照〈IntWritable,ImageBlockffritable)键值对方式进行输出,供下一步继续处理,其中IntWritable为层级号,ImageBlockffritable为可序列化影像数据块。[0013]所述的步骤(5)包括为影像分片的归并设计ResaReducer类,继承于Reducer类,用于实现影像数据归并reduce任务;在进行归并处理时,相同层级的影像分片根据层级号被分配到同一个ResaReducer进行出,通过reduceO方法完成所在分辨率层级所有影像分片的拼接;不同分辨率层级的影像归并reduce任务被分配到不同节点上执行,从而并行生成各层级拼接后的影像数据,并通过层级号进行标识。[0014]所述的步骤(6)包括为实现影像数据的输出设计ImageOutputFormat类和ImageRecordWriter类,ImageOutputFormat类继承于FileOutputFormat类,用于控制数据输出格式,ImageRecordWriter类继承于RecordWriter类,通过writeO方法实现各层影像〈IntWritable,BytesWritable〉键值对的文件文件输出,其中IntWritable为层级号,Bytesffritable为该层级拼接后的影像数据二进制流。[0015]实施例:本实施例在开源云计算基础架构Hadoop上进行实现,其实施步骤如下:(O目标影像数据上传云环境下的遥感影像数据并行重采样是在集群环境下,应用MapReduce并行计算框架对影像数据进行并行处理,因此在重采样之前,用户需要将目标影像数据上传至云平台的HDFS集群上以进一步处理。[0016](2)影像数据预分片本步骤是为了提供一种适合影像数据并行计算的数据输入策略,使影像数据在分片时能够保持其原有空间位置关系。如图1所示,将HDFS集群上的目标影像数据按照规则格网进行适当地分块,并写回HDFS上,供MapReduce并行计算程序进一步处理。[0017](3)影像数据输入在本步骤中,MapReduce框架读取上一步骤中生成的预分片影像块,并将各影像块作为一个独立的分片(ImageSplit)进行输入,同时禁止MapReduce框架进一步对其进行再次分块和分记录。从而,每个影像块作为一个单独的影像分片进行处理。[0018]由于影像的处理通常是需要考虑近邻像素,该步骤避免了MapReduce默认影像数据分块方式(如图2所示)导致的影像像素之间位置关系的破坏。[0019]为支持影像块的输入,设计ImageFileInputFormat类(继承于FileInputFormat类)和ImageRecordReader类(继承于RecordReader类)。其中,ImageFileInputFormat类用于控制影像的分片,通过该类控制已经过预分片的影像块不再继续分片。在影像块的读取时,影像块的文件名格式应采用行列位置自述形式,即每个文件名本身可以表明该影像块的位置,如“row-column”形式,读取之后由ImageRecordReader进行解析,并写入ImageBlockWritable。其中ImageBlockWritable类是本专利设计的可序列化的影像数据块类,其定义如图3所示。[0020](4)并行重采样阶段在本步骤中,MapReduce框架为每个影像分片ImageSplite各创建一个对应的map任务,这些map任务并行运行在集群各节点上,分别对相应的影像分片进行重采样处理,同时对本存储节点数据进行优先处理,从而实现以移动计算来代替移动数据。[0021]为实现上述功能,需要为重采样任务定义ResaMapper类(继承于Mapper类),在ResaMapper类的mapO方法中,加载了原始影像数据块(第O级),对各层级进行循环重采样。在每一层级重米样之后,对影像块按照〈IntWritable,ImageBlockWritable>键值对方式进行输出。其中IntWritable为层级号,ImageBlockWritable为可序列化影像数据块。[0022](5)影像数据归并阶段在影像数据的归并阶段中,MapReduce框架通过reduceO方法合并同一层级的影像数据块。本专利设计ResaReducer类(继承于Reducer类)对影像块ImageBlockWritable进行归并(实现影像块的拼接处理)。[0023]在本步骤中,将相同层级的影像块根据层级号被分配到同一个ResaReducer进行合并。由于多个ResaReducer在集群上不同节点并行执行,因此在该阶段根据需要也可以实现影像数据的并行入库。[0024](6)影像数据输出阶段该阶段控制输出格式,并对各层归并后的影像〈IntWritable,BytesWritable〉键值对进行输出,其中IntWritable为层级号,BytesWritable为该层重新拼接后的影像数据二进制流。本专利设计ImageOutputFormat类(继承于FileOutputFormat类)和ImageRecordffriter类(继承于RecordWriter类)来实现影像数据的输出。[0025]通过以上步骤可实现基于MapReduce的遥感影像高效并行重采样。同时,该处理流程不仅适用于影像数据的重采样,也适用于其他数据可划分的影像数据并行处理领域,是遥感数据云计算服务的技术基础。【权利要求】1.云环境下基于预分片的遥感影像数据并行重采样方法,其特征在于包括如下步骤:(1)目标影像数据上传在并行重采样之前,客户端通过调用Hadoop的JavaAPI,将待处理的遥感影像数据写入云存储的分布式文件系统HDFS集群上,以便通过MapReduce并行计算框架进行处理;(2)影像数据预分片为提供适合影像数据并行计算的数据输入策略,使影像数据在分片时能够保持像素间原有空间位置关系,将步骤(1)中上传至HDFS集群上的目标影像数据按照规则格网方式进行分块,并将这些分块写回HDFS集群上;(3)影像数据输入通过MapReduce框架读取步骤(2)中生成的预分片影像块,将各影像块作为一个独立的分片ImageSplit进行输入,记录影像块的层级号和行列位置,其中原始影像的层级号为O,同时,禁止MapReduce框架进一步对其进行再次分块和分记录,从而使每个影像块作为一个单独的影像分片进行处理;(4)并行重采样通过MapReduce框架为步骤(3)中的每一个影像分片ImageSplite创建单独的重采样map任务,这些map任务并行运行在集群各节点上,分别对相应的影像分片进行重采样处理,生成了不同层级的影像分片,并以层级号和行列号进行唯一标识;(5)影像数据归并通过MapReduce框架为每一个层级的影像数据创建一个单独的reduce任务,这些reduce任务并行运行在集群各节点上,将拥有相同层级号的影像分片分配到对应层级号的reduce任务进行归并处理,归并后的各层影像分片通过层级号进行标识;(6)影像数据输出阶段根据不同分辨率层级号,对步骤(5)中归并后的影像数据根据目标格式进行逐层输出,并写入分布式文件系统HDFS上,从而完成影像数据并行重采样的结果输出。2.根据权利要求1所述的方法,其特征在于所述的步骤(3)包括设计ImageFileInputFormat类和ImageRecordReader类;ImageFiIeInputFormat类继7承于FileInputFormat类,通过该类控制已经过预分片的影像块不再继续分片,每个影像块作为一个单独的影像分片进行输入;ImageRecordReader类,继承于RecordReader类,通过该类实现每个影像分片作为一个单独的记录进行处理;设计ImageBlockWritable类实现对影像分片的封装,包含了影像块二进制流、行列位置和层级号,便以通过MapReduce程序进行处理。3.根据权利要求1所述的方法,其特征在于所述的步骤(4)包括为重采样任务定义了ResaMapper类,继承于Mapper类,在mapO方法中,加载原始影像分片,即第O级影像分片,并进行循环重采样,生成各层级影像数据分片;在进行每一层级重采样之后,对影像分片按照〈IntWritable,ImageBlockffritable)键值对方式进行输出,供下一步继续处理,其中Intffritable为层级号,ImageBlockffritable为可序列化影像数据块。4.根据权利要求1所述的方法,其特征在于所述的步骤(5)包括为影像分片的归并设计ResaReducer类,继承于Reducer类,用于实现影像数据归并reduce任务;在进行归并处理时,相同层级的影像分片根据层级号被分配到同一个ResaReducer进行出,通SreduceO方法完成所在分辨率层级所有影像分片的拼接;不同分辨率层级的影像归并reduce任务被分配到不同节点上执行,从而并行生成各层级拼接后的影像数据,并通过层级号进行标识。5.根据权利要求1所述的方法,其特征在于所述的步骤(6)包括为实现影像数据的输出设计ImageOutputFormat类和ImageRecordWriter类,ImageOutputFormat类继承于FileOutputFormat类,用于控制数据输出格式,ImageRecordWriter类继承于RecordWriter类,通过writeO方法实现各层影像〈IntWritable,BytesWritable>键值对的文件文件输出,其中IntWritable为层级号,BytesWritable为该层级拼接后的影像数据二进制流。【文档编号】G06F9/44GK103809969SQ201410017598【公开日】2014年5月21日申请日期:2014年1月15日优先权日:2014年1月15日【发明者】王国锋,李建成,池子文,杜震洪,张丰,刘仁义申请人:中国公路工程咨询集团有限公司,浙江大学