JPEG2000 Tips

来源:互联网 发布:查询dns缓存 linux 编辑:程序博客网 时间:2024/05/18 01:26


      JPEG2000, 接触比较久了, 一直关注核心部分优化, 很多细节没有仔细了解,  最近重读标准, 把一些细节记录下来备忘.

 

1)  JP2 / J2K / J2C

      jp2或者j2k就是jpeg2000的裸码流, 保证能够正确解码, 其它多余的信息不被包含. jp2 就会有更多有用信息, 包括版权, 显示校正等等. A minimal JPEG 2000 decoder simply handles JPEG 2000 part 1 codestreams. However a codestream only contains compressed data and is not able to carry side-information such as intellectual property rights or color-spaces for correct display. For such cases, the JPEG 2000 standard defines a minimal file format, denominated as JP2, that encapsulates JPEG 2000 codestreams, whilst providing room for storing application specific data (i.e. metadata).

 

 

2)  tile, precinct 的用途
      一直不理解, 有了code-block, 直接把整个图象按照64x64的大小分割, 为什么还要把整图分割成几个tile, 为什么还要在每个subband 中划分 precinct, 看完标准文献后我的理解是: precinct的划分可以控制编码后每个包的大小不会过大, 而tile可以用来把一个超级大图分割成几个小点的部分,便于在有限的硬件或软件资源来计算.

 

 

3)  基本的码流结构

Start of Codestream                Start of Tile-part                   Start of Data                   End of Codestream

+--------------+-----------------+--------------+-----------------+---------------+-----------------+---------------+

|       SOC        |   main header     |       SOT        |     tile header     |        SOD        |  Tile-part data   |       EOC        |

+--------------+-----------------+--------------+-----------------+---------------+-----------------+---------------+

 

 

4)  XRsiz(i), YRsiz(i), Ssiz(i)

     在确定了grid以后, grid上的区域代表图象的实际大小. 色度分量很多时候要进行降采样, 这个时候XRsiz和YRsiz代表横向和纵向分别要跳多少个点才是下一个采样点, 简单的说你的grid有1000个点, XRsiz = 1 代表实际采样点也有1000个, 如果 XRsiz = 2 代表你的实际采样点就只有500个. 工作中发现, kakadu and OpenJpegViewer 都对降采样的图片显示有问题, kakadu 无法显示降采样图片, 而OpenJpegViewer会崩溃, 暂时还没发现能支持降采样图片显示的软件.

 

 

5)  Progression Order

     包的排列顺序有多种,分别是 CPRL, LRCP, PCRL, RLCP, RPCL. 其中 C = Component, P = Position, R = Resolution, L = Layer.  一个图的码流里面容许多种包排列顺序.

 

 

6)  JPEG2000 最权威的 overview

     请看 jasper 作者 adams 写的 <The JPEG-2000 Still Image Compression Standard>, 浅显易懂. 中文翻译可以查看这个地址: http://blog.csdn.net/KXY_tech/archive/2009/02/19/3908484.aspx

 

 

7)  PPM PPT 是什么

PPM = Packed Packet headers, Main header

PPT = Packed Packet headers, Tile-part header

在一个tile中,由于码流比较大,可以把一个tile的码流分割成若干个小的块,每块单独打包,称为 tile-part

 

 

8) PCRD Post Compression Rate Distortion

     PCRD是JPEG2000码率控制的核心算法,量化是一种粗糙的码率控制,较精细和最终的码率控制是由PCRD实现的。如下图的率失真函数(L = Length of Bitstream,D = Distortion)。

      λ就是说对于某个块,一共有3B - 2 个通道,每个通道对于最终图象质量的贡献是不一样的,那么(D[i] - D[i-1]) / (L[i] - L[i-1]) 就是这个λ,表示每比特数据对图象质量贡献。要让图象质量最高,只需要把Slope高的截断点位置数据保存就好。所以,通道的筛选即为:在满足条件下,寻找最优斜率阈值λopt,仅把每个码块中率失真斜率大于λopt的通道选入,组成最终码流。理论上,在同一编码块中,通道的率失真斜率是单调递减的。但在实际算法实现中却可能存在奇异点。若出现奇异点,则把奇异点设为无效截断点,合并两通道,合并后通道的截断点便是有效截断点。

 

 

原创粉丝点击