JPEG解码_C语言实现

一、实验原理

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

  • 10
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
JPEG是一种常用的图像压缩标准,它采用离散余弦变换(DCT)将原始图像转换为频域表示,再利用量化表将DCT系数量化。解码JPEG图像的过程就是将压缩后的数据解压缩并转换为原始图像的过程。下面介绍一下JPEG解码C语言代码流程。 1. 读入JPEG文件 读入JPEG图片文件,将其存储为一个字节数组。利用libjpeg库读取JPEG文件,其提供了jpeg_decompress_struct结构体存储解码后的数据,调用jpeg_read_header()函数获取图像的头部信息。 2. 初始化解码参数 对于JPEG图像,它需要进行多个步骤的解码操作。我们需要对每个步骤的参数进行初始化。在对JPEG解码进行细节分析以后,摸索出了以下需要初始化的参数列表。 - 图像宽和高 - 像素位数 - 颜色空间 - 量化表 - 数组通道char* - 系数总数量 - 水平、竖直和交错采样因子 - 每个分量的采样点数量 - 处理DCT之前的数据:量化之前的系数和DCT变换前的数据 3. 解码处理 将读取到的原始数据进行解码处理,主要包括以下几个步骤: - 去除APP(应用段)、DQT(量化表段)等段,提取SOF0(帧头)段获取图像宽高、颜色空间、采样因数等信息。 - 解码DHT(霍夫曼编码表)段,建立对应的霍夫曼编码表,将数据进行霍夫曼解码。 - 解码DQT(量化表)段,获取对应的量化表,将量化后的数据进行反量化还原。 - 解码SOS(扫描段),获得每个分量的直流和交流系数,然后通过反量化和反DCT变换,还原出分量的原始数据。 - 进行色彩空间转换,将YCbCr颜色空间转换为RGB颜色空间。 - 将处理后的图像数据存储到输出文件中。 4. 释放内存 解码过程中需要分配大量的内存,用完需要释放,可以避免内存泄漏,调用Jpeg库提供的free方法进行释放引用内存。 总而言之,JPEG图像解码过程是一个比较繁琐的过程,它需要解码参数的初始化,然后将压缩后的数据进行解码还原到原始数据,最后进行色彩空间转换并输出结果。了解到以上流程可以去大致了解JPEG图片解码过程以及每个步骤的具体操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值