主要内容

离散余弦变换

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)对应数学量一个00而且B00分别)。

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 × 8矩阵,64基函数由该图表示。

8 × 8矩阵的64基函数

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

DCT变换矩阵

使用图像处理工具箱™软件有两种计算DCT的方法。第一种方法是使用dct2函数。dct2使用基于fft的算法进行大输入的快速计算。第二种方法是使用DCT变换矩阵,由函数返回dctmtx对于较小的正方形输入,如8 × 8或16 × 16,可能更有效。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)压缩图像。该示例计算输入图像中8 × 8块的二维DCT,丢弃(设置为零)每个块中的64个DCT系数中的10个,然后使用每个块的二维逆DCT重建图像。算例采用变换矩阵计算方法。

JPEG图像压缩算法中采用了DCT算法。将输入图像分成8 × 8或16 × 16的块,并对每个块计算二维DCT。然后对DCT系数进行量化、编码和传输。JPEG接收器(或JPEG文件读取器)解码量化的DCT系数,计算每个块的二维DCT逆,然后将这些块重新组合成单个图像。对于典型的图像,许多DCT系数的值接近于零。这些系数可以被丢弃,而不会严重影响重建图像的质量。

将图像读入工作区并将其转换为类

我= imread (“cameraman.tif”);I = im2double(我);

计算图像中8 × 8块的二维DCT。这个函数dctmtx返回n × n DCT变换矩阵。

T = dctmtx (8);dct = @(block_struct) T * block_struct。数据* T ';B = blockproc(I,[8 8],dct);

在每个块中除去64个DCT系数中的10个。

掩码= [1 1 1 1 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 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 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 8],@(block_struct)掩码。* block_struct.data);

利用每个块的二维逆DCT重构图像。

invdct = @(block_struct) T' * block_struct. invdct = @(block_struct)数据* T;I2 = blockproc(B2,[8 8],invdct);

显示原始图像和重建图像,并排。尽管重建图像的质量有所下降,但仍然可以清晰地识别,尽管将近85%的DCT系数被丢弃了。

imshow(我)

图中包含一个axes对象。坐标轴对象包含一个image类型的对象。

图imshow (I2)

图中包含一个axes对象。坐标轴对象包含一个image类型的对象。

Baidu
map