基于cpu和gpu协同处理的遥感影像正射校正方法

文档序号:6384357阅读:576来源:国知局
专利名称:基于cpu和gpu协同处理的遥感影像正射校正方法
技术领域
本发明属于遥感影像高性能处理领域,涉及一种基于CPU (中央处理器)和GPU (图像处理器)协同处理的光学卫星遥感影像正射校正方法。
背景技术
正射校正是光学卫星遥感影像用于灾害防治、抢险救灾等具体应用的关键处理环节,也是整个遥感数据处理过程中计算最密集、耗时最长的步骤之一。近年来,随着对地观测技术的飞速发展,光学遥感卫星数据源迅速增加,影像分辨率大幅提高,获取的影像数据量快速增长,对这些海量数据光学卫星遥感影像进行正射校正所需的计算量非常巨大。传统的光学卫星数据处理架构主要考虑数据处理的质量和精度,并未顾及计算效率,已无法满足对海量数据光学卫星遥感影像进行快速正射校正的处理要求。目前,国内外相关学者和研究机构对在GPU上进行正射(几何)校正开展了一定的研究,使用GPU提高大数据遥感影像的正射(几何)校正效率逐渐成为共识。著名的影像处理软件 PCI Geomatics 在 2009 年 4 月发行了 Pro-Lines GeoImaging server 系统,该系统使用GPU并行计算技术对遥感影像进行几何校正,获得了较高的加速比;德国宇航中心通过研究正射校正等遥感数据处理算法在GPU硬件上的映射方法,实现了对航拍数据的高效处理,从而为在轨近实时灾害监测提供支持。在国内,陈超、陈彬等以仿射变换几何校正方法为例介绍了在GPU上进行几何校正的方法,较传统的几何校正算法加速2-3倍;侯毅、沈彦男等在保证影像正射校正精度的基础上测试基于GPU的数字影像正射校正的速率,证明了基于GPU的数字影像正射校正的性能相对于CPU有较大的提高,算法加速比达到3-5倍。由于算法设计和实现较为简单,上述校正方法并没有完全发挥GPU的优势。杨靖宇、张永生等搭建了 CPU-GPU协同并行计算平台并完成了正射校正的CPU-GPU协同处理和性能优化,利用GeForce 9500GT显卡对大小为6000像素X6000像素的全色影像进行多项式纠正对比实验,证明GPU处理效率优于CPU处理效率,最邻近内插和双线性内插的最终加速比分别为8. 45倍和10. 91倍,但由于使用的GPU芯片较老,该实验并未涉及对当前主流的基于Fermi架构GPU的性能优化策略,且在数据量快速增长的背景下,该算法加速比不甚理想,无法完全满足对海量光学卫星影像进行近实时正射校正的需求。

发明内容
本发明所要解决的问题是,针对海量数据光学卫星遥感影像,提出一种可以满足近实时处理需求的快速正射校正方法。本发明的技术方案为一种基于CPU和GPU协同处理的遥感影像正射校正方法,包括以下步骤步骤1,将待校正影像和DEM从主机端内存拷贝至GPU的全局存储器中;步骤2,将校正变换模型参数拷贝至GPU的常数存储器中;步骤3,动态调整片上缓存,包括在共享存储器不可用时将更多片上缓存分配给一级 cache ;步骤4,设置GPU线程块大小,确定GPU线程块数目;步骤5,在GPU上对待校正影像进行正射校正,得到校正后影像;步骤6,将校正后影像从GPU全局存储器中拷贝回主机端内存;其中,步骤1、2、3、4、6由CPU执行,步骤5由GPU执行。而且,步骤3中,在共享存储器不可用时将48KB片上缓存分配给一级cache。而且,步骤4中,设置GPU线程块大小、确定GPU线程块数目按照以下准则进行,(I)线程块中线程数小于1024 ;(2)流式多处理器中线程块数量小于8 ;(3)流式多处理器中线程数等于1536。本发明针对海量光学卫星遥感影像,基于CPU和GPU协同处理理论,提出了一种可以满足近实时处理需求的快速正射校正方法。该方法在保证算法正确性的前提下,大幅提高了光学卫星遥感影像正射校正效率。


