一种用gpu通过分块实现快速小波变换的方法

文档序号:6399588阅读:307来源:国知局
专利名称:一种用gpu通过分块实现快速小波变换的方法
技术领域
本发明涉及通信技术领域,更进一步涉及数字图像处理技术领域中一种用图形处理单元(Graphics Processing Unit GPU)通过分块实现快速小波变换的方法。本发明可用于各种图像压缩标准的实现,解决了小波变换速度慢的瓶颈,提供了一种在通用计算机上进行高速图像压缩编码的解决方案,也可用于各种其他数字设备的图像压缩编码。
背景技术
离散小波变换是数字图像处理领域最广泛使用的技术之一。联合图像专家组推出的JPEG2000图像压缩标准和太空数据系统咨询委员会推出的CCSDS图像压缩标准都使用了基于提升的离散小波变换。基于这些算法的图像压缩系统出现在学术、科研以及工业等领域,而研究这些算法的高效实现一直是各领域面临的重要任务之一。现场可编程门阵列FPGA、复杂可编程逻辑器件CPLD、特定用途集成电路ASIC都已经被用于实现高效的小波变换。这些硬件实现具有速度高,专用性强、功耗低等优点,可应用于各种便携式设备;但是它们的开发周期长,成本较高,在传统计算机领域,为了实现更为高效的小波变换,人们已开始研究使用图形处理单元加速的小波变换算法。西安电子科技大学拥有的专利技术“一种用GPU实现快速小波变换的方法”(专利申请号:201010204236,公开号:101866493A)中阐述了一种基于行和列的小波变换快速实现的方法。该专利技术通过行列转置的方法,克服了图像每列数据存取效率低下的问题,从而提高了列变换的速度。但是,该专利技术仍然存在的不足是,列变换通过两次行列转置和一次行变换实现,数据要反复地与全局内存交互。然而,在图形处理单元GPU高度并行计算的环境下,对全局内存中的数据进行读写是非常昂贵的,因此限制了该方法所能达到的最佳性能。

发明内容
本发明的目的在于克服上述已有技术的不足,提出一种用GPU通过分块实现快速小波变换的方法。本发明通过将图像分块并存入共享内存中,实现高速的数据存取。为了保证结果的正确性,本发明将每个图像块按其周围实际像素进行了扩展。本发明确保每个图像块的行变换与列变换都在共享内存中完成,避免数据在变换过程中与全局内存的交互。为了实现上述目的,本发明的方法包括如下步骤:(I)拷贝原始图像:在图形处理单元GPU中分配两块全局内存A和B,将原始图像拷贝到全局内存A中;(2)数据分块:将原始图像按照二维网格的方式分成宽24像素、高24像素的图像块;(3)数据扩展:将每个图像块向其四周方向各延伸四个像素,处于边缘不能延伸的,则进行对称扩展,得到扩展图像块;(4)拷贝数据到共享内存:4a)在图形处理单元GPU中分配与扩展图像块个数相同的block,每个block对应一个扩展图像块;4b)为每个block分配大小为33乘32的共享内存以及32乘32个线程;4c)将每个扩展图像块拷贝到与其对应的block的共享内存中,每个线程完成一个像素点的拷贝,并将共享内存中每一行的最后一个存储空间保留不用;(5)行变换:对于每个block,使用其中的32个线程对共享内存中的数据进行行变换,每个线程完成扩展像素块的一行数据的变换;(6)列变换:对于每个block,使用其中的32个线程对共享内存中的数据进行列变换,每个线程完成扩展像素块的一列数据的变换;(7)取消数据扩展:对于每个block,将变换后的扩展图像块上下各四行、左右各四列的数据排除,得到一个24乘24的数据块;(8)拷贝数据块:8a)将每个block的数据块拷贝到全局内存B中,拷贝的过程中进行尺度变换;Sb)待所有的block拷贝完成后,将全局内存B中的数据拷贝至主机内存中,释放图形处理单元GPU中的两块全局内存A和B。本发明与现有技术相比较,具有如下优点:第一,由于本发明采用了重叠的扩展图像块来对原始图像进行分别处理,克服了现有技术简单地对图像分块导致的结果不精确的问题,使得本发明可以保证小波变换结果的准确性。第二,由于本发明在图形处理单元GPU的高速共享内存中处理扩展图像块,使得每个图像块的数据都具有了更高的存取速度。第三,由于本发明中行变换和列变换都在共享内存中进行,有效地避免了现有技术将行变换后的数据送回全局内存的操作,节省了处理时间。第四,由于本发明采用了扩展图像块与扩展图像块之间、每个扩展图像块内部各个像素之间的并行处理,因此可以达到更快的处理速度。第五,由于本发明将数据的对称扩展过程隐藏在数据的拷贝过程中,从而避免了大部分线程等待某个线程进行对称扩展操作的情况。


