Jpeg文件格式简介(2)
时间:2025-04-10
时间:2025-04-10
Jpeg文件格式简介
知识, 这里我们不必深究. 反正和傅立叶变换(学过高数的都知道) 是差不多了. 经过 这个变换, 就把图片里点和点间的规律呈现出来了, 更方便压缩.JPEG 里是对每 8x8 个点为一个单位处理的. 所以如果原始图片的长宽不是 8 的倍数, 都需要先补成 8 的倍数, 好一块块的处理. 另外, 记得刚才我说的 Cr Cb 都是 2x2 记录一次吗? 所 以大多数情况, 是要补成 16x16 的整数块.按从左到右, 从上到下的次序排列 (和我 们写字的次序一样). JPEG 里是对 Y Cr Cb 分别做 DCT 变换的. 这里进行 DCT 变换 的 Y, Cr, Cb 值的范围都是 -128~127. (Y 被减去 128)
JPEG 编码时使用的是 Forward DCT (FDCT) 解码时使用的 Inverse DCT (IDCT) 下面给出公式:
FDCT:
7 7 2*x+1 2*y+1
F(u,v) = alpha(u)*alpha(v)* sum sum f(x,y) * cos (------- *u*PI)* cos (------ *v*PI)
x=0 y=0 16 16
u,v = 0,1,...,7
{ 1/sqrt(8) (u==0)
alpha(u) = {
{ 1/2 (u!=0)
IDCT:
7 7 2*x+1 2*y+1
f(x,y) = sum sum alpha(u)*alpha(v)*F(u,v)*cos (------- *u*PI)* cos (------ *v*PI)
u=0 v=0 16 16
x,y=0,1...7
这个步骤很花时间, 另外有种 AA&N 优化算法, 大家可以去 inet 自己找一下. 在 Intel 主页上可以找到 AA&N IDCT 的 MMX 优化代码. ( Intel 主页上的代码, 输入数据为 12.4 的定点数, 输入矩阵需要转置 90 度)
2005-08-27 23:32:56 [2楼]:
3. 重排列 DCT 结果
DCT 将一个 8x8 的数组变换成另一个 8x8 的数组. 但是内存里所有数据都是线 形存放的, 如果我们一行行的存放这 64 个数字, 每行的结尾的点和下行开始的点就 没有什么关系, 所以 JPEG 规定按如下次序整理 64 个数字.
0, 1, 5, 6,14,15,27,28,
2, 4, 7,13,16,26,29,42,
上一篇:逆变器说明书