本章内容可能要涉及一些信号和图像处理的知识,我将尽可能用较为正式的表述,具体内容可以参考相关书籍。JPEG2000信号与信息处理的一些基础知识也可以参考我的笔记:http://lincoln.yu.googlepages.com/sgnotes.zip
码流解码过程从main函数中的kdu_codestream codestream的构造声明处开始。随即完成对输入流的绑定,和codestream的一些基本设置。然后根据codestream的已有信息获得通道(channel)个数并从每个通道中取得分量的图像尺寸(dimension)信息。接着完成输出流的配置。随后的两个while嵌套就是进行解码的关键步骤。
解码是基于一个单元类型为kde_flow_control,以tile为索引的指针数组进行的。第一层while进行行扫描,由for循环对每个数组单元调用advance_tile过程判断是否完成。而第二层while是对行内每个单元在各分量上进行解码。从而advance_components和process_components是核心的解码步骤。
首先是kde_flow_control的创建,一个kde_flow_control对应一个tile,其横向索引由构造函数参数x_tnum指定(纵向由advance_tile成员函数遍历)。以下是创建的主要工作流程:
1 导入最关键的参数,码流封装单元codestream;
2 然后从codestream中打开指定tile,调用kdu_codestream::open函数:
调用kdu_codestream::create_tile函数
创建一个kd_tile对象;
初始化该对象
以component, resolution, band为序进行三层遍历设置;
调用kd_tile::open函数打开该kd_tile对象
以component为索引遍历初始化
其它初始化操作;
设置弃级:<code>tc->apparent_dwt_levels = tc->dwt_levels - codestream->discard_levels;</code>;
以resolution, band为序进行二层遍历初始化;
3 以component为索引从codestream中获取参数;
4 以channel为索引配置参数,完成和component的映射;
5 为各component创建解码单元
分配数据处理空间,基准尺寸由comp->reversible确定;
如果该分量只包含一个分辨率级,则直接创建kdu_decoder,否则创建kdu_synthesis,再由它递归为各较低分辨率级创建相应解码单元;
6 为各具有色彩映射的channel分配数据处理空间,用对应component的分配器;
关于resolution和band的结构如下(以3级结构190x240为例):
res_level 0 1 2 3
dwt_level 3 3 2 1
dims(width)24 48 95 190
style [LL][HL] [HL] [HL]
[LH][HH] [LH][HH][LH][HH]
图像二维子带变换作为JPEG2000解码的主要组成部分之一采用提升快速算法实现,并且这是一种递归的方法。
分享到:
相关推荐
在有损压缩下,JPEG2000一个比较明显的优点就是没有JPEG压缩中的马赛克失真效果。JPEG2000的失真主要是模糊失真。模糊失真产生的主要原因是在编码过程中高频量一定程度的衰减。传统的JPEG压缩也存在模糊失真的问题。
基于JPEg2000标准实现的Kakadu软件,可以实现灰度图像、彩色图像、视频的有效编码、压缩、解码
图像处理方面的软件。在命令行调用指令
user into some of the more important aspects of the Kakadu system. The first draft is included here. * A very simple compression example and a very simple decompression example have been added to ...
jpeg2000的源码kakadu,不可多得,非常好,只要1个分意思意思
用于执行外部JPEG2000 软件的GUI 前端(基于java,不包含在此包中)。 除GUI外,脚本jpeg2000jj2k.m可用于在命令行模式下调用JJ2000。 还提供了用于批量执行来自http://www.kakadusoftware.com的 JPEG 2000 Kakadu ...
JPEG2000 参考源码,最新版本!,支持VC++编译运行。
利用JPEG2000标准进行图像压缩和图像解压的Matlab程序
matlab开发-JPEG2000MATLABwrapper。JPEG2000 Kakadu和JJ2000包装机
kakadu2.2.3 用于jpeg2000图像压缩。内附有完整代码及其使用文档。代码请先编译coresys生成动态库,后编译app。已在vc6.0和vs2008下调试通过。
基于JPEg2000标准实现的Kakadu软件,可以实现灰度图像、彩色图像、视频的有效编码、压缩、解码
jpeg2000压缩代码TUT-HDCA 介绍 这是TUT的全光图像压缩软件。 安装说明 该软件已经在Windows 7,10上进行了开发和测试,并且大部分是使用Visual Studio开发的。 但是,提供了一个可在Linux上编译的makefile,并且该...
包括JPEG2000 Part 1的一个完整的C++实现,还有Kakadu_V2.2.3,挺好的。
基于JEPG2000的kakadu源程序~实现的图片渐进传输
JPEG2000编码解码KAKADU有助于开发者深入研究
Kakadu v2.2源代码主要分成两个目录:coresys和application,分别表示核心代码与应用程序。核心代码将被编译成动态或静态链接库,应用程序共享这些库。
JPEG2000标准第一部分的C++实现,能够实现部分解码,并针对处理器做了优化
kakadu的官方描述文档,可以用来理解kakadu的源码架构和流程,适用于kakadu2.2版本。
kakadu2.2.3和openjpeg1.3两开源图像压缩软件是比较流行的遵循JEPG2000标准算法的软件
kakadu v2.2.3源码及应用, .apps .args .compressed_io .image .jp2 .kdu_compress .kdu_expand .kdu_show .kdu_transcode .make .simple_example .bin .coresys .lib .nolib