实验三 图像的 DCT 变化及量化
一、问题描述
利用 matlab,将 road.f 彩色图像的分辨率转换为 256*256,将图片转化为 double 数据类型,
再利用 T=dctmtx(8)建立一个 8*8 的 DCT 变换矩阵。将图像 I 划分为多个 8*8 的图像块 B,对
每一个图像块 B 进行 DCT 变换(D=T*B*T’),接着对结果采用四种量化方案:只保留直流
系数;保留直流系数和前 9 个交流系数;保留直流系数和前 35 个交流系数;保留直流系数
和前 53 个交流系数。再对这四种方案分别进行逆 DCT 变化(I2=T’*D*T)。最后显示出原
图像 I,重构后的图像 I2,和差值 I-I2。
二、问题分析
JPEG 压缩标准中,需要对图像作 DCT 变换,这一步能够对图片进行压缩,同时,根据量化
系数的不同,压缩质量也不同。
DCT 变换,即离散余弦变换,是一种广泛应用的变换编码方法,它能够以数据无关的方式
解除输入信号之间的相关性,因而应用广泛。在进行变换时,首先将图片分割为 8*8 的小
块,分别对小块进行各自的 DCT 变换。变换的矩阵可调用函数 dctmtx,得到余弦基函数作
为变换基 T。T*B*T’是变换的操作,接着对矩阵块进行量化。根据人眼对低频信号更为敏感
的特性,建立合适的量化矩阵(存在广为接受的版本),接着对矩阵的每个元素进行除以
对应的量化值。接着按照实验要求,对 DCT 系数进行遮罩,建立四个不同的遮罩矩阵,分
别对左上角赋值为 0,对小块的元素进行四种量化方案。这样就完成了 DCT 变换。进行逆
变换时,直接用 T’*B*T 得到结果矩阵,转化为图像形式,得到最终的结果。需要注意的是,
在对 RGB 图像进行 DCT 变换时,需要对三个颜色通道分别进行操作,因为 DCT 变换不是三
维的。此外,在逆 DCT 变换之后,需要将每个通道的矩阵数值转化为 uint8 格式,再利用
cat 函数合并三个通道,得到重构的图像以及差值图像。
其实,在 JPEG 编码格式中,将 RGB 转化为 YUV 颜色空间,再对通道进行 DCT 变换,而不
是直接对 RGB 三个通道进行变换,这是因为人眼对色度的敏感度低于对灰度的敏感度。
三、算法分析与详细设计
DCT 基的第一个系数为恒定的直流系数,其余为 AC 系数,按照要求构建四种遮罩矩