图1为本发明的流程图。
具体实施例方式本发明米用计算统一设备架构(ComputeUnified Device Architecture CUDA)语言,可以在NVIDIA的任何一款支持计算统一设备架构CUDA的图形处理单元GPU设备上实现。参照图1,本发明可通过以下步骤实现:步骤1,在图形处理单元GPU中分配两段全局内存用于存放原始图像和变换后的小波系数,分别记为A,B,将原始图像拷贝到内存区域A中。在图形处理单元GPU中分配全局内存使用计算统一设备架构CUDA语言提供的函数cudaMall0c2D实现;数据从计算机主机内存到图形处理单元GPU全局内存的拷贝使用计算统一设备架构CUDA语言提供的函数cudaMemcpy2D 来实现。步骤2,将原始图像按照二维网格的方式分成宽度为24像素,高度为24像素的图像块。根据原始图像的宽度和高度,可以通过下式计算出宽度方向上图像块的个数和高度方向上图像块的个数,进而计算出总的像素块的个数:
权利要求
1.一种用GPU通过分块实现快速小波变换的方法,包括如下步骤: (1)拷贝原始图像: 在图形处理单元GPU中分配两块全局内存A和B,将原始图像拷贝到全局内存A中; (2)数据分块: 将原始图像按照二维网格的方式分成宽24像素、高24像素的图像块; (3)数据扩展: 将每个图像块向其四周方向各延伸四个像素,处于边缘不能延伸的,则进行对称扩展,得到扩展图像块; (4)拷贝数据到共享内存: 4a)在图形处理单兀GPU中分配与扩展图像块个数相同的block,每个block对应一个扩展图像块; 4b)为每个block分配大小为33乘32的共享内存以及32乘32个线程; 4c)将每个扩展图像块拷贝到与其对应的block的共享内存中,每个线程完成一个像素点的拷贝,并将共孚内存中每一行的最后一个存储空间保留不用; (5)行变换: 对于每个block,使用其中的32个线程对共享内存中的数据进行行变换,每个线程完成扩展像素块的一行 数据的变换; (6)列变换: 对于每个block,使用其中的32个线程对共享内存中的数据进行列变换,每个线程完成扩展像素块的一列数据的变换; (7)取消数据扩展: 对于每个block,将变换后的扩展图像块上下各四行、左右各四列的数据排除,得到一个24乘24的数据块; (8)拷贝数据块: 8a)将每个block的数据块拷贝到全局内存B中,拷贝的过程中进行尺度变换; Sb)待所有的block拷贝完成后,将全局内存B中的数据拷贝至主机内存中,释放图形处理单元GPU中的两块全局内存A和B。
2.根据权利要求1所述的一种用GPU通过分块实现快速小波变换的方法,其特征在于:步骤(2)中所述数据分块在图像宽度或高度不满足24整数倍数的情况下,对图像最右方或最下方的不足24乘24的图像块进行对称扩展,使其成为24乘24的图像块。
3.根据权利要求1所述的一种用GPU通过分块实现快速小波变换的方法,其特征在于:步骤(5)中所述的行变换是指,在行变换过程中每行数据只进行提升操作,不进行尺度变换,不进行对称扩展。
4.根据权利要求1所述的一种用GPU通过分块实现快速小波变换的方法,其特征在于:步骤¢)中所述的列变换是指,在列变换过程中每列数据只进行提升操作,不进行尺度变换,不进行对称扩展。
全文摘要
本发明公开了一种用GPU通过分块实现快速小波变换的方法,主要解决了现有技术小波变换速度慢的问题。本发明针对图形处理单元GPU的并行计算架构的特点,设计了一种将数据分块并行处理的方法,包括拷贝原始图像、数据分块、数据扩展、拷贝数据到共享内存、行变换、列变换、取消数据扩展、拷贝变换后数据到主机内存的步骤。本发明通过将分块数据扩展来保证小波变换结果的准确性;通过在共享内存中进行变换提高数据的访问速度,避免了数据与全局内存的交互;通过图像块与图像块的并行、图像块分部各像素点之间的并行提高了整幅图像的处理速度。
文档编号G06T1/20GK103198451SQ20131005524
公开日2013年7月10日 申请日期2013年1月31日 优先权日2013年1月31日
发明者李云松, 宋长贺, 雷杰, 刘凯, 郭杰, 王柯俨, 张静, 吴宪云 申请人:西安电子科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1