二维DCT变换

DCT 变换及整数DCT 变换

为了给x264打好基础,x264用的是整数DCT 变换,所以就先来说说DCT 变换吧。 DCT(Discrete Cosine Transform),又叫离散余弦变换,它的第二种类型,经常用于信号和图像数据的压缩。经过DCT 变换后的数据能量非常集中,一般只有左上角的数值是非零的,也就是能量都集中在离散余弦变换后的直流和低频部分,下面我会用matlab 来演示整个过程。

1. 一维DCT 变换 我们首先来看看一维的DCT 变换,这是二维的基础。一维的DCT 变换共有8种,其中最

实用的是第二种形式,公式如下:其中c(u)是加上去一个系数,为了能使DCT 变换矩阵成为正交矩阵,在后面二维变换将看到他的作用。N 是

f(x)的总数。相比其他几种形式,他的运算还是比较简单的,因此也用的比较广。

2. 二维DCT 变换

二维DCT 变换是在一维的基础上再进行一次DCT 变换,这个比较好理解,直接看公式:

这里我只讨论两个N 相等的情况,也就是数据是方阵的形式,在实际应用中对不是方阵的数据都是先补齐再进行变换的。为了matlab 仿真方便点,写成矩阵形式:

下面就用matlab 来模拟一下,使用随机生成的4x4矩阵

作为输入,程序如下:

1.

2.

3. clear; clc; X=round(rand(4)*100);%随机生成的数据

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16. A=zeros(4);%变换矩阵 for i=0:3 for j=0:3 if i==0 a=sqrt(1/4); else a=sqrt(2/4); end A(i+1,j+1)=a*cos(pi*(j+0.5)*i/4); end end Y=A*X*A';%DCT变换 YY=dct2(X);%用matlab 中的函数进行DCT 变换

Y 是使用上面的公式进行变换,YY 是用matlab 自带的dct2函数变换,结果是是: 1.

2.

3.

4.

5.

6.

7.

8.

9. 10.

11.

12.

13.

14.

15.

16.

17. X = 61 19 50 20 82 26 61 45 89 90 82 43 93 59 53 97 Y = 242.5000 32.1613 22.5000 33.2212 -61.8263 7.9246 -10.7344 30.6881 -16.5000 -14.7549 22.5000 -6.8770 8.8322 16.6881 -35.0610 -6.9246 YY = 242.5000 32.1613 22.5000 33.2212 -61.8263 7.9246 -10.7344 30.6881 -16.5000 -14.7549 22.5000 -6.8770 8.8322 16.6881 -35.0610 -6.9246

可以看出Y 和YY 的结果是一样的,这也进一步验证了上面的公式是正确的。由于X 是我随机生成的,相关性很小,变换后的结果比较乱;如果是信号或图像这样相关性比较大的数据的话,数值会集中在左上角,右下角一般都是零,再使用“之”字型扫描得到数据流会包含很多连续的零,编码后数据量会非常小,这就是DCT 变换带来的好处。

3. 二维DCT 反变换

DCT 逆变换的公式如下:

矩阵形式可以

由正变换的公式直接推出来,因为在A 中加了c(i)这个系数,使得A 成为了正交矩阵,所以我们就可以这样做:

原来的数据: 在用matlab 来验证是否能反变换出

1.

2.

3.

4.

5.

6.

7. 8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20. clear; clc; X=[ 61 19 50 20 82 26 61 45 89 90 82 43 93 59 53 97]; A=zeros(4); for i=0:3 for j=0:3 if i==0 a=sqrt(1/4); else a=sqrt(2/4); end A(i+1,j+1)=a*cos(pi*(j+0.5)*i/4); end end Y=A*X*A'; X1=A'*Y*A;

X 使用的是上面正变换用的数据,运行后得到的X1为:

1.

2.

3.

4.

5. X1 = 61.0000 19.0000 50.0000 20.0000 82.0000 26.0000 61.0000 45.0000 89.0000 90.0000 82.0000 43.0000 93.0000 59.0000 53.0000 97.0000

和X 完全相等。在实际进行编码的时候,比如JPEG 压缩的时候,只会对Y 左上角的数据进行传输,所以解码出来的内容不会完全和原来的相同。

4. 整数DCT 变换

说道DCT 就顺便提一下x264中的整数DCT 变换,整数

DCT 变换是以DCT 变换为基础的,为了减少计算量做的一些调整,下面我写一下整数DCT 变换公式的大致推导过程:

(4)

然后根据A 是正交矩阵,把c=bd带入A 中,使行向量为单位向量可以得到d=2-1=0.4142。这个数不是有理数, 不便于使用二进制的算术运算. 为简化运算, 令d=1/2。

T 2为了保持矩阵A 的正交性, 及A A =I , 求解得到b=/[2(1+d )]=2/5。于是变换式(4)

