目录
一、题目信息提取
链接
首先从题目本身出发,一起提取关键信息
题目关键信息:
- 一张灰度图片,可以被视为由多个像素点组成
- 每个像素点对应一个 0 到 255 之间的数值
- 最小编码单元:JPEG 编码算法将图片分割为 8*8的小块
- 每个小块进行如下的计算:
- 减去 128,数值都在 -128 到 127
- 对矩阵进行离散余弦变换(DCT),所得矩阵的左上方的数字的绝对值较大,右下方的数字的绝对值较小,甚至接近 0。
- 量化操作:除一个数字,取整数。量化操作的数字越大,矩阵中的数据就越少,但是压缩后的图片质量也会越差。
- 扫描数据:Z 字形扫描:从左上角开始,排成一个数组,不存储结尾连续的 0
- 扫描数据采用哈夫曼编码进行压缩,并置于必要的数据结构中
问题描述
目的:解码最小单元
步骤:(对照题目中的例子看)
- 读量化矩阵Q
- 初始化全0矩阵M
- 按照Z字形遍历M,将扫描数据写入
- 与量化矩阵Q逐项相乘
- 离散余弦逆变换,得M‘’
- 每个元素+128,大于255取255,小于0,取0
二、初步理清问题 &&分析要用到的STL等结构
我们需要完成的任务可以归纳成以下几个:
- 如何用Z字形访问矩阵M
因为第一次访问的就是(0,0),第二次就是(0,1)……每次访问的下标是固定的,
所以先开始初始化一个访问顺序,path[64]存每一步要访问的(i,j),所以用数据结构vector<pair<i