图像编码实验报告

合集下载

图像编码实验报告

图像编码实验报告

图像编码实验报告图像编码实验报告一、引言图像编码是一项重要的技术,它可以将图像数据进行压缩和传输,以节省存储空间和传输带宽。

本实验旨在探究图像编码的原理和方法,并通过实验验证不同编码算法的性能和效果。

二、实验目的1. 理解图像编码的基本原理和概念;2. 掌握JPEG和PNG两种常见的图像编码算法;3. 分析和比较不同编码算法的压缩率和图像质量。

三、实验过程1. 实验环境搭建在本实验中,我们使用MATLAB软件进行图像编码实验。

首先,安装MATLAB 并导入实验所需的图像处理工具箱。

2. 图像压缩选择一张分辨率较高的彩色图像作为实验对象。

首先,使用JPEG编码算法对图像进行压缩。

在压缩过程中,可以调整压缩比例参数,观察压缩后图像的质量变化。

然后,使用PNG编码算法对同一张图像进行压缩,并比较JPEG和PNG 两种算法的压缩率和图像质量。

3. 实验结果分析根据实验结果,我们可以得出以下结论:- JPEG算法在高压缩比下会出现明显的失真,但在适当的压缩比下可以获得较好的图像质量;- PNG算法在压缩过程中不会导致明显的失真,但压缩率相对较低。

四、实验讨论1. 图像编码的原理图像编码是将图像数据转换为二进制码流的过程。

常见的图像编码方法包括无损编码和有损编码。

无损编码可以完全还原原始图像,但压缩率较低;有损编码可以获得较高的压缩率,但会引入一定的失真。

2. JPEG编码算法JPEG是一种常用的有损图像编码算法。

它采用离散余弦变换(DCT)将图像从空间域转换为频域,并通过量化和熵编码实现压缩。

JPEG算法在高频部分进行较大幅度的量化,从而实现高压缩率,但也导致了明显的失真。

3. PNG编码算法PNG是一种无损图像编码算法。

它采用预测编码和差分编码的方法,将图像数据转换为无损的二进制码流。

PNG算法在压缩过程中不引入明显的失真,但压缩率相对较低。

五、实验总结通过本次实验,我们深入了解了图像编码的原理和方法,并通过实验验证了JPEG和PNG两种编码算法的性能和效果。

bmp哈夫曼编码实验报告

bmp哈夫曼编码实验报告

多媒体技术与基础实验——huffman编码实验一:Huffman编码一、实验内容1、了解BMP图像的格式,实现BMP图片格式的数据域及文件头的分离2、熟悉Huffman编码原理3、用C语言使用Huffman编码算法对给定图像文件进行编码二、设计思路1、BMP文件的前54字节是与具体图像无关的文件头信息,进行哈夫曼编码时不需要对这部分进行编码。

2、哈夫曼编码基于图像统计特征的变长编码方法概率小的符号用较长的码字表示,概率大的符号用较短的码字表示。

3、霍夫曼编码的步骤:1)根据待编码的符号串,统计各个符号的概率;2)根据符号的概率统计特征,构建霍夫曼编码表,即计算每个符号的编码结果;3)用得到的编码表对符号序列进行编码。

三、相关知识1、Huffman Tree的定义假设有n个权值{w1,w2,w3......wn},试构造一棵有n个叶子节点的二叉树(节点总数为m=2*n-1),每个叶子带权值为wi,其中WPL(树带权路径)最小的二叉树成为Huffman树或者最优二叉树。

2、如何构造Huffman Tree(1).根据给点的n个权值{w1,w2,w3.....wn}构成n棵二叉树的集合F={T1,T2,T3......Tn},其中每棵二叉树只有个带有权值Wi的根节点,其左右子树为空。

(2).在F中选取两棵根结点的权值最小的树作为左右子树构造一个新二叉树,新根权值为左右子树权值之和。

(3).在F中delete掉这两棵树,插入新二叉树到F中。

