数据压缩实验五:JPEG解码

该博客详细介绍了JPEG解码的基本原理,包括编码过程、解码步骤、JPEG文件格式,并详细阐述了实验流程,涉及关键代码分析和实验结果展示,如量化矩阵、HUFFMAN码表的输出,以及DC和AC图像的统计分布。
摘要由CSDN通过智能技术生成

一、基本原理

JPEG编码的过程如图所示:


  1. 将图像分成(8*8)的块以便进行DCT变换,不够的要取边缘像素补齐
  2. 零偏置:对于灰度级是2n的像素,通过减去2n-1,将无符号的整数值变成有符号数,对于n=8,即将0~255的值域,通过减去128,转换为值域在-128~127之间的值,使像素的绝对值出现3位10进制的概率大大减少。
  3. DCT:经过DCT变换后,图像中的低频分量会集中在左上角,低频能量高,故而左上角数值较大。
  4. 量化:根据人眼的视觉特性,对低频敏感所以细量化,对高频不敏感所以粗量化;对亮度信号敏感,对色度信号不敏感。所以亮度和色度分量分别采用不同的量化表。
  5. 之字形扫描:游程编码的扫描过程,由于DCT变换后,系数集中在左上角,于是采用之字形扫描。
  6. 熵编码:直流分量采用差分编码;交流分量采用游程编码

解码过程:

  1. 读入文件的相关信息
  2. 初步了解图像数据流的结构
  3. 颜色分量单元的内部解码
  4. 直流系数的差分编码
  5. 反量化 & 反Zig-zag编码
  6. 反离散余弦变换

JPEG文件格式

  • SOI       0xFFD8     图像开始
  • APPn   0xFFEn     应用细节信息
  • DQT     0xFFDB    定义量化表
  • SOF0   0xFFC0    帧图像开始
  • DHT     0xFFC4    定义霍夫曼表
  • SOS     0xFFDA    扫描开始 12字节
  • EOI      0xFFD9    图像结束 2字节

二、实验流程

(1).逐步调试JPEG解码器程序。将输入的JPG文件进行解码,将输出文件保存为可供YUVViewer观看的YUV文件。

(2). 程序调试过程中,应做到:

  • 理解程序设计的整体框架
  • 理解三个结构体的设计目的
  1.  struct   huffman_table
  2.  struct   component
  3.  struct   jdec_private
  • 理解在视音频编解码调试中TRACE的目的和含义
  • 会打开和关闭TRACE
  • 会根据自己的要求修改TRACE

(3).以txt文件输出所有的量化矩阵和所有的HUFFMAN码表。

(4). 输出DC图像并经过huffman统计其概率分布(使用第三个实验中的Huffman编码器)。

(5). 输出某一个AC值图像并统计其概率分布(使用第三个实验中的Huffman编码器)。

三、关键代码及分析

1.将输出文件保存为YUV文件

tinyjpeg.h

enum tinyjpeg_fmt {
   TINYJPEG_FMT_GREY = 1,
   TINYJPEG_FMT_BGR24,
   TINYJPEG_FMT_RGB24,
   TINYJPEG_FMT_YUV420P, //add by cxy
   TINYJPEG_FMT_YUV,
};

tinyjpeg.c
int tinyjpeg_decode(struct jdec_private *priv, int pixfmt)
{..              /*add by cxy*/
		   case TINYJPEG_FMT_YUV:
			   colorspace_array_conv = convert_colorspace_yuv420p;
			   if (priv->components[0] == NULL)
			 priv->components[0] = (uint8_t *)malloc(priv->width * priv->height);
			   if (priv->components[1] == NULL)
			 priv->components[1] = (uint8_t *)mall
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值