离散余弦变换
DCT的定义
离散余弦变换(DCT)代表了一种形象的和不同的大小和频率的正弦曲线。的dct2
函数计算二维离散余弦变换(DCT)的形象。DCT的财产,一个典型的形象,最直观重要的图像信息是集中在少数的DCT系数。出于这个原因,DCT通常用于图像压缩应用程序。例如,DCT的核心是国际标准被称为JPEG有损图像压缩算法。(这个名字来自开发工作组标准:联合摄影专家组)。
一个m×n的矩阵的二维DCT一个
定义如下。
的值B魁人党被称为“DCT系数的一个
。(注意,在MATLAB矩阵指标®总是从1比0;因此,MATLAB矩阵元素(1)
和B (1,1)
对应的数学量一个00和B00分别)。
DCT是一个可逆的变换,并给出它的逆矩阵
逆DCT方程可以被解释为意味着任何m×n的矩阵一个
可以写成一笔吗锰函数的形式
这些函数被称为基函数DCT。DCT系数B魁人党那么,可以视为权重适用于每一个基函数。8-by-8矩阵,64基函数是这个图所示。
64年基函数的一个8-by-8矩阵
水平频率增加从左到右,从上到下垂直频率增加。在左上角的constant-valued基函数通常被称为直流基函数,相应的DCT系数B00通常被称为直流系数。
DCT变换矩阵
有两种方法可以使用图像处理工具箱™软件计算DCT。第一种方法是使用dct2
函数。dct2
使用一个FFT-based算法快速计算与大投入。第二种方法是使用DCT变换矩阵,这是由函数返回dctmtx
小广场和可能更有效的输入,如8-by-8或16 x16。m×m变换矩阵T
是由
对m×m矩阵一个
,T *
m×m矩阵的列包含一维DCT的列一个
。二维DCT的一个
可以计算为B = T * * T '
。自T
是一个真正的正交矩阵,其逆是一样的转置。因此,逆的二维DCTB
是由T ' * B * T
。
离散余弦变换的图像压缩
这个例子展示了如何使用的压缩图像离散余弦变换(DCT)。示例计算二维DCT 8-by-8块在一个输入图像,丢弃(设置为零)除了10 64年在每一块的DCT系数,然后可以使用二维逆每个块的DCT图像。例子使用了变换矩阵的计算方法。
使用DCT的JPEG图像压缩算法。输入图像分为8-by-8或16 x16块,和二维DCT计算每个块。然后DCT系数量化、编码和传输。JPEG接收器(或JPEG文件阅读器)解码量化的DCT系数,计算每一块的二维DCT,然后把块在一起成一个单一的形象。典型的图像,许多DCT系数值接近于零。这些系数可以被丢弃而不严重影响重建图像的质量。
读一个图像到工作区中并把它转换成类双
。
我= imread (“cameraman.tif”);I = im2double(我);
计算8-by-8的二维DCT块的图像。这个函数dctmtx
返回n×n DCT变换矩阵。
T = dctmtx (8);dct = @ (block_struct) T * block_struct。数据* T ';B = blockproc(我,[8],dct);
抛弃所有,但10 64年每个DCT系数块。
掩码= [1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];B2 = blockproc (B, [8], @ (block_struct)面具。* block_struct.data);
使用二维逆重构图像DCT的每一块。
invdct = @ (block_struct) T ' * block_struct。数据* T;I2 = blockproc (B2, [8], invdct);
显示原始图像和重建图像,并排。虽然有一些损失重建图像的质量,这是显而易见的,即使几乎85%的DCT系数被丢弃。
imshow(我)
图imshow (I2)