(4).重复(2)和(3),直到F中只含一棵树,此数位Huffman Tree。

四、实验结果平均码字长度为7.57,编码效率为0.9967。

实验结果分析:哈夫曼编码是动态变长编码,对每一个图像,临时建立概率统计表和编码树,算法速度比静态编码慢,但压缩效果最好。

但是对具有很多不同颜色的图像时,哈夫曼编码的平均码字长度将增大,编码效率将下降,故需改进哈夫曼算法,例如采用截断哈夫曼算法等。

数字图像处理实验报告 (图像编码)

数字图像处理实验报告 (图像编码)

实验三图像编码一、实验内容:用Matlab语言、C语言或C++语言编制图像处理软件,对某幅图像进行时域和频域的编码压缩。

二、实验目的和意义:1. 掌握哈夫曼编码、香农-范诺编码、行程编码2.了解图像压缩国际标准三、实验原理与主要框架:3.1实验所用编程环境:Visual C++6.0(简称VC)3.2实验处理的对象:256色的BMP(BIT MAP )格式图像BMP(BIT MAP )位图的文件结构:(如图3.1)图3.1 位图的文件结构具体组成图:单色DIB 有2个表项16色DIB 有16个表项或更少 256色DIB 有256个表项或更少 真彩色DIB 没有调色板每个表项长度为4字节(32位) 像素按照每行每列的顺序排列每一行的字节数必须是4的整数倍biSize biWidth biHeight biPlanes biBitCount biCompression biSizeImagebiXPelsPerMeter biYPelsPerMeter biClrUsedbiClrImportantbfType=”BM ” bfSizebfReserved1 bfReserved2 bfOffBits BITMAPFILEHEADER位图文件头 (只用于BMP 文件)BITMAPINFOHEADER位图信息头Palette 调色板DIB Pixels DIB 图像数据3.3 数字图像基本概念数字图像是连续图像(,)f x y 的一种近似表示,通常用由采样点的值所组成的矩阵来表示:(0,0)(0,1)...(0,1)(1,0)(1,1)...(1,1).........(1,0)(1,1)...(1,1)f f f M f f f M f N f N f N M -⎡⎤⎢⎥-⎢⎥⎢⎥⎢⎥----⎣⎦每一个采样单元叫做一个像素(pixel ),上式(2.1)中,M 、N 分别为数字图像在横(行)、纵(列)方向上的像素总数。

数字图像处理 实验四dct编码

数字图像处理  实验四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(‘压缩图像’);%显示压缩后的图像实验结果:。

数字图像处理实验报告

数字图像处理实验报告

