一、实验原理
1.JPEG编解码原理
JPEG(Joint Photographic Experts Group)采用有损压缩方式去除冗余的图像和彩色数据,在获得极高压缩率的同时能展现十分丰富生动的图像。
编码原理图如下:
① Level Offset(零偏置)
为了使使像素的绝对值出现3位10进制的概率大大减少,对于灰度级是2的n次方的像素,通过减去2的n-1次方,将无符号的整数值变成有符号数。
② 8✖️8 DCT变换
变换公式如下:
DCT变换的优点:1、能量守恒 2、能量集中 3、去相关。
经过DCT变换后,能量集中在左上角,使得左上角数值较大,右下角数值较小。
③Uniform scalar quantization(量化)
因为人眼对亮度信号比对色差信号更敏感,因此使用了两种量化表:亮度量化值和色差量化值。由于人眼对低频敏感,对高频不太敏感,因此对低频分量采取较细的量化,对高频分量采取较粗的量化。
④dc quantization indices Differential coding(DC系数的差分编码)
8×8图像块经过DCT变换之后得到的DC直流系数有两个特点:系数的数值比较大; 相邻8×8图像块的DC系数值变化不大(产生冗余)。
根据这个特点,JPEG算法使用了差分脉冲调制编码(DPCM)技术,对相邻图像块之间量化DC系数的差值DIFF进行编码:DIFFk =DCk - DCk-1。
码表如下(此编码表并不是一成不变的,不同的文件有不同的码表。以此码表为例,DC=8,上一DC=5时,则DIFF=8-5=3,类别ID=2,类内索引=3,则码流为10011):
⑤Zig-zag scan(AC系数的Z字扫描)
由于量化之后右下角高频系数大部分为0,在编码是为了制造更长的0游程提高编码效率,采用之字形扫描读取法。经过之字形扫描读出后把二维系数矩阵转换为一维数据序列。在最后, 如果都是零,给出 EOB