图1为本发明实施例的流程示意图;图2为本发明实施例的常数存储器中校正变换模型参数命中情况示意图;图3为本发明实施例的动态调整片上缓存后Fermi架构GPU存储结构示意图;图4为本发明实施例的线程块大小变化时流式多处理器中线程块和线程数量的变化情况示意图。
具体实施例方式根据映射关系的不同,正射校正方案可分为两种,分别称为直接法方案和间接法方案。由于直接法不能直接得到校正结果影像上的每个点的灰度值,需要利用灰度值分配的思路来简化处理流程以达到和间接法同等规模的计算复杂度,因此在GPU上容易出现严重的存储器写访问冲突和数据不一致等问题,降低GPU的计算效率。采用基于输出影像进行任务划分的间接法校正方案则不存在上述问题,该方法计算过程简单,可以直接得到校正结果影像上每个点的灰度值,比较容易映射到GPU上进行处理。因此,本发明采用具有先天并行性的间接法方案作为校正方案,保证GPU的计算效率。本发明技术方案具体实施时可采用计算机软件技术实现自动运行。实施例使用通用统一设备架构(Compute Unified Device Architecture, CUDA)提供的扩展C语言作为开发工具,并使用新一代基于Fermi架构的GPU实施和运行。以下结合附图和实施例详细说明本发明技术方案。如图1所示,实施例包括以下步骤步骤1,将待校正影像和DEM从主机端内存拷贝至GPU的全局存储器中。本步骤具体实施时可使用cudaMalloc ()函数为待校正影像和对应的DEM(数字高程模型)在GPU的全局存储器上分配存储空间,并使用CUdaMemCpyO函数将其拷贝至全局存储器上。cudaMallocO函数和cudaMemCpy ()函数为现有技术,可参见CUDA下的GPU编程相关文献。
步骤2,将校正变换模型参数拷贝至GPU的常数存储器中。本发明为了达到更高的处理效率,使用GPU常数存储器代替全局存储器存储校正变换模型参数,以减少算法访问全局存储器的次数。除全局存储器外,GPU上还有一个大小为64KB的常数存储器。该存储器存储空间小,且为只读存储器,但由于设计有8KB的cache (高速缓冲存储器),因此在满足特定的访问模式时,访存速度明显优于全局存储器。在正射校正过程中,校正变换模型参数较少,且计算完成后不再改变,满足常数存储器对存储空间和数据只读的要求;此外,在通过地面点坐标反算像点坐标时,同步执行的所有线程在同一时刻将访问同一个校正变换模型参数,因此,当第一个线程(未命中cache)访问常数存储器获得校正变换模型参数并将其载入到cache后,后面的所有线程都可直接命中cache,从而提高算法的执行效率。如附图2所示常数存储器存储多个校正变换模型参数l、2-n,例如当第一个线程访问常数存储器获得校正变换模型参数I并将其载入到cache后,同步执行的所有线程在同一时刻都将访问校正变换模型参数I。因此,按步骤2所述,本实施例将校正变换模型参数载入常数存储器中,以提高算法的计算访存比,从而提高算法的执行效率。具体实施步骤可为I)使用constant修饰符修饰校正变换模型参数结构体;2)调用CudaMemoryCpyToSymbol ()函数将校正变换模型参数从主机内存载入至GPU常数存储器中。步骤3,动态调整片上缓存,将更多片上缓存分配给一级cache。本发明针对目前广泛使用的新一代Fermi架构GPU,将更多的片上缓存分配给Fermi GPU特有的一级cache,以缓存更多待校正影像,进一步减少算法访问全局存储器的次数。除全局存储器和常数存储器外,基于Fermi架构的GPU在每一组处理核心中放置了 64KB的片上缓存,作为共享缓存和一级cache使用;此外,在片上缓存和全局存储器之间还放置了 768KB的二级cache。二级cache为系统级cache,由GPU硬件负责数据调度和缓存;片上缓存则可根据需要柔性重组,通过动态调整共享缓存和一级cache的大小,可以提高算法和程序的执行效率。本实施例使用间接法方案对光学卫星遥感影像进行正射校正,虽然每个线程块对应的校正后虚拟影像块为规则块,但该虚拟影像块对应的输入影像块并不为规则块,在单程序多数据流程序设计中,将边界动态变化的、不规则的输入影像块载入到共享存储器中存在困难。由于Fermi架构GPU可动态调整片上缓存,因此本实施例在共享存储器不可用时,将更多的片上缓存(48KB)分配给一级cache,如附图3所示一级cache动态调整后缓存48KB待校正影像,二级cache缓存768KB待校正影像,全局存储器存储整幅待校正影像。由于相邻线程进行灰度重采样时读取的输入影像像素间隔不大,如果将更多的片上缓存分配给一级cache,缓存更多的待校正影像,可以增加线程块灰度重采样时命中一级cache的几率。片上缓存动态分配具体可通过cudaFuncSetCacheConfigO函数实现,具体实施时可参见CUDA下的GPU编程相关文献。步骤4,设置GPU线程块大小,确定GPU线程块数目。合理设置线程块大小,并根据影像大小确定线程块数目,可以保证整幅影像被GPU线程块完全覆盖。设置线程块大小的时候使用“配置选择优化”策略提高GPU流式多处理器中GPU线程的占有率,从而提高GPU硬件调度线程的效率,更好地隐藏访问延迟。在GPU中,线程块被映射到流式多处理器中调度执行。在基于Fermi架构的GPU中,当满足如下三个准则时,流式多处理器的调度性能达到最优准则1:线程块中线程数小于1024 ;准则2 :流式多处理器中线程块数量小于8 ;准则3 :流式多处理器中线程数等于1536。附图4列出了当线程块大小(线程块中线程数)变化时,流式多处理器中线程块数量和线程数量的变化情况。从图中可知,当GPU线程块大小为256和512时,流式多处理器中线程块数量分别为6个和3个,在这两种情况下,流式多处理器中的线程数都达到1536个,同时满足准则1、准则2和准则3,调度性能达到最优。因此,对执行正射校正算法的GPU线程块进行配置选择优化,将其大小设置为256或512,可以提高流式多处理器的调度性能,从而提高算法的执行效率。在本实施例中,将GPU线程块大小设置为256(16X16)。在这种情况下,设校正后虚拟影像大小为MXN,且每个GPU线程对一个像素进行正射校正,则 GPU线程块个数为「M/l6]xpV/l6](进行向上取整是为了保证所有的像素皆被GPU线程覆盖)。具体实施时也可以将GPU线程块大小设置为512 (32X16或16X32),则GPU线程块个数为「M/32~|x「A^/16l或「M/16]x「jV/32~|。步骤5,在GPU上对待校正影像进行正射校正,得到校正后影像。在GPU上进行正射校正的主要步骤包括1) GPU上线程按索引号计算对应的地面点坐标;2) GPU上线程按索引号将地面点坐标和DEM代入校正变换模型反算地面点对应的像点坐标;3) GPU上线程按索引号进行灰度重采样;4) GPU上线程按索引号进行灰度赋值。在具体实施时,可将上述算法步骤封装成一个GPU核函数(关于核函数编写的方法可参见CUDA下的GPU编程相关文献)。需要注意的是,由于在步骤4中对线程块个数进行了向上取整,因此在最后一行和最后一列的线程块中,可能会出现某些线程未分配到像素的情况。在本实施例中,通过分支逻辑处理这种情况对未分配到像素的线程,不进行任何处理而直接返回。步骤6,将校正后影像从GPU的全局存储器中拷贝回主机端内存。本步骤使用cudaMemCpy ()函数将步骤5校正完毕后所得校正后影像拷贝回主机端内存中,具体实施时可参见CUDA下的GPU编程相关文献。其中,步骤1、2、3、4、6在CPU上运行,即CPU执行部分;步骤5在GPU上运行,SPGI3U执行部分。搭建实验环境对本实施例进行性能和正确性验证,其中CPU型号为Intel XeonE5650,GPU型号为NVIDIA Tesla M2050,实验数据为资源三号下视标准景影像(校正前数据量1. 12GB,校正后数据量1. 49GB)。按照如附图1所示流程对实验数据进行基于CPU和GPU协同处理的正射校正,采用双三次插值法作为重采样方法时,校正时间压缩至IOs以下;与传统串行逐点正射校正算法相比,算法加速比达到44. 79倍,可以满足对海量光学卫星遥感影像进行近实时正射校正的需求。此外,经过验证,使用本实施例校正后的影像与在CPU上使用逐点正射校正获取的校正后影像的灰度值完全相同,说明了本实施例的正确性。本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。
权利要求
1.一种基于CPU和GPU协同处理的遥感影像正射校正方法,其特征在于包括以下步骤步骤1,将待校正影像和DEM从主机端内存拷贝至GPU的全局存储器中;步骤2,将校正变换模型参数拷贝至GPU的常数存储器中;步骤3,动态调整片上缓存,包括在共享存储器不可用时将更多片上缓存分配给一级cache ;步骤4,设置GPU线程块大小,确定GPU线程块数目;步骤5,在GPU上对待校正影像进行正射校正,得到校正后影像;步骤6,将校正后影像从GPU全局存储器中拷贝回主机端内存;其中,步骤1、2、3、4、6由CPU执行,步骤5由GPU执行。
2.如权利要求1所述基于CPU和GPU协同处理的遥感影像正射校正方法,其特征在于步骤3中,在共享存储器不可用时将48KB片上缓存分配给一级cache。
3.如权利要求1或2所述基于CPU和GPU协同处理的遥感影像正射校正方法,其特征在于步骤4中,设置GPU线程块大小、确定GPU线程块数目按照以下准则进行,(1)线程块中线程数小于1024;(2)流式多处理器中线程块数量小于8;(3)流式多处理器中线程数等于1536。
全文摘要
一种基于CPU和GPU协同处理的遥感影像正射校正方法,包括将待校正影像和DEM从主机端内存拷贝至GPU全局存储器中;将校正变换模型参数拷贝至常数存储器中;动态调整片上缓存,将更多片上缓存分配给一级cache;设置GPU线程块大小,确定GPU线程块数目;在GPU上进行正射校正;校正完毕后将校正后影像从GPU全局存储器中拷贝回主机端内存。该方法针对海量光学卫星遥感影像,基于CPU和GPU协同处理理论,提出了一种可以满足近实时处理需求的快速正射校正方法。该方法在保证算法正确性的前提下,大幅提高了光学卫星遥感影像正射校正效率。
文档编号G06K9/32GK103020620SQ201210544790
公开日2013年4月3日 申请日期2012年12月14日 优先权日2012年12月14日
发明者王密, 方留杨, 李德仁, 龚健雅 申请人:武汉大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1