数字图像处理实验报告数字图像处理实验报告1一. 实验内容:主要是图像的几何变换的编程实现,具体包括图像的读取、改写,图像平移,图像的镜像,图像的转置,比例缩放,旋转变换等.具体要求如下:1.编程实现图像平移,要求平移后的图像大小不变;2.编程实现图像的镜像;3.编程实现图像的转置;4.编程实现图像的比例缩放,要求分别用双线性插值和最近邻插值两种方法来实现,并比较两种方法的缩放效果;5.编程实现以任意角度对图像进行旋转变换,要求分别用双线性插值和最近邻插值两种方法来实现,并比较两种方法的旋转效果.二.实验目的和意义:本实验的目的是使学生熟悉并掌握图像处理编程环境,掌握图像平移、镜像、转置和旋转等几何变换的方法,并能通过程序设计实现图像文件的读、写操作,及图像平移、镜像、转置和旋转等几何变换的程序实现.三.实验原理与主要框架:3.1 实验所用编程环境:Visual C++(简称VC)是微软公司提供的基于C/C++的应用程序集成开发工具.VC拥有丰富的功能和大量的扩展库,使用它能有效的创建高性能的Windows应用程序和Web应用程序.VC除了提供高效的C/C++编译器外,还提供了大量的可重用类和组件,包括著名的微软基础类库(MFC)和活动模板类库(ATL),因此它是软件开发人员不可多得的开发工具.VC丰富的功能和大量的扩展库,类的重用特性以及它对函数库、DLL库的支持能使程序更好的模块化,并且通过向导程序大大简化了库资源的使用和应用程序的开发,正由于VC具有明显的优势,因而我选择了它来作为数字图像几何变换的开发工具.在本程序的开发过程中,VC的核心知识、消息映射机制、对话框控件编程等都得到了生动的体现和灵活的应用.3.2 实验处理的对象:256色的BMP(BIT MAP )格式图像BMP(BIT MAP )位图的文件结构:具体组成图: BITMAPFILEHEADER位图文件头(只用于BMP文件) bfType=”BM” bfSize bfReserved1bfReserved2bfOffBitsbiSizebiWidthbiHeightbiPlanesbiBitCountbiCompressionbiSizeImagebiXPelsPerMeterbiYPelsPerMeterbiClrUsedbiClrImportant单色DIB有2个表项16色DIB有16个表项或更少256色DIB有256个表项或更少真彩色DIB没有调色板每个表项长度为4字节(32位)像素按照每行每列的顺序排列每一行的字节数必须是4的整数倍BITMAPINFOHEADER 位图信息头 Palette 调色板 DIB Pixels DIB图像数据1. BMP文件组成BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成.2. BMP文件头BMP文件头数据结构含有BMP文件的类型(必须为BMP)、文件大小(以字节为单位)、位图文件保留字(必须为0)和位图起始位置(以相对于位图文件头的偏移量表示)等信息.3. 位图信息头BMP位图信息头数据用于说明位图的尺寸(宽度,高度等都是以像素为单位,大小以字节为单位, 水平和垂直分辨率以每米像素数为单位) ,目标设备的级别,每个像素所需的位数, 位图压缩类型(必须是 0)等信息.4. 颜色表颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色.具体包含蓝色、红色、绿色的亮度(值范围为0-255)位图信息头和颜色表组成位图信息5. 位图数据位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上.Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充.3.3 BMP(BIT MAP )位图的显示:①一般显示方法:1. 申请内存空间用于存放位图文件2. 位图文件读入所申请内存空间中3. 在函数中用创建显示用位图, 用函数创建兼容DC,用函数选择显示删除位图但以上方法的缺点是: 1)显示速度慢; 2) 内存占用大; 3) 位图在缩小显示时图形失真大,(可通过安装字体平滑软件来解决); 4) 在低颜色位数的设备上(如256显示模式)显示高颜色位数的图形(如真彩色)图形失真严重.②BMP位图缩放显示 :用视频函数来显示位图,内存占用少,速度快,而且还可以对图形进行淡化(Dithering )处理.淡化处理是一种图形算法,可以用来在一个支持比图像所用颜色要少的设备上显示彩色图像.BMP位图显示方法如下:1. 打开视频函数,一般放在在构造函数中2. 申请内存空间用于存放位图文件3. 位图文件读入所申请内存空间中4. 在函数中显示位图5. 关闭视频函数 ,一般放在在析构函数中以上方法的优点是: 1)显示速度快; 2) 内存占用少; 3) 缩放显示时图形失真小,4) 在低颜色位数的设备上显示高颜色位数的图形图形时失真小; 5) 通过直接处理位图数据,可以制作简单动画.3.4 程序中用到的访问函数Windows支持一些重要的DIB访问函数,但是这些函数都还没有被封装到MFC中,这些函数主要有:1. SetDIBitsToDevice函数:该函数可以直接在显示器或打印机上显示DIB. 在显示时不进行缩放处理.2. StretchDIBits函数:该函数可以缩放显示DIB于显示器和打印机上.3. GetDIBits函数:还函数利用申请到的内存,由GDI位图来构造DIB.通过该函数,可以对DIB的格式进行控制,可以指定每个像素颜色的位数,而且可以指定是否进行压缩.4. CreateDIBitmap函数:利用该函数可以从DIB出发来创建GDI 位图.5. CreateDIBSection函数:该函数能创建一种特殊的DIB,称为DIB项,然后返回一个GDI位图句柄.6. LoadImage函数:该函数可以直接从磁盘文件中读入一个位图,并返回一个DIB句柄.7. DrawDibDraw函数:Windows提供了窗口视频(VFW)组件,Visual C++支持该组件.VFW中的DrawDibDraw函数是一个可以替代StretchDIBits 的函数.它的最主要的优点是可以使用抖动颜色,并且提高显示DIB的速度,缺点是必须将VFW代码连接到进程中.3.5 图像的几何变换图像的几何变换,通常包括图像的平移、图像的镜像变换、图像的转置、图像的缩放和图像的旋转等.数字图像处理实验报告2一、实验的目的和意义实验目的:本实验内容旨在让学生通过用VC等高级语言编写数字图像处理的一些基本算法程序,来巩固和掌握图像处理技术的基本技能,提高实际动手能力,并通过实际编程了解图像处理软件的实现的基本原理。

