基于dct的图像压缩编码算法的matlab实现终稿Word文件下载.docx

上传人:b****6 文档编号:20385247 上传时间:2023-01-22 格式:DOCX 页数:25 大小:341.25KB
下载 相关 举报
基于dct的图像压缩编码算法的matlab实现终稿Word文件下载.docx_第1页
第1页 / 共25页
基于dct的图像压缩编码算法的matlab实现终稿Word文件下载.docx_第2页
第2页 / 共25页
基于dct的图像压缩编码算法的matlab实现终稿Word文件下载.docx_第3页
第3页 / 共25页
基于dct的图像压缩编码算法的matlab实现终稿Word文件下载.docx_第4页
第4页 / 共25页
基于dct的图像压缩编码算法的matlab实现终稿Word文件下载.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

基于dct的图像压缩编码算法的matlab实现终稿Word文件下载.docx

《基于dct的图像压缩编码算法的matlab实现终稿Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于dct的图像压缩编码算法的matlab实现终稿Word文件下载.docx(25页珍藏版)》请在冰豆网上搜索。

基于dct的图像压缩编码算法的matlab实现终稿Word文件下载.docx

视觉冗余:

视觉系统对于图像场的注意是非均匀和非线性的,视觉系统不是对图像的任何变化都能感知。

所谓的图像压缩编码技术就是对要处理的图像数据按一定的规则进行变换和组合,从而达到以尽可能少的数据流(代码)来表示尽可能多的数据信息。

在众多的图像压缩编码标准中,JPEG(JointPhotographicExpertsGroup)格式是一种称为联合图像专家组的图像压缩格式,它适用于不同类型、不同分辨率的彩色和黑白静止图像[2]。

在JPEG图像压缩算法中,一种是以离散余弦变换(DCT,DiscreteCosineTransform)为基础的有损压缩算法,另一种是以预测技术为基础的无损压缩算法。

1.1.1离散余弦变换

DCT变换利用傅立叶变换的性质。

采用图像边界褶翻将像变换为偶函数形式,然后对图像进行二维傅立叶变换,变换后仅包含余弦项,所以称之为离散余弦变换。

DCT编码属于正交变换编码方式,用于去除图像数据的空间冗余。

变换编码就是将图像光强矩阵(时域信号)变换到系数空间(频域信号)上进行处理的方法。

在空间上具有强相关的信号,反映在频域上是在某些特定的区域内能量常常被集中在一起,或者是系数矩阵的分布具有某些规律。

我们可以利用这些规律在频域上减少量化比特数,达到压缩的目的。

图像经DCT变换以后,DCT系数之间的相关性就会变小。

而且大部分能量集中在少数的系数上,因此,DCT变换在图像压缩中非常有用,是有损图像压缩国际标准JPEG的核心。

从原理上讲可以对整幅图像进行DCT变换,但由于图像各部位上细节的丰富程度不同,这种整体处理的方式效果不好。

为此,发送者首先将输入图像分解为8*8或16*16块,然后再对每个图像块进行二维DCT变换,接着再对DCT系数进行量化、编码和传输;

接收者通过对量化的DCT系数进行解码,并对每个图像块进行的二维DCT反变换。

最后将操作完成后所有的块拼接起来构成一幅单一的图像。

对于一般的图像而言,大多数DCT系数值都接近于0,所以去掉这些系数不会对重建图像的质量产生较大影响。

因此,利用DCT进行图像压缩确实可以节约大量的存储空间。

在实验中,先将输入的原始lena图像分为8*8块,然后再对每个块进行二维DCT变换。

MATLAB图像处理上具箱中提供的二维DCT变换及DCT反变换函数如下。

dct2实现图像的二维离散余弦变换。

其语法格式为:

(1)B=dct2(A)返回图像A的二维离散余弦变换值,其大小与A相同且各元素为离散余弦变换的系数B(K1,k2)。

(2)B=dct2(A,in,n)或B=dct2(A,[m,n])如果m和n比图像A大,在对图像进行二维离散余弦变换之前,先将图像A补零至m*n如果m和n比图像A小。

则进行变换之前,将图像A剪切。

idct2可以实现图像的二维离散余弦反变换,其语法格式为:

