图像压缩编码的理论算法。
基于 DCT 的 JPEG 图像压缩编码的理论算法和压缩过程的框图,如图 2-1所示。
图 2-1 基于 DCT 编码的 JPEG 压缩过程简化图
图 2-1 是基于 DCT 变换的图像压缩编码的压缩过程,但是解压缩过程是与
上图的过程完全相反的。 在编码过程中,首先是把输入图像的颜色空间转换后分解为 8×8 大小的数
据块,其次是用正向二维 DCT 将每个块转变成 64 个 DCT 系数值,其中有 1 个 数值是直流(DC)系数,其余的 63 个是交流(AC)系数,然后对 DCT 系数进行量化, 最后把量化得到的 DCT 系数进行,这就是图像压缩的过程。论文网
在解码的时候,会先压缩成图像格式,但是要先解码已经编码的量子化 DCT 系数,然后运用逆量化的方法,使用二维 DCT 反变换把 DCT 系数换成 8×8 样 本像块,最后把操作完成的块合在一起变成一个完整的图像,这个就是图像的解 压过程[13]。
2。2 DCT 的基本原理
在压缩算法中,先将输入图像划分为 8×8 或 16×16,的图像块,对每个图 像块作 DCT 变换;然后舍弃高频的系数,并对余下的系数进行量化以进一步减 少数据量;最后使用无失真编码来完成压缩任务。解压缩时首先对每个图像块做 DCT 反变换,然后将图像拼接成一副完整的图像。
DCT 的定义 :
DCT 变换利用傅立叶变换的性质,采用图像边界褶翻将图像变换为偶函数形 式,然后对图像进行二维傅立叶变换,变换后仅包含余弦项,所以称之为离散余 弦变换。
二维离散余弦变换 DCT(Discrete Cosine Transform)的定义为,假设矩阵 A 的大小为 M ×N。
其中 B p q 称为矩阵 A 的 DCT 系数。在 MATLAB 中,矩阵的下标从 1 开始而
不是从 0 开始的,所以 MATLAB 中的矩阵元素 A(1,1)和 B(1,1)分别对应于上面 定义中的值 A00 和 B00 ,
依此类推。 DCT 是一种可逆变换,离散反余弦变换定义如下:
上式的含义是任何 M×N 的矩阵 A 都可以表示为一系列具有下面形式的函 数的和:
B cos (2m 1) p cos (2n 1)q
p q pq 2M 2N
0 p M 1,0 q N 1
这些函数称为 DCT 变换的基函数。这样, , Bp。q 就可以看成是应用于每 个基函数的加权。
DCT的算法 : 离散余弦变换可以由定义式出发进行计算。但这样的计算量太大,在实际应
用中很不方便。所以需要寻求一种快速算法。以一维离散余弦变换为列,对快速 算法进行推导。
对时域数据向量做如下列延拓:
当 x=0,1,2,。。。。。。。。。N-1 fe(x) =f(x) 当 x=N,N+1,。。。。。。。。2N-1 时 fe(x)=0
则 fe(x)的离散余弦变换可写成下列:
由上式可见:是 2N 点的;离散傅里叶变换所以在离散余弦变换时,可以吧序列长度延拓 为 2N,然后作离散傅里叶变换,产生的结果取其实部即可得到余弦变换。
同理对于离散余弦变换 IDCT,可首先在变换空间将[F(u)]作如下延拓: 当 u=0,1,2,3,。。。。。。。。N-1 时 Fe(u)=F(u)
当 u=N,N+1,N+2,。。。。。。。。。,2N-1 时