数字图像--图像的哈夫曼编码实验

数字图像--图像的哈夫曼编码实验

江 西 理 工 大 学江 西 理 工 大 学 实 验 报 告 纸第 1 页/共 4页一、实验目的掌握哈夫曼编码算法的基本原理;要求对屏幕输入的信符概率向量进行哈夫曼编码。

二、实验内容对屏幕输入的信符概率向量例如‘[0.4 0.2 0.16 0.12 0.06 0.04 0.02]’进行哈夫曼编码,计算计算信源的熵,哈夫曼编码的平均码字长及其编码效率,显示哈夫曼编码与相应计算结果.三、实验步骤和设计思想通过哈夫曼编码来计算信源的熵,用Matlab 来模拟算法的过程。

霍夫曼编码的步骤:1)根据待编码的符号串,统计各个符号的概率;2)根据符号的概率统计特征,构建霍夫曼编码表,即计算每个符号的编码结果; 3)用得到的编码表对符号序列进行编码。

四、程序清单clcclear allp=input('请输入信符的概率向量:'); n=length(p); q=p;a=zeros(n-1,n); for i=1:n-1fprintf('第%d 次排序\n',i); [q,l]=sort(q) %qa(i,:)=[l(1:n-i+1),zeros(1,i-1)]fprintf('\n 第%d 次排序后合并生成的数据',i);q=[q(1)+q(2),q(3:n),1] endfor i=1:n-1c(i,1:n*n)=blanks(n*n); endc(n-1,n)='1'; c(n-1,2*n)='0'; for i=2:n-1c(n-i,1:n-1)=c(n-i+1,n*(find(a(n-i+1,:)==1))-(n-2):n*(find(a(n-i+1,:)==1))) c(n-i,n)='1';c(n-i,n+1:2*n-1)=c(n-i,1:n-1); c(n-i,2*n)='0';for j=1:i-1c(n-i,(j+1)*n+1:(j+2)*n)=c(n-i+1,n*(find(a(n-i+1,:)==j+1)-1)+1:n*(find(a(n-i+1,:)==j+1))) end end for i=1:nh(i,1:n)=c(1,n*(find(a(1,:)==i)-1)+1:find(a(1,:)==i)*n); ll(i)=length(find(abs(h(i,:)~=32))); endLavg=sum(p.*ll)fprintf('\n huffman code:\n'); hHA=(-1) * sum(p.*log2(p));fprintf('\n huffman effciency:\n'); t=HA/Lavg五、实验调试记录六、实验结果及其分析请输入信符的概率向量:[0.4 0.2 0.16 0.12 0.06 0.04 0.02] 第1次排序q = 0.0200 0.0400 0.0600 0.1200 0.1600 0.2000 0.4000 l = 7 6 5 4 3 2 1 a = 7 6 5 4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0数字图像处理 实验报告姓名: 江 西 理 工 大 学 实 验 报 告 纸第 2 页/共 4页0 0 0 0 0 0 0 0 0 0 0 0 0 0第1次排序后合并生成的数据 q =0.0600 0.0600 0.1200 0.1600 0.2000 0.4000 1.0000 第2次排序 q =Columns 1 through 60.0600 0.0600 0.1200 0.1600 0.2000 0.4000 Column 7 1.0000 l =1 2 3 4 5 6 7 a =7 6 5 4 3 2 1 1 2 3 4 5 6 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 第2次排序后合并生成的数据 q =Columns 1 through 60.1200 0.1200 0.1600 0.2000 0.4000 1.0000 Column 7 1.0000 第3次排序 q =Columns 1 through 60.1200 0.1200 0.1600 0.2000 0.4000 1.0000 Column 7 1.0000 l =1 2 3 4 5 6 7 a =7 6 5 4 3 2 1 1 2 3 4 5 6 0 1 2 3 4 5 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0第3次排序后合并生成的数据 q =Columns 1 through 60.2400 0.1600 0.2000 0.4000 1.0000 1.0000 Column 7 1.0000第4次排序q =Columns 1 through 60.1600 0.2000 0.2400 0.4000 1.0000 1.0000 Column 7 1.0000l = 2 3 1 4 5 6 7 a = 7 6 5 4 3 2 1 1 2 3 4 5 6 0 1 2 3 4 5 0 0 2 3 1 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0第4次排序后合并生成的数据 q =Columns 1 through 60.3600 0.2400 0.4000 1.0000 1.0000 1.0000 Column 7 1.0000第5次排序q = Columns 1 through 60.2400 0.3600 0.4000 1.0000 1.0000 1.0000 Column 7 1.0000l = 2 1 3 4 5 6 7 a = 7 6 5 4 3 2 1 1 2 3 4 5 6 0 1 2 3 4 5 0 0 2 3 1 4 0 0 0 2 1 3 0 0 0 0 0 0 0 0 0 0 0 第5次排序后合并生成的数据 q =Columns 1 through 60.6000 0.4000 1.0000 1.0000 1.0000 1.0000姓名: 江 西 理 工 大 学 实 验 报 告 纸第 3 页/共 4页Column 7 1.0000第6次排序q =Columns 1 through 60.4000 0.6000 1.0000 1.0000 1.0000 1.0000 Column 7 1.0000l = 2 1 3 4 5 6 7 a = 7 6 5 4 3 2 1 1 2 3 4 5 6 0 1 2 3 4 5 0 0 2 3 1 4 0 0 0 2 1 3 0 0 0 0 2 1 0 0 0 0 0第6次排序后合并生成的数据q = 1 1 1 1 1 1 1c = 0 1 0 c = 01 00 1 1 0 c = 00 01 00 1 1 0 c = 001 000 01 01 00 1 1 0 c = 001 000 01 1 01 00 1 1 0 c = 01 001 000 01 1 01 00 1 1 0 c = 011 010 001 001 000 01 1 01 00 1 1 0 c = 011 010 001 000 001 000 01 1 01 00 1 1 0 c = 011 010 001 000 1 001 000 01 1 01 00 1 1 0 c = 011 011 010 001 000 1 001 000 01 1 01 00 1 1 0 c = 0111 0110 010 011 010 001 000 1 001 000 01 1 01 00 1 1 0 c = 0111 0110 010 001 011 010 001 000 1 001 000 01 1 01 00 1 1 0 c = 0111 0110 010 001 000 011 010 001 000 1 001 000 01 1 01 00 1 1 0 c = 0111 0110 010 001 000 1 011 010 001 000 1 001 000 01 1 01 00 1 1 0 c =0111 0111 0110 010 001 000 1 011 010 001 000 1 001 000 01 1 01 00 1 1 0 c =01111 01110 0110 0111 0110 010 001 000 1姓名: 江西理工大学实验报告纸011 010 001 000 1001 000 01 101 00 11 0c = 01111 01110 0110 0100111 0110 010 001 000 1011 010 001 000 1001 000 01 101 00 11 0c =01111 01110 0110 010 0010111 0110 010 001 000 1011 010 001 000 1001 000 01 101 00 11 0c = 01111 01110 0110 010 001 0000111 0110 010 001 000 1011 010 001 000 1001 000 01 101 00 11 0c = 01111 01110 0110 010 001 000 10111 0110 010 001 000 1011 010 001 000 1001 000 01 101 00 11 0七、实验心得通过做这次实验掌握了哈夫曼编码的基本理论和算法流程;掌握了编程实现图像的哈夫曼编码算法。