B=idct2(A);

B=idct2(A,m,n)或B=idct2(A,[m,n])。

1.1.2预测技术

它是利用空间中相邻数据的相关性,利用过去和现在出现过的点的数据情况来预测未来点的数据。

通常用的方法是差分脉冲编码调制(DPCM)和自适应差分脉冲编码调制(ADPCM)。

1.2图像压缩技术的发展和现状

1.2.1图像编码技术发展历史

1948年提出电视信号数字化后,图像压缩编码的研究工作就宣告开始了。

在这项技术发展的早期,限于客观条件,仅对帧内预测法和亚取样内查复原法进行研究,对视觉特性也做了一些极为有限但可贵的研究工作。

1966年J.B.ONeal对比分析了DPCM和PCM并提出了用于电视的实验数据。

1969年进行了线性预测编码的实际实验。

1969年举行首届图像编码会议。

70年代开始进行了帧间预测编码的研究。

80年代开始对运动估值和模型编码进行研究[3]。

进入90年代,ITU-T和ISO制定了一系列图像编码国际建议,如H.261、JPEG、MPEG-1、H.262、H.263、MPEG-4等。

变换编码是1968年H.C.Andrews等人提出的,采用的是二维离散傅立叶变换,此后相继出现用其他变换方法的变换编码,其中包括二维离散余弦变换。

1.2.2图像编码技术的现状

经过几十年的发展,图像编码技术业已成熟,一些国际建议的制定极大地推动了图像编码技术的实现和产业化,从而推动图像编码技术以更快的速度发展,目前的研究方向有两个:

(1)更好地实现现有的图像编码国际建议。

研制出集成度更高、性能更好的图像编码专用芯片,使编码系统成本更低、可靠性更高。

解决好现有的图像编码系统开发中的技术问题。

提高图像质量、提高抗码能力等。

(2)对图像编码理论和其他图像编码方法的研究。

目前已经提出和正在进行研究的图像编码方法有:

多分辨率编码、基于表面描述的编码、模型编码、利用人工神经网络的编码、利用分形几何的编码、利用数学形态学的编码等等。

1.3MATLAB及其图像处理工具箱

如果应用高级语言(如Basic,C,Fortran)编写仿真程序来实现这一基于DCT的图像压缩编码算法比较麻烦,而且仿真效果也不是十分理想。

本文主要应用MATLAB发布的图像处理工具箱中的相关函数和命令来实基于DCT的图像压缩编码理论算法的仿真。

MATLAB语言是由美国MathWorks公司推出的计算机软件,经过多年的逐步发展与不断完善,现已成为国际公认的最优秀的科学计算与数学应用软件之一,它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个方便的、界面友好的用户环境,而且还具有可扩展性特征。

MATLAB中的数字图像是以矩阵形式表示的,矩阵运算的语法对MATLAB中的数字图像同样适用,这意味着MATLAB强大的矩阵运算能力对用于图像处理非常有利。

图像处理工具箱(ImageProcessingToolbox)提供了一套全方位的参照标准算法和图形工具,用于进行图像处理、分析、可视化和算法开发。

可进行图像压缩、空间转换、图像增强、特征检测、降噪、图像分割和图像配准等功能。

工具箱中大部分函数均以开放式MATLAB语言编写,这意味着可以检查算法、修改源代码和创建自定义函数。

本文利用MATLAB图像处理工具箱对基于DCT的JPEG图像压缩编码理论算法进行仿真,实验证明该软件功能强大,语言简洁易学,工具箱具有丰富的技术支持并集成了该领域专家的智慧,应用简单而效果良好。

1.4论文组织结构

本文的主要内容是,介绍图像压缩编码算法中的离散余弦变换(DCT)变换算法,和用MATLAB进行仿真。

第1章绪论,对于图像压缩的研究意义、可行性、压缩技术的现状和发展、MATLAB图像处理工具进行了简要的介绍。

第2章对图像压缩编码理论算法进行了介绍,着重讲解了基于DCT的JPEG图像压缩编码步骤。

之后对JPEG2000进行了粗略的介绍,描述了JPEG和JPEG2000的区别。

第3章对基于DCT的图像压缩MATLAB仿真实现进行了详细的描述。

