(完整word版)基于DCT变换的数字图像压缩(实验4报告)
图像压缩实验报告
竭诚为您提供优质文档/双击可除图像压缩实验报告篇一:实验三图像压缩实验三图像压缩一、实验目的1.理解有损压缩和无损压缩的概念;2.理解图像压缩的主要原则和目的;3.了解几种常用的图像压缩编码方式。
4.利用mATLAb程序进行图像压缩。
二、实验仪器1计算机;2mATLAb等程序;3移动式存储器(软盘、u盘等)。
4记录用的笔、纸。
三、实验原理1.图像压缩原理图像压缩主要目的是为了节省存储空间,增加传输速度。
图像压缩的理想标准是信息丢失最少,压缩比例最大。
不损失图像质量的压缩称为无损压缩,无损压缩不可能达到很高的压缩比;损失图像质量的压缩称为有损压缩,高的压缩比是以牺牲图像质量为代价的。
压缩的实现方法是对图像重新进行编码,希望用更少的数据表示图像。
信息的冗余量有许多种,如空间冗余,时间冗余,结构冗余,知识冗余,视觉冗余等,数据压缩实质上是减少这些冗余量。
高效编码的主要方法是尽可能去除图像中的冗余成分,从而以最小的码元包含最大的图像信息。
编码压缩方法有许多种,从不同的角度出发有不同的分类方法,从信息论角度出发可分为两大类。
(1).冗余度压缩方法,也称无损压缩、信息保持编码或嫡编码。
具体说就是解码图像和压缩编码前的图像严格相同,没有失真,从数学上讲是一种可逆运算。
(2)信息量压缩方法,也称有损压缩、失真度编码或烟压缩编码。
也就是说解码图像和原始图像是有差别的,允许有一定的失真。
应用在多媒体中的图像压缩编码方法,从压缩编码算法原理上可以分为以下3类:(1)无损压缩编码种类哈夫曼(huffman)编码,算术编码,行程(RLe)编码,Lempelzev编码。
(2)有损压缩编码种类预测编码,Dpcm,运动补偿;频率域方法:正交变换编码(如DcT),子带编码;空间域方法:统计分块编码;模型方法:分形编码,模型基编码;基于重要性:滤波,子采样,比特分配,向量量化;(3)混合编码。
有JbIg,h261,Jpeg,mpeg等技术标准。
基于DCT的数字图像压缩及Matlab实现
实验三基于DCT的数字图像压缩及Matlab实现兰州大学信息学院08级通信工程一班赵军伟一、课程设计的目的和要求等内容实验目的:掌握基于DCT变换的图像压缩的基本原理及其实现步骤;通过使用MATLAB,对同一幅原始图像进行压缩,进一步掌握DCT和图像压缩。
实验要求:1、学生在实验操作过程中自己动手独立完成,2人为1组。
2、上机过程中由指导老师检查结果后方可做其他内容。
3、完成实验报告:按照实验的每个题目的具体要求完成二、基本原理或方法(一)图像压缩基本原理图像数据压缩的目的是在满足一定图像质量的条件下,用尽可能少的比特数来表示原始图像,以提高图像传输的效率和减少图像存储的容量,在信息论中称为信源编码。
图像压缩是通过删除图像数据中冗余的或者不必要的部分来减小图像数据量的技术,压缩过程就是编码过程,解压缩过程就是解码过程。
压缩技术分为无损压缩和有损压缩两大类,前者在解码时可以精确地恢复原图像,没有任何损失;后者在解码时只能近似原图像,不能无失真地恢复原图像。
假设有一个无记忆的信源,它产生的消息为{ai},1≤i≤N,其出现的概率是已知的,记为P(ai)。
则其信息量定义为:由此可见一个消息出现的可能性越小,其信息量就越多,其出现对信息的贡献量越大,反之亦然。
信源的平均信息量称为“熵”(entropy),可以表示为:对上式取以2为底的对数时,单位为比特(bits):根据香农(Shannon)无噪声编码定理,对于熵为H的信号源,对其进行无失真编码所可能达到的最低比特数为,这里为一任意小的正数,因此可能达到的最大压缩比为:其中B是原始图像的平均比特率。
在图像压缩中,压缩比是一个重要的衡量指标。
可以定义压缩比为:(二)图像压缩的基本模型图像编码包括两个阶段,前一个阶段就是利用预测模型或正交模型对图像信号进行变换;后一个阶段是利用已变换信号的统计特性,对其分配适当的代码来进行编码传输。
编码器与解码器的结构分别如图(a)、(b)。
数字图像处理 实验四dct编码
实验程序和结果:实验所使用的图像:1、利用Huffman进行JPEG图像压缩编码程序:I=imread('F\.jpg');pix(256)=struct('huidu',0.0,...%灰度值'number',0.0,...%对应像素的个数'bianma','');%对应灰度的编码[m n l]=size(I);fid=fopen('huffman.txt','w');%huffman.txt是灰度级及相应的编码表fid1=fopen('huff_compara.txt','w');%huff_compara.txt是编码表huf_bac=cell(1,l);for t=1:l%初始化结构数组for i=1:256pix(i).number=1;pix(i).huidu=i-1;%灰度级是0—255,因此是i-1pix(i).bianma='';end%统计每种灰度像素的个数记录在pix数组中for i=1:mfor j=1:nk=I(i,j,t)+1;%当前的灰度级pix(k).number=1+pix(k).number;endend%按灰度像素个数从大到小排序for i=1:255for j=i+1:256if pix(i).number<pix(j).numbertemp=pix(j);pix(j)=pix(i);pix(i)=temp;endendend%因为有的灰度值在图像中可能没有对应的像素值,所以要%找出在图像中存在像素的灰度级的个数,并保存在num中for i=256:-1:1if pix(i).number ~=0break;endendnum=i;count(t)=i;%记录每层灰度级%定义用于求解的矩阵clear huffmanhuffman(num,num)=struct('huidu',0.0,...'number',0.0,...'bianma','');huffman(num,:)=pix(1:num);%矩阵赋值for i=num-1:-1:1p=1;%算出队列中数量最少的两种灰度的像素个数的和sum=huffman(i+1,i+1).number+huffman(i+1,i).number;for j=1:i%如果当前要复制的结构体的像素个数大于sum就直接复制if huffman(i+1,p).number>sumhuffman(i,j)=huffman(i+1,p);p=p+1;else%如果当前要复制的结构体的像素个数小于或等于sum就插入和的结构体%灰度值为-1标志这个结构体的number是两种灰度像素的和huffman(i,j).huidu=-1;huffman(i,j).number=sum;sum=0;huffman(i,j+1:i)=huffman(i+1,j:i-1);break;endendend%开始给每个灰度值编码for i=1:num-1obj=0;for j=1:iif huffman(i,j).huidu==-1obj=j;break;elsehuffman(i+1,j).bianma=huffman(i,j).bianma;endendif huffman(i+1,i+1).number>huffman(i+1,i).number%说明:大概率的编0,小概率的编1,概率相等的,标号大的为1,标号小的为0 huffman(i+1,i+1).bianma=[huffman(i,obj).bianma '0'];huffman(i+1,i).bianma=[huffman(i,obj).bianma '1'];elsehuffman(i+1,i+1).bianma=[huffman(i,obj).bianma '1'];huffman(i+1,i).bianma=[huffman(i,obj).bianma '0'];endfor j=obj+1:ihuffman(i+1,j-1).bianma=huffman(i,j).bianma;endendfor k=1:count(t)huf_bac(t,k)={huffman(num,k)}; %保存endend%写出灰度编码表for t=1:lfor b=1:count(t)fprintf(fid,'%d',huf_bac{t,b}.huidu);fwrite(fid,' ');fprintf(fid,'%s',huf_bac{t,b}.bianma);fwrite(fid,' ');endfwrite(fid,'%');%先写灰度值,再写灰度级所对应的哈夫曼编码,并用将每个层级的灰度隔开end%按原图像数据,写出相应的编码,也就是将原数据用哈夫曼编码替代for t=1:lfor i=1:mfor j=1:nfor b=1:count(t)if I(i,j,t)==huf_bac{t,b}.huiduM(i,j,t)=huf_bac{t,b}.huidu;%将灰度级存入解码的矩阵fprintf(fid1,'%s',huf_bac{t,b}.bianma);fwrite(fid1,' ');%用空格将每个灰度编码隔开break;endendendfwrite(fid1,',');%用空格将每行隔开endfwrite(fid1,'%');%用%将每层灰度级代码隔开endfclose(fid);fclose(fid1);M=uint8(M);save('M')%存储解码矩阵编码结果:Huffman编码表:Huffman代码:Huffman解码程序:function huf_decode%哈夫曼编码解码load MI=imread('F:\Heat.jpg');subplot(1,2,1),imshow(I),title('原图')%读出原图subplot(1,2,2),imshow(M),title('huffman解码后的图')%读出解码后的图解码结果:2、利用行程编码进行图像压缩的MATLAB程序function yc%行程编码算法%读图I=imread('zbz.jpg');[m n l]=size(I);fid=fopen('yc.txt','w');%yc.txt是行程编码算法的灰度级及其相应的编码表%行程编码算法sum=0;for k=1:lfor i=1:mnum=0;J=[];value=I(i,1,k);for j=2:nif I(i,j,k)==valuenum=num+1;%统计相邻像素灰度级相等的个数if j==nJ=[J,num,value];endelse J=[J,num,value];%J的形式是先是灰度的个数及该灰度的值 value=I(i,j,k);num=1;endendcol(i,k)=size(J,2);%记录Y中每行行程行程编码数sum=sum+col(i,k);Y(i,1:col(i,k),k)=J;%将I中每一行的行程编码J存入Y的相应行中 endend%输出相关数据[m1,n1,l1]=size(Y);disp('原图像大小:')whos('I');disp('压缩图像大小:')whos('Y');disp('图像的压缩比:');disp(m*n*l/sum);%将编码写入yc.txt中for k=1:l1for i=1:m1for j=1:col(i,k)fprintf(fid,'%d',Y(i,j,k));fwrite(fid,' ');endendfwrite(fid,' ');endsave('Y')%存储,以便解码用save('col')fclose(fid);结果:编码代码:function yc_decode%行程编编码解码load Y %下载行程编码Yload col %下载Y中每行行程行程编码数[m,n,l]=size(Y);for k=1:lfor i=1:mp=1;for j=1:2:col(i,k)d=Y(i,j,k);%灰度值的个数for c=p:p+d-1X(i,c,k)=Y(i,j+1,k);%将d个灰度值存入X中endp=p+d;endendendI=imread('zbz.jpg');subplot(1,2,1),imshow(I),title('原图')%读出原图subplot(1,2,2),imshow(X),title('行程编码解码后的图')%读出解码后的图解码后:3、利用DCT进行图像压缩的MATLAB程序I=imread(‘rice.png’); %读入原图像;I=im2double(I); %将原图像转为双精度数据类型;T=dctmtx(8); %产生二维DCT变换矩阵B=blkproc(I,[8 8],’P1*x*P2’,T,T’); %计算二维DCT,矩阵T 及其转置T’是DCT函数P1*x*P2的参数Mask=[ 1 1 1 1 0 0 0 01 1 1 0 0 0 0 01 1 0 0 0 0 0 01 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0]; %二值掩膜,用来压缩DCT系数,只留下DCT系数中左上角的10个B2=blkproc(B,[8 8],’ P1.*x.’,mask); %只保留DCT变换的10个系数I2= blkproc(B2,[8,8],’P1*x*P2’,T’,T); %逆DCT,重构图像Subplot(1,2,1);Imshow(I);title(‘原图像’); %显示原图像Subplot(1,2,2);Imshow(I2);title(‘压缩图像’);%显示压缩后的图像实验结果:。
数字图像处理基于dct的图像压缩
数字图像处理基于DCT的图像压缩姓名:张凯学号:104753130780专业:空间技术处理及应用技术基于DCT的图像压缩算法介绍DCT变换的全称是离散余弦变换(Discrete Cosine Transform),离散余弦变换相当于一个长度大概是它两倍的离散傅里叶变换,这个离散傅里叶变换是对一个实偶函数进行的。
通过数字信号处理的学习我们知道实函数的傅立叶变换获得的频谱大多是复数,而偶函数的傅立叶变换结果是实函数。
以此为基础,使信号函数成为偶函数,去掉频谱函数的虚部,是余弦变换的特点之一。
它可以将将一组光强数据转换成频率数据,以便得知强度变化的情形。
若对高频的数据做些修饰,再转回原来形式的数据时,显然与原始数据有些差异,但是人类的眼睛却是不容易辨认出来。
压缩时,将原始图像数据分成8*8数据单元矩阵,例如亮度值在第一个矩阵内。
理论背景视频信号的频谱线在0-6MHz范围内,而且1幅视频图像内包含的大多数为低频频谱线,只在占图像区域比例很低的图像边缘的视频信号中才含有高频的谱线。
因此,在视频信号数字处理时,可根据频谱因素分配比特数:对包含信息量大的低频谱区域分配较多的比特数,对包含信息量低的高频谱区域分配较少的比特数,而图像质量并没有可察觉的损伤,达到码率压缩的目的。
然而,这一切要在低熵(Entropy)值的情况下,才能达到有效的编码。
能否对一串数据进行有效的编码,取决于每个数据出现的概率。
每个数据出现的概率差别大,就表明熵值低,可以对该串数据进行高效编码。
反之,出现的概率差别小,熵值高,则不能进行高效编码。
视频信号的数字化是在规定的取样频率下由A/D转换器对视频电平转换而来的,每个像素的视频信号幅度随着每层的时间而周期性地变化。
每个像素的平均信息量的总和为总平均信息量,即熵值。
由于每个视频电平发生几乎具有相等的概率,所以视频信号的熵值很高。
熵值是一个定义码率压缩率的参数,视频图像的压缩率依赖于视频信号的熵值,在多数情况下视频信号为高熵值,要进行高效编码,就要将高熵值变为低熵值。
数据压缩实验报告4 (2)
桂林理工大学实验报告(2013~ 2014 学年度第一学期)班级: 学号 : 姓名: 实验名称: 实验四图像DCT变换编码与压缩日期: 2013年12月12日一、实验题目:图像DCT变换编码与压缩二、实验目的:(1)掌握离散余弦变换DCT的实现方法, 了解DCT的幅度分布特性, 从而加深对DCT变换的认识。
(2)掌握图像DCT变换编码的实现方法, 从而加深对变换编码压缩图像原理的理解。
三、实验内容:编程实现图像DCT变换编码。
四、预备知识:(1)熟悉DCT原理。
(2)熟悉变换编码原理。
(3)熟悉在MA TLAB环境下对图像文件的I/O操作。
五、实验原理:变换编码是在变换域进行图像压缩的一种技术。
图2.2.1显示了一个典型的变换编码系统。
压缩图像输入图像N×N图2.2.1 变换编码系统在变换编码系统中, 如果正变换采用DCT变换就称为DCT变换编码系统。
DCT用于把一幅图像映射为一组变换系数, 然后对系数进行量化和编码。
对于大多数的正常图像来说, 多数系数具有较小的数值且可以被粗略地量化(或者完全抛弃), 而产生的图像失真较小。
DCT是仅次于K-L变换的次最佳正交变换, 且以获得广泛应用, 并成为许多图像编码国际标准的核心。
离散余弦变换的变换核为余弦函数, 计算速度快, 有利于图像压缩和其他处理。
对于N×N的数字图像, 二维DCT变换的正反变换可表示为:11001100(21)(21)(,)()()(,)cos cos222(21)(21)(,)()()(,)cos cos22N Nx yN Nu vx u y vF u v c u c v f x yN Nx u y vf x y c u c v F u vN N Nππππ--==--==++=++=∑∑∑∑(2.2.1)其中,00()()1,1,2,...,1u vc u c vu v N⎧==⎪==⎨=-⎪⎩或MA TLAB图像处理工具箱实现离散余弦变换有两种方法:(1)使用函数dct2, 该函数用一个基于FFT的算法来提高当输入较大的方阵时的计算速度。
基于DCT变换的图像压缩技术的研究
本科毕业设计论文题目:基于DCT变换的图像压缩技术的研究专业名称:学生姓名:指导教师:毕业时间:毕业一、题目基于DCT变换的图像压缩技术的研究二、指导思想和目的要求指导思想:图像信息给人们以直观、生动的形象,成为人们获取外部信息的重要途径。
然而数字图像具有极大的数据量。
在目前的计算机系统条件下,若图像信息不经过压缩,则会占用信道,传输速率变慢,而且传输成本变得昂贵,这对图像的储存、传输及使用都非常不利,同时也阻碍了人们对图像的有效获取和使用。
因此,图像压缩技术的重要性也越来越高,在学习、生产、生活等方面的作用也越来越显著,对图像进行压缩成为图像研究领域的重要课题。
目的要求:基于DCT变换的图像压缩技术,首先介绍图像压缩的基本原理及方法,然后了解离散余弦变换的性质以及JPEG图像压缩算法,最后从DCT 变换、量化以及熵编码三个过程进行详细论述,利用MATLAB仿真软件实现基于DCT变换的图像压缩,去除冗余数据,节约文件所占的码字,降低原始图像数据量,解决图像数据量巨大的问题,以达到对图像进行压缩的目的。
三、主要技术指标图像的质量评价方法主要有两种:一种是主观评价,另一种是客观评价。
主观评价直接反映人眼的视觉感受,主要从亮度、色调、饱和度和细节分辨等方面入手,但因观察者个体差异、人力成本较高等原因而存在许多不足之处。
通常客观评价的方法应用更广泛。
常用的客观评价方法和标准有压缩比(CR)和峰值信噪比(PSNR)两种。
再根据不同的量化系数得到不同的压缩比和峰值信噪比。
x,和标准图像f0()y x,的大小是M⨯N,常用客观评价指标定设待评价图像f()y义如下:x,/f0()y x,不同的量化系数压缩比也不同(量化系数分压缩比:r=f()y别为:1、3、5、10、15等)由于量化系数不同得到的峰值信噪比也不同,根据均方差得出峰值信噪比。
均方差: MSE =()[]()[]}{()[]∑∑∑∑-=-=-=-=-10102010x 10y 20,,,M x N y M N y x f y x f Q y x f Q 式中,运算符Q []∙表示在计算前,为使计算值与人眼视觉感受一致而进行的某种预处理,如对数处理、幂处理等。
DCT变换实验报告
二维图像的DCT变换一.实验目的1.学会用MATLAB软件对图像灰度进行变换;2.熟悉傅里叶变换的概念和原理;3.熟悉DCT变换的概念和原理。
二.实验原理1.应用傅立叶变换进行图像处理。
傅里叶变换是线性系统分析的一个有力工具,它能够定量地分析诸如数字化系统、采样点、电子放大器、卷积滤波器、噪音和显示点等的作用。
通过实验培养这项技能,将有助于解决大多数图像处理问题。
对任何想在工作中有效应用数字图像处理技术的人来说,把时间用在学习和掌握博里叶变换上是很有必要的2. DCT变换 DCT变换的全称是离散余弦变换(Discrete CosineTransform),是指将一组光强数据转换成频率数据,以便得知强度变化的情形。
若对高频的数据做些修饰,再转回原来形式的数据时,显然与原始数据有些差异,但是人类的眼睛却是不容易辨认出来三. 实验内容1.实验步骤1)打开Matlab编程环境;2)利用“imread”函数读入图像数据;3)利用“imshow”显示所读入的图像数据;4)用“dct”函数对图像数据进行DCT变换,得到频率域图像数据;2.编写程序并运行结果%%--1--读取原始图象,变换为灰度图片imageC = imread('Black_WhiteRect.JPG');%lena.jpgimage = rgb2gray(imageC);%%--2--执行DCT变换imDct = dct2(image); imDct2 = imDct;%%--3--执行逆DCT变换imRes = idct2(imDct2);%%--4--结果显示figure(1) ; imshow(image); %原始图片figure(2); dctAmg = log(abs(imDct)); imshow(imDct, []); %DCT结果对数值figure(3); mesh(dctAmg); colormap Jet; %DCT结果3D网格图figure(4); imshow(imRes, []); %逆DCT结果1、原始图片;2、DCT结果对视图3、DCT结果3D网格图4、逆DCT结果四.实验小结与体会实验通过使用Matlab,使我对图像变换中的一些概念,比如FFT,DCT等有了一点感性的和直观形象的认识,从而对这些概念有了更好的理解。
基于改进的DCT变换的图像压缩算法研究
基于改进的DCT变换的图像压缩算法研究图像压缩是数字图像处理的重要研究领域之一。
图像压缩是指将数字图像的数据量缩小,以节省存储空间和传输代价。
图像压缩技术包括有损压缩和无损压缩两种。
有损压缩是在压缩过程中有一部分数据丢失,可以达到更高的压缩比,但会影响图像的质量。
而无损压缩则是在不丢失数据的情况下,压缩图像的数据量,但压缩比相对较小。
在数字图像中,我们可以用离散余弦变换(DCT)进行图像压缩。
DCT变换是将图像从空间域转换到频域的一种方法。
通过DCT变换,我们可以得到图像的频域系数,可以过滤掉一些高频的小波,达到图像压缩的目的。
但是DCT变换在压缩过程中存在问题,传统的DCT变换容易造成“块效应”现象,也就是说在压缩过程中,图像被分成若干个块,而每一块单独进行压缩,导致压缩后的图像存在明显的方块状失真。
因此,我们需要对DCT变换进行改进,以避免“块效应”现象。
改进后的DCT变换被称为改进算法DCT-IV变换。
改进算法DCT-IV变换通过交错扫描和直接DCT变换两种方法对块进行编码,有效地避免了“块效应”现象。
改进算法DCT-IV变换的编解码复杂度较传统DCT变换略高,但是在图像处理方面,具有更好的压缩性能和更高的视觉感受质量。
改进算法DCT-IV变换还具有更好的数据利用率和压缩能力,特别是当需要压缩高质量图像时,改进算法DCT-IV 变换将表现出更为先进的压缩性能。
但是,改进算法DCT-IV变换也存在一些问题。
首先,改进算法DCT-IV变换需要一定的计算量,特别是当需要处理大型图像时,需要更长的计算时间;其次,改进算法DCT-IV变换的压缩比相对于传统DCT变换而言并不是太高。
为了解决这些问题,研究人员正在发展新的基于改进的DCT变换的图像压缩算法。
这些算法采用改进算法DCT-IV变换的基础思想,对该算法进行了优化,以达到更高的压缩比和更高的图像品质。
例如,信噪比改进算法DCT(ISBDCT)就是这样一种基于改进的DCT变换的图像压缩算法。
(完整版)DCT变换与KLT变换在图像压缩中的应用
DCT变换与KLT变换在图像压缩中的应用专业:电子与通信工程学号:16213026 16213024姓名:目录1 报告简介 (1)2 算法原理 (1)2.1 DCT算法原理 (1)2.2 KLT算法原理 (3)3 仿真分析 (5)3.1 DCT仿真分析 (5)3.2 KLT仿真分析 (7)5 总结 (8)参考文献 (9)附录:MATLAB代码 (10)DCT变换与KLT变换在图像压缩中的应用1 报告简介随着数据化时代的开启,图像压缩技术越来越成熟并且应用越来越广泛,本文在研究近年来图像压缩一般方法的基础上,介绍了基于DCT变换的图像压缩的基本原理及其实现步骤,以及扩展研究了KL变换的图像压缩方法,并使用MATLAB,针对同一幅原始图像进行不同方法的压缩比较,给出了实验仿真结果。
本论文首先提出了用MATLAB来实现DCT变换的数字图像压缩技术, 方法简单,快速,且误差小。
然后介绍了KLT图像压缩编码的具体过程和方法。
最后分析了图像经过2种压缩方法时,图像质量的变化情况。
2 算法原理2.1 DCT算法原理DCT变换利用傅立叶变换的性质。
采用图像边界褶翻将像变换为偶函数形式,然后对图像进行二维傅立叶变换,变换后仅包含余弦项,所以称之为离散余弦变换。
DCT编码属于正交变换编码方式,用于去除图像数据的空间冗余。
变换编码就是将图像光强矩阵(时域信号)变换到系数空间(频域信号)上进行处理的方法。
在空间上具有强相关的信号,反映在频域上是在某些特定的区域内能量常常被集中在一起,或者是系数矩阵的分布具有某些规律。
我们可以利用这些规律在频域上减少量化比特数,达到压缩的目的。
图像经DCT变换以后,DCT系数之间的相关性就会变小。
而且大部分能量集中在少数的系数上,因此,DCT变换在图像压缩中非常有用,是有损图像压缩国际标准JPEG的核心。
从原理上讲可以对整幅图像进行DCT变换,但由于图像各部位上细节的丰富程度不同,这种整体处理的方式效果不好。
实验报告--实验4 基于DCT变换的信息隐藏算法
江 西 理 工 大 学
江 西 理 工 大 学 实 验 报 告 纸
第 1 页/共 1页
一、实验目的
(1)理解频域变换信息隐藏算法的基本思想 (2)理解离散余弦变换技术的基本理论
(3)掌握基于DCT 变换信息隐藏的编码和解码过程
二、实验内容
载体图像为24位bmp 图像LenaRGB.bmp ,嵌入的秘密信息为从屏幕上随机输入的文本信息,要求对载体图像LenaRGB.bmp 进行颜色分量分解与离散余弦变换,将秘密信息转换成二进制流并嵌入到载体图像的DCT 变换域中,显示原载体图像、需要嵌入的秘密信息及其相应的二进制流、嵌入了秘密信息的伪装载体,提取的秘密信息。
三、实验步骤和设计思想
四、程序清单
五、实验调试记录
六、实验结果及其分析
七、实验心得
信息隐藏技术 实验报告。
数字图像处理 图像压缩
实验报告实验名称实验二图像压缩课程名称数字图像处理A姓名成绩班级学号日期地点(1)掌握离散余弦变换DCT的实现方法,了解DCT的幅度分布特性,从而加深对DCT 变换的认识;(2)掌握图像DCT变换编码的实现方法,从而加深对变换编码压缩图像原理的理解;(3)使用DCT变换编码编写程序实现图像压缩;2.实验环境(软件条件)Windws2000/XPMATLAB 7.03.实验方法根据如图2.1所示的典型变换编码系统,采用DCT变换对256×256大小、256级灰度的数字图像lena.bmp(如图2.2所示)进行如下处理:图2.1 典型变换编码系统图2.2 实验图像lena.bmp(1)对图像进行8×8分块处理并作DCT变换,观察图像8×8子块的DCT系数的分布,并分析其特点;(2)对DCT系数进行量化及反量化处理,求反量化系数的逆DCT变换,重新显示重建图像、误差图像和误差图像的直方图;(3)将量化步长分别增大为初始值的2倍、4倍、8倍后再进行DCT变换编码,显示不同量化步长条件下的重建图像、误差图像以及误差图像的直方图。
分析重建图像质量和量化步长的关系。
结果图原图像经dct 变化的图像对经DCT 变化后的图像进行量化反量化的图像050100150200250200040006000原图像经dct 变化的图像对经DCT 变化后的图像进行量化反量化的图像05010015020025020004000原图像经dct 变化的图像对经DCT 变化后的图像进行量化反量化的图像05010015020025020004000原图像经dct 变化的图像对经DCT 变化后的图像进行量化反量化的图像050100150200250200040005.实验结论结果图离散余弦变换的变换核为余弦函数。
余弦变换除了具有一般的正交变换性质外,它的变换矩阵的基向量能较好的描述图像信号和人类语音信号的相关特征,因此被应用与图像压缩编码的语音信号处理等领域。
基于DCT变换的数字图像压缩(实验4报告)
多媒体技术实验报告学院:城南学院通信1202班姓名学号指导老师:***时间:2015/12/09实验四:数字图像压缩1.实验目的1)理解有损压缩和无损压缩的概念;2)理解图像压缩的主要原则和目的;3)了解几种常用的图像压缩编码方式;4)利用MATLAB程序进行图像压缩。
2. 实验原理1)图像压缩原理图像压缩主要目的是为了节省存储空间,增加传输速度。
图像压缩的理想标准是信息丢失最少,压缩比例最大。
不损失图像质量的压缩称为无损压缩,无损压缩不可能达到很高的压缩比;损失图像质量的压缩称为有损压缩,高的压缩比是以牺牲图像质量为代价的。
压缩的实现方法是对图像重新进行编码,希望用更少的数据表示图像。
信息的冗余量有许多种,如空间冗余,时间冗余,结构冗余,知识冗余,视觉冗余等,数据压缩实质上是减少这些冗余量。
高效编码的主要方法是尽可能去除图像中的冗余成分,从而以最小的码元包含最大的图像信息。
编码压缩方法有许多种,从不同的角度出发有不同的分类方法,从信息论角度出发可分为两大类。
①冗余度压缩方法,也称无损压缩、信息保持编码或嫡编码。
具体说就是解码图像和压缩编码前的图像严格相同,没有失真,从数学上讲是一种可逆运算。
②信息量压缩方法,也称有损压缩、失真度编码或烟压缩编码。
也就是说解码图像和原始图像是有差别的,允许有一定的失真。
本实验主要利用MA TLAB程序进行离散余弦变换(DCT)压缩和行程编码(Run Length Encoding,RLE)。
2)离散余弦变换(DCT)图像压缩原理离散余弦变换DCT在图像压缩中具有广泛的应用,它是JPEG、MPEG等数据压缩标准的重要数学基础。
用DCT压缩图像的过程为:①首先将输入图像分解为8×8或16×16的块,然后对每个子块进行二维DCT变换。
②将变换后得到的量化的DCT系数进行编码和传送,形成压缩后的图像格式。
用DCT解压的过程为:①对每个8×8或16×16块进行二维DCT反变换。
基于DCT变换的图像压缩算法
基于DCT变换的图像压缩算法图像处理技术一直是计算机科学的热门领域之一,其中基于DCT变换的图像压缩算法因其高效性和广泛应用而备受关注。
本文将探讨基于DCT变换的图像压缩算法的原理及其在实际应用中的表现。
一、原理概述DCT变换是一种将时域信号转换为频域信号的数学方法,被广泛应用于信号处理和图像压缩中。
在图像处理中,DCT变换被用于将一个N×N的图像块转换为N×N的系数矩阵,其中每个系数表示该图像块在特定空间频率上的响应。
基于DCT变换的图像压缩算法的原理是将图像分为若干个N×N的图像块,然后将每个图像块使用DCT变换转换为系数矩阵。
由于在图像中,高频分量的取值通常较小,而低频分量的取值通常较大,因此使用系数矩阵中的高频分量可以有效地压缩图像数据。
二、实际表现基于DCT变换的图像压缩算法在实际应用中表现良好。
例如,在数字摄像机、移动电话摄像头和医学成像设备中,都广泛采用了基于DCT变换的图像压缩算法。
此外,在图像传输和存储中,也经常使用基于DCT变换的图像压缩算法。
在实际应用中,基于DCT变换的图像压缩算法的主要优点是压缩比高、压缩速度快、重建质量好。
此外,基于DCT变换的图像压缩算法还可以进行可逆压缩和不可逆压缩,具有高容错性和灵活性。
三、应用举例在数字摄像机中,基于DCT变换的图像压缩算法被广泛传播和应用。
数字摄像机通常具有高分辨率和高帧速率的优点,但其生产成本较高。
因此,数字摄像机厂家采用基于DCT变换的图像压缩算法,以在不降低图像质量的情况下降低数据传输量。
在移动电话摄像头中,基于DCT变换的图像压缩算法同样被广泛采用。
由于移动电话摄像头的处理能力和存储能力较低,因此使用基于DCT变换的图像压缩算法有助于节省存储空间和传输带宽。
在医学成像设备中,基于DCT变换的图像压缩算法同样得到了广泛应用。
医学成像设备拍摄出的图像质量要求较高,因此使用基于DCT变换的图像压缩算法可以保证图像质量,同时降低数据传输量。
基于DCT快速变换的图像压缩编码算法
关键词 : 图像压缩; 离散余弦变换 ; 峰值信噪比; 快速傅里叶变换
中图分 类号 : T P 3 0 1 . 6 文献 标识 码 : A 文章 编号 : 1 6 7 3 — 6 2 9 X ( 2 0 t 4 ) 0 7 — 0 0 9 2 — 0 3 d o i : 1 0 . 3 9 6 9 / j . i s s n . 1 6 7 3 — 6 2 9 X . 2 0 1 4 . 0 7 . 0 2 3
q ua l i t y, a f a s t i ma g e c o mp r e s s i o n c o d i n g lg a o it r h m b a s e d o n t wo d i me n s i o n a l DCT i s p r o p o s e d i n t hi s p a p e r . I n he t p r o p o s e d lg a o it r hm ,
i ma g e s i s b a s i c l a l y s a me t o he t o i r g i n l a i ma g e , he t e ̄r r e h a s b e e n wi ll y a p p l i e d . n I o r d e r t o a c h i e v e he t o b j ct e i v e o f i mp r o v i n g i ma g e
第2 4卷 第 7期
2 0 1 4年 7月
计 算 机 技 术 与 发 展
C 0MPUT ER TECHNOLOGY AND DEVEL OPME NT
V0 1 . 2 4 No. 7
J u l y 2 01 4
实验六 图像DCT变换编码压缩报告
实验课程名称数字图像处理实验项目名称图像DCT变换编码压缩年级 2010专业光信 101学生姓名肖明进学号 1007010124理学院实验时间:20 13 年5月 9日学院:理学院专业:光信班级:光信101姓名肖明进学号1007010124 实验组实验时间2013-5-9 指导教师徐锦成绩实验项目名称图像DCT变换编码压缩实验目的及要求:1.掌握离散余弦变换DCT的实验方法,了解DCT的幅度分布特性,从而加深对DCT变换的认识。
2.掌握图像DCT变换编码的实现方法,从而加深对变换编码压缩图像原理的理解。
实验原理:MATLAB图像处理工具箱实现离散余弦变换有两种方法:1.使用函数DCT2,该函数用一个基于FFT的算法,用来提高对输入较大的时的计算速度。
2.使用DCTMTX函数返回的DCT变换矩阵,这种方法适合于较小的输入方阵(例如:8*8或16*16).为了实现8*8子块的DCT图像变换,需要用到MATLAB中的BLKPROC函数。
将这个函数和函数DCTMTX一起用于块处理可以大大简化运算。
以上函数用MATLAB的help查看具体使用方法。
实验内容:编程实现图像DCT变换编码。
实验步骤:(源程序参考书中P171—172的例子)1.设置压缩比2.求8*8块的DCT变换矩阵3.计算8*8块的DCT变换4.对DCT系数量化和反量化5.求反量化系数(或称截取后的系数)的逆DCT变换6.显示原始图像、压缩后图像、误差图像(两图相减的结果)数据记录及处理:1.源程序:cr=0.5;initialimage=imread('lena512.bmp');initialimage=double(initialimage)/255;figure(1);subplot(1,3,1);imshow(initialimage);title('原图像');t=dctmtx(8);dctcoe=blkproc(initialimage,[8 8],'P1*x*P2',t,t'); coevar=im2col(dctcoe,[8 8],'distinct');coe=coevar;[y,ind]=sort(coevar);[m,n]=size(coevar);snum=64-64*cr;for i=1:ncoe(ind(1:snum),i)=0;endb2=col2im(coe,[8 8],[512 512],'distinct');i2=blkproc(b2,[8 8],'P1*x*P2',t',t);subplot(1,3,2);imshow(i2);title('压缩后图像');e=double(initialimage)-double(i2);[m,n]=size(e);erms=sqrt(sum(e(:).^2)/(n*m));subplot(1,3,3);imshow(e);title('误差图像');结果图:思考题:1.图像变换编码中为什么要对图像进行分块?答:1.小块图像的变换计算容易;2.距离较远的像素之间的相关性比距离较近的像素之间的相关性小。
数字图像处理实验报告图像压缩
数字图像处理实验报告图像压缩竭诚为您提供优质文档/双击可除数字图像处理实验报告图像压缩篇一:数字图像处理实验报告数字图像处理实验报告课程:班级:学号:姓名:指导老师:日期:实验一内容一mATLAb数字图像处理初步一、实验目的与要求1.熟悉及掌握在mATLAb中能够处理哪些格式图像。
2.熟练掌握在mATLAb中如何读取图像。
3.掌握如何利用mATLAb来获取图像的大小、颜色、高度、宽度等等相关信息。
4.掌握如何在mATLAb中按照指定要求存储一幅图像的方法。
5.图像间如何转化。
二、实验内容及步骤1.利用imread()函数读取一幅图像,假设其名为flower.tif,存入一个数组中;解:读取图像,存入数组I 中:I=imread(flower.tif);2.利用whos命令提取该读入图像flower.tif的基本信息;解:查询数组I的信息:3.利用imshow()函数来显示这幅图像;解:因为imshow()方法不能直接显示tif图像矩阵,因此要先转换成Rgb模式,再调用imshow()显示。
代码如下:>>I1=I(:,:,1);>>I2=I(:,:,2);>>I3=I(:,:,3);>>Rgb=cat(3,I1,I2,I3);>>imshow(Rgb);显示的图像为:4.利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息;解:代码如下:>>imfinfo(flower.tif)结果截图:5.利用imwrite()函数来压缩这幅图象,将其保存为一幅压缩了像素的jpg文件,设为flower.jpg;语法:imwrite(原图像,新图像,‘quality’,q),q取0-100。
解:代码:>>imwrite(Rgb,flower.jpg,quality,80);结果截图:6.同样利用imwrite()函数将最初读入的tif图象另存为一幅bmp 图像,设为flower.bmp。
基于DCT变换的图像压缩技术研究
2006年第10期 信息技术 中图分类号:T N919.81 文献标识码:A 文章编号:1009-2552(2006)10-0133-02基于DCT变换的图像压缩技术研究沈 洁,杜宇人,殷玲玲,王 慧(扬州大学信息工程学院,扬州225009)摘 要:图像DCT变换是图像压缩的一项重要技术,如何准确、快速的进行图像压缩一直是国内外研究的热点。
概要的论述了图像DCT变换的概念和特点,对基于DCT变换的图像压缩技术的算法进行了研究,并用MAT LAB进行了算法仿真,取得了较为理想的效果。
关键词:DCT变换;图像压缩;MAT LAB仿真R esearch on technique of im age compression based on DCTSHE N Jie,DU Y u2ren,YI N Ling2ling,WANG Hui(College of I nform ation E ngineering,Yangzhou U niversity,Yangzhou225009,China) Abstract:The image DCT trans form technique is an im portant technique in the field of image com pression.H ow to com press the image accurately and fast has been a research focus both at home and abroad all the time.The paper discusses the conception and characteristic of image DCT trans form technique,carries research on the alg orithm of image com pression based on DCT.Then the alg orithm is simulated by MAT LAB,and a g ood result is obtained.K ey w ords:DCT trans form;image com pression;simulation by MAT LAB0 引言在信息世界迅猛发展的今天,人们对计算机实时处理图像信息的要求越来越高。
基于DCT图像压缩过程的分析与研究
文章编 号 :0 7 9 1 (0 2 0 —0 30 1 0 —4 6 2 1 ) 70 9 —2
1、 引 言
件。 自DC 变 换 问世 以来 , 直 在 图像 压 缩 领 域 起 着 非 常 重 要 的 作 T 一
用。
颜色分量 ) 即在12 l范围内表示的无符号整数, , op , 变成
l p, 一I _ -2 1 2t 范围内表示的有符号数, 作为D T C 变换的输入量。 经过
2 、二 维 离 散 余 弦 变 换
一
a a o1
U=V=0
Uv=0且 u≠ v
u > v o 22基 于 DCT的 图像 压缩 过程 .
c—+v( 。2 9 sy1 ) ( ) 一
v=0 1 7 , , ,… Y= 01 7 ,…
DC 变 换是一种 实数域的余弦 函数 , T 其二 维离散余 弦变换及 其逆变换定义 如下 :
其中, , = 时, ) ( : / 2, 当 1 0 c , v 1√ 其他情况值为1 , c) 。
—
—
—
u=0 v= 0
…
,
Y= 0 1 . 一1 , … Ⅳ
其 中
4
体的视 觉需要。 这样量化后 , 以用小的数据量来保存采集 的数据 , 可 对 图像压 缩非常有效 。 () 2 () T系数量化 。 化是将经过DC 3DC 量 T变换后 的频率 系数作为 组数据 , 个数除 以一个参数 ( 每 该参数是一个折衷 的值 , 太大 , 可
基于DCT变换的数字图像分层压缩编码20051017163354897
基于DCT变换的数字图像分层压缩编码本文以DCT变换为基础,提出一种可以适用于不同网络传输环境下的分层编码方法。
基于系数重要性的分层编码根据域中系数重要程度不同和信道传输特性,有选择地舍弃部分系数达到分层压缩的目的;基于比特平面的分层编码通过分析系数的比特平面,按照比特平面进行分层,根据设置的参数实现不同质量的图像压缩编码。
互联网和电信网络的迅速发展为数字图像的传输提供了必要条件,但是不同接入方式其传输带宽有很大的差别,因此,研究具有可伸缩性的图像编码方法具有重要的意义。
可伸缩性编码是指同一编码源可以随着接入方式的不同,提供不同质量的数字图像。
本文针对这种需求,提出了一种可以适应不同网络传输条件的数字图像编码方法,即分层编码。
目前,无论是互联网的UDP连接还是ATM网络上都存在丢信元/帧的问题,而现在还没有可以完全避免信源元丢失的技术方案。
分层编码方法将数字图像按照人眼视觉特性对不同频率分量信息的敏感度不同,将图像信息分量分为不同的层次,当网络出现拥塞时有选择地丢弃低优先级的信息,在给定的信道带宽的条件下,提供尽可能高质量的数字图像。
本文以DCT变换为基础,研究DCT变换中分层压缩编码,并且给出不同分层条件下的实验结果。
DCT变换DCT变换的基本思路是将图像分解为8×8的子块或16×16的子块,并对每一个子块进行单独的DCT变换,然后对变换结果进行量化、编码。
随着子块尺寸的增加,算法的复杂度急剧上升,因此,实用中通常采用8×8的子块进行变换,但采用较大的子块可以明显减少图像分块效应。
在图像压缩中,一般把图像分解为8×8的子块,然后对每一个子块进行DCT变换、量化,并对量化后的数据进行Huffman 编码。
DCT变换可以消除图像的空间冗余,Huffman编码可以消除图像的信息熵冗余。
DCT是无损的,它只将图像从空间域转换到变换域上,使之更能有效地被编码。
对一个图像子块而言,将对变换后的64个系数进行量化,并对Z字顺序扫描系数表进行编码。
实验四-DCT变换HUFFman编码图像压缩
实验四图像压缩姓名:学号:邮箱:一、实验目的1.掌握DCT变换的原理2.了解DCT变化在图像压缩中的应用3.掌握图像压缩的基本原理及方法4.了解霍夫曼编码原理5.熟悉图像压缩的MATLAB编程二、实验原理DCT是目前比较好的图像变换,它有很多优点。
DCT是正交变换,它可以将8x8图像空间表达式转换为频率域,只需要用少量的数据点表示图像;DCT产生的系数很容易被量化,因此能获得好的块压缩;DCT算法的性能很好,它有快速算法,如采用快速傅立叶变换可以进行高效的运算,因此它在硬件和软件中都容易实现;而且DCT算法是对称的,所以利用逆DCT算法可以用来解压缩图像。
由于DCT主要应用在数据和图像的压缩,因此希望原信号的能量在变换后能尽量集中在少数系数上,且这些大能量的系数能处在相对集中的位置,这将有利于进一步的量化和编码。
但是如果对整段的数据或整幅图像来做DCT,那就很难保证大能量的系数能处在相对集中的位置。
因此,在实际应用中,一般都是将数据分成一段一段来做,一般分成8x8或16x16的方块来做。
二维DCT正交变换的公式为:二维DCT逆变换公式:其中三、实验要求利用DCT变换对图像进行压缩,对比不同压缩比下的结果,对比不同压缩比下图像大小的变化。
压缩过程如下图所示:四、实验过程与结果实验程序如下:(先给出主程序,然后给出各功能子函数的程序)主程序:clearload('lena.mat')%调入170*170大小的一幅彩色lena图像l=imresize(lena,[256 256]);%将图像变换为8的整数倍大小X=rgb2gray(l);Y1=double(X);%读入图像数据lianghua=[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];ilianghua=lianghua;%----------------------------------------------------------%图像压缩%----------------------------------------------------------t=dctmtx(8);J=blkproc(Y1,[8 8],'P1*x*P2',t,t'); %分成8*8块进行DCT变换M=blkproc(J,[88],'round(x./P1)',lianghua); %量化u=abs(min(min(M1));M=(M1./u)+1;data=uint8(M);%Huffman编码要求为无符号整形数组M2=M-double(data);[zipped,info]=huffencode(data);%调用Huffman编码程序进行压缩unzipped=huffdecode(zipped,info,data) ; %调用Huffman解码程序进行解压缩k=1;for i=1:256for j=1:256unzippedray(i,j)=unzipped(k);k=k+1;endendunzippedray= unzippedray';%对解压缩后得到的一维数组进行变换,得到无损的量化后%二维数组,其值与data数组值是一致的,体现了Huffman编码是一种无损编码unzippedray=(double(unzippedray)-1+M2 ).*u;T=blkproc(unzippedray,[88],'x.*P1',ilianghua); %反量化I=blkproc(T,[88],'P1*x*P2',t',t); %8*8DCT反变换%----------------------------------------------------------%调用Huffman编码程序进行解码%显示原始图像和经编码后的图像,显示压缩比,并计算均方根误差得erms=0,表示是Huffman是无失真编码figuresubplot(221);imshow(Y1,[]);axis square;xlabel('原256*256灰度图像'); subplot(222);imshow(I,[]);axis square;xlabel('Huffman解压缩后图像'); subplot(223);imshow((Y1-I),[]);axis square;xlabel('量化后损失的图像部分');[h,k]=hist((Y1-I),256);%生成直方图数据subplot(224);bar(k,h,'k');title('误差图像直方图');%subplot(224);imshow(I,[]);axis square;xlabel('压缩图像');%erms=compare(data(:),unzipped(:))cr=info.ratio whos data unzipped zipped%huffencode函数对输入矩阵vector进行Huffman编码,返回%编码后的向量(压缩后数据)及相关信息Huffman编码子程序:function[zipped,info]=huffencode(vector)%输入和输出都是unit8格式%info返回解码需要的机构信息%info.pad是添加的比特数%info.huffcodes是Huffman码字%info.rows是原始图像行数%info.cols是原始图像行数%info.length是原始图像数据长度%info.maxcodelen是最长码长if ~isa(vector,'uint8')error('input argument must be a uint8 vector');end[m,n]=size(vector);vector=vector(:)';f=frequency(vector); %计算各符号出现的概率symbols=find(f~=0);f=f(symbols);[f,sortindex]=sort(f);%将符号按照出现的概率大小排序symbols=symbols(sortindex);len=length(symbols);symbols_index=num2cell(1:len); codeword_tmp=cell(len,1);while length(f)>1 %生产Huffman树,得到码字编码表index1=symbols_index{1};index2=symbols_index{2};codeword_tmp(index1)=addnode(codeword _tmp(index1),uint8(0));codeword_tmp(index2)=addnode(codeword _tmp(index2),uint8(1));f=[sum(f(1:2)) f(3:end)];symbols_index=[{[index1,index2]} symbols_index(3:end)];[f,sortindex]=sort(f);symbols_index=symbols_index(sortindex );endcodeword=cell(256,1);codeword(symbols)=codeword_tmp;len=0;for index=1:length(vector) %得到整个图像所有比特数len=len+length(codeword{double(vector (index))+1});endstring=repmat(uint8(0),1,len);pointer=1;for index=1:length(vector) %对输入图像进行编码code=codeword{double(vector(index))+1 };len=length(code);string(pointer+(0:len-1))=code;pointer=pointer+len;endlen=length(string);pad=8-mod(len,8);%非8整数倍时,最后补pad个0if pad>0string=[stringuint8(zeros(1,pad))];endcodeword=codeword(symbols);codelen=zeros(size(codeword)); weights=2.^(0:23);maxcodelen=0;for index=1:length(codeword)len=length(codeword{index});if len>maxcodelenmaxcodelen=len;endif len>0code=sum(weights(codeword{index}==1));code=bitset(code,len+1);codeword{index}=code;codelen(index)=len;endendcodeword=[codeword{:}];%计算压缩后的向量cols=length(string)/8;string=reshape(string,8,cols);weights=2.^(0:7);zipped=uint8(weights*double(string)); %码表存储到一个稀疏矩阵huffcodes=sparse(1,1);for index=1:nnz(codeword)huffcodes(codeword(index),1)=symbols( index);end%填写解码时所需的结构信息info.pad=pad;info.huffcodes=huffcodes;info.ratio=cols./length(vector);info.length=length(vector);info.maxcodelen=maxcodelen;info.rows=m;info.cols=n;%huffdecode函数对输入矩阵vector进行Huffman编码,%返回解压后的图像数据endHuffman解码子程序:functionvector=huffdecode(zipped,info,image)if~isa(zipped,'uint8')error('input argument must be a uint8 vector');end%产生0,1序列,每位占一个字节len=length(zipped);string=repmat(uint8(0),1,len.*8); bitindex=1:8;for index=1:lenstring(bitindex+8.*(index-1))=uint8(bitget(zipped(index),bitindex));endstring=logical(string(:)');len=length(string);%开始解码weights=2.^(0:51);vector=repmat(uint8(0),1,info.length) ;vectorindex=1;codeindex=1;code=0;for index=1:lencode=bitset(code,codeindex,string(ind ex));codeindex=codeindex+1;byte=decode(bitset(code,codeindex),in fo);if byte>0vector(vectorindex)=byte-1; codeindex=1;code=0;vectorindex=vectorindex+1;endend%vector=reshape(vector,info.rows,info .cols);%函数addnode添加节点endaddnode子程序:functioncodeword_new=addnode(codeword_old,ite m)codeword_new=cell(size(codeword_old)) ;for index=1:length(codeword_old)codeword_new{index}=[item codeword_old{index}];end%函数frequency计算各符号出现的概率end频率计数frequency子程序:function f=frequency(vector)if~isa(vector,'uint8')error('input argument must be a uint8 vector');endf=repmat(0,1,256);len=length(vector);for index=0:255f(index+1)=sum(vector==uint8(index)); endf=f./len;%函数decode返回码字对应的符号endbyte子程序:function byte=decode(code,info)byte=info.huffcodes(code);end实验结果如下:其中Cr为压缩比的倒数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多媒体技术实验报告
学院:城南学院通信1202班
姓名
学号
指导老师:尹波
时间:2015/12/09
实验四:数字图像压缩
1.实验目的
1)理解有损压缩和无损压缩的概念;
2)理解图像压缩的主要原则和目的;
3)了解几种常用的图像压缩编码方式;
4)利用MATLAB程序进行图像压缩。
2. 实验原理
1)图像压缩原理
图像压缩主要目的是为了节省存储空间,增加传输速度。
图像压缩的理想标准是信息丢失最少,压缩比例最大。
不损失图像质量的压缩称为无损压缩,无损压缩不可能达到很高的压缩比;损失图像质量的压缩称为有损压缩,高的压缩比是以牺牲图像质量为代价的。
压缩的实现方法是对图像重新进行编码,希望用更少的数据表示图像。
信息的冗余量有许多种,如空间冗余,时间冗余,结构冗余,知识冗余,视觉冗余等,数据压缩实质上是减少这些冗余量。
高效编码的主要方法是尽可能去除图像中的冗余成分,从而以最小的码元包含最大的图像信息。
编码压缩方法有许多种,从不同的角度出发有不同的分类方法,从信息论角度出发可分为两大类。
①冗余度压缩方法,也称无损压缩、信息保持编码或嫡编码。
具体说就是解码图像和压缩编码前的图像严格相同,没有失真,从数学上讲是一种可逆运算。
②信息量压缩方法,也称有损压缩、失真度编码或烟压缩编码。
也就是说解码图像和原始图像是有差别的,允许有一定的失真。
本实验主要利用MA TLAB程序进行离散余弦变换(DCT)压缩和行程编码(Run Length Encoding,RLE)。
2)离散余弦变换(DCT)图像压缩原理
离散余弦变换DCT在图像压缩中具有广泛的应用,它是JPEG、MPEG等数据压缩标准的重要数学基础。
用DCT压缩图像的过程为:
①首先将输入图像分解为8×8或16×16的块,然后对每个子块进行二维DCT
变换。
②将变换后得到的量化的DCT系数进行编码和传送,形成压缩后的图像格式。
用DCT解压的过程为:
①对每个8×8或16×16块进行二维DCT反变换。
②将反变换的矩阵的块合成一个单一的图像。
余弦变换具有把高度相关数据能量集中的趋势,DCT变换后矩阵的能量集中在矩阵的左上角,右下的大多数的DCT系数值非常接近于0。
对于通常的图像来说,舍弃这些接近于0的DCT的系数值,并不会对重构图像的画面质量带来显著的下降。
所以,利用DCT 变换进行图像压缩可以节约大量的存储空间。
压缩应该在最合理地近似原图像的情况下使用最少的系数。
使用系数的多少也决定了压缩比的大小。
在压缩过程的第2步中,可以合理地舍弃一些系数,从而得到压缩的目的。
在压缩过程的第2步,还可以采用RLE和Huffman编码来进一步压缩。
3. 实验步骤
1)在matlab命令窗口中直接输入dctdemo选图像flower如图所示:
在右上角8*8 DCT系数图下,调节系数选择滑块。
保留系数为白色,置零系数为黑色。
按Apply键,比较原始图象、恢复图象、误差图象,观察原始图象与恢复图象的均方误差,改变系数选择滑块的位置,重做上步。
2)利用离散余弦变换进行JPEG图像压缩。
●使用函数dctmtx()产生DCT变换矩阵
T=dctmtx(8);%产生二维8*8 DCT变换矩阵;
●使用blkproc ()函数对图像进行分块处理
先使用rgb2gray()函数将原始图像转换成灰度图;再使用blkproc ()函数对图像进行分块处理。
B=blkproc(I,[8,8],'P1*x*P2',T,T');
%二值掩模,用来压缩DCT系数,只留下DCT系数中左上角的10个
mask=[1 1 1 1 0 0 0 0
1 1 1 0 0 0 0 0
1 1 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 ];
B2=blkproc(B,[8 8],'P1.*x',mask) ; %只保留DCT变换的10个系数
I2=blkproc(B2,[8 8],'P1*x*P2',T',T) ; %重构图像
4. 实验代码
I1=imread('D:\Backup\我的文档\503-100\lena.jpg');
I=rgb2gray(I1);
I=im2double(I);
T=dctmtx(8);
B=blkproc(I,[8,8],'P1*x*P2',T,T');
mask=[1 1 1 1 0 0 0 0
1 1 1 0 0 0 0 0
1 1 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];
B2=blkproc(B,[8 8],'P1.*x',mask);
I2=blkproc(B2,[8 8],'P1*x*P2',T',T);
figure,subplot(1,2,1);
imshow(I);
title('原始图像');
subplot(1,2,2);
imshow(I2);
title('压缩图像');
5. 实验结果
6. 思考题
1)图像中哪些信息是主要的,哪些信息是次要的?
低频部分是主要的,高频部分是次要的。
2)思考保留系数的多少与压缩比、恢复图象质量的关系。
保留系数越多,压缩比越小,图像质量越好。