实验四图像压缩编码

实验四图像压缩编码

系:信息与机电工程系专业:电子信息工程年级:2013级姓名:学号:136710093 实验课程:数字图像处理实验室号:_ 实验设备号:实验时间:2015.6.16指导教师签字:成绩:实验四图像压缩编码一、实验目的1.了解有关数字图像压缩的基本概念2.理解有损压缩和无损压缩的概念;3.理解图像压缩的主要原则和目的;4.了解几种常用的图像压缩编码方式。

5.进一步熟悉DCT的概念和原理;6.掌握对灰度和彩色图像作离散余弦变换和反变换的方法;7.掌握利用MATLAB软件进行图像压缩。

二、实验原理1、图像压缩原理图像压缩主要目的是为了节省存储空间,增加传输速度。

图像压缩的理想标准是信息丢失最少,压缩比例最大。

不损失图像质量的压缩称为无损压缩,无损压缩不可能达到很高的压缩比;损失图像质量的压缩称为有损压缩,高的压缩比是以牺牲图像质量为代价的。

压缩的实现方法是对图像重新进行编码,希望用更少的数据表示图像。

信息的冗余量有许多种,如空间冗余,时间冗余,结构冗余,知识冗余,视觉冗余等,数据压缩实质上是减少这些冗余量。