中的常数定选定为:a=1/2, b =2/5,d=1/2,而c =/10。

代入上面的式子中,把0.5提取出来放到右边的点

乘中就得到了:这样在对大括号部分进行计算时就都是加法和减法了。需要说明的是:(1)这个正交变换是近似的正交变换,因为对d 和b 做了改动,因此变换的输出与4x4的DCT 变换不一致;但在精度上没有太大降低;(2)在x264实际编码中,变换和量化是一起进行的,使得编码速度有了很大的提高。

DCT 变换及整数DCT 变换

为了给x264打好基础,x264用的是整数DCT 变换,所以就先来说说DCT 变换吧。 DCT(Discrete Cosine Transform),又叫离散余弦变换,它的第二种类型,经常用于信号和图像数据的压缩。经过DCT 变换后的数据能量非常集中,一般只有左上角的数值是非零的,也就是能量都集中在离散余弦变换后的直流和低频部分,下面我会用matlab 来演示整个过程。

1. 一维DCT 变换 我们首先来看看一维的DCT 变换,这是二维的基础。一维的DCT 变换共有8种,其中最

实用的是第二种形式,公式如下:其中c(u)是加上去一个系数,为了能使DCT 变换矩阵成为正交矩阵,在后面二维变换将看到他的作用。N 是

f(x)的总数。相比其他几种形式,他的运算还是比较简单的,因此也用的比较广。

2. 二维DCT 变换

二维DCT 变换是在一维的基础上再进行一次DCT 变换,这个比较好理解,直接看公式:

这里我只讨论两个N 相等的情况,也就是数据是方阵的形式,在实际应用中对不是方阵的数据都是先补齐再进行变换的。为了matlab 仿真方便点,写成矩阵形式:

下面就用matlab 来模拟一下,使用随机生成的4x4矩阵

作为输入,程序如下:

1.

2.

3. clear; clc; X=round(rand(4)*100);%随机生成的数据

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16. A=zeros(4);%变换矩阵 for i=0:3 for j=0:3 if i==0 a=sqrt(1/4); else a=sqrt(2/4); end A(i+1,j+1)=a*cos(pi*(j+0.5)*i/4); end end Y=A*X*A';%DCT变换 YY=dct2(X);%用matlab 中的函数进行DCT 变换

Y 是使用上面的公式进行变换,YY 是用matlab 自带的dct2函数变换,结果是是: 1.

2.

3.

4.

5.

6.

7.

8.

9. 10.

11.

12.

13.

14.

15.

16.

17. X = 61 19 50 20 82 26 61 45 89 90 82 43 93 59 53 97 Y = 242.5000 32.1613 22.5000 33.2212 -61.8263 7.9246 -10.7344 30.6881 -16.5000 -14.7549 22.5000 -6.8770 8.8322 16.6881 -35.0610 -6.9246 YY = 242.5000 32.1613 22.5000 33.2212 -61.8263 7.9246 -10.7344 30.6881 -16.5000 -14.7549 22.5000 -6.8770 8.8322 16.6881 -35.0610 -6.9246

可以看出Y 和YY 的结果是一样的,这也进一步验证了上面的公式是正确的。由于X 是我随机生成的,相关性很小,变换后的结果比较乱;如果是信号或图像这样相关性比较大的数据的话,数值会集中在左上角,右下角一般都是零,再使用“之”字型扫描得到数据流会包含很多连续的零,编码后数据量会非常小,这就是DCT 变换带来的好处。

3. 二维DCT 反变换

DCT 逆变换的公式如下:

矩阵形式可以

由正变换的公式直接推出来,因为在A 中加了c(i)这个系数,使得A 成为了正交矩阵,所以我们就可以这样做:

原来的数据: 在用matlab 来验证是否能反变换出

1.

2.

3.

4.

5.

6.

7. 8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20. clear; clc; X=[ 61 19 50 20 82 26 61 45 89 90 82 43 93 59 53 97]; A=zeros(4); for i=0:3 for j=0:3 if i==0 a=sqrt(1/4); else a=sqrt(2/4); end A(i+1,j+1)=a*cos(pi*(j+0.5)*i/4); end end Y=A*X*A'; X1=A'*Y*A;

X 使用的是上面正变换用的数据,运行后得到的X1为:

1.

2.

3.

4.

5. X1 = 61.0000 19.0000 50.0000 20.0000 82.0000 26.0000 61.0000 45.0000 89.0000 90.0000 82.0000 43.0000 93.0000 59.0000 53.0000 97.0000

和X 完全相等。在实际进行编码的时候,比如JPEG 压缩的时候,只会对Y 左上角的数据进行传输,所以解码出来的内容不会完全和原来的相同。

4. 整数DCT 变换

