主要内容

离散余弦变换

DCT的定义

离散余弦变换(DCT)代表了一种形象的和不同的大小和频率的正弦曲线。的dct2函数计算二维离散余弦变换(DCT)的形象。DCT的财产,一个典型的形象,最直观重要的图像信息是集中在少数的DCT系数。出于这个原因,DCT通常用于图像压缩应用程序。例如,DCT的核心是国际标准被称为JPEG有损图像压缩算法。(这个名字来自开发工作组标准:联合摄影专家组)。

一个m×n的矩阵的二维DCT一个定义如下。

B p = α p α = 0 1 n = 0 N 1 一个 n 因为 π ( 2 + 1 ) p 2 因为 π ( 2 n + 1 ) 2 N , 0 p 1 0 N 1 α p = { 1 / , 2 / , p = 0 1 p 1 α = { 1 / N , 2 / N , = 0 1 N 1

的值B魁人党被称为“DCT系数一个。(注意,在MATLAB矩阵指标®总是从1比0;因此,MATLAB矩阵元素(1)B (1,1)对应的数学量一个00B00分别)。

DCT是一个可逆的变换,并给出它的逆矩阵

一个 n = p = 0 1 = 0 N 1 α p α B p 因为 π ( 2 + 1 ) p 2 因为 π ( 2 n + 1 ) 2 N , 0 1 0 n N 1 α p = { 1 / , 2 / , p = 0 1 p 1 α = { 1 / N , 2 / N , = 0 1 N 1

逆DCT方程可以被解释为意味着任何m×n的矩阵一个可以写成一笔吗函数的形式

α p α 因为 π ( 2 + 1 ) p 2 因为 π ( 2 n + 1 ) 2 N , 0 p 1 0 N 1

这些函数被称为基函数DCT。DCT系数B魁人党那么,可以视为权重适用于每一个基函数。8-by-8矩阵,64基函数是这个图所示。

64年基函数的一个8-by-8矩阵

64年被安排在一个8-by-8网格基础功能。当网格中的行和列指数增加,垂直和水平更高频率的基础功能,分别。

水平频率增加从左到右,从上到下垂直频率增加。在左上角的constant-valued基函数通常被称为直流基函数,相应的DCT系数B00通常被称为直流系数

DCT变换矩阵

有两种方法可以使用图像处理工具箱™软件计算DCT。第一种方法是使用dct2函数。dct2使用一个FFT-based算法快速计算与大投入。第二种方法是使用DCT变换矩阵,这是由函数返回dctmtx小广场和可能更有效的输入,如8-by-8或16 x16。m×m变换矩阵T是由

T p = { 1 2 因为 π ( 2 + 1 ) p 2 p = 0 , 1 p 1 , 0 1 0 1

对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)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。