高效编码的主要方法是尽可能去除图像中的冗余成分,从而以最小的码元包含最大的图像信息。

编码压缩方法有许多种,从不同的角度出发有不同的分类方法,从信息论角度出发可分为两大类。

(1).冗余度压缩方法,也称无损压缩、信息保持编码或嫡编码。

具体说就是解码图像和压缩编码前的图像严格相同,没有失真,从数学上讲是一种可逆运算。

(2)信息量压缩方法,也称有损压缩、失真度编码或烟压缩编码。

也就是说解码图像和原始图像是有差别的,允许有一定的失真。

应用在多媒体中的图像压缩编码方法,从压缩编码算法原理上可以分为以下3类:(1)无损压缩编码种类哈夫曼(Huffman)编码,算术编码,行程(RLE)编码,Lempel zev编码。

(2)有损压缩编码种类预测编码,DPCM,运动补偿;频率域方法:正交变换编码(如DCT),子带编码;空间域方法:统计分块编码;模型方法:分形编码,模型基编码;基于重要性:滤波,子采样,比特分配,向量量化;(3)混合编码。

实验三、图像压缩编码技术

实验三、图像压缩编码技术

太原理工大学现代科技学院数字图像处理课程实验报告专业班级测控14-4学号 2014101874姓名杨东倡指导教师刘帆实验名称 实验三、图像压缩编码技术 同组人 专业班级 测控14-4 姓名 杨东倡 学号 2014101874 成绩 实验三、图像压缩编码技术 一、实验目的 1、理解有损压缩和无损压缩的概念; 2、理解图像压缩的主要原则和目的; 3、了解几种常用的图像压缩编码方式; 4、利用MATLAB 程序进行图像压缩编码。

二、实验原理 1、图像压缩原理 图像压缩主要目的是为了节省存储空间,增加传输速度。

图像压缩的理想标准是信息丢失最少,压缩比例最大。

不损失图像质量的压缩称为无损压缩,无损压缩不可能达到很高的压缩比;损失图像质量的压缩称为有损压缩,高的压缩比是以牺牲图像质量为代价的。

压缩的实现方法是对图像重新进行编码,希望用更少的数据表示图像。

