一种OpenCLJ2K压缩方法与流程

文档序号:11807037阅读:291来源:国知局
一种OpenCLJ2K压缩方法技术领域本发明涉及一种OpenCLJ2K压缩方法,属于计算机图像压缩处理技术领域。

背景技术:
JPEG2000是一个基于小波的图像压缩标准。JPEG2000的目的不仅是改善JPEG的压缩性能,它也增添(或改善)了很多例如可扩展性和可修改性的功能。JP2压缩包括四个步骤:小波变换,量化,Tier1压缩和Tier2压缩。JPEG2000的压缩比更高,而且不会产生原先的基于离散余弦变换的JPEG标准产生的塊狀模糊瑕疵。缺点是压缩速度比较慢。JP2压缩包括四个步骤:小波变换,量化,Tier1压缩和Tier2压缩;切换次数较多,压缩效率低。传统的GPU加速的JP2压缩算法主要是在将小波变换移植到GPU上,其他的处理仍然在CPU上进行,加重了CPU的负荷。

技术实现要素:
发明目的:针对现有技术中存在的问题,本发明提供一种OpenCLJ2K压缩方法。技术方案:一种OpenCLJ2K压缩方法,包括CPU程序和四个GPU内核程序。四个GPU内核程序分别是:1.小波行变换内核程序K1,用于对图像的一行进行小波变换。2.小波列变换内核程序K2,用于对图像的一列进行小波变换。3.量化处理内核程序K3,用于在GPU上进行量化处理。4.Tier1压缩内核程序K4,用于在GPU上进行Tier1压缩。本方法的主要特点为:1.连续进行5级小波行变换和列变换,减少了OpenCL内核的切换次数。2.在GPU上进行Tier1压缩,降低了CPU的负荷。具体包括如下步骤:步骤1:上传待压缩图像到GPU;步骤2:5级小波变换,循环5次,n=5;步骤3:对待压缩图像进行小波行变换;步骤4:n=n-1,如果n>0,转步骤3;步骤5:对小波行变换所得结果图像进行5级小波列变换;步骤6:对5级小波列变换后的图像进行量化处理;步骤7:对量化处理的结果进行Tier1压缩,压缩结果存在GPU内存中;步骤8:下载步骤7的压缩结果到CPU;步骤9:在CPU上实现Tier2压缩、存储JP2文件到硬盘。所述小波行变换内核程序K1的主要步骤为(每个线程块处理一行图像):步骤301:线程块读取该线程块对应的图像行,存储在共享内存;步骤302:线程块内所有线程同步;步骤303:9-7小波变换第一步,结果存储在共享内存;步骤304:线程块内所有线程同步;步骤305:9-7小波变换第二步,结果存储在共享内存;步骤306:线程块内所有线程同步;步骤307:9-7小波变换第三步,结果存储在共享内存;步骤308:线程块内所有线程同步;步骤309:9-7小波变换第四步,结果存储在共享内存;步骤310:线程块内所有线程同步;步骤311:9-7小波变换第五步,结果存储在共享内存;步骤312:线程块内所有线程同步;步骤313:9-7小波变换第六步,结果存储目标图像。小波列变换内核程序K2的主要步骤为(每个线程块处理一列图像):步骤501:线程块读取该线程块对应的图像列,存储在共享内存;步骤502:线程块内所有线程同步;步骤503:9-7小波变换第一步,结果存储在共享内存;步骤504:线程块内所有线程同步;步骤505:9-7小波变换第二步,结果存储在共享内存;步骤506:线程块内所有线程同步;步骤507:9-7小波变换第三步,结果存储在共享内存;步骤508:线程块内所有线程同步;步骤509:9-7小波变换第四步,结果存储在共享内存;步骤510:线程块内所有线程同步;步骤511:9-7小波变换第五步,结果存储在共享内存;步骤512:线程块内所有线程同步;步骤513:9-7小波变换第六步,结果存储目标图像。Tier1压缩内核程序K4主要步骤为(每个线程处理一个码块):步骤701:寻找一个线程所处理码块中的所有像素点的最大值,计算该最大值所在的位平面m;步骤702:清除编码(Cleanupcoding);步骤703:符号编码(Signcoding);步骤704:幅度细化编码(Refinementcoding);步骤705:清除编码(Cleanupcoding);步骤706:m=m-1,如果m>=0,转步骤703。本发明采用上述技术方案,具有以下有益效果:大幅度提高了JP2图像压缩的速度,能在30毫秒能实现100像素16位图像的压缩,可以在微机上实现高清晰图像的实时压缩,可广泛地用于医疗图像图像处理和航空测量等领域。具体实施方式下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。OpenCLJ2K压缩方法,包括如下步骤:对图像进行5级小波行变换。对图像进行5级小波列变换。对变换后的图象进行量化处理。对处理的结果进行Tier1压缩,压缩结果存在GPU内存中。下载上一步结果到CPU,在CPU上实现Tier2压缩、存储JP2文件到硬盘。其中,所述小波行变换的主要步骤为(每个线程块处理一行图像):步骤301:线程块读取该线程块对应的图像行,存储在共享内存;步骤302:线程块内所有线程同步;步骤303:9-7小波变换第一步,结果存储在共享内存;步骤304:线程块内所有线程同步;步骤305:9-7小波变换第二步,结果存储在共享内存;步骤306:线程块内所有线程同步;步骤307:9-7小波变换第三步,结果存储在共享内存;步骤308:线程块内所有线程同步;步骤309:9-7小波变换第四步,结果存储在共享内存;步骤310:线程块内所有线程同步;步骤311:9-7小波变换第五步,结果存储在共享内存;步骤312:线程块内所有线程同步;步骤313:9-7小波变换第六步,结果存储目标图像。小波列变换的主要步骤为(每个线程块处理一列图像):步骤501:线程块读取该线程块对应的图像列,存储在共享内存;步骤502:线程块内所有线程同步;步骤503:9-7小波变换第一步,结果存储在共享内存;步骤504:线程块内所有线程同步;步骤505:9-7小波变换第二步,结果存储在共享内存;步骤506:线程块内所有线程同步;步骤507:9-7小波变换第三步,结果存储在共享内存;步骤508:线程块内所有线程同步;步骤509:9-7小波变换第四步,结果存储在共享内存;步骤510:线程块内所有线程同步;步骤511:9-7小波变换第五步,结果存储在共享内存;步骤512:线程块内所有线程同步;步骤513:9-7小波变换第六步,结果存储目标图像。Tier1压缩的主要步骤为(每个线程处理一个码块):步骤701:寻找该线程所处理码块中的最大值,计算该最大值所在的位平面n;步骤702:清除编码(Cleanupcoding);步骤703:符号编码(Signcoding);步骤704:幅度细化编码(Refinementcoding);步骤705:清除编码(Cleanupcoding);步骤706:n=n-1,如果n>=0,转步骤703。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1