图像DCT变换 《信息隐藏实验教程》教学幻灯片 五
DCT的原理 离散余弦变换(Discrete Cosine Transform,DCT)是一种实数域变换,其变换核为实数余弦函数。对一幅图像进行离散余弦变换后,许多有关图像的重要可视信息都集中在DCT变换的一小部分系数中。因此,离散余弦变换(DCT)是有损图像压缩JPEG的核心,同时也是所谓“变换域信息隐藏算法”的主要“变换域(DCT域)”之一。因为图像处理运用二维离散余弦变换,所以直接介绍二维DCT变换。
DCT的原理 一个矩阵的二维DCT定义如下: 逆DCT变换定义如下:
DCT的MATLAB实现 B=dct2(A,[M N])或 B=dct2(A,M,N) 第一种方法是使用函数dct2,该函数使用一个基于FFT的快速算法来提高当输入较大的输入方阵时的计算速度。dct2函数的调用格式如下: B=dct2(A,[M N])或 B=dct2(A,M,N) 其中,A表示要变换的图像,M和N是可选参数,表示填充后的图像矩阵大小。B表示变换后得到的图像矩阵。
DCT的MATLAB实现 第二种方法使用由函数dctmtx返回的DCT变换矩阵,这种方法较适合于较小的输入方阵(如或方阵)。dctmtx的调用格式如下: D=dctmtx(N) 其中,N表示DCT变换矩阵的维数,D为DCT变换矩阵。
分析DCT系数的性质 下面以lenna图像为例,利用DCT变换函数得到的DCT系数的性质。我们只取R层的DCT系数矩阵进行分析。下图显示了变化的结果,其中DCT系数用光谱的形式给出,直观的表明了低频和高频系数的分布规律。
分析DCT系数的性质 当p,q不断增大时,相应的余弦函数的频率也不断增大,得到的系数可认为就是原始图像信号在频率不断增大的余弦函数上的投影,所以也被称为低频系数、中频系数和高频系数。依上图可以明显的发现如下规律:大体上,沿左上到右下的方向DCT系数(绝对值)是依次递减的。所以,也就是说一个图像的DCT低频系数分布在DCT系数矩阵的左上角,高频系数分布在右下角,低频系数的绝对值大与高频系数的绝对值。以下图也说明了这一点。
分析DCT系数的性质
分析DCT系数的性质 对DCT变换来说,图像的主要能量是集中在其DCT系数的一小部分。这所谓的“一小部分”就是指的低频部分。随着p,q阶数的不断增大,图像信号在两组正交函数上的投影值出现了大量的正负相抵消的情景,从而导致了得到的频率系数在数值(绝对值)上的不断减小。当p=0,q=0,得到的频率系数与余弦函数无关(cos0=1),完全就是图像抽样信号的均值,也是最大的一个值,称为DCT变换的直流(DC)系数,其它的频率系数都由余弦函数参与得到,所以被称为交流(AC)系数。
分析DCT系数的性质 中、低频系数所含有的原始信号的成份较多,所以由其反变换重构图像就能得到图像的近似部分。高频系数是在众多正交的余弦函数上投影的加权,是这些不同频率的余弦信号一起来刻画原始信号的结果,图像近似的部分在这些函数上被相互抵消了,剩下的就是图像的细节部分了。 接下来对lenna图做8×8分块DCT。利用dctmtx函数,输入dctmtx(8),得到阶数为8的正交DCT变换矩阵如下图。
分块DCT
分块DCT 继而利用blkproc函数完成分块操作。blkproc函数的调用格式入下: B = blkproc(A,[m n],fun,P1,P2,...) 其中A为原始信号矩阵,[m n]为分块的大小,fun为对每一个分块x的操作规则,Pi是fun 中调用的参数。对图像进行8×8 DCT分块操作,得到的8×8分块DCT系数矩阵如下图。
分块DCT
分块DCT 所以,对图像进行分块DCT后,在每一个8×8范围内其频率系数仍然符合前面我们总结的DCT系数分布规律。
分块DCT与整体DCT的三维投影