信息的冗余量有许多种,如空间冗余,时间冗余,结构冗余,知识冗余,视觉冗余等,数据压缩实质上是减少这些冗余量。

高效编码的主要方法是尽可能去除图像中的冗余成分,从而以最小的码元包含最大的图像信息。

编码压缩方法有许多种,从不同的角度出发有不同的分类方法,从信息论角度出发可分为两大类。

(1)冗余度压缩方法,也称无损压缩、信息保持编码或熵编码。

具体说就是解码图像和压缩编码前的图像严格相同,没有失真,从数学上讲是一种可逆运算。

(2)信息量压缩方法,也称有损压缩、失真度编码或烟压缩编码。

也就是说解码图像和原始图像是有差别的,允许有一定的失真。

应用在多媒体中的图像压缩编码方法,从压缩编码算法原理上可以分为以下3类: (1)无损压缩编码种类 哈夫曼(Huffman )编码,算术编码,行程(RLE )编码,Lempel zev 编码。

(2)有损压缩编码种类 预测编码,DPCM ,运动补偿; 频率域方法:正交变换编码(如DCT),子带编码; 空间域方法:统计分块编码; 模型方法:分形编码,模型基编码; 基于重要性:滤波,子采样,比特分配,向量量化; (3)混合编码。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。






码(实验报告)
一、实验目的
1.理解图像压缩目的及意义;
2.理解有损压缩和无损压缩的概念;
3.了解几种常用的图像压缩编码方法;
4.利用MATLAB程序进行图像压缩。

二、实验原理
图像压缩主要目的是为了节省存储空间,提高存储、处理、传输速度。

虽然表示图像需要大量的数据,但数据是高度相关的,或者说存在冗余(Redundancy),去掉这些冗余信息可以有效地压缩图像,同时不会损坏图像的有效信息。

信息的冗余量有许多种,如空间冗余,时间冗余,结构冗余,知识冗余,视觉冗余等,数据压缩实质上是减少这些冗余量。

高效编码的主要方法是尽可能去除图像中的冗余成分,从而以最小的码元包含最大的图像信息。

图像压缩的理想标准是信息丢失最少,压缩比例最大。

不损失图像质量的压缩称为无损压缩,无损压缩不可能达到很高的压缩比;损失图像质量的压缩称为有损压缩,高的压缩比是以牺牲图像质量为代价的。

压缩的实现方法是对图像重新进行编码,希望用更少的数据表示图像。

编码压缩方法有许多种,从不同的角度出发有不同的分类方法,从信息论角度出发可分为两大类。

(1)冗余度压缩方法,也称无损压缩、信息保持编码或嫡编码。

具体说就是解码图像和压缩编码前的图像严格相同,没有失真,从数学上讲是一种可逆运算。

(2)信息量压缩方法,也称有损压缩、失真度编码或烟压缩编码。

也就是说解码图像和原始图像是有差别的,允许有一定的失真。

应用在多媒体中的图像压缩编码方法,从压缩编码算法原理上可以分为以下几类:
(1)熵编码。

熵编码是纯粹基于信号统计特性的编码技术,是一种无损编码。

熵编码的基本原理是给出现概率较大的符号赋予一个短码字,而给出现概率较小的符号赋予一个长码字,从而使得最终的平均码长很小。

常见的熵编码有:哈夫曼(Huffman)编码,算术编码,行程(RLE)编码。

(2)预测编码。

预测编码是利用图像信号的空间或时间相关性,用已传输的像素对当前的像素进行预测,然后对预测值与真实值的差(预测误差)进行编码处理和传输。

常用的预测编码有差分脉码调制(DPCM)和运动补偿法。

(3)变换编码。

变换编码通常是将空间域上的图像经过正交变换映射到另一变换域上,使变换后的系数之间的相关性降低。

(4)混合编码。

混合编码是指综合了熵编码,变换编码或预测编码的编码方法。

有JBIG,H261,JPEG,MPEG等技术标准。