其中包括利用MATLAB编写程序的流程图,和给出了具体仿真实验结果与结果分析。

 

第2章图像压缩编码理论算法

2.1DCT变换的思想来源

信号的变换分析方法中,通常是通过一组适当的基函数对信号进行分解,得到信号在变换域的表示方法,利用信号在变换域中某些特征趋于集中的特点来提取其特征从而进行分析。

自1822年傅立叶(Fourier)发表“热传导解析理论”以来,傅立叶变换一直是信号处理领域中应用最广泛、效果最好的一种分析手段。

但傅立叶变换只是一种纯频域的分析方法,它在频域的定位性是完全准确的(即频域分辨率最高),而在时域无任何定位性(或分辩能力),也即傅立叶变换所反映的是整个信号全部时间下的整体频域特征,而不能提供任何局部时间段上的频率信息。

事实上,在我们生活中的常见信号通常都具有非平稳的性质,即其频域性质都是随时间而变化的。

对这一类信号用傅立叶变换进行分析,虽然可以知道信号所包含有哪些频率信息,但不能知道这些频率信息具体出现在哪个时间段上,因此不能提供关于信号完整的信息。

可见,傅立叶变换不适用于提取局部时间段(或瞬间)的频域特征信息[4]。

为了研究信号在局部时间范围的频域特征,1946年Gabor提出了著名的Gabor变换。

其基本思想是,取时间函数

作为窗口函数,用

与待分析函数

相乘,然后再进行傅立叶变换。

在Gabor变换的基础上,为了适应不同问题的需要,进一步发展了多种形式的窗口函数,如矩形窗、汉宁窗、哈明窗等,这一类加窗的傅立叶变换统称为短时傅立叶变换(STFT)。

STFT从本质上讲,是用窗函数截取原始信号的一个待分析段进行傅立叶变换,因而可以描述信号在某一局部时间段上的频率信息。

目前,STFT在许多领域获得了广泛的应用,但由于STFT的定义决定了其窗函数的大小和形状均与时间和频率无关,一旦选定窗口就保持固定不变,不利于分析时变信号。

实际上一般的高频信号持续时间较短,而低频信号持续时间较长,因此我们期望对于高频信号采用小时间窗,对于低频信号采用大时间窗进行分析。

在进行信号分析时,这种变时间窗的要求同STFT的固定时窗(窗不随频率而变化)的特性是相矛盾的[5]。

离散余弦变换(DCT)从本质上是一种变换分析方法,要在变换时最大的去除分析信号的相关性提取其特征,就必须适当的构造一组基函数,这组基函数以某种形式类似于我们所要表示的数据,甚至具有与数据相同的相关结构。

在我们日常生活中常遇到的信号在空间域和频域都具有相关性。

在空间上相隔较近的样值间的相关性比相隔较远的大的多,而在频域上通常呈带状。

为了分析和表示这样的信号,我们需要基函数在空间域和频域是局域性的。

由于离散余弦函数的频域分辨率与时域分辨率成反比,刚好与实际信号长时低频、短时高频的特性相吻合,既能精确定位信号的突发跳变,又能把握信号的整体变化率。

由此可见,离散余弦变换是一种比较理想的进行信号处理的数学工具[6]。

图像压缩编码的理论算法。

(1)基于DCT的JPEG图像压缩编码理论算法基于DCT编码的JPEG编码压缩过程框图,如图2-1所示。

图2-1基于DCT编码的JPEG压缩过程简化图

上图是基于DCT变换的图像压缩编码的压缩过程,解压缩与上图的过程相反。

在编码过程中,首先将输入图像颜色空间转换后分解为8×

8大小的数据块,然后用正向二维DCT把每个块转变成64个DCT系数值,其中1个数值是直流(DC)系数,即8×

8空域图像子块的平均值,其余的63个是交流(AC)系数,接下来对DCT系数进行量化,最后将变换得到的量化的DCT系数进行编码和传送,这样就完成了图像的压缩过程。

在解码过程中,形成压缩后的图像格式,先对已编码的量子化的DCT系数进行解码,然后求逆量化并把DCT系数转化为8×

8样本像块(使用二维DCT反变换),最后将操作完成后的块组合成一个单一的图像。

