JPEG原理分析与解码调试

一.JPEG文件格式分析:

1.描述:

JPEG(Joint Photographic Experts Group)是JPEG标准的产物,该标准由国际标准化组织(ISO)制订,是面向连续色调静止图像的一种压缩标准。JPEG格式是最常用的图像文件格式,后缀名为.jpg或.jpeg。

2.文件格式

JPEG文件以segment的形式组织,其中每个segment以一个marker开始(marker均以0xFF+一个marker的标识符),随后为2字节的marker长度(不包含marker的起始两字节)和对应的payload(SOI和EOI marker只有2字节的标识符)。

注意,连续的0xFF字节并不是marker的起始标志,而是用来填充的特殊字符。

此外,部分中,0xFF后若为0x00,则跳过此字节不予处理。

二.JPEG的编解码

1.JPEG的编码:

编码原理:

 其步骤如下:

(1)零偏置:对于灰度级为2^n 的像素,通过减去2^(n-1),将无符号整数变为有符号数,即值域变为正负对称。将绝对值大的数出现的概率大大减小,提高编码效率。

(2)DCT变换:先将图像分为8×8的像块,如果图像的宽(高)不是8的整数倍,使用图像边缘像素填充,以不改变频谱分布。实现能量集中和去相关,降低空间冗余度。

(3)量化:利用人眼视觉特性设计而成的矩阵量化DCT系数,减小视觉冗余。因为人眼对亮度信号比色差信号更敏感,因此使用了两种量化表:亮度量化值和色差量化值;根据人眼对低频敏感,对高频不太敏感,对低频分量采取较细的量化,对高频分量采取较粗的量化。

        JPEG标准中采用中平型均匀量化,输入DCT系数,输出量化系数。

(4)DC系数差分编码

8×8像块经过DCT后得到的DC系数有两个特点:

一是系数的值较大;

二是相邻像块的DC系数存在相关性(即存在冗余)。

根据这个特点,JPEG标准采用了DPCM(差分脉冲编码调制),以对相邻图像块之间量化DC系数的差值DIFF进行编码:

 (5)AC系数之字形扫描

由于经DCT变换后,系数大多数集中在左上角,即低频分量区,因此采用Z字形按频率的高低顺序读出,可以出现很多连零的机会。可以使用游程编码。尤其在最后,如果都是零,给出 EOB (End of Block)即可。

(6)AC系数游程编码

当遇到很多连续的0时,为缩短数据长度,编码非零系数level和它之前0的个数run,(Run,level)。

如:0,0,3,0,2,0,0,0,1–>游程编码:(2,3),(2,2),(3,1)

(6)Huffman编码

对DC系数DPCM的结果和AC系数RLE的结果进行Huffman编码。

2.JPGE的解码

  1. 解码Huffman数据
  2. 解码DC差值
  3. 重构量化后的系数
  4. DCT逆变换
  5. 丢弃填充的行/列
  6. 反0偏置
  7. 对丢失的CbCr分量插值
  8. 将YCbCr通道数据变为RGB通道数据

三.程序设计

main函数:从命令行参数中接受输入输出文件名称,打开TRACEFILE,选择输出的文件格式

int main(int argc, char *argv[])
{
  int output_format = TINYJPEG_FMT_YUV420P;
  char *output_filename, *input_filename;
  clock_t start_time, finish_time;
  unsigned int duration;
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值