




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
姓名:学 号:学院(系):电子与信息工程学院专 业:电子与通信工程题 目:基于DCT变换的图像压缩技术的仿真音视频编码技术报告基于DCT变换的图像压缩技术中文摘要图像是一种重要的二维信号,由于其数据量很大,在存储和传输的时候要对其进行压缩处理。离散余弦变换是一种新兴的数学工具,基于离散余弦变换的图像压缩技术正受到广泛的关注和研究。图像经过离散余弦变换以后,在时域和频域都具有良好的局部化特性,重建图像中可以克服采用离散余弦变换编码所固有的方块效应,而且与人类视觉特性相一致。 报告主要研究了基于MATLAB的图像压缩方法,完成了以下一些工作:介绍了图像压缩的原理和方法,列举了常用的图像压缩的评价标准和技术标准。重点研究了离散余弦算法的基本原理和实现步骤,采用了Zigzag扫描和Hilbert扫描,并用MATLAB进行了仿真,形象直观的看到了图像压缩前后的鲜明对比,取得了较为理想的效果。关键词 DCT变换 Zigzag扫描 Hilbert扫描基于DCT变换的图像压缩技术外文摘要图像是一种重要的二维信号,由于其数据量很大,在存储和传输的时候要对其进行压缩处理。离散余弦变换是一种新兴的数学工具,基于离散余弦变换的图像压缩技术正受到广泛的关注和研究。图像经过离散余弦变换以后,在时域和频域都具有良好的局部化特性,重建图像中可以克服采用离散余弦变换编码所固有的方块效应,而且与人类视觉特性相一致。 报告主要研究了基于MATLAB的图像压缩方法,完成了以下一些工作:介绍了图像压缩的原理和方法,列举了常用的图像压缩的评价标准和技术标准。重点研究了离散余弦算法的基本原理和实现步骤,采用了Zigzag扫描和Hilbert扫描,并用MATLAB进行了仿真,形象直观的看到了图像压缩前后的鲜明对比,取得了较为理想的效果。关键词 DCT变换 Zigzag扫描 Hilbert扫描1. 引言在信息世界迅猛发展的今天, 人们对计算机实时处理图像信息的要求越来越高。如何在保证图像质量的前提下, 同时兼顾实时性和高效性成了一个值得关注的问题。于是, 对图像信息进行一定的压缩处理成为了一个不可或缺的环节。图像压缩是关于用最少的数据量来表示尽可能多的原图像的信息的一个过程。本文主要研究基于DCT 变换的有损压缩编码技术。离散余弦变换, 简称DCT , 是一种实数域变换, 其变换核为余弦函数, 计算速度快。DCT 除了具有一般的正交变换性质外, 它的变换阵的基向量能很好地描述人类语音信号和图像信号的相关特征。因此, 在对语音信号、图像信号的变换中,DCT 变换被认为是一种准最佳变换。近年颁布的一系列视频压缩编码的国际标准建议中, 都把DCT 作为其中的一个基本处理模块。而且对于具有一阶马尔柯夫过程的随机信号,DCT 十分接近于Karhunen -Loeve 变换, 也就是说它是一种最佳近似变换。2. 图像压缩编码的简介从信息论的角度看,图像是一个信源。描述信源的数据是信息量和信息量冗余之和。数据压缩实际上就是减少这些冗余量。图像编码压缩的方法目前有很多,其分类方法根据出发点不同而有差异。根据解压重建后的图像和原始图像之间是否具有误差(对原图像的保真程度),图像编码压缩分为无误差(亦称无失真、无损、信息保持)编码和有误差(有失真或有损)编码两大类。无损压缩(冗余度压缩、可逆压缩):是一种在解码时可以精确地恢复原图像,没有任何损失的编码方法,但是压缩比不大,通常只能获得15倍的压缩比。用于要求重建后图像严格地和原始图像保持相同的场合,例如复制、保存十分珍贵的历史、文物图像等。有损压缩(不可逆压缩):只能对原始图像进行近似的重建,而不能精确复原,适合大数工用于存储数字化了的模拟数据。压缩比大,但有信息损失,本文采用有损压缩。DCT图像压缩编码可以概括成图2.1的框图。图2.1 DCT压缩编码过程简化3. DCT变换最小均方误差下得到的最佳正交变化是K-L变换,而离散余弦变换(DCT)是仅次于K-L变换的次最佳变换,目前已获得广泛应用。离散预先变换DCT用于图像压缩操作中的基本思路是,将图像分为88的子块或1616的子块,并对每一个子块进行单独的DCT变换,然后对变换结果进行量化、编码。DCT压缩编码是一种正交变换,将二维图像变换为空间频谱,按从低频到高频的顺序重排。由于图像频谱从低到高逐渐衰减,故可以在一定量化等级下进行舍弃,从而达到压缩的目的。DCT广泛应用于众多压缩方案的原因在于其理论、算法和硬件相对成熟,去相关性好,计算量不大,易于实现。3.1. 一维DCT算法长度为N的一维序列x(n):n=0,1,.,N-1的DCT定义为: k=0,1.,N-1其中,为正交化因子,它是为了保证变换基的规范正交性引入的。一维DCT反变换为:以N维矢量x表示原始数据,N维矢量表示DCT变换系数,就有:变换矩阵u为:反变换矩阵IDCT矩阵uT除了行、列号互换外,形式上与u完全相同。3.2. 二维DCT算法二维数据x(n,m);n=0,1,.,N-1,m=0,1,.,M-1的DCT变换定义为:二维IDCT为:其中,定义与一维DCT变换中的定义相同,用矩阵的形式表示为:X=uxvTx=uTXv二维DCT的变换是可分离的,即二维DCT可以分解成行方向的一维DCT和列方向的一维DCT,可用两次一维DCT实现二维DCT。4. Hilbert扫描4.1. 概述变换编码一般有二维变换编码和一维变换编码两种方式。二维变换编码,分别对行列进行变换,不需要扫描,它压缩效果较好,但运算量大,对一个NN块要进行N8次乘法。为减少运算量,图像的子块不能太大,但子块越小,压缩比越小;一维变换编码先对图像块矩阵扫描生成一维向量,然后变换,虽然压缩效果没有二维变换的好,但运算量较小。对一个NN块,一维DCT变换只要进行N6次乘法。在图像较大分块较多时,二维变换比一维变换的压缩和解压花费的时间都要多。因此需要研究对一维变换编码影响较大的扫描技术。图像扫描技术中,首先需要尽量减少生成数据的波动性。由于Zigzag扫描是一种普遍的扫描方式,本报告中不再详细叙述。后面将着重介绍Hilbert扫描。基于图像存在局部连续性,同步步长平均距离越小,产生的数据波动性越小,因此Hilbert扫描要由于其他传统扫描。在DCT压缩编码中使用这种扫描方式,可以在不减少压缩比,不增加计算量等前提下,达到较好的压缩效果。4.2. Hilbert扫描和Zigzag扫描的比较图4.1、4.2分别是Zigzag扫描和Hilbert扫描的方法:图4.1 Z字形扫描和Hilbert扫描设m,n是扫描序列中的两个虚数,。称|m-n|为步长。定义扫描曲线上两点距离为。L步长的平均距离定义为:。它反映了扫描方式对数据波动性的作用。同步长平均距离小,产生的数据波动性越小。对于Zigzag扫描:对于Hilbert扫描:,其中。由此可以看出随着k的增加,Hilbert扫描是要优于Zigzag扫描的。4.3. Hilbert曲线的生成图4.2是Hilbert曲线的生成示意:图4.2 Hilbert曲线的生成本报告中没有采用传统的迭代算法构造Hilbert扫描序列,而采用基于矩阵运算的递推算法。将图4.2中的(a),(b),(c)用图4.3来表示:图4.3 各阶Hilbert矩阵的形成5. 编码仿真对于一幅120120的图像分别采用二维DCT变化和Hilbert扫描法进行图像压缩编码处理。进行Hilbert扫描处理时,先将图像分解为88的块,然后对每块进行扫描,生成164的一维向量,在对其进行一维DCT变换,对变换后获得的频域向量按压缩比保留系数,处理后进行一维反变换,再按反Hilbert扫描顺序重建88的块恢复图像。整个过程如图5.1所示:图5.1 编码过程6. 实验结果 本次实验从两个角度进行了仿真,一维DCT变换对比了不同的扫描策略。二维的DCT变换对比了不同的量化系数。以下为一维DCT变换中采取Zigzag和Hilbert扫描策略处理的结果对比图图6.1 量化系数为3,图6.2 量化系数为16图6.1(a)Hilbert扫描,量化系数为3图6.1(b)Zigzag扫描,量化系数为3图6.2(a)Hilbert扫描,量化系数为16图6.2(b)Zigzag扫描,量化系数为16通过以上实验发现在同样的量化系数下,Hilbert扫描可以更好的保留图像中的细节信息,但代价就是影响了压缩效果。在量化系数为3的情况下,使用Hilbert扫描的到的图像大小为75.7K,而使用Zigzag扫描得到的图像为41.9K原始图像大小为116K。以下为调整二维DCT变换量化系数的结果比较图图6.3结果汇总图6.4是量化系数为1时的效果图图6.4量化系数为1图6.5是量化系数为6的效果图图6.5量化系数为6可以发现细节信息得到了明显的改善。图6.6是量化系数为28图6.6量化系数为28对比相应的压缩文件发现量化系数为1时图像的大小为23.6K,量化系数为6时图像大小为74.6K,量化系数为28时,图像大小为124K。通过以上结果发现图像经过DCT变换之后会有大部分的信息是冗余的,仅需较小的量化系数就可以得到较好质量的图像。通过上面的仿真可知采用一维的DCT变换和采用二维的DCT变换都各有各的优点。具体使用哪种方式需要根据具体的应用环境进行选择。7. 附录代码7.1. 二维DCT变化主程序clear all;clc;A=imread(chaiquan.jpg);% 量化矩阵m=16 11 10 16 24 40 51 61 12 12 14 19 26 58 60 55 14 13 16 24 40 57 69 56 14 17 22 29 51 87 80 62 18 22 37 56 68 109 103 77 24 35 55 64 81 104 113 92 49 64 78 87 103 121 120 101 72 92 95 98 112 100 103 99;A1=A;A=double(A);t=dctmtx(8);mask=zeros(8);%创建8*8所有的量化系数masks = zeros(8,8,8);index = zeros(1,8);for i=1:8 for j=1:i masks(j,1:i+1-j,i) = 1; index(i) = sum(masks(j,:,i)+index(i); endendchoose_index=1 3 7;mask1(:,:,1) = masks(:,:,choose_index(1);N_index(1,1)=index(choose_index(1);mask1(:,:,2) = masks(:,:,choose_index(2);N_index(1,2)=index(choose_index(2);mask1(:,:,3) = masks(:,:,choose_index(3);N_index(1,3)=index(choose_index(3);%for i=1:3 mask = mask1(:,:,i); y1=blkproc(A,8,8,P1*x*P2,t,t);%DCT变换 y2=blkproc(y1,8 8,round(x./P1),m);%量化 y3=blkproc(y2,8 8,x.*P1.*P2,mask,m);%反量化时mask掉一些DCT系数 B=blkproc(y3,8 8,P1*x*P2,t,t);%IDCT imwrite(uint8(B),strcat(D:YBdocuments研究生课程课设音视频MDCTexample量化系数,num2str(index(choose_index(i),.jpg); subplot(3,5,(i-1)*5+1);imshow(A1);title(原始图像); % 将8*8的mask矩阵放大64倍后以格子图像的形式显示(可删除)-begin maskx=mat2gray(mask); maskx=imresize(maskx,64,nearest); for line=1:512 for col=1:512 if(mod(line,64)4 | mod(col,64)60 | mod(col,64)60) maskx(line-1)*512+col)=bitxor(maskx(line-1)*512+col),1); end end end subplot(3,5,(i-1)*5+2);imshow(maskx);title(DCT系数mask矩阵); % 将8*8的mask矩阵放大64倍后以格子图像的形式显示(可删除)-end subplot(3,5,(i-1)*5+3);imshow(mat2gray(B);title(重建图像);%重构图像 d=A-B;%原始图像-重构图像 subplot(3,5,(i-1)*5+4);imshow(mat2gray(d);title(误差图像); h,k=hist(d(:),512); subplot(3,5,(i-1)*5+5);bar(k,h);title(误差直方图);end7.2. 一维DCT变换%一维DCT变换主程序clear allclcimg = imread(chaiquan.jpg);M,N=size(img);m = M/8;n = N/8;N_index=3,16,30; %量化系数image_zigzag = zeros(M,N);image_hilbert = image_zigzag;z = zeros(8,8);for index=1:3for i=1:m for j=1:n z = img(i-1)*8+1:(i-1)*8+8,(j-1)*8+1:(j-1)*8+8); z_zigzag = zigzagscan(z,N_index(index); z_hilbert = uint8(scanhilbert(z,N_index(index); image_zigzag(i-1)*8+1:(i-1)*8+8,(j-1)*8+1:(j-1)*8+8) = z_zigzag; image_hilbert(i-1)*8+1:(i-1)*8+8,(j-1)*8+1:(j-1)*8+8) = z_hilbert; endendfiguresubplot(1,2,1),imshow(mat2gray(image_zigzag),title(strcat(zigzag扫描,量化系数为,num2str(N_index(index);imwrite(uint8(image_zigzag),strcat(zigzag扫描,量化系数为,num2str(N_index(index),.jpg);subplot(1,2,2),imshow(mat2gray(image_hilbert),title(strcat(hilbert扫描,量化系数为,num2str(N_index(index);imwrite(uint8(image_hilbert),strcat(hilbert扫描,量化系数为,num2str(N_index(index),.jpg);End%zigzag扫描function z_idct = zigzagscan(z,N)c_b_idct = zeros(1,64);zigzag = 1, 2, 9, 17, 10, 3, 4, 11, . 18, 25, 33, 26, 19, 12, 5, 6, . 13, 20, 27, 34, 41, 49, 42, 35, . 28, 21, 14, 7, 8, 15, 22, 29, . 36, 43, 50, 57, 58, 51, 44, 37, . 30, 23, 16, 24, 31, 38, 45, 52, . 59, 60, 53, 46, 39, 32, 40, 47, . 54, 61, 62, 55, 48, 56, 63, 64;Fq1 = reshape(z,1,64); % 将输入块变成1x64的向量b = Fq1(zigzag); % 对 aa 按照查表方式取元素,得到 zig-zag 扫描结果b_dct = dct(b);b_dct(1,N:64)=0;b_idct = idct(b_dct);for i=1:64 c_b_idct(1,zigzag(i)= b_idct(i);endz_idct=reshape(uint8(b_idct),8,8);end%希尔伯特扫描输入扫描分块输出生成的向量function z_ihilbert = scanhilbert(z,N)x,y=size(z);z1=mypeano_hilbert2(x*y);%求出对应大小的分块的扫描方式z2=zeros(1,x*y);for i=1:x*y for m=1:x for n=1:y t=z1(m,n); z2(t)=z(m,n); end endendz2_dct=dct(z2);z2_dct(1,N:64) = 0;z2_idct = idct(z2_dct);z_ihilbert = iscanhilbert(z2_idct);end %希尔
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 收入流水分析表-月度收入流水统计
- 六月安全月题库及答案解析
- 管道装修小知识培训内容课件
- 证券从业资格考试 单位及答案解析
- 安全生产管理体系建立与实施指南
- 商业信息咨询培训协议合同书
- 工程大清包合同补充协议
- 安全生产消防环保协议书
- 手术后患者坠床事故报告流程
- 因伤解除劳动合同协议书
- 语文开学第一课课件2025-2026学年统编版语文七年级上册
- 2025年宁夏中考数学试卷试题真题(含答案详解)
- 2025年浙江省中考语文试题卷(含答案解析)
- 单位保安执勤方案(3篇)
- 二三轮车安全知识培训课件
- 2025云南咖啡购销合同范本
- 中职导游业务课件
- 园区卫生清洁管理办法
- 秋季养生课件中医
- 申报书范例《毛泽东思想和中国特色社会主义理论体系概论》在线课程申报书课件
- 闵行区2024-2025学年下学期七年级数学期末考试试卷及答案(上海新教材沪教版)
评论
0/150
提交评论