三、实验内容
本实验主要利用MATLAB程序进行离散余弦变换(DCT)压缩和行程编码(Run Length Encoding, RLE)。

1、离散余弦变换(DCT)图像压缩
离散余弦变换DCT在图像压缩中具有广泛的应用,它是JPEG、MPEG等数据压缩标准的重要数学基础。

和相同图像质量的其他常用文件格式(如GIF(可交换的图像文件格式),TIFF(标签图像文件格式),PCX(图形文件格式))相比,JPEG是目前静态图像中压缩比最高的。

JPEG比其他几种压缩比要高得多,而图像质量都差不多(JPEG处理的图像只有真彩图和灰度图)。

正是由于其高压缩比,使得JPEG被广泛地应用于多媒体和网络程序中。

JPEG 有几种模式,其中最常用的是基于DCT变换的顺序型模式,又称为基本系统(Baseline)。

用DCT压缩图像的过程为:
(1)首先将输入图像分解为8×8或16×16的块,然后对每个子块进行二维DCT变换。

(2)将变换后得到的量化的DCT系数进行编码和传送,形成压缩后的图像格式。

用DCT解压的过程为:
(1)对每个8×8或16×16块进行二维DCT反变换。

(2)将反变换的矩阵的块合成一个单一的图像。

余弦变换具有把高度相关数据能量集中的趋势,DCT变换后矩阵的能量集中在矩阵的左上角,右下的大多数的DCT系数值非常接近于0。

对于通常的图像来说,舍弃这些接近于0的DCT的系数值,并不会对重构图像的画面质量带来显著的下降。

所以,利用DCT变换进行图像压缩可以节约大量的存储空间。

压缩应该在最合理地近似原图像的情况下使用最少的系数。

使用系数的多少也决定了压缩比的大小。

在压缩过程的第2步中,可以合理地舍弃一些系数,从而得到压缩的目的。

在压缩过程的第2步,还可以采用RLE和Huffman编码来进一步压缩。

2、行程编码(RLE):
例如如下这幅的二值图像,
如果采用行程编码可以按如下格式保存
其中10和8表示图像的宽和高。

在这个小例子中行程编码并没有起到压缩图像的作用。

这是由于这个图的尺寸过小,当图像尺寸较大时行程编码还是不错的无损压缩方法。

对于灰度图像和二值图像,用行程编码—般都有很高的压缩率。

行程编码方法实现起来很容易,对于具有长重复值的串的压缩编码很有效,例如:对于有大面积的阴影或颜色相同的图像,使用这种方法压缩效果很好。

很多位图文件格式都采用行程编码,如TIFF,PCX,GEM,BMP等。

3. 图像压缩编码的MATLAB代码
(1)利用DCT变换进行图像压缩的MATLAB程序
RGB = imread('*.tif');
I = rgb2gray(RGB);
J = dct2(I);
imshow(log(abs(J)),[]), colormap(jet(64)), colorbar
J(abs(J) < 10) = 0;
K = idct2(J);
figure,imshow(I)
figure,imshow(K,[0 255])
(2)利用离散余弦变换进行JPEG图像压缩
I=imread(‘*.tif’); %读入原图像;
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 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]; %二值掩膜,用来压缩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(‘压缩图像’);%显示压缩后的图像。

对比原始图像和压缩后的图像,虽然舍弃了85%的DCT系数,但图像仍然清晰(当然有一些质量损失)
3)利用行程编码(RLE)进行图像压缩
I=checkerboard(10,2); %调入原图像
[m n]=size(I);
J=[];
for i=1:m
value=I(i,1);
num=1;
for j=2:n
if I(i,j)==value
num=num+1;
else
J=[J num value];
num=1;
value=I(i,j);
end
end
I=[J num value 0 0]; %添加的行判断位 0 0
end
disp(‘原图像大小:’)
whos(‘I’);
disp(‘压缩图像大小:’)
whos(‘J’);
disp(‘图像的压缩比:’) disp(m*n/length(J))。

相关文档
最新文档