说道DCT 就顺便提一下x264中的整数DCT 变换,整数

DCT 变换是以DCT 变换为基础的,为了减少计算量做的一些调整,下面我写一下整数DCT 变换公式的大致推导过程:

(4)

然后根据A 是正交矩阵,把c=bd带入A 中,使行向量为单位向量可以得到d=2-1=0.4142。这个数不是有理数, 不便于使用二进制的算术运算. 为简化运算, 令d=1/2。

T 2为了保持矩阵A 的正交性, 及A A =I , 求解得到b=/[2(1+d )]=2/5。于是变换式(4)

中的常数定选定为:a=1/2, b =2/5,d=1/2,而c =/10。

代入上面的式子中,把0.5提取出来放到右边的点

乘中就得到了:这样在对大括号部分进行计算时就都是加法和减法了。需要说明的是:(1)这个正交变换是近似的正交变换,因为对d 和b 做了改动,因此变换的输出与4x4的DCT 变换不一致;但在精度上没有太大降低;(2)在x264实际编码中,变换和量化是一起进行的,使得编码速度有了很大的提高。


相关内容

  • 图像变换编码实验说明
  • 图像变换编码程序设计实验指导 一.实验简介: 数据压缩技术是多媒体应用和音视频传输系统的核心技术之一.变换编码是最常用的图像压缩方法之一,JPEG 和JPEG2000等图像标准都采用了变换编码方法.本实验的主要任务是设计一个基于变换编码的图像压缩和解压缩程序.这是一个综合性的设计类实验,指导教师给出 ...

  • 图像压缩编码
  • 图像压缩编码 物电学院 114班 11223313 戚善桃 摘要:随着科学技术的发展, 图像压缩技术越来越引起人们的关注.为此从众多的图像压缩编码标准中选取了基于DCT 变换的JPEG 图像压缩编码算法进行研究,并通过对比分析各种软件特性选取了MATLAB 进行实验仿真. 首先说明了图像压缩在现代通 ...

  • 多媒体通信课程实验报告
  • 实验2<图像处理实验> 实验学时: 4 实验地点: 第一综合楼 实验日期: 2014年6月 9日 一.实验目的 图像文件解析及处理实验的目的是让学生了解常用图像文件的格式和基本的图像处理方法,并掌握相关的编程技术.本实验不仅能让学生巩固和扩展所学理论知识,同时可提高编程实践能力,为进一步 ...

  • 多媒体技术基础与应用简答论述题
  • 多媒体技术基础与应用简答论述题 1-7 7.简述多媒体计算机的关键技术及其主要应用领域? 答:多媒体计算机的关键技术是:(1)视频音频信号获取技术:(2)多媒体数据压缩编码和解码技术: (3)视频音频数据的实时处理和特技:(4)视频音频数据的输出技术. 多媒体技术促进了通信.娱乐和计算机的融合.多媒 ...

  • 离散余弦变换
  • 编辑本段基本介绍 最常用的一种离散余弦变换的类型是下面给出的第二种类型,通常我们所说的离散余弦变换指的就是这种.它的逆,也就是下面给出的第三种类型,通常相应的被称为" 反离散余弦变换" ," 逆离散余弦变换" 或者" IDCT " . 有两 ...

  • 图像处理技术
  • 3.1 图像的基本概念 3.1.1 图像的基本属性 1. 图像分辨率 2. 显示分辨率 3. 图像深度 4. 真彩色 5. 真彩色图像 3.1.2 图像的种类 放大区域 图3-1 矢量图和局部放大 放大区域 图 3-2 位图及其局部的放大 图3-3 单色图和灰度图 图3-4 真彩色图像和8色图像 3 ...

  • Matlab 图像处理相关函数命令大全
  • Matlab 图像处理相关函数命令大全 一.通用函数: colorbar 显示彩色条 语法:colorbar \ colorbar('vert') \ colorbar('horiz') \ colorbar(h) \ h=colorbar(...) \ colorbar(...,'peer',ax ...

  • 计算机图像处理概述
  • 计算机图像处理 结 课 作 业 姓名:李 晓 通 学号:10360217 班级:10级信管2班 联系方式:[1**********] 目录 一.图像处理的基本概念„„„„„„„„„„„„„„„„„„„ 3 二.数字图像压缩编码技术的产生及发展过程„„„„„„„„„„ 3 三.图像数据压缩原理„„„„ ...

  • 一种DCT中频水印嵌入与提取方法
  • 一种DCT 中频水印嵌入与提取方法 闫德勤 韩亚丹 高 艳 (辽宁师范大学计算机与信息技术学院,大连116029) E-maiI :[email protected] 摘 要 数字水印在保护图像的所有权和软件的版权等方面得到了广泛的应用.一个实用的数字水印算法应该既能保 证图像具有良好的可视性的同时, ...