JPEG图像编解码

量化表

 

JPEG压缩中有一个影响图像质量和压缩图像文件大小的系数,那就是“品质”,取值范围在0~100之间,标准量化表根据这个系数生成文件的量化表,再由文件量化表生成一个8*8空间的频率变化表,使左上角形成低频区,右下角形成高频区,然后用用排列后的64个数值乘以相应的频率,这样,64个数值中后面排在后面的数就会大量的变成0。而这些0在后面的将被压缩,JPEG的真正意义上的压缩就是从这里开始的。

 

经过DCT变换后就要进行量化,JPEG提供了标准的量化表,有很多量化的方法, 我只采用较简单的 变换后矩阵/量化矩阵 也就是对应位除,得到的数取整。一般量化后会得到很多的0。可能那些就是低频区吧。

在这64个数值(0~63)中,由于0处在最低频处,在乘以频率后值的消耗最小,我们把这个值看成是所有64个数值的平均值,称它为DC,也就是直流电平(电流);其余的63个量化后的数值,称它们为AC,也就是交流电平。DC是很重要的,是对那8*8图像的评估。因此对DC系数进行编码与AC时不同 的,因为我做的只考虑了一个矩阵,所有没有对DC系数进行编码。对DC系数采用差分编码。对AC时进行行程编码。

 

直流系数的编码


8×8图像块经过DCT变换之后得到的DC直流系数有两个特点,一是系数的数值比较大,二是相邻8×8图像块的DC系数值变化不大。根据这个特点,JPEG算法使用了差分脉冲调制编码(DPCM)技术,对相邻图像块之间量化DC系数的差值(Delta)进行编码。
Delta=DC(0,0)k-DC(0,0)k-1

 

行程编码

 

行程编码的意思是 假设有 10000300405050002  就可以表示成(0,1)(4,3)(2,4)前个数表示后个数前出现0的个数,不过在这里,后个数一般不这样表示,而是表示成该数占几位,假设4可以用2位来表示,3用2位表示 那就能表示(4,2)3,(2,2)4。

量化AC系数的特点是1×64矢量中包含有许多“0”系数,并且许多“0”是连续的,因此使用非常简单和直观的游程长度编码(RLE)对它们进行编码。
    JPEG使用了1个字节的高4位来表示连续“0”的个数,而使用它的低4位来表示编码下一个非“0”系数所需要的位数,跟在它后面的是量化AC系数的数值。

因为在网上找说有标准的AC哈弗曼表,也找到了该表,但是就是不知道怎么用。javax.imageio.plugins.jpeg.JPEGHuffmanTable;StdACChrominance对象就是 表示标准的哈弗曼表。只是只提供长度和值,没有提供具体的二进制序列。

后来自己弄了个,将能出现的值建立哈弗曼表。在后面的操作就是对这个表进行查找。

 

本文转自:http://blog.sina.com.cn/s/blog_65a748970100i7aw.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值