这样就完成了图像的解压过程。

2.2基于DCT的JPEG图像压缩编码步骤

2.2.1颜色空间的转换和采样

JPEG文件使用的颜色空间为1982年推荐的电视图像数字化标准CCIR601(现为ITU-RBT.601)。

在这个色彩空间中,每个分量、每个像素的电平规定为255级,用8位代码表示。

JPEG只支持YCbCr颜色模式。

其中Y代表亮度,CbCr代表色度。

全彩色图像RGB模式转换到YCbCr模式,用下组公式。

(2-1)

其逆变换为:

(2-2)

JPEG是以8×

8的块为单位来进行处理的,由于人眼对亮度Y的敏感度比色度CbCr的敏感度大的多,所以采用缩减取样的方式,通常采用YUV422取样,图2-2所示。

图2-2YUV422取样示意图

即对于16×

16的块,Y取4个8×

8的块,CbCr各取2个8×

8的块。

也有YUV411方式,Y取4个8×

8的块,CbCr各取1个8×

YUV422取样方式,数据减少1/3。

YUV411取样方式,数据减少1/2。

缩减取样一般采用图2-3所示方法。

图2-3压缩取样示意图

2.2.2二维离散余弦变换

在傅里叶级数展开式中,如果被展开的函数是实偶函数,那么,其傅里叶技术中只包含余弦项,在将其离散化由此可导出余弦变换,或称之为离散余弦变换(DCT,DiscreteCosineTransform)[7]。

二维离散余弦正变换公式为

(2-3)

式中,

二维离散余弦逆变换公式为

(2-4)

JPEG采用的是8×

8大小的子块的二维离散余弦变换。

在编码器的输入端,把原始图像顺序地分割成一系列8×

8的子块,子块的数值在-128到127之间。

采用余弦变换获得64个变换系数[8]。

变换公式,如式(2-5)所示。

(2-5)

在MATLAB的图像处理工具箱中,可以直接调用dct2和idct2来实现二维离散余弦变换及其反变换。

(1)dct2

dct2函数实现图像的二维离散余弦变换,其语法为:

F=dct2(f)

运行下列程序:

f=imread('

cameraman.tif'

);

f=im2double(f);

F=dct2(f);

subplot(121),imshow(f,[]);

subplot(122),imshow(log(1+20*abs(F)),[]);

运行结果如图2-4所示。

图2-4图像显示及图像DCT变换后频谱显示

由运行结果可知,DCT变换具有能量集中的性质,数据集中在左上角。

因此进行图像压缩时离散余弦变换矩阵可以舍弃右下角的高频数据。

(2)idct2idct2函数实现图像的二维离散余弦逆变换,其语法为:

F=idct2(f)

在MATLAB图像处理工具箱中,有一个对图像进行块操作的函数blkproc,利用这个函数,可以直接实现图像一系列8×

8子块的DCT变换。

B=blkproc(A,[mn],fun,parameter1,,parameter2,...)

B=blkproc(A,[mn],[mbordernborder],fun,...)

B=blkproc(A,'

indexed'

,...)

[mn]是指图像以m*n为分块单位,对图像进行处理(如8像素*8像素)

Fun:

应用此函数对分别对每个m*n分块的像素进行处理

parameter1,parameter2:

要传给fun函数的参数

mbordernborder:

对每个m*n块上下进行mborder个单位的扩充,左右进行nborder个单位的扩充,扩充的像素值为0,fun函数对整个扩充后的分块进行处理。

如下列程序:

I=imread('

fun=idct2;

J=blkproc(I,[88],fun);

imagesc(J),colormap(hot)

运行结果如图2-5所示。

图2-5DCT变换后图像

8的图像经过DCT变换后,其低频分量都集中在左上角,高频分量分布在右下角(DCT变换实际上是空间域的低通滤波器)。

由于该低频分量包含了图像的主要信息(如亮度),而高频与之相比,就不那么重要了,所以我们可以忽略高频分量,从而达到压缩的目的。

将高频分量去掉,这就要用到量化,它是产生信息损失的根源。

这里的量化操作,就是将某一个值除以量化表中对应的值。

由于量化表左上角的值较小,右上角的值较大,这样就起到了保持低频分量,抑制高频分量的目的。

JPEG使用的颜色是YUV格式。

我们提到过,Y分量代表了亮度信息,UV分量代表了色差信息。

相比而言,Y分量更重要一些。

我们可以对Y采用细量化,对UV采用粗量化,可进一步提高压缩比。

所以上面所说的量化表通常有两张,一张是针对Y的,一张是针对UV的。

2.2.3DCT系数的量化

量化是对经过DCT变换后的频率系数进行量化,其目的是减小非“0”系数的幅度以及增加“0”值系数的数目,它是图像质量下降的最主要原因。

对于基于DCT的JPEG图像压缩编码算法使用如图2-6所示的均匀量化器进行量化,量化步距是按照系数所在的位置和每种颜色分量的色调值来确定。

因为人眼对亮度信号比对色差信号更敏感,因此使用了表2-1所示的

种量化表。

此外,由于人眼对低频分量的图像比对高频分量的图像更敏感,因此表中的左上角的量化步距要比右下角的量化步距小[9]。

图2-6均匀量化器

亮度和色度因为代表的图像的信息量不同,亮度代表了图像的低频分量,色度代表了图像的高频分量,要分别对亮度和色度进行量化,所以量化表也是不同的。

JPEG压缩色度和亮度量化表如表2-1所示。

表2-1JPEG压缩色度和亮度量化表

亮度量化表

色度量化表

16

11

10

24

40

51

61

17

18

47

99

12

14

19

26

58

60

55

21

66

13

57

69

56

22

29

87

80

62

37

68

109

103

77

35

64

81

104

113

92

49

78

121

120

101

79

95

98

112

100

量化会产生误差,上图是综合大量的图像测试的实验结果,对于大部分图像都有很好的结果。

表中可以看出,高频部分对应的量化值大,目的就是将高频部分编程接近于0,以便以后处理。

JPEG可以在压缩比和图像质量间作取舍。

方法就是改变量化值。

如果量化值放大一倍,则有更多的系数量化为0,提高了压缩比。

2.2.4量化系数的编排

经过DCT变换后,低频分量集中在左上角,其中F(0,0)(即第一行第一列元素)代表了直流(DC)系数,即8×

8子块的平均值,要对它单独编码。

由于两个相邻的8×

8子块的DC系数相差很小,所以对它们采用差分编码DPCM,可以提高压缩比,也就是说对相邻的子块DC系数的差值进行编码。

8的其它63个元素是交流(AC)系数,采用行程编码[10]。

所以量化后的系数要重新编排,目的是为了增加连续的“0”系数的个数,就是“0”的游程长度,方法是按照Z字形的式样编排。

DCT变换后低频分量多呈圆形辐射状向高频率衰减,因此可以看成按Z字形衰减。

因此,量化系数按Z字形扫描读数,这样就把一个8×

8的矩阵变成一个1×

64的矢量,频率较低的系数放在矢量的顶部。

量化后的DCT系数的编排如图2-7所示。

图2-7量化DCT系数的编排

量化后的DCT系数的序号如表2-2所示。

表2-2量化DCT系数的序号

1

5

6

15

27

28

2

4

7

42

3

8

25

30

41

43

9

31

44

53

23

32

39

45

52

54

20

33

38

46

34

50

59

36

48

63

2.2.5DC系数的编码

8子块的64个变换系数经量化后,按直流系数DC和交流系数AC分成两类处理。

坐标u=v=0的直流系数DC实质上就是空域图像中64个像素的平均值。

图像块经过DCT变换之后得到的DC直流系数有两个特点,一是系数的数值比较大,二是相邻8×

8图像块的DC系数值变化不大。

根据这个特点,JPEG算法使用了差分脉冲调制编码技术。

差分脉冲编码调制(DPCM,DifferentialPulseCodeModulation),是一种对模拟信号的编码模式,先根据前一个抽样值计算出一个预测值,再取当前抽样值和预测值之差作为编码用。

此差值称为预测误差。

抽样值和预测值非常接近(因为相关性强),预测误差的可能取值范围比抽样值变化范围小。

所以可用少几位编码比特来对预测误差编码,从而降低其比特率。

这是利用

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1