离散余弦变换DCT的实现与研究
通信专业课程设计一
课程设计(论文)
设计(论文)题目:
信源编码中压缩算法DCT变换函数的研究
姓学班学
名______
________
指导教师_
年月日
太原科技大学课程设计(论文)任务书
学院(直属系):学生姓名设计(论文)题目
时间:指导教师
年月日
信源编码中压缩算法DCT变换函数的研究
主要研究内容
用DCT变换实现图像压缩,先根据理论部分设计程序代码,然后再在Matlab软件中运行程序,并进行性能分析。
研究方法
主要运用实验法与观察法,通过编写程序实现对图像的DCT变换,观察图像结果进而实现对DCT变换的研究。
主要技术指标(或研究目标)
利用DCT变换编码方法进行图像压缩,提高信息传输的有效性及通信质量。
教研室意见
教研室主任(专业负责人)签字:
年
月
日
目
第1章第2章
录
摘要.............................................................................................................................................II
绪论.........................................................................................................................-1-DCT变换概述..........................................................................................................-2-
2.1DCT函数介绍..............................................................................................................-2-2.2DCT变换介绍..............................................................................................................-2-2.2.1DCT变换原理.......................................................................................................-2-2.2.2DCT变换编码的步骤...........................................................................................-3-2.2.3实验部分.........................................................................................错误!未定义书签。第3章
程序运行及结果分析..................................................................-5-
3.1程序代码.....................................................................................................................-5-3.2运行结果分析.............................................................................................................-7-第4章
结论.......................................................................................................................-11-
参考文献...............................................................................................................................-12-
信源编码中压缩算法DCT变换函数的应用
摘要
图像压缩是关于用最少的数据量来表示尽可能多的原图像的信息的一个过程。对于图像来说,如果需要进行快速或实时传输以及大量存储,就需要对图像数据进行压缩,在同等的用心容量下.如果图像数据压缩后再传输,就可以传输更多的图像信息,也就可以增加通信的能力。变换编码是把图像中的各个像素从一种空间变换到另一种空间.然后针对变换后的信号进行量化与编码操作的一种图象压缩编码技术。
本实验实现的是用DCT变换实现图像压缩,先根据理论部分设计程序代码,然后再在Matlab软件中运行程序,然后进行相关的性能分析。在离散变换中,最佳变换也是K-L变换。其正交矢量系和变换矩阵可根据输入矢量各分量间的相关系数来求。最后,对设计结论进行了简单的总结。
关键词:图象压缩
变换编码DCTJPEG
第1章绪论
离散余弦变换(DCTforDiscreteCosineTransform)是与傅里叶变换相关的一种变换,它类似于离散傅里叶变换(DFTforDiscreteFourierTransform),但是只使用实数。离散余弦变换相当于一个长度大概是它两倍的离散傅里叶变换,这个离散傅里叶变换是对一个实偶函数进行的(因为一个实偶函数的傅里叶变换仍然是一个实偶函数),在有些变形里面需要将输入或者输出的位置移动半个单位(DCT有8种标准类型,其中4种是常见的)。
最常用的一种离散余弦变换的类型是下面给出的第二种类型,通常我们所说的离散余弦变换指的就是这种。它的逆,也就是下面给出的第三种类型,通常相应的被称为"反离散余弦变换","逆离散余弦变换"或者"IDCT"。
有两个相关的变换,一个是离散正弦变换(DSTforDiscreteSineTransform),它相当于一个长度大概是它两倍的实奇函数的离散傅里叶变换;另一个是改进的离散余弦变换(MDCTforModifiedDiscreteCosineTransform),它相当于对交叠的数据进行离散余弦变换。
改进的离散余弦变换(ModifiedDiscreteCosineTransform,MDCT)是一种与傅立叶变换相关的变换,以第四型离散余弦变换(DCT-IV)为基础,重叠性质如下:它是应用于处理较大的资料集合,当连续的资料区块中,当前的资料区块跟后续的资料区块有重叠到的情形;即当前资料区块的后半段与下一个资料区块的前半段为重叠的状态。这样的重叠情形,除了具有离散余弦变换(DiscreteCosineTransform,DCT)的能量压缩特性外,也使这种变换在应用于信号压缩时更引人注目。因为它有助于避免由于资料区块边界所产生的多余资料。因此,这种变换可应用于MP3,AC-3,oggvorbis,和AAC的音频压缩等方面。
第2章
2.1DCT函数介绍
DCT变换概述
常用的信源编码方法有算术编码、矢量量化、预测编码和变换编码等多种方法,变换编码就是经变换后的信号的样值能更有效地编码,也就是通过变换来解除或减弱信源符号间的相关性,再将变换后的样值进行标量量化,或采用对于独立信源符号的编码方法,以达到压缩码率的目的。
在实用中常用离散余弦变换(DCT),尤其是对视频图像信号,其统计特性接近一阶马尔可夫链,离散余弦变换的正交矢量近似于相应的K-L变换的正交矢量。
余弦变换的完备正交归一函数是
(2-1)
,t
对这些函数在(0,T)内取N个样值,即得离散余弦变换矩阵的元为
(2-2)
(2-3)
(2-4)
分别可得变换和反变换的矩阵形式。
2.2DCT变换介绍
2.2.1
DCT变换原理
基于DCT(离散余弦变换)压缩编码算法是有失真的压缩编码,图2.1为DCT变换编码原理图。原图像
RGB/YUV
DCT
量化
编码
YVU/RGBIDCT图2.1
解量化
DCT变换编码原理图
解码
2.2.2DCT变换编码的步骤
DCT变换编码的主要步骤是:颜色空间转换,正向离散余弦变换(FDCT),量化,熵编码(哈达码编码和算术编码)。1)颜色空间转换和采样
JPEG压缩只支持Y
颜色模式,其中Y代表亮度,
代表色度,所以在将彩色图像
模式。转换可通过计算
进行数据压缩之前必须对颜色模式进行转换,将RGB模式转为Y下述公式完成:
Y=0.299R+0.587G+0.114B=-0.169R-0.331G+0.5B=0.5R-0.4187G-0.0813B
对转换后的数据进行采样,采样比例一般是4:2:2或4:1:1。
(2-5)(2-6)(2-7)
经过采样后的图像数据的色度数据比原来减少了一半。选择这样的采样方式是因为人的视觉对亮度要比对色度更敏感,而重建后的图像与原图的差异是人的视觉所不易察觉到的。2)DCT变换
在进行DCT变换之前,先把图像分成88的子块。
将用P位表示的图像数据(一般用8位表示一个像素的颜色分量),即在[0,围内表示的无符号整数,变成[
]范
]范围内表示的有符号数,作为DCT变换的
输入量。经过DCT变换,将空域中表示的图像数据转换到频域中进行表示,并获得N个变换
系数。变换公式为
(2-8)
逆DCT变换公式为
(2-9)
其中,
其他
输出系数排列中越往后0越多。3)量化
为了达到进一步压缩数据的目的,需要对DCT系数
进行量化。在JPEG中采用了
按Zig-zag排序,其中直流量为DC系数,交流量为AC系数。排列
线性均匀量化器,为减少比较数,增加零值,JPEG分别对Y,U,V的不同系统有不同量化间隔Q(u,v),并提供了亮度与色度两张量化表。4)熵编码
根据信息论的原理,可以找到最佳数据压缩编码的方法,数据压缩的理论极限是信息熵。如果要求编码过程中不丢失信息量,即要求保存信息熵,这种信息保持编码叫熵编码,是根据消息出现概率的分布特性而进行的,是无损数据压缩编码。
根据输入熵编码器表格的符号节点的加权值和与其相邻的其它节点的加权值对哈夫曼树进行有效的变换,从而提高压缩效率;利用八字形树旋转和准旋转对哈夫曼树进行有效的变换,从而使输入符号的加权值具有与现在输入的视频数据最合适的值,缩短变换表格的时间。可以查看相关的码表进行熵编码。
2.4实验部分
本实验实现的是用DCT变换实现图像压缩,先根据理论部分设计程序代码,然后再在Matlab软件中运行程序,在离散变换中,最佳变换也是K-L变换。其正交矢量系和变换矩阵可根据输入矢量各分量间的相关系数来求,而不用解积分方程,即只需要相关矩阵的特征值和特征矢量。容易验证经过K-L变换后的输出矢量的相关系数为零,即能完全解除输出矢量间的线性相关性,且各分量的方差就是各特征值,它们各不相等,下降很快。这样在实际编码时,就可以根据压缩编码的要求,不传送方差很小的那些分量,提高传输速率。
还有很多离散变换,如正反变换矩阵都相同的离散哈尔变换和离散沃尔什变换;广泛用于电视信号编码的斜变换和多重变换;小波变换等。在实际应用中,需要根据信源特性来选择变换方法以达到解除相关性、压缩码率的目的。当信源的统计特性很难确知时,可用各种变换分别对信源进行变换编码,然后用实验或计算机仿真来计算这些参数。
第3章
程序调试及运行结果分析
3.1程序代码
I=imread('cameraman.tif')I=im2double(I)J=dct2(I);T=dctmtx(8)a1=[1611101624
40
5161;[**************]5;[**************]6;[1**********]7
80
62;
[***********];[***********];[***********]01;[***********]9];fori=1:8:200
forj=1:8:200
P=I(i:i+7,j:j+7);K=T*P*T';I2(i:i+7,j:j+7)=K;K=K./a1;
K(abs(K)
title('DCT变换后的频域图像');fori=1:8:200
%转换图像矩阵为双精度型。
%产生二维DCT变换矩阵
%量化
%显示DCT变换后的频域图像
forj=1:8:200
P=I3(i:i+7,j:j+7).*a1;K=T'*P*T;I4(i:i+7,j:j+7)=K;endendfigure;imshow(I4);title('复原图像');
B=blkproc(I,[8,8],'P1*x*P2',T,T')
%计算二维DCT,矩阵T及其转置是DCT函数P1*X*P2的参数mask=[11110000
[***********][***********][***********]00]
%二值掩模,用来压缩DCT系数,只留下DCT系数中左上角的10个B2=blkproc(B,[88],'P1.*x',mask)I2=blkproc(B2,[88],'P1*x*P2',T',T)figureimshow(I)title('原始图像');figureimshow(I2);title('压缩图像');figureimshow(J);
%反量化
%只保留DCT变换的10个系数%重构图像
figure
mesh(J)
colorbar('horiz')%画出J的立体网状图%在水平条方向用不同的颜色表示曲面的高度
3.2运行结果分析
执行程序产生的二维DCT变换矩阵T如下:
T=
0.3536
0.4904
0.4619
0.4157
0.3536
0.2778
0.1913
0.09750.35360.41570.1913-0.0975-0.3536-0.4904-0.4619-0.27780.35360.35360.35360.35360.35360.27780.0975-0.0975-0.2778-0.4157-0.1913-0.4619-0.4619-0.19130.1913-0.4904-0.27780.27780.49040.0975-0.35360.35360.3536-0.3536-0.35360.09750.4157-0.4157-0.09750.49040.4619-0.1913-0.19130.4619-0.46190.4157-0.49040.4904-0.41570.2778
图3.1cameraman的原始图像
0.3536-0.49040.4619-0.41570.3536-0.27780.1913-0.0975
图3.2DCT变换后的频域图像
分析:通过矩阵a1只对图像左上角的一部分进行了DCT
变换后的频域处理。
图3.3复原图像
分析:对图3.2左上角变换后的频域图像进行反量化得到复原图像,因此复原图像就只有
原图像的左上角一部分。
图3.4压缩图像
分析:只保留DCT变换的10个系数,运用逆DCT变换,对图像进行重构,从而得到原图
像的压缩图像。
图3.5二维离散余弦变换图像
分析:直接运用函数dct2对原图像进行二维离散余弦变换。
图3.6二维离散余弦变换的立体网状图
分析:在图中的最下面一行表示在水平条方向用不同的颜色表示曲面的高度,根据图3.5显示的二维离散余弦变换图像知在图像的左上角曲面的高度有所不同,因此在图像左上角部分的立体网状图呈现出图3.6的情况。
第4章
应用。结论本次的课程设计是Matlab语言的实现,目的是掌握Matlab语言在工程设计中的基本
Matlab语言的应用是非常广泛的,就本次学习过程中,首先从基本的语言语法入手,然后再逐渐深入。在本次课程设计中,我选择的比较接近自己专业应用范围,也是大学学过的信息论与编码中信源编码压缩算法DCT函数变换应用的设计。好能让自己更好的掌握专业知识和Matlab语言在通信专业中的应用。
就语言本身而言,在老师的指导下,很快入了门。和学过的其它像C语言一样,Matlab语言相对简单,但是应用程度上,此语言非常广泛,在学习时主要研究某一方面会很快喜欢上这个语言。
在这次实验设计中,滤波器的设计方法选择上,要根据实际的心电图高频干扰去分析所要设计的数字滤波器的指标,在慢慢去设计做。在具体的设计过程中,也遇到了很多问题。虽然此次课程设计是一个人完成,但从以前做了许多设计中,感受到集体的力量是很大的。所以就去请教了很多同学,在加上自己的勤奋查阅相关资料,就得到了实验所要达到的预期结果。
从这次设计中,我感觉现在有许多专业基础课的知识需要很好的掌握才能彻底理解了此方法的含义,认真对待才能很顺利的去完成这次设计。在实验设计中,要不断的去看课本,查阅资料,才能运用。总之感觉到只有认真的去学习每一门专业课,才能在做出综合较强的设计。
总体感觉,要想做好一次设计,首先有一个认真对待的心态,然后去勤奋的查阅,虚心的请教别人,最后在总结自己的专业知识收获和心得收获。
参考文献
[1]曹雪虹,张宗橙.信息论与编码.第2版.北京:清华大学出版社.2009:18-25
[2]郭文强,侯勇严.数字图像处理.西安:西安电子科技大学出版社,2009:6-12
[3]关可,王建新.信息论与编码技术.北京:清华大学出版社,2009:35-38