专利名称:一种基于gpu的遥感图像解压缩方法
技术领域:
本发明涉及一种基于GPU的遥感图像解压缩方法,主要用于对使用JPEG2000标准进行压缩后的码流进行高速的解码操作,提升现有基于CPU实现的JPEG2000图像解码算法的速度,属于图像处理技术领域。
背景技术:
随着国内外航天遥感技术的不断发展,遥感图像分辨率的不断提高,需要对高速卫星遥感图像解压缩方法进行研究,以适应不断提高的数据接收码速率要求。JPEG2000是JPEG工作组于2000年正式颁布的静止图像压缩编码的国际标准,具有卓越的图像压缩性能和很高的灵活性,被认为在各个领域有着广阔的应用前景。这些特性主要是来源于小波变换、比特平面编码和算术编码技术。JPEG2000的基本模块组成包括预处理、离散小波变换、量化、自适应算术编码(tierl编码)以及码流组织(tier 2编码) 五个模块,相应的JPEG2000解码算法由编码模块的逆过程组成。图像经过压缩后的码流实际上是一系列的标签记录及被标识的数据。tier2解码过程就是根据需要解出包内的信息, 得到tierl解码所需要的输入,即编码通道信息。然后通过tierl解码过程通过算术解码得到每个子带系数经过量化后得到的数据。在编码阶段,需要通过量化过程在不影响图像主观质量的前提下,减小量化系数的精度,把大量幅度范围较小的系数置为零,用最少的位数来表示量化后不为零的小波系数,以便达到最大的压缩比。所以,tierl解码之后的反量化过程就是量化的逆操作,由于每个子带的量化步长可能不同,因此需要独立对每个子带分别进行反量化操作。然后,在小波逆变换模块对高频和低频小波系数逐级进行重构,得到重构后的图像数据。最后在图像后处理过程中完成色彩空间的逆变换,并且通过反向DC位移调整输出数据的动态范围为原始图像的动态范围。以上就是JPEG2000解码的整个过程,其中包含大量数据的浮点运算和乘法运算。 传统的解码方法都是使用CPU进行单线程或简单多线程的处理方式,低度并行化处理数据,在现有的硬件环境下使用传统的基于CPU的算法实现难以满足对大量遥感数据进行实时解压缩的需求。因此,提高遥感图像的解压缩速度对于高分辨率遥感卫星数据的实时接收、处理,以及简化地面站系统的整体复杂度等方面,都起着至关重要的作用。
发明内容
本发明的目的在于提供了一种基于GPU的遥感图像解压缩方法。以提升现有基于 CPU的JPEG2000解压缩算法实现的速度。本发明的技术解决方案是一种基于GPU的遥感图像解压缩方法,其特征在于步骤1 :CPU对GPU进行初始化;步骤2 =CPU读取图像压缩码流;所述图像压缩码流由图像经JPEG2000压缩后产生;
3
步骤3 =CPU对图像压缩码流先后进行tier2解码和tierl解码;产生解码数据;步骤4 =CPU根据解码数据的大小为GPU分配输入显存和输出显存;并将解码数据拷贝到输入显存;步骤5 =GPU读取输入现存中的解码数据,并调用GPU内核函数对解码数据进行解压缩处理产生图像数据并拷贝到输出显存中;所述解压缩处理包括反量化、小波逆变换和后处理;步骤6 :CPU将输出显存中的图像数据拷贝到内存中,并释放输入显存和输出显存。所述步骤2中GPU内核函数对解码数据进行处理时需要预先设定block的数量η 为解码数据中每行像素个数与block中最大处理线程数之比;所述block为GPU中的线程块单元。所述步骤2中GPU内核函数对解码数据进行处理时以边界延拓的方式读取到共享存储器中,所述共享存储器为可以被同一 block中所有线程访问的可读写存储器。此外,采用本方法还可对多幅图像同时进行处理,CPU和GPU分别对应进行上述操作,CPU在完成对一幅图像的tier2解码和tierl解码,可按照上述步骤让GPU对该幅图像继续进行解压缩处理,同时CPU可在GPU的处理时间内对下一幅图像进行tier2解码和 tierl解码,而GPU则以同样流程进行工作。GPU与GPU的交替,实现了对多幅图像的同时处理。本发明与现有技术相比具有如下优点(1)本发明使用了 CPU和GPU协作处理的技术来进行遥感图像解压缩,在GPU中使用CUDA对原始JPEG2000算法中的反量化、小波逆变换和图像后处理三个模块进行并行化实现,与现有技术中仅采用CPU对JPEG2000图像解压缩处理的相比,处理速度有了 2 3倍的提升。(2)本发明在利用GPU对解码数据进行处理时,可根据不同大小的图像数据自适应调节所需资源的大小,可实现对多种具有不同分辨率图像的兼容处理。并且,采用了边界延拓的方式从输入显存中读取数据,保证了采用多个block处理图像时的精度。(3)本发明还实现了 CPU和GPU的并行流水设计,有效隐藏了主机与显存之间的数据传输,充分发挥了 CPU和GPU的效能,隐藏了存储器访问的延迟,进一步提高了图像解压缩的速度。
图1为CPU+GPU异构解压缩处理图;图2为GPU内核函数调用流程图;图3为CPU+GPU并行流水线处理图;图4为本发明流程图。
具体实施例方式在传统的JPEG2000算法实现基础上,采用GPU协同CPU进行处理,提供一种基于 GPU的遥感图像解压缩的方法。
具体设计过程包括GPU+CPU异构解压缩设计;基于CUDA (Compute UnifiedDevice Architecture,统一计算设备架构)的算法并行处理设计;图像解压缩程序的并行流水线处理设计。1、GPU+CPU异构解压缩设计考虑到JPEG2000标准中规定的编解码模块的通用性和可扩展性,在优化时保留其算法的完整性,采用JEPG2000标准中PARTl的主体部分的要求,用CPU实现JPEG2000 解压缩处理中的解码处理,用GPU实现对JPEG2000解压缩处理中的并行化处理,从而构成 GPU+CPU协同处理的异构模式,这样的设计方案可以满足在软件层面快速对图像进行解压缩的要求。JPEG2000的核心解压缩系统主要包含如下几个模块tier2解码,tierl解码,反量化,小波逆变换以及图像后处理。其中,①tier2解码模块包含大量控制指令的处理操作,实现大量数据并行计算的可行性差,可以通过多线程同时寻找多个包头的信息,在CPU 上完成处理。②对于tierl解码模块,虽然解码的各码块之间的操作可以并行处理,但是码块内部不存在大量的数据并行,所以也不适合使用GPU进行优化。③图像反量化对图像进行象素级操作,并且对每个子带独立操作,所以可以利用GPU进行并行计算。④小波逆变换模块存在大量的数据运算过程,并且数据之间存在很少的相关性。在小波逆变换提升算法中,每行数据的计算仅与上一行有关,且包含大量的乘法运算,非常适用GPU并行处理。而且由于小波逆变换所需时间开销占在整个JPEG2000解压缩算法时间比重最大,在优化后能够使整个解压缩实现的速度得到一倍以上的提升。⑤图像后处理模块是对单个像素点独立进行计算的,整个过程需要很少的指令干预,并且图像的每个分量具有相同的比特深度和相同的维数,数据并行度高,因此使用GPU进行优化也是可行的。综上所述,最适于做GPU并行化改进的模块是反量化模块、小波逆变换模块和图像后处理模块,其余模块使用CPU处理,其GPU+CPU异构解压缩方案如图1所示。2、基于CUDA的算法并行处理设计根据上述GPU+CPU异构解压缩设计,本发明采用GPU作为并行处理平台,使用CUDA 对JPEG2000解压缩算法的反量化模块、小波逆变换模块和图像后处理模块进行并行化实现。CUDA是一种将GPU作为数据并行计算设备的软硬件体系,将CPU作为主机,将GPU作为协处理器,CPU与GPU协同工作。CUDA采用了便于理解和掌握的扩展C语言进行开发,为有效利用GPU的性能提供了方便。在整个解压缩算法中,小波逆变换模块的计算最为复杂,移植过程中涉及到的问题涵盖了另外两个模块,所以下面详细介绍小波逆变换模块的移植方案。在9/7小波逆变换的提升算法中,小波逆变换的每一级一维变换需要对每一个具体的像素点进行4步提升运算及2步规整化乘运算,每一行图像数据的计算都仅与上一行有关,且每一行图像相邻两个像素的计算没有相关性,因此可以对每一行的图像像素进行分组计算。在具体实现中,解压缩主程序由标准C++代码完成,运行在CPU主机端;小波逆变换模块使用CUDA完成,运行在GPU协处理器上,其表现形式为可以在GPU上并行执行的内核函数。整个程序由CPU主机端的串行处理和一系列在GPU上并行执行的内核函数共同组成。其中,CPU串行代码完成内核函数启动前的数据准备和设备初始化工作,并且启动内核函数进行工作。如图2所示,GPU以网格(grid)的形式组织,每个网格又分为若干个线程块 (block),而每个线程块又由若干个线程(thread)组成。GPU中的内核函数以block为单位进行执行。因为耗时最长的小波逆变换的计算可以分组进行,故将输入编码数据以固定长度分组(每组长度可定义为k),放在一个block中,并调用每个block中的线程进行处理, 每个block拥有一块高速的共享存储器用于存储中间结果,同一个block中的线程可共享同一个共享存储器中的数据,在grid中所有线程都可以访问同一块相对速度较慢的全局存储器。在GPU的存储器分配过程中,为了提高速度,在GPU内核函数中分利用共享存储器,同时在CPU主机端使用页锁定内存,保证数据始终存在于物理内存中,并能通过DMA加速与GPU端的通信。此外GPU内核函数对在对一个像素进行处理的过程中,会用到其相邻的像素。在对读入block中的边界像素(首尾像素)进行处理时,由于首尾像素不存在相邻像素,因此,会产生较大的处理误差。为解决此问题,GPU内核函数以边界延拓的方式将输入显存中的解码数据读取到共享存储器中,以保证首尾像素处理结果的精确度。如图4所示,为本发明流程图,CPU主机端与GPU协处理器端主要执行步骤如下1) CPU读取由图像经JPEG2000压缩后产生的图像压缩码流;2) CPU对图像压缩码流进行tier2解码和tierl解码;:3)CPU为GPU分配输入显存和输出显存,并将解码数据拷贝到输入显存中;4) GPU从输入显存将解码数据读取到GPU的共享存储器;5)对解码数据进行反量化、小波逆变换和后处理;6)并将处理后获得的图像数据拷贝到输出显存中;7) CPU从输出显存中获得图像数据并存储到内存中,同时GPU释放输入和输出显存。3、图像解压缩的并行流水线处理存储器带宽是计算机性能得瓶颈之一,通常GPU处理器的计算能力要远远超过内存访问的带宽。在GPU程序运行时,只有当访问显存结束,数据被准备好之后,运算指令才会被执行。所以,如果显存需要与主机端频繁交换数据,就会产生较多的延时,从而成为影响程序性能的瓶颈。本发明采用了流水线并行执行的处理的方式,如图3所示,具体实施步骤如下1)在GPU代码对第i幅图像进行反量化、小波逆变换和后处理的计算时,CPU代码对第i+1幅图像进行tier2和tierl模块的处理;2)在GPU对第i+Ι幅图像进行计算时,CPU可以并行处理第i+2幅图像,并且完成第i幅图像的码流输出。图3中的数据交换即是指CPU将解码数据拷贝到输入显存以及将图像数据从输出显存拷贝到内存中的处理步骤。该设计实现了 GPU与CPU的并行执行,一个流的传输与另一个流的执行同时进行从而隐藏了主机与显存之间数据传输的时间,大大提高了 CPU和GPU的计算效率。
本发明未详细说明部分属本领域技术人员公知常识。
权利要求
1.一种基于GPU的遥感图像解压缩方法,其特征在于包括以下步骤 步骤1 :CPU对GPU进行初始化;步骤2 =CPU读取图像压缩码流;所述图像压缩码流由图像经JPEG2000压缩后产生; 步骤3 =CPU对图像压缩码流先后进行t ier2解码和t ierl解码;产生解码数据; 步骤4 =CPU根据解码数据的大小为GPU分配输入显存和输出显存;并将解码数据拷贝到输入显存;步骤5 =GPU读取输入现存中的解码数据,并调用GPU内核函数对解码数据进行解压缩处理产生图像数据并拷贝到输出显存中;所述解压缩处理包括反量化、小波逆变换和后处理;步骤6 :CPU将输出显存中的图像数据拷贝到内存中,并释放输入显存和输出显存。
2.根据权利要求1所述的一种基于GPU的遥感图像解压缩方法,其特征在于所述步骤2中GPU内核函数对解码数据进行处理时需要预先设定block的数量η为解码数据中每行像素个数与block中最大处理线程数之比;所述block为GPU中的线程块单元。
3.根据权利要求1或2所述的一种基于GPU的遥感图像解压缩方法,其特征在于所述步骤2中GPU内核函数对解码数据进行处理时以边界延拓的方式读取到共享存储器中, 所述共享存储器为可以被同一 block中所有线程访问的可读写存储器。
4.根据权利要求1或2所述的一种基于GPU的遥感图像解压缩方法,其特征在于可对多个图像压缩码流进行处理,在CPU对GPU进行初始化后的具体步骤为步骤41 :CPU顺序读取每个图像压缩码流;步骤42 =CPU对每个图像压缩码流先后进行tier2解码和tierl解码;产生解码数据; 步骤43 =CPU根据解码数据的大小为GPU分配输入显存和输出显存;并将解码数据拷贝到输入显存;转入步骤44的同时返回步骤41 ;步骤44 :GPU读取输入现存中的解码数据,并调用GPU内核函数对解码数据进行解压缩处理产生图像数据并拷贝到输出显存中;所述解压缩处理包括反量化、小波逆变换和后处理;步骤45 :CPU将输出显存中的图像数据拷贝到内存中,并释放输入显存和输出显存。
5.根据权利要求3所述的一种基于GPU的遥感图像解压缩方法,其特征在于可对多个图像压缩码流进行处理,在CPU对GPU进行初始化后的具体步骤为步骤41 :CPU顺序读取每个图像压缩码流;步骤42 =CPU对每个图像压缩码流先后进行tier2解码和tierl解码;产生解码数据; 步骤43 :CPU根据解码数据的大小为GPU分配输入显存和输出显存;并将解码数据拷贝到输入显存;转入步骤44的同时返回步骤41 ;步骤44 :GPU读取输入现存中的解码数据,并调用GPU内核函数对解码数据进行解压缩处理产生图像数据并拷贝到输出显存中;所述解压缩处理包括反量化、小波逆变换和后处理;步骤45 :CPU将输出显存中的图像数据拷贝到内存中,并释放输入显存和输出显存。
全文摘要
一种基于GPU的遥感图像解压缩方法,对JPEG2000图像采用CPU和GPU的异构解压缩处理,利用CPU对图像压缩码流而利用GPU对译码后的解码数据进行解压缩处理。本发明充分发挥了CPU和GPU的效能,使得对图像解压缩处理的速度有了2~3倍的提升。
文档编号H04N7/26GK102158694SQ201010575499
公开日2011年8月17日 申请日期2010年12月1日 优先权日2010年12月1日
发明者余瑾, 卢睿, 姜河, 张拯宁, 战勇杰, 朱翔宇, 高越 申请人:航天恒星科技有限公司