JPEG解码——(5)反量化和逆ZigZag变换 - OnlyTime_唯有时光

Dreaming-in-Gottingen 2021-08-31 原文


JPEG解码——(5)反量化和逆ZigZag变换

  本篇是该系列的第五篇,承接上篇huffman解码,介绍接下来的两个步骤——反量化和逆zigzag变换,即IDCT前的两个步骤。

  需要说明的是,这两个步骤可以颠倒,本人的实现是,先反量化,再逆ZigZag变换。

  其实,这两步不需要太多说明,无非是查表对数据进行scale和数据重排,为了完整性,还是介绍一下吧。

1. 反量化

  先拿到两个表,一个是解析文件头得到的量化表,另外一个是huffman解码得到的重建的8×8的block表。如下:

     

   如何操作?对应位置相乘,即得到的反量化表:

 2. 逆ZigZag变换

  反量化表dequantization table是由如下ZigZag方式扫描得到的(忽略数字,关注箭头扫描方向):

   因此,需要对该表进行恢复,得到:

  如何操作?无非是查表,可以参考下面的代码实现:

 1 static const uint8_t zigzag[64] =
 2 {
 3    0,  1,  5,  6, 14, 15, 27, 28,
 4    2,  4,  7, 13, 16, 26, 29, 42,
 5    3,  8, 12, 17, 25, 30, 41, 43,
 6    9, 11, 18, 24, 31, 40, 44, 53,
 7   10, 19, 23, 32, 39, 45, 52, 54,
 8   20, 22, 33, 38, 46, 51, 55, 60,
 9   21, 34, 37, 47, 50, 56, 59, 61,
10   35, 36, 48, 49, 57, 58, 62, 63
11 };
12 
13 // IZigZag
14 int JpegReZigZag(struct ABitReader *abr, struct jpegParam *param, int *dst_block, const int *src_block, bool dump)
15 {
16     for (int i=0; i<64; i++) {
17         dst_block[i] = src_block[zigzag[i]];
18     }
19 
20     if (dump) {
21         puts("----after rezigzag----");
22         for (int i=0; i<64; i++) {
23             printf("%4d  ", dst_block[i]);
24             if (i % 8 == 7)
25                 puts("");
26         }
27         puts("");
28     }
29 
30     return 0;
31 }
发表于
2021-03-02 00:01 
OnlyTime_唯有时光 
阅读(262
评论(0
编辑 
收藏 
举报

 

版权声明:本文为Dreaming-in-Gottingen原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Dreaming-in-Gottingen/p/14466771.html

JPEG解码——(5)反量化和逆ZigZag变换 - OnlyTime_唯有时光的更多相关文章

  1. SQL Server Management Studio管理数据库的操作 – FF冯静妃

    SQL Server Management Studio管理数据库的操作 数据库管理 文件和文件组       […]...

  2. C# 中的枚举器 – 鱼跃于渊

    C# 中的枚举器 出处:http://www.ondotnet.com/pub/a/dotnet/2004/0 […]...

  3. 乐凯转型太阳能产业 正准备进入新能源领域 – 咨询的天空

    乐凯转型太阳能产业 正准备进入新能源领域 与柯达分手后,以传统胶片为主营业务的乐凯不得不摸索新的赢利点    […]...

  4. 外网访问vmvare – 会飞の鱼

    外网访问vmvare 使用端口映射即可,以tplink wr886n为例, 方法如下:   1、打开浏览器,输 […]...

  5. PHP文件的上传和下载 – Xproer-松鼠

    PHP文件的上传和下载 1.使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现(htt […]...

  6. 六大类常用的专业搜索工具 – 和风细雨汪汪

    我的一位朋友,用了10年的电脑。 作为一名老网民,他的信息检索能力让我诧异。 每次需要找点图片、网站、研究报告 […]...

  7. 团队-象棋游戏-需求分析 – 棠梨煎雪又落雨

    团队-象棋游戏-需求分析 象棋游戏-需求分析 1.象棋是一款益智类游戏,但是因为人机交互设计比较困难,所以本小 […]...

  8. Alpha版本总结 – Butter-Fly

    Alpha版本总结 Alpha版本总结 General Questions a)     What went […]...

随机推荐

  1. 汇编语言基础-1 基本语言元素

    汇编语言基础-1 基本语言元素 1   基本语言元素:   本次汇编语言学习,采取的是Microsoft MA […]...

  2. 演讲发言时太紧张怎么办?只需三招帮你彻底克服当众讲话前的紧张感

    我的同事陈,平时的工作表现很好,很受老板喜欢。有次,陈设计的活动方案,让公司的销售额提升了近20%,领导很开心 […]...

  3. Linux USB 3.0驱动分析(一)—— USB设备基础概念

    一.基础概念 在终端用户看来,USB设备为主机提供了多种多样的附加功能,如文件传输,声音播放等,但对USB主机 […]...

  4. 英语词性之名词

    英语词性之名词 以s,x,ch,sh结尾的名词:在后面加es。读音时,es读/iz/。例如:class→cla […]...

  5. hbase 面试问题汇总

    一、Hbase的六大特点: (1)、表大:一个表可以有数亿行,上百万列。 (2)、无模式:每行都有一个可排序的 […]...

  6. 本地调试H5页面

    摘要 详细讲述微信H5页面调试(安装在安卓或iOS手机上的),钉钉内H5页面的调试,QQ、微博以及各浏览器上H […]...

  7. 用SQL语句添加删除修改字段 – Ryan.L.R

    用SQL语句添加删除修改字段 --改字段名 sp_rename \'tablename.columnname\ […]...

  8. Sql Server 复制数据库 – idea555

    Sql Server 复制数据库 2020-08-06 17:14  idea555  阅读(74)  评论( […]...

展开目录

目录导航