CN104185030A - 基于gpu的jpeg2000图像解压缩实现方法 - Google Patents
基于gpu的jpeg2000图像解压缩实现方法 Download PDFInfo
- Publication number
- CN104185030A CN104185030A CN201410453379.1A CN201410453379A CN104185030A CN 104185030 A CN104185030 A CN 104185030A CN 201410453379 A CN201410453379 A CN 201410453379A CN 104185030 A CN104185030 A CN 104185030A
- Authority
- CN
- China
- Prior art keywords
- image
- thread
- thread block
- code stream
- gpu
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Abstract
本发明公开了一种基于GPU的JPEG2000图像解压缩实现方法,克服了现有技术中中央处理器CPU并行度不高,且在计算能力和存储带宽上有明显劣势,导致该方法解压缩速度不高的缺点,实现步骤为:(1)第二级Tier-2解码;(2)第一级Tier-1解码;(3)反量化;(4)小波反变换;(5)电平反位移。采用图形处理器GPU对JPEG2000图像进行解压缩,明显的提高了图像解压缩并行度和解压缩速度。
Description
技术领域
本发明属于图像处理技术领域,更进一步涉及对图像解压缩处理技术领域中的一种基于图形处理器(Graphic Processing Unit GPU)的基于小波变换的图像压缩标准(Joint Photographic Experts Group JPEG2000)的并行图像解压缩系统的实现方法。本发明可用于对空间图像的并行高速解压缩。
背景技术
基于小波变换的图像压缩标准(Joint Photographic Experts GroupJPEG2000)算法具有很高的复杂度,利用传统的中央处理器(Central ProcessingUnit CPU)CPU对压缩图像进行软件解压缩时,要实现实时解压缩芯片输出码流需要非常先进的硬件支持,同时需要复杂的解压缩系统设计。图形处理器GPU在计算能力和存储带宽上相对传统的中央处理器(Central Processing Unit CPU)有明显优势,相对比较容易进行并行程序的实现,较适合图像解压缩。
东软集团股份有限公司的专利申请“一种图像压缩和解压缩的方法和装置”(公开号:CN103139567A,申请号:2013100319031,申请日:2013年1月28日)中公开了一种图像压缩方法及其相应的图像解压缩方法。该方法包括多轮压缩循环。在每轮压缩循环中,首先在图像的n个像素行中确定当前未压缩像素数最大且行号最小的像素行并记录该像素行的首个未压缩像素P的像素值。然后,分别确定并记录像素P所在像素行及其后续像素行中从当前首个未压缩像素算起连续排列的与像素P有相同像素值的当前未压缩像素的数目N。其中,当在某个所述后续像素行中判断为从该像素行获得的所述像素数N=0,或者当某个所述后续像素行为末像素行时,本轮压缩循环结束。该专利申请的解压缩方法是上述压缩方法的逆过程。该专利申请存在的不足是,在多轮解压缩循环中,需要对像素点做大量计算操作,由于整个过程使用了传统的中央处理器CPU进行处理,而中央处理器CPU并行度不高,且在计算能力和存储带宽上有明显劣势,导致该方法解压缩速度不高。
西门子公司的专利申请“图像的压缩、解压缩方法、装置及系统”(公开号:CN102082950A,申请号:200910246231X,申请日:2009年11月30日)中公开了一种图像的压缩方法和解压缩方法。该压缩方法包括:对原始图像进行支持向量回归处理,所述原始图像的像素的坐标值为输入样本,像素的灰度值为监督信号,得到支持向量;根据所述支持向量计算回归图像;根据所述原始图像和回归图像计算残差图像;对所述支持向量和所述残差图像编码。该专利申请的解压缩方法是上述压缩方法的逆过程。该专利申请存在的不足是,完成整个图像解压缩过程需要非常先进的硬件支持。
发明内容
本发明的目的在于针对利用传统的中央处理器(Central Processing UnitCPU)对基于小波变换的图像压缩标准(Joint Photographic Experts GroupJPEG2000)的图像进行软件解压缩时,需要非常先进的硬件支持和复杂的解码系统设计、且解压缩速度较低的缺点,提出一种基于图形处理器(Graphic Processing Unit GPU)的高速图像解压缩系统。
本发明的思路是,首先对输入码流数据进行第二级Tier-2解码,再进行第一级Tier-1解码,然后对解码后的数据进行反量化和小波反变换,最后对小波反变换后的数据进行直流电平反位移,得到解压缩后的图像。
本发明的实现的具体步骤如下:
(1)第二级Tier-2解码:
(1a)将待处理的由用户设定的需要并行解压缩的图像数量的图像码流数据,从内存复制到显存;
(1b)采用一个线程块处理一幅图像的码流、多个线程块处理多幅图像的码流的方法,对码流头部数据解析;
(1c)采用一个线程块处理一幅图像、多个线程块处理多幅图像的方法,解图像码流包头;
(1d)在线程块内部启动多个线程,每个线程将同一层解码后的图像码流在显存中按照先后顺序重新拼接;
(2)第一级Tier-1解码:
(2a)将线程网格维度设置为二维,线程网格的大小为8×m,其中m表示由用户设定的需要并行解压缩的图像数量,将每个线程块拥有的线程数设置为256,得到设置好的线程网格和线程块;
(2b)用设置好的线程块,对图像码流并行解码;
(3)反量化:
(3a)将每个线程块拥有的线程数设置为256,用线程块中的不同线程分别对图像中的不同点做反量化;
(4)小波反变换:
(4a)将图像划分成32×32的图像子块,采用32个线程从图形处理器GPU中的全局存储器中并行读取一行图像数据,将读取的该行图像数据拷贝到图形处理器GPU中的共享存储器对应的行中;
(4b)用不同线程块分别对不同图像子块做矩阵转置;
(4c)对矩阵转置后的数据做行处理,得到小波反变换的高频分量和低频分量;
(4d)采用步骤(4a)的方法,将高频分量和低频分量数据从共享存储器拷贝到全局存储器;
(5)电平反位移:
(5a)每个线程将全局存储器中的值拷贝给寄存器,在寄存器上进行直流电平反位移,将直流电平反位移后的值存储在全局存储器中;
(5b)将全局存储器中的数据从图形处理器GPU拷贝到中央处理器CPU。
与现有技术相比,本发明具有以下优点:
第一,本发明采用线程之间并行,线程块之间并行的方法,克服了现有技术中采用中央处理器CPU并行度不高的缺点,使得本发明能够同时处理多幅图像,提高了图像的解压缩并行度。
第二,本发明采用一个线程块处理一幅图像的码流、多个线程块处理多幅图像的码流的方法,克服了现有技术中采用中央处理器CPU在计算能力和存储带宽上具有明显劣势,导致解压缩速度不高的缺点,使得本发明提高了图像解压缩速度。
第三,本发明通过GPU来实现JPEG2000图像高速并行解压缩,克服了现有技术中图像解压缩需要非常先进的硬件支持的缺点,使得本发明在装有GPU显卡的计算机上即可实现图像高速解压缩,不需要先进的硬件支持。
附图说明
图1是本发明的流程图。
具体实施方法
下面结合附图对本发明做进一步描述。
参照附图1,本发明的具体步骤如下:
步骤1,第二级Tier-2解码。
将待处理的由用户设定的需要并行解压缩的图像数量的图像码流数据,从内存复制到显存。
采用一个线程块处理一幅图像的码流、多个线程块处理多幅图像的码流的方法,对码流头部数据解析,解主码流头main header部分,主码流头main header部分包含原始图像的压缩参数,线程块按照前后顺序从码流中读取比特信息。
采用一个线程块处理一幅图像、多个线程块处理多幅图像的方法,进行图像间的并行,解图像码流包头,根据上一部分解主码流头main header部分得到的图像尺寸、小波级数和码块大小等信息,进行零比特平面解码、截取pass数目解码和码流长度解码。
在全局存储器里为每个码块分配一块显存来存放重新组合后的码流,采用一个线程块处理一幅图像、多个线程块处理多幅图像的方法,在线程块内部启动多个线程,每个线程将同一层解码后的图像码块在显存中按照先后顺序重新拼接,按照上一步解出的码流长度信息来完成码流的搬移。
步骤2,第一级Tier-1解码。
将线程网格维度设置为二维,线程网格的大小为8×m,其中m表示由用户设定的需要并行解压缩的图像数量,将每个线程块拥有的线程数设置为256,每个线程单独负责一个码块的解码,得到设置好的线程网格和线程块。用纵坐标为0,线程块横坐标从0至7的8个线程块并行解码第一幅图像的各个码块,用线程块纵坐标为1,线程块横坐标为0从0至7的8个线程块并行解码第二幅图像的各个码块,依次类推。在图像之间以及图像内部码块之间做并行解码。
所述的解码是指采用比特平面解码方法。
步骤3,反量化。
将每个线程块拥有的线程数设置为256,用线程块中的不同线程分别对图像中的不同点做反量化,在反量化时,不同的子带采用不同的操作数,对每个点采用的运算都一样,并行进行反量化操作。用一个核函数kernel处理一幅图像,在每个核函数kernel中有多个线程块,每个线程块负责处理一行或几行,每个线程块中256个线程,线程块中的每个线程负责处理一个点或几个点。
步骤4,小波反变换。
将图像划分成32×32的图像子块,每个线程块负责一个小块的转置,需要使用小于10KB大小的共享存储器,每个SM上可以有4个活动线程块。在线程块内采用32*8的二维结构。采用32个线程从图形处理器GPU中的全局存储器中并行读取一行图像数据,拷贝在图形处理器GPU中的共享存储器对应的行中。
用不同线程块分别对不同图像子块做矩阵转置。
对矩阵转置后的数据做行处理得到小波反变换的高频分量和低频分量。所述的行处理是指预测的逆过程和更新的逆过程,预测是用分裂的偶数序列预测奇数序列,得到的预测误差为变换的高频分量;更新是由预测误差来更新偶数序列,得到变换的低频分量。
将图像划分成32×32的图像子块,采用32个线程从图形处理器GPU中的全局存储器中并行读取一行图像数据,将高频分量和低频分量数据从共享存储器拷贝到全局存储器,用线程纵坐标为0且线程横坐标从0到31的32个线程读取第1行的数据,并放在共享存储器的第1行,用线程纵坐标为1且线程横坐标从0到31的32个线程读取第2行数据,并放在共享存储器的第2行,依次类推,循环4次完成32行数据的拷贝。进行一次线程同步,保证每个线程都完成自己的任务。
步骤5,电平反位移。
每个线程将全局存储器中的值拷贝给寄存器,在寄存器上进行直流电平反位移,对每个像素点的处理都是一样的,并行处理每个像素点。一个线程网格有多个线程块,每个线程块处理一行,每个线程块中有多个线程,每个线程先把自己处理的像素点值赋给寄存器,然后利用寄存器进行各项运算,最后再把寄存器的值存储在全局存储器中。
将全局存储器中的数据从图形处理器GPU拷贝到中央处理器CPU,中央处理器CPU将恢复数据存盘。
下面结合对GPU解压缩时间和解压缩速度的测试结果,对本发明的效果做进一步描述。
本发明的测试实验采用由28幅大小为1024×1024,比特深度为8bit、12bit、16bit的图像在无损压缩、二倍压缩、四倍压缩下的压缩码流,包括三步测试:
第一步,测试图像解压缩各模块占用的GPU时间。
获得的测试结果如下表所示:
图像解压缩各模块占用的GPU时间表
上表中Total指的是CPU向GPU拷贝码流和GPU向CPU拷贝恢复后的图像数据以及GPU解码的时间总和。解码速度(M像素点/s)指的是用28幅图像总的像素点除以Total的时间,反映的是像素点的吞吐率;解码速度(MB/s)指的是用28幅图像码流的大小除以Total的时间,反映的是压缩码流的吞吐率。从表格tier2所用时间可以看出:8bit无损压缩码流跟8bit二倍压缩码流大小相差不多,tier2所占时间也基本一样;8bit二倍压缩码流是8bit四倍压缩码流的2倍,tier2所占时间多了3ms;16bit无损压缩码流是8bit无损压缩码流的2倍,tier2所占时间增加5ms;由此反映出tier2所占时间跟小波类型、压缩倍数和比特精度关系都不大。从表格tier1所用时间可以看出,tier1所用时间随码流大小的变化而变化,码流越大,tier1所用时间越多。从表格第五列可以看出,不论是8bit、12bit还是16bit,同时不论压缩倍数是二倍还是四倍,采用有损小波变换,反量化加小波变换加电平位移所占用的时间都是113ms,采用53小波变换,时间都是73ms;因此反量化加小波变换加电平位移所占用的时间跟比特精度和压缩倍数都没有关系,跟小波变换类型有关系。这是因为53无损压缩没有反量化,在小波提升结构中需要一次列变换和一次行变换,而97有损压缩需要反量化,在小波提升结构中需要两次列变换和两次行变换,97有损需要的时间就比53无损需要的时间多。对比各模块在总时间中的占用比,我们可以发现,tier1所占比重最大,达到了70%以上。
从每秒解多少像素点来反映解码速度,可以看出用该方法解压缩时,压缩倍数越高,解码速度越快;比特精度越小,解码速度越高。这是因为同样宽度和高度的图像,压缩倍数小和比特精度大,都会造成压缩码流大,压缩码流大所需的解码时间就长,解码速度就比较低。从每秒解多少字节的压缩码流来反映解码速度,可以看出对于同样宽度和高度的图像,压缩倍数小和比特精度高,码流吞吐率高,这是因为压缩码流小和比特精度高导致码流增加,但是解码时间并没有增加相应的倍数,如8bit无损压缩码流大小为27.2MB,解码时间为974.54ms,16bit无损压缩码流大小为59.6MB,解码时间为1501.55ms,16bit无损压缩码流是8bit无损压缩码流的2.19倍,而16bit无损压缩解码时间只是8bit无损解码时间的1.54倍,因此解16bit无损压缩码流的码流吞吐率要高一些。
第二步,测试Tier2模块中各子模块占用时间。
获得的测试结果如下表所示。从下表可以看出,各个子模块占用时间中,解包头子模块占了Tier2模块的大部分时间,达到80%以上。解包头主要是对各子带的码块进行零比特平面解码、截取pass数目解码和码流长度解码,占用时间主要跟码块数量有关,而码块数量只跟图像宽度和高度有关。因此Tier2解码总时间跟图像的宽度和高度有关。
Tier2模块中各子模块占用时间表
第三步,测试基于GPU的解码速度与基于CPU的解码速度的比较。
采用本发明测试由28幅大小为1024×1024,比特深度为8bit、12bit、16bit的图像在无损压缩、二倍压缩、四倍压缩下的压缩码流。获得的测试结果如下表所示:
基于GPU的解码速度与基于CPU的解码速度的比较表
单位(M像素点/s) | 用GPU的解码速度 | 用CPU的解码速度 |
8bit图像无损压缩 | 23.41 | 3.042565 |
8bit图像二倍压缩 | 23.44 | 0.929688 |
8bit图像四倍压缩 | 29.01 | 1.051193 |
12bit图像无损压缩 | 16.02 | 1.850207 |
12bit图像二倍压缩 | 19.26 | 0.849113 |
12bit图像四倍压缩 | 22.81 | 0.981422 |
16bit图像无损压缩 | 14.77 | 1.542853 |
16bit图像二倍压缩 | 17.74 | 0.847127 |
16bit图像四倍压缩 | 19.83 | 0.931862 |
由上表可以看出,对于8bit,12bit和16bit的图像,在比特深度相同时,采用基于GPU的JPEG2000图像解压缩实现方法的解压缩速度比用基于GPU的JPEG2000图像解压缩实现方法的解压缩速度有了大幅度提高。
Claims (3)
1.一种基于GPU的JPEG2000图像解压缩实现方法,包括如下步骤:
(1)第二级Tier-2解码:
(1a)将待处理的由用户设定的需要并行解压缩的图像数量的图像码流数据,从内存复制到显存;
(1b)采用一个线程块处理一幅图像的码流、多个线程块处理多幅图像的码流的方法,对码流头部数据解析;
(1c)采用一个线程块处理一幅图像、多个线程块处理多幅图像的方法,解图像码流包头;
(1d)在线程块内部启动多个线程,每个线程将同一层解码后的图像码流在显存中按照先后顺序重新拼接;
(2)第一级Tier-1解码:
(2a)将线程网格维度设置为二维,线程网格的大小为8×m,其中m表示由用户设定的需要并行解压缩的图像数量,将每个线程块拥有的线程数设置为256,得到设置好的线程网格和线程块;
(2b)用设置好的线程块,对图像码流并行解码;
(3)反量化:
(3a)将每个线程块拥有的线程数设置为256,用线程块中的不同线程分别对图像中的不同点做反量化;
(4)小波反变换:
(4a)将图像划分成32×32的图像子块,采用32个线程从图形处理器GPU中的全局存储器中并行读取一行图像数据,将读取的该行图像数据拷贝到图形处理器GPU中的共享存储器对应的行中;
(4b)用不同线程块分别对不同图像子块做矩阵转置;
(4c)对矩阵转置后的数据做行处理,得到小波反变换的高频分量和低频分量;
(4d)采用步骤(4a)的方法,将高频分量和低频分量数据从共享存储器拷贝到全局存储器;
(5)电平反位移:
(5a)每个线程将全局存储器中的值拷贝给寄存器,在寄存器上进行直流电平反位移,将直流电平反位移后的值存储在全局存储器中;
(5b)将全局存储器中的数据从图形处理器GPU拷贝到中央处理器CPU。
2.根据权利要求1所述的基于GPU的JPEG2000图像解压缩实现方法,其特征在于,步骤(2b)中所述的解码是指采用比特平面解码方法。
3.根据权利要求1所述的基于GPU的JPEG2000图像解压缩实现方法,其特征在于,步骤(4c)中所述的行处理是指预测的逆过程和更新的逆过程,预测是用分裂的偶数序列预测奇数序列,得到的预测误差为变换的高频分量;更新是由预测误差来更新偶数序列,得到变换的低频分量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410453379.1A CN104185030A (zh) | 2014-09-05 | 2014-09-05 | 基于gpu的jpeg2000图像解压缩实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410453379.1A CN104185030A (zh) | 2014-09-05 | 2014-09-05 | 基于gpu的jpeg2000图像解压缩实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104185030A true CN104185030A (zh) | 2014-12-03 |
Family
ID=51965722
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410453379.1A Pending CN104185030A (zh) | 2014-09-05 | 2014-09-05 | 基于gpu的jpeg2000图像解压缩实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104185030A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105072353A (zh) * | 2015-07-16 | 2015-11-18 | 成都新昱科技有限公司 | 一种基于多gpu的图像解码拼控算法 |
CN106878736A (zh) * | 2017-03-17 | 2017-06-20 | 郑州云海信息技术有限公司 | 一种视频编解码的方法与装置 |
CN107483964A (zh) * | 2017-08-07 | 2017-12-15 | 山东交通学院 | 一种利用gpu实现jpeg2000解压缩算法中逆小波变换的加速方法 |
-
2014
- 2014-09-05 CN CN201410453379.1A patent/CN104185030A/zh active Pending
Non-Patent Citations (2)
Title |
---|
孔繁锵,李云松,王柯俨,庄怀宇: "基于码率预分配的JPEG2000自适应率控制算法", 《电子与信息学报》 * |
杨国鹏: "基于GPU的JPEG2000高速图像解压缩系统研究", 《中国优秀硕士学位论文全文数据库信息科技辑》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105072353A (zh) * | 2015-07-16 | 2015-11-18 | 成都新昱科技有限公司 | 一种基于多gpu的图像解码拼控算法 |
CN105072353B (zh) * | 2015-07-16 | 2018-01-16 | 成都新昱科技有限公司 | 一种基于多gpu的图像解码拼控方法 |
CN106878736A (zh) * | 2017-03-17 | 2017-06-20 | 郑州云海信息技术有限公司 | 一种视频编解码的方法与装置 |
CN107483964A (zh) * | 2017-08-07 | 2017-12-15 | 山东交通学院 | 一种利用gpu实现jpeg2000解压缩算法中逆小波变换的加速方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11974069B2 (en) | Image processing method and device using feature map compression | |
CN111800641B (zh) | 同模式采用不同种类重构像素的图像编码解码方法和装置 | |
CN104704825B (zh) | 分段图像数据的无损压缩 | |
CN104838653A (zh) | 使用差分传送进行的无损图像压缩 | |
KR101710001B1 (ko) | 그래픽 프로세스 유닛 기반 jpeg2000 인코딩/디코딩 장치 및 방법 | |
CN109889846B (zh) | 一种Demura表数据的压缩与解压方法、装置及编解码系统 | |
CN102158694B (zh) | 一种基于gpu的遥感图像解压缩方法 | |
TWI479456B (zh) | 使用誤差平面編碼的數據壓縮方法及裝置 | |
CN105847800A (zh) | 基于全相位离散正弦双正交变换的图像压缩方法及系统 | |
KR20210094054A (ko) | 데이터 어레이들의 비트 평면 인코딩 | |
CN101626504B (zh) | 一种高速jpeg解码的方法 | |
AU2018357828A2 (en) | Method and apparatus for super-resolution using line unit operation | |
CN104185030A (zh) | 基于gpu的jpeg2000图像解压缩实现方法 | |
Ao et al. | Fast and efficient lossless image compression based on CUDA parallel wavelet tree encoding | |
CN105163130B (zh) | 一种基于离散Tchebichef正交多项式的图像无损压缩方法 | |
CN107547897B (zh) | 残值升采样装置、残值降采样装置以及电路 | |
De Souza et al. | OpenCL parallelization of the HEVC de-quantization and inverse transform for heterogeneous platforms | |
De Cea-Dominguez et al. | GPU-oriented architecture for an end-to-end image/video codec based on JPEG2000 | |
US8989278B2 (en) | Method and device for coding a multi dimensional digital signal comprising original samples to form coded stream | |
Kyrtsakas et al. | An FPGA implementation of a custom JPEG image decoder SoC module | |
US20150146993A1 (en) | Generalization of methods and systems for image compression while encoding at least one extra bit | |
TWI468015B (zh) | 視訊解碼的平行處理裝置及方法 | |
Sodsong et al. | JParEnt: Parallel entropy decoding for JPEG decompression on heterogeneous multicore architectures | |
CN107172425B (zh) | 缩略图生成方法、装置及终端设备 | |
WO2014000443A1 (zh) | 一种图像数据压缩和解压缩方法、装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20141203 |