图像压缩实验指导书

合集下载

图像压缩实验报告

图像压缩实验报告

竭诚为您提供优质文档/双击可除图像压缩实验报告篇一:实验三图像压缩实验三图像压缩一、实验目的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等技术标准。

JPEG图像压缩实验_百度文库.

JPEG图像压缩实验_百度文库.

JPEG 静态图像压缩实验指导书一、实验目的1. 了解多媒体通信中图像压缩技术2. 熟悉 JPEG 图像压缩编码过程3. 掌握二维 DCT 变换算法二、实验原理JPEG(Joint Photographic Experts Group 是一个由 ISO 和 ITU-T 两个组织机构联合组成的一个图像专家小组,负责制定静态的数字图像数据压缩编码标准, 这个专家组开发的算法称为 JPEG 算法,并且成为国际上通用的标准。

JPEG 是一个适用范围很广的静态图像数据压缩标准, 既可用于灰度图像又可用于彩色图像。

JPEG 不仅适于静止图像的压缩,电视图像的帧内图像的压缩编码,也常采用此算法。

JPEG 标准定义了多种工作模式, 其中最基本的是基于 8×8块的 DCT 顺序编码,将一帧图像分为 8×8的块,然后按照从左至右、自上而下的顺序,对块进行 DCT 、量化和熵编码。

其编、解码框图如下:图 1 基于 DCT 的顺序编码框图DCT 解码器图 2 基于 DCT 的顺序解压缩框图JPEG 压缩编码算法的主要计算步骤:1 正向离散余弦变换 (FDCT。

2 量化 (quantization。

3 Z 字形编码 (zigzag scan。

4 使用差分脉冲编码调制 (differential pulse code modulation, DPCM 对直流系数(DC进行编码。

5 使用行程长度编码 (run-length encoding, RLE 对交流系数 (AC进行编码。

6 熵编码 (entropy coding。

三、实验内容按照上述压缩过程实现一幅图像的压缩,生成符合 JPEG 标准的图像文件 JPEG 图像编码流程如下:图 3 JPEG 图像编码流程1. DCT 变换对 8×8的图像数据块进行二维 DCT 的变换, 把能量集中在少数几个系数上,从而达到数据压缩的目的。

:DCT 变换公式 :DCT 反变换公式:其中:二维 DCT 变换可以分解为行和列的一维 DCT 变换的组合运算, 也可将 8×8的块分为更小的子块,直接对二维数据进行 2维快速余弦变换。

多媒体实验报告二图片的压缩处理

多媒体实验报告二图片的压缩处理

多媒体实验报告二图片的压缩处理多媒体实验报告计算机科学与技术学院2015-2016学年第1学期《多媒体技术》实验二:图像压缩算法实现专业:学号:姓名:教师:完成日期:15.10.171多媒体实验报告多媒体技术实验二实验报告(一)实验目的1(理解有损压缩和无损压缩的概念;2(理解图像压缩的主要原则和目的;3.了解几种常用的图像压缩编码方式;4.利用MATLAB程序进行图像压缩;(二)实验环境1(高档微机:MPC2(课前准备:标准实验纸张若干张3(操作系统:Windows 2000 或Windows XP 中文版4(编程工具:Matlab7.0(三)实验过程及结果实验原理:1.图像压缩原理图像压缩主要目的是为了节省存储空间,增加传输速度。

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

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

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

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

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

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

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

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

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

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

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

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

数字图像处理技术-图像压缩

数字图像处理技术-图像压缩

实验六图像压缩课程名称:数字图像处理技术实验日期:2016-11-17班级:姓名:学号:一、实验目的1.了解图像压缩的基本操作;2.掌握行程编码算法、哈夫曼编码算法;3. 掌握边缘检测的Matlab实现方法。

二、实验内容1. 在GUI中,实现灰度图像、彩色图像的行程编码的编码器算法;进一步实现行程编码的解码器算法,并比较原图像和解码图像是否有区别。

2. 在GUI中,实现图像的边缘检测, 比较'roberts','sobel',算子的检测效果。

三、实验代码function axes1_CreateFcn(hObject, eventdata, handles)% hObject handle to axes1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called imshow('1.jpg')% Hint: place code in OpeningFcn to populate axes1% --- Executes on button press in pushbutton1.function pushbutton1_Callback(hObject, eventdata, handles)% hObject handle to pushbutton1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)figure;A=imread('1.jpg');image1=rgb2gray(A);subplot(2,2,1);imshow(image1);image2=image1(:);image2length=length(image2);for i=1:1:image2lengthif image2(i)>=127image2(i)=255;elseimage2(i)=0;endendimage3=reshape(image2,320,240);subplot(2,2,2);imshow(image3);X=image3(:);x=1:1:length(X);plot(x,X(x));j=1;image4(1)=1;for z=1:1:(length(X)-1)if X(z)==X(z+1)image4(j)=image4(j)+1;elsedata(j)=X(z);j=j+1;image4(j)=1;endenddata(j)=X(length(X));image4length=length(image4);y=1:1:image4length;plot(y,image4(y));CR=image2length/image4length;l=1;for m=1:image4lengthfor n=1:1:image4(m);rec_image(l)=data(m);l=l+1;endendu=1:1:length(rec_image);plot(u,rec_image(u));rec2_image=reshape(rec_image,320,240);subplot(2,2,3);imshow(rec2_image);% --- Executes on button press in pushbutton2.function pushbutton2_Callback(hObject, eventdata, handles)% hObject handle to pushbutton2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) figure;clear all;I1=imread('1.jpg');I2=im2bw(I1,0.5);I3=I2(:)';I3len=length(I3);j=1;n=1;for z=1:(I3len-1)if I3(z)==I3(z+1)n=n+1;elsepixel(j)=I3(z);numpixel(j)=n;j=j+1;n=1;endendpixel(j)=I3(z+1);numpixel(j)=n;pixel_len=length(pixel);CR=I3len/pixel_len;disp('压缩比:')disp(CR);disp('原图像数据的长度:')disp(I3len);disp('压缩后图像数据的长度:')disp(pixel_len);% --- Executes on button press in pushbutton3.function pushbutton3_Callback(hObject, eventdata, handles)% hObject handle to pushbutton3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) figure;A=imread('095.jpg');image1=rgb2gray(A);figure;imshow(image1);image2=image1(:);image2length=length(image2);for i=1:1:image2lengthif image2(i)>=127image2(i)=255;elseimage2(i)=0;endendimage3=reshape(image2,1360,1020);figure;imshow(image3);X=image3(:);x=1:1:length(X);figure;plot(x,X(x));j=1;image4(1)=1;for z=1:1:(length(X)-1)if X(z)==X(z+1)image4(j)=image4(j)+1;elsedata(j)=X(z);j=j+1;image4(j)=1;endenddata(j)=X(length(X));image4length=length(image4);y=1:1:image4length ;figure;plot(y,image4(y));CR=image2length/image4length;l=1;for m=1:image4lengthfor n=1:1:image4(m);rec_image(l)=data(m);l=l+1;endendu=1:1:length(rec_image);figure;plot(u,rec_image(u));rec2_image=reshape(rec_image,1360,1020);figure;imshow(rec2_image);% --- Executes on button press in pushbutton4.function pushbutton4_Callback(hObject, eventdata, handles)% hObject handle to pushbutton4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) figure;A=imread('1.jpg');image1=rgb2gray(A);figure;imshow(image1);image2=image1(:);image2length=length(image2);for i=1:1:image2lengthif image2(i)>=127image2(i)=255;image2(i)=0;endendimage3=reshape(image2,320,240);figure;imshow(image3);X=image3(:);x=1:1:length(X);figure;plot(x,X(x));j=1;image4(1)=1;for z=1:1:(length(X)-1)if X(z)==X(z+1)image4(j)=image4(j)+1;elsedata(j)=X(z);j=j+1;image4(j)=1;endenddata(j)=X(length(X));image4length=length(image4);y=1:1:image4length ;figure;plot(y,image4(y));CR=image2length/image4length;l=1;for m=1:image4lengthfor n=1:1:image4(m);rec_image(l)=data(m);l=l+1;endendu=1:1:length(rec_image);figure;plot(u,rec_image(u));rec2_image=reshape(rec_image,320,240);figure;imshow(rec2_image);% --- Executes on button press in pushbutton4.% --- Executes on button press in pushbutton5.function pushbutton5_Callback(hObject, eventdata, handles)% hObject handle to pushbutton5 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)f=imread('1.jpg');u=rgb2gray(f);F=double(f);U=double(u);[H,W]=size(u);uSobel=u;for i=2:H-1for j=2:W-1Gx=(U(i+1,j-1)+2*U(i+1,j)+F(i+1,j+1))-(U(i-1,j-1)+2*U(i-1,j)+F(i-1,j+ 1));Gy=(U(i-1,j+1)+2*U(i,j+1)+F(i+1,j+1))-(U(i-1,j-1)+2*U(i,j-1)+F(i+1,j-1));uSobel(i,j)=sqrt(Gx^2+Gy^2);endendsubplot(2,2,1);imshow(f);title('原图像');subplot(2,2,4);imshow(im2uint8(uSobel));title('Sobel图像');% --- Executes on button press in pushbutton6.function pushbutton6_Callback(hObject, eventdata, handles)% hObject handle to pushbutton6 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)figure;I=imread('1.jpg');I1=rgb2gray(I);subplot(2,2,1);imshow(I1);h1=[1 0;0 -1];B1=imfilter(I1,h1);h2=[0 1;-1 0];B2=imfilter(I1,h2);B3=B1+B2;subplot(2,2,4);imshow(B3);title('Roberts图像');四、实验结果截图五、实验体会借鉴老师的代码写,甚是有趣。

数字图像处理 图像压缩

数字图像处理 图像压缩

实验报告实验名称实验二图像压缩课程名称数字图像处理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.实验结论结果图离散余弦变换的变换核为余弦函数。

余弦变换除了具有一般的正交变换性质外,它的变换矩阵的基向量能较好的描述图像信号和人类语音信号的相关特征,因此被应用与图像压缩编码的语音信号处理等领域。

实验四图像压缩编码

实验四图像压缩编码

系:信息与机电工程系专业:电子信息工程年级: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)混合编码。

图像压缩综合实验

图像压缩综合实验

第 4 页
《网络通信实验与设计》实验报告
end end accof=jacenc(acseq); disp(['DC coefficient after Huffman coding has ' int2str(length(dccof)) ... ' bits']); disp(['AC coefficient after Huffman coding has ' int2str(length(accof)) ... ' bits']); disp(['Compression Rate ' num2str((length(dccof)+length(accof))/(mb*nb*64)) ' Bits / pixel ']) disp(['Compression Ratio ' num2str(8/((length(dccof)+length(accof))/(mb*nb*64))) ' : 1']) 实验结果截图: 原图像: Q=10 的量化编码图像: 阈值编码图像:
实 验 结 果 整 理 及 分 析
结果分析: 由结果截图可看出,编码后的图像相对于原图像都稍显模糊,且阈值编码与量 化编码所得图像也有不同之处,阈值编码时有些点出编码时取为 0,而量化编码 时却不取为 0。 压缩后图像稍有失真。压缩比为:8.9124 : 1 结 论 及 心 得 体 会
本次实验达到了实验目的,进一步熟悉了 DCT 的概念和原理;掌握了对灰度和 彩色图像作离散余弦变换和反变换的方法;可以选择适当的量化间隔、阈值和区 域进行编码;实现了 JPEG 压缩编码。 非常感谢老师的指导。

数字图像处理实验指导书

数字图像处理实验指导书

数字图像处理实验指导书臧兰云电子工程学院实验一图像基本运算一、实验目的:1、了解数字图像处理基础2、掌握数字图像处理的基本运算方法3、学习利用matlab进行数字图像处理的基本方法二、实验内容:1、根据图像采样原理,试对lena图像分别进行4和16倍减采样,查看其减采样效果。

2、对一幅图像加入椒盐噪声,并通过减法运算提取出噪声。

3、两幅二值图像进行逻辑与、或、非运算。

4、实现把一幅图像旋转45°,并分别采用把转出显示区域的图像截去和扩大显示区域范围以显示图像的全部两种方式。

5、选取一幅大小为256*256像素的图像,分别将图比例放大1.5倍,比例缩小0.7倍,非比例放大到420*384像素,非比例缩小到150*180像素。

三、思考与总结:1、将一幅图像如果进行4倍、16倍和64倍增采样会出现什么情况?是否有其他方法可以实现图像的采样?2、图像的选转会导致图像的失真吗?若有,有什么办法可以解决这个问题?3、由非比例缩放得到的图片能够恢复到原图片吗?为什么?实验二图像变换及增强一、实验目的:1、掌握图像变换的应用2、掌握数字图像处理的空间域及频域的增强方法二、实验内容:1、构造一幅图像并对其旋转一定的角度,求原始图像及旋转后图像的频谱图。

2、对一幅灰度图像进行均衡化,灰度等级为8级。

3、对一幅灰度图像采用多种方法实现平滑、锐化滤波。

4、对一幅图像进行幂次变换。

三、思考与总结:1、图像变换在图像处理中的应用?2、什么是傅里叶变换的旋转性?3、以上实验分别可以应用到那些实际问题中? 实验三图像压缩编码一、实验目的:1、掌握图像压缩编码的概念2、比较图像压缩编码的各种方法二、实验内容:1、计算一幅灰度图像的熵。

2、选择一种方法对图像进行压缩,并计算压缩比。

三、思考与总结:1、注释程序功能2、以上实验可以应用到那些实际问题中?实验四图像分割及彩色图像处理一、实验目的:1、掌握图像分割的基本原理2、掌握彩色图像处理方法二、实验内容:1、用全局阈值法对图像进行分割2、实现sobel算子及Roberts等算子的边缘提取算法3、生成一幅大小为256*256的RGB图像。

图像实验指导书3

图像实验指导书3

图像处理技术实验指导书彭智勇实验一 matlab数字图像处理基础基本内容:●熟悉MatLab软件中图像输入/输出/显示/转换的基本命令;●了解图像IO基本函数、矩阵与图像和图像格式的对应关系、灰度/彩色/二值图像的相互转换数字图像基础.●数字图像读入与输出:InImg=imread(‘图像文件’): 读入指定的图像文件到内存InImg:矩阵变量,保存读入的数字图像;图像文件:全路径的图像文件名(格式为:*.bmp 或 *.jpg);例如: InImg=ImRead(‘d:\DirName\demoImg_InPut.bmp’)imwrite(OutImg, ‘图像文件’): 输出内存中图像数据到文件OutImg:矩阵变量,保存的数字图像;图像文件:全路径的图像文件名(格式为:*.bmp 或 *.jpg);例如: ImWrite (OutImg ,‘d:\DirName\demoImg_outPut.bmp’)将OutImg中的矩阵数据作为图像文件保存;whos ImgData: 屏幕输出图像的相关信息ImgData: 矩阵变量,保存在内存中的数字图像●数字图像显示:imshow(ImgData): 将图像文件显示到屏幕ImgData: 矩阵变量,保存待显示的数字图像;例如: InImg=ImRead(‘d:\DirName\demoImg_InPut.bmp’)Imshow(InImg) (显示读入的图像文件)subPlot(行数,列数,区域索引); imshow(ImgData): 将图像文件显示到指定的屏幕区域ImgData: 矩阵变量,保存待显示的数字图像;行数,列数:屏幕划分区域数(行数x列数); 区域索引:第n块区域(1<=n<=行数x列数)例如: InImg=ImRead(‘d:\DirName\demoImg_InPut.bmp’)subPlot(1,2,1);Imshow(InImg) : 将图像文件显示到屏幕第一块区域●数字图像转换:I=rgb2gray(rgbImg):将彩色图像转换为灰度图像rgbImg: 矩阵变量,保存彩色图像;I: 矩阵变量,保存灰度图像例如: InImg=ImRead(‘d:\DirName\demoImg_InPut.bmp’)I=rgb2gray(InImg)subPlot(1,2,1);Imshow(InImg) : 显示彩色图像于屏幕第一块区域subPlot(1,2,2);Imshow(I) : 显示灰度图像于屏幕第二块区域bw=im2bw(Img,level):将灰度图像转换为二值图像;Img: 矩阵变量,保存彩色图像或灰度图像;level: 灰度级(> level 为1;< level 为0)bw: 矩阵变量,二值图像例如: InImg=ImRead(‘d:\DirName\demoImg_InPut.bmp’)bw = im2bw (InImg,0.5)subPlot(1,2,1);Imshow(InImg) : 显示彩色图像于屏幕第一块区域subPlot(1,2,2);Imshow(bw) : 显示灰度图像于屏幕第二块区I=mat2gray(X) : 将矩阵转换为灰度图像;X: 矩阵变量;I: 灰度图像;练习要求:①熟悉运用以上命令,将给定彩色图像转换为灰度图像,设定不同的门限值将其二值化,对比前后结果,将16x16的矩阵转化为灰度图像,要求将以上结果在同一窗口的不同块区显示出来及保存成磁盘文件。

图像压缩试验

图像压缩试验

B2=blkproc(B,[8 8],'P1.*x',mask); %这里mask是参数P1的取值 % 这里可以对B2作进一步的处理,然后加以存储, 解码时先读出存储的数据,然后恢复出B2. I2=blkproc(B2,[8 8],'P1*x*P2',T',T); subplot(1,2,1); imshow(I);title('原图'); subplot(1,2,2); imshow(I2);title('解压缩图');
2N cos 2N
x 0,1,, N 1 y 0,1,, N 1

其中:
c(u )
1 N 2 N
u0 u 1, 2, N
c (v )
1 N 2 N
v0 v 1, 2, N 1

在MATLAB中, (u )c(v) F (u, v) cos c
(2 x 1)u
2N
cos
(2 y 1)v
2N
称为离散函数的基础函数。DCT系数 F (u, v) 可当作 应用于每个函数的权值。
MATLAB图像处理工具箱提供了一下函数进行DCT 变换。 函数dct2实现图像的二维离散余弦变换,语法格式: B=dct2(A) B=dct2(A,[M,N]) B=dct2(A,M,N)

subplot(1,2,1); imshow(I);title('原图'); subplot(1,2,2); imshow(I2);title('解压缩图');

原图 解压缩图 虽然我们舍弃了85%的DCT系数,也就是减少了 85%的存储量,但可以看到,解压缩图仍然清晰。 在我们现在的实验中,没有进行真正的存储,这部 分需要一些其它的函数配合工作,留待以后进一步 完善。

实验四_图像压缩编码程序设计

实验四_图像压缩编码程序设计

实验名称:图像压缩编码程序设计一、实验目的和要求本实验为设计性实验,其目的是理解有损压缩的概念,特别是通过K-L变换或DCT变换,掌握压缩编码的基本原理、算法,并通过编程给予实现,对原始图像数据和解压后的图像数据进行失真估计,了解压缩性能及其重建效果的影响、作用,给出适当的理论分析。

二、实验内容和原理本实验是在根据图像压缩基本原理的基础上,独立设计图像的有损压缩编码算法,并在MATLAB编程环境中编程实现。

其要求是:1)选择一种有损压缩编码算法(K-L变换或DCT变换)对一幅数字图像进行压缩编码,计算出压缩率,并显示编码前图像。

2)对编码后的数据进行解压,并显示解压后图像。

3)改变算法参数对原始图像数据和解压后的图像数据进行失真估计。

4),通过改变算法参数(比如改变图像编码的子图像小块的尺度等)进行算法比较和讨论。

三、实验环境硬件:计算机软件:Windows 2000和MATLAB编程环境。

四、算法描述及实验步骤1、读入图像:clearI=imread('1.jpg'); %读入原图像;R=I(:,:,1);R1=im2double(R); %将原图像转为双精度数据类型;2、进行DCT矩阵变换(重复三次),并显示原图像大小、压缩图像大小、压缩比:T=dctmtx(8); %产生二维DCT变换矩阵L=blkproc(R1,[8 8],'P1*x*P2',T,T'); %计算二维DCT,矩阵T及其转置T’是DCT函数P1*x*P2的参数Mask=[ 1 0 1 0 0 0 0 01 1 0 0 1 0 0 01 1 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 00 0 0 0 0 0 0 0]; %二值掩膜,用来压缩DCT系数,只留下D CT系数中左上角的10个L2=blkproc(L,[8 8],'P1.*x',Mask); %只保留DCT变换的10个系数[m n]=size(L2);J=[m n];for i=1:mvalue=L2(i,1);num=1;for j=2:nif L2(i,j)==valuenum=num+1;elseJ=[J num value];num=1;value=L2(i,j);endendJ=[J num value ];enddisp('原图像大小')whos('L2');disp('压缩图像大小:')whos('J');disp('图像的压缩比:')disp(m*n/length(J))% 解压缩t1=J(1);t2=J(2);K(1:t1,1:t2)=0;i1=1;j1=1;for i=3:2:length(J)c1=J(i);c2=J(i+1);for j=1:c1K(i1,j1)=c2;j1=j1+1;if j1>t2i1=i1+1;j1=1;endendendR2= blkproc(K,[8,8],'P1*x*P2',T',T); %逆DCT,重构图像G=I(:,:,2);G1=im2double(G); %将原图像转为双精度数据类型;T=dctmtx(8); %产生二维DCT变换矩阵L=blkproc(G1,[8 8],'P1*x*P2',T,T'); %计算二维DCT,矩阵T及其转置T’是DCT函数P1*x*P2的参数Mask=[ 1 0 1 0 0 0 0 01 1 0 0 1 0 0 01 1 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 00 0 0 0 0 0 0 0]; %二值掩膜,用来压缩DCT系数,只留下D CT系数中左上角的10个L2=blkproc(L,[8 8],'P1.*x',Mask); %只保留DCT变换的10个系数[m n]=size(L2);J=[m n];for i=1:mvalue=L2(i,1);num=1;for j=2:nif L2(i,j)==valuenum=num+1;elseJ=[J num value];num=1;value=L2(i,j);endendJ=[J num value ];enddisp('原图像大小')whos('L2');disp('压缩图像大小:')whos('J');disp('图像的压缩比:')disp(m*n/length(J))% 解压缩t1=J(1);t2=J(2);K(1:t1,1:t2)=0;i1=1;j1=1;for i=3:2:length(J)c1=J(i);c2=J(i+1);for j=1:c1K(i1,j1)=c2;j1=j1+1;if j1>t2i1=i1+1;j1=1;endendendG2= blkproc(K,[8,8],'P1*x*P2',T',T); %逆DCT,重构图像B=I(:,:,3);B1=im2double(B); %将原图像转为双精度数据类型;T=dctmtx(8); %产生二维DCT变换矩阵L=blkproc(B1,[8 8],'P1*x*P2',T,T'); %计算二维DCT,矩阵T及其转置T’是DCT函数P1*x*P2的参数Mask=[ 1 0 1 0 0 0 0 01 1 0 0 1 0 0 01 1 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 00 0 0 0 0 0 0 0]; %二值掩膜,用来压缩DCT系数,只留下D CT系数中左上角的10个L2=blkproc(L,[8 8],'P1.*x',Mask); %只保留DCT变换的10个系数[m n]=size(L2);J=[m n];for i=1:mvalue=L2(i,1);num=1;for j=2:nif L2(i,j)==valuenum=num+1;elseJ=[J num value];num=1;value=L2(i,j);endendJ=[J num value ];enddisp('原图像大小')whos('L2');disp('压缩图像大小:')whos('J');disp('图像的压缩比:')disp(m*n/length(J))% 解压缩t1=J(1);t2=J(2);K(1:t1,1:t2)=0;i1=1;j1=1;for i=3:2:length(J)c1=J(i);c2=J(i+1);for j=1:c1K(i1,j1)=c2;j1=j1+1;if j1>t2i1=i1+1;j1=1;endendend3、显示图像:B2= blkproc(K,[8,8],'P1*x*P2',T',T); %逆DCT,重构图像A(:,:,1)=R2;A(:,:,2)=G2;A(:,:,3)=B2;Subplot(1,2,1);imshow(I);title('原图像'); %显示原图像Subplot(1,2,2);imshow(A);title('压缩图像');%显示压缩后的图像。

数字图像处理实验指导书

数字图像处理实验指导书

实验五:图像压缩一. 实验目的通过调用Matlab有关二维余弦变换和小波变换函数对图像进行压缩与重构, 从而对图像压缩的变换域主要方法和图像压缩的效果有更为直观的认识.二. 实验设备装有Matlab软件的PC机.三. 实验内容和原理1.使用二维离散余弦变换(DCT)进行图像压缩。

显示原图像、DCT系数图像、重构图像与误差图像(原图像与重构图像之差),并计算均方误差MSE。

原始图像被转换成为8⨯8大小的块进行压缩与重构,重构时IDCT仅使用DCT系数的子集。

压缩后,仅保留具有较大方差的若干个DCT系数,丢弃其它的有较小方差的DCT系数,因为它们对重构的影响较小。

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

MATLAB程序如下:%Exam3%function Exam3(trueImage,Cnum)%trueImage:待压缩的原图像%Cnum:压缩时保留的系数的个数trueImage=double(trueImage)/255;%转化为双精度型figure;imshow(trueImage);title('original image');%显示原始图像%以下为对图像进行DCT变换,%得到图像的DCT系数矩阵及DCT系数方差矩阵dctm=dctmtx(8);%计算DCT矩阵,返回8⨯8DCT变换矩阵imageDCT=blkproc(trueImage,[8 8],'P1*x*P2',dctm,dctm.');%对图像实行不同的块处理DCTvar=im2col(imageDCT,[8 8],'distinct').';%重排图像块为矩阵列%求矩阵的行数DCTvar=(sum(DCTvar.*DCTvar)-(sum(DCTvar)/n).^2)/n;[dum,order]=sort(DCTvar);%排序%以下为显示系数图像%1表示保留的系数,0表示丢弃的系数Cnum=64-Cnum;mask=ones(8,8);%全1矩阵mask(order(1:Cnum))=zeros(1,Cnum);im8x8=zeros(9,9);im8x8(1:8,1:8)=mask;im128x128=kron(im8x8(1:8,1:8),ones(16));%Kronecher张量积figure;imshow(im128x128);title('DCT coefficients');%显示DCT系数图像%以下为重构及显示图像dctm=dctmtx(8);newImage=blkproc(imageDCT,[8 8],'P1*(x.*P2)*P3',dctm.',mask(1:8,1:8),dctm);figure;imshow(newImage);title('reconstructed image');figure;imshow(trueImage-newImage+0.45);title('error image');%显示误差图像error=(trueImage.^2-newImage.^2);MSE=sum(error(:))/prod(size(trueImage))%计算归一化图像的均方误差2. 使用小波变换进行图像压缩利用小波变换进行图像压缩过程如下:(1)对图像进行小波分解。

数字图像处理实验5 图像压缩

数字图像处理实验5 图像压缩

实验5 图像压缩一.实验目的:1.掌握图像压缩的原理——编码冗余,压缩比C R的计算等。

2.了解并掌握霍夫曼编码的原理、实现步骤。

3.掌握JPEG标准——通用的图像压缩/解压缩编码标准。

二.实验内容:1.利用已给出的MATLAB自编函数库matlab_function文件夹,实现压缩比的计算。

2.对信号源符进行霍夫曼编码,以消除信源的冗余数据。

3.练习JPEG标准的压缩/解压缩技术。

三.实验原理:1.图像压缩比C R的计算函数imratio(f1, f2),计算图像压缩比C R,该函数来自MATLAB自编函数库matlab_function文件夹,语法如下:imratio(imread(‘filename’), ‘filename.jpg’)//第二个参数‘filename.jpg’仅是文件名,实际上是一个结构,内含压缩//后的各种压缩信息,并不代表图像本身>>f = imread(‘E:\医学图像处理实验讲义\实验五\car_lady.jpg’)>>imfinfo E:\医学图像处理实验讲义\实验五\car_lady.jpg//查看图像文件的详细信息>>imwrite(f, ‘car_lady25.jpg’, ‘quality’, 25)//将压缩后的图像存到MATLAB默认路径中>>imfinfo car_lady25.jpg//可依据图像信息计算出压缩率>>f25 = imread(‘car_lady25.jpg’)>>Cr = imratio (f25, ‘car_lady25.jpg’)2.霍夫曼编码符号概率a1 0.1875a2 0.5a3 0.125a4 0.1875函数huffman(p)进行霍夫曼编码,语法:huffman(p) //p为向量符号>>p = [0.1875 0.5 0.125 0.1875]>>c = huffman(p)使用函数mat2huff(‘filename’)对图像进行编码,验证霍夫曼编码压缩的性能。

实验二_图像压缩

实验二_图像压缩

实验二图像压缩一、IGS量化IGS利用眼睛对边缘固有的敏感性,通过一个伪随机数加到每个像素上将这些边缘拆散。

这个伪随机数是在对结果进行量化之前,根据表示相邻像素灰度级的原编码的低位生成的。

由于低位完全是随机的,所以这样做等于增加了通常与伪轮廓相关的人工边缘随机性的灰度级。

实验要求:分别使用均匀量化和IGS量化将图像Fig8.04(a)量化为16个灰度级,比较均匀量化和IGS量化的结果。

二、Truncated Huffman编码当要对大量符号进行编码是,构造最佳二值Huffman编码不是一件简单的工作。

对于有J个信源符号的一般情况,必须进行J-2次的信源简化和J-2次编码分配。

因此,若对具有256个灰度级的图像构造最佳Huffman编码则需要254次信源简化和254次编码分配。

考虑到这项工作在计算上的复杂性,牺牲编码效率以换取编码结构的简单性有时是有必要的。

Truncated Huffman编码对基本Huffman编码策略进行简单修改:(1)对最可能出现的M个符号进行Huffman编码(M为小于J的正整数)(2)对其他的码都用在一个合适的定长码前加一个前缀码表示实验要求:对Lena图像进行Truncated Huffman编码。

要求截断数量M分别为1到255,重复进行Truncated Huffman编码,计算编码的平均码长,分析M的值对编码的影响。

三、DCPM预测器做预测编码DPCM预测器0 无预测1 A2 B3 C4 A+B-C5 A+(B-C)/26 B+(A-C)/27 (A+B)/2C BA Y注意:第一行固定采用Y-A预测,第一列固定采用Y-B预测,第一行且第一列点无预测无损压缩框架有损压缩框架实验要求:选择一种DPCM预测器对Fig8.14(a)或其他图像使用DCPM预测器做预测编码(有损/无损)。

要求实现上述有损和无损压缩编码,其中Predictor 使用DCPM,Symbol encoder&Symbol decoder分别为Huffman编码和解码,Quantizer使用均匀量化器(量化间隔为16),经过预测编码给出编码结果,并且对编码结果译码还原图像。

《数字图像处理》实验指导书

《数字图像处理》实验指导书

数字图像处理实验指导书电气信息工程系实验中心2008年8月目 录实验一、数字图像获取实验二、图像的傅立叶变换实验三、图像增强实验四、图像压缩实验一、数字图像获取一、实验目的1.掌握使用扫描仪等数字化设备以及计算机获取数字图像的方法;2.修改图像的存储格式。

二、实验仪器1.计算机;2.扫描仪(或数码相机、数字摄像机)及其驱动程序盘;3.图像处理软件(画图,photoshop, Microsoft photo edit等);4.记录用的笔、纸。

三、 实验内容用扫描仪获取图像也是图像的数字化过程的方法之一,扫描仪按种类可以分为手持扫描仪,台式扫描仪和滚筒式扫描仪(鼓形扫描仪)。

扫描仪的主要性能指标有x、y方向的分辨率、色彩分辨率(色彩位数)、扫描幅面和接口方式等。

各类扫描仪都标明了它的光学分辨率和最大分辨率。

分辨率的单位是dpi,dpi是英文Dot Per Inch的缩写,意思是每英寸的像素点数。

扫描仪工作时,首先由光源将光线照在欲输入的图稿上,产生表示图像特征的反射光(反射稿)或透射光(透射稿)。

光学系统采集这些光线,将其聚焦在CCD上,由CCD将光信号转换为电信号,然后由电路部分对这些信号进行A/D转换及处理,产生对应的数字信号输送给计算机。

当机械传动机构在控制电路的控制下,带动装有光学系统和CCD的扫描头与图稿进行相对运动,将图稿全部扫描一遍,一幅完整的图像就输入到计算机中去了。

图1.1扫描仪的工作原理扫描仪扫描图像的步骤是:首先将欲扫描的原稿正面朝下铺在扫描仪的玻璃板上,原稿可以是文字稿件或者图纸照片;然后启动扫描仪驱动程序后,安装在扫描仪内部的可移动光源开始扫描原稿。

为了均匀照亮稿件,扫描仪光源为长条形,并沿y方向扫过整个原稿;照射到原稿上的光线经反射后穿过一个很窄的缝隙,形成沿x方向的光带,又经过一组反光镜,由光学透镜聚焦并进入分光镜,经过棱镜和红绿蓝三色滤色镜得到的RGB三条彩色光带分别照到各自的CCD上,CCD将RGB光带转变为模拟电子信号,此信号又被A/D变换器转变为数字电子信号。

压缩图片实验实验报告书示例.pdf

压缩图片实验实验报告书示例.pdf

学生学号实验课成绩学生实验报告书实验课程名称数据结构与算法综合实验开课学院计算机科学与技术学院指导教师姓名伍新华学生姓名学生专业班级2015--2016学年第2学期1实验课程名称:数据结构与算法综合实验Int rchild;};Typedef HTNode *HuffmanTree;1Huffman 编码存储结构定义一二维数组:char HufCode[256][];因考虑每个字节的 Huffman 编码长度不一样,可使用字符串指针数组:Char *HuffmanCode[256];压缩文件的算法的数据结构为正确解压文件,除了要保存原文件长度外,还要保存原文件中 256 种字节重复的次数,即权值。

定义一个文件头,保存相关的信息:Struct fHEAD {Char type[4];//文件类型Unsigned int length;//原文件的长度Unsigned char weight[256];//权值}压缩文件时,定义一个内存缓冲区:Unsigned char *pBuffer;//其大小视原文件压缩后的大小2.核心算法设计1)生成 Huffman 树算法Input: Unsigned int weight[256];//权值Output: HuffmanTree pHT[512];//哈夫曼树,静态二叉链表Int root;//树的根节点指针Process:int CreateHuffmanTree(HuffmanTree &pHT[], Unsigned intweight[]){ pHT = ( HuffmanTree ) malloc ( (512 ) * sizeof( HTNode ) ); for ( p = pHT+1, i = 1; i < 256; ++i, ++p)*p = { weight[i-1], 0, 0, 0 };for ( ; i <= 511; ++i, ++p )*p = { 0, 0, 0, 0 };for ( i = 256; i <= 511; ++i ) { //构造 n-1 个分支结点 Select ( pHT, i-1, s1, s2 );//pHT[1..i-1]中 parent 为 0 的 w 最小的 2 个结点 HT [s1].parent = i; HT [s2].parent = i;HT [i].lchild = s1; HT [i].rchild = s2;HT [i].weight = HT [s1].weight + HT [s2].weight;}Return 511;}2)生成 Huffman 编码算法Input: HuffmanTree pHT[512];n; //n 为叶子节点数 Output: Char *HuffmanCode[256];Process:int HuffmanCoding(HuffmanCode &pHC,HuffmanTree &pHT,int n){pHC = ( HuffmanCode ) malloc ( ( n+1 ) * sizeof ( char * ) ); cd = ( char * ) malloc ( n * sizeof ( char ) );cd [n-1] = “ \0” ;2for ( i = 1; i <= n; ++i ) { //为 n 个叶子结点编码start = n –1;for ( c = i, f = pHT [i].parent; f != 0; c = f, f = pHT[f].parent ) if ( pHT [f].lchild = = c ) cd [--start] = “ 0” ;else cd [--start] = “ 1” ; //判断 c 是 f 的左还是右孩子pHC[i] = ( char * ) malloc ( ( n-start ) * sizeof( char ) ); Strcpy ( pHC[i], &cd[start] );}free ( cd );}3)压缩编码算法Input:pFileName(磁盘文件名串); HuffmanCode pHC(哈夫曼编码);Output:pBuffer(压缩编码的缓冲区)Process:int Encode(const char *pFileName, const HuffmanCode pHC, char *pBuffer){//压缩编码 //以二进制流形式打开文件FILE *in=fopen(pFileName,"rb"); //开辟缓冲区pBuffer=(char*)malloc(nSize*sizeof(char));if(!pBuffer){return 0;}char cd[SIZE]={'\0'};//工作区int pos=0;//缓冲区指针unsigned char ch;//扫描文件,根据 Huffman 编码表对其进行压缩,压缩结果暂存缓冲区 while(!feof(in)){ch=fgetc(in);strcat(cd,pHC[ch]); //从 pHC 复制编码串到 cdwhile(strlen(cd)>=8){//截取字符串左边的 8 个字符,编码成字节//Str2Byte 将由 8 个 1、0 组成的组成的串转换成一个字节 pBuffer[pos++]=Str2Byte(cd);//删除已编码成字节的 8 个字符for(int i=0;i<SIZE-8;i++)cd[i]=cd[i+8];}}if(strlen(cd)>0)pBuffer[pos++]=Str2Byte(cd);fclose(in);//关闭文件}3.测试用例设计3使用一个文本文件作为压缩的例,观察其压缩比;通过屏幕截图形成一个 BMP 图片文件,观察其压缩比;在互联网上搜索下载任意格式的图片文件,观察其压缩比。

实验二 图像压缩

实验二  图像压缩

实验二图像压缩一、实验目的1.理解有损压缩和无损压缩的概念;2.理解图像压缩的主要原则和目的;3.了解几种常用的图像压缩编码方式。

4.利用MATLAB程序进行图像压缩。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

实验五、图像压缩

实验五、图像压缩

桂林理工大学实验报告班级软件15-1班学号3152012011124 姓名周奎良同组实验者实验名称实验五图像压缩日期2018年11月20 日一、实验目的1.理解有损压缩和无损压缩的概念;2.理解图像压缩的主要原则和目的;3.了解几种常用的图像压缩编码方式。

4.利用MATLAB程序进行图像压缩。

二、实验环境1计算机;2 MA TLAB、Photoshop等程序;3移动式存储器(软盘、U盘等)。

4记录用的笔、纸。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

数字图像处理上机实验指导书童立靖北方工业大学计算机学院实验四图像压缩一、实验目的、要求与环境目的:通过实验,了解数字图象压缩的一般方法,掌握图像压缩的编程方法,了解图象压缩效果的评价方法。

1.2要求:对自选的图象进行离散余弦变换,将其进行图象压缩处理,自行设计量化矩阵,与编码方法,并计算压缩比,提交实验报告。

进度较快的同学,可以设计三种不同的量化矩阵或编码方法,完成三种不同程度的压缩,对比解压缩后的图像质量,并进行分析。

(给分较高)环境:Windows XP操作系统Microsoft Visual C++ (SP6)自带8位灰度图像文件::3二、实验步骤1.准备相关图像文件。

2.在XP操作系统上,打开Microsoft Visual C++ (SP6),编写相关程序,完成对离散余弦变换系数的量化矩阵设计与编码方法。

4.对程序进行相关调试,修改程序,去除其中的BUG。

5. 利用自己准备的图像的文件,和编写的程序,将给定的图象进行压缩处理。

6.截屏,保留实验结果。

7. 计算压缩比, 进行实验结果分析。

8. 撰写并提交实验报告。

三、注意事项1.实验任务:Windows下完成图像压缩的程序编写。

2.去多模式教学网上下载程序框架:。

3.图像高度、宽度须是8的倍数。

BMP 格式,8位灰度图像。

4.对于一幅彩色图像,可以在photoshop中,图像=》模式=》灰度=》扔掉文件=》存储为=》保存=》选择8位深度=》确定。

5.实验完成时间:先在课下完成程序编写,然后课上完成验机。

第15周的周一、第15周的周五,二次实验课。

6.请记录实验报告中相应的贴图:可以用屏幕拷贝,然后再用Photoshop中的工具中修剪一下。

7.请每位同学用自己的图像文件进行实验:若2位同学使用的图像文件一样,两位均依抄袭计0分。

8.请每位同学自己编写程序:若2位同学编写的程序发现抄袭,两位均计0分。

9.来后请签到。

10.做完后请验机:验机在课内完成,由于同学较多,请大家尽可能提前验机,以免最后大家等待的时间较长。

11.课后完成实验报告。

12.实验报告:若发现2位同学的实验报告抄袭,两位均计0分。

13.实验报告模板:去多模式教学网上下载《42实验报告模板-图像压缩.doc》,然后填入自己的上机相关内容14.实验报告,每位同学在第16周周一,由课代表按学号排序上交,逾期不收(因为一周内课程成绩必须要上报到教务处)。

四、框架程序1.量化表为:double QuantTbl[8][8]={以分3步完成:1. 把double *pFuvArray(height*width)中的DCT系数存入磁盘文件,再把文件读入内存中double *pFuvArray(height*width)。

验证程序正确性。

2.修改量化表数值为非0,进行量化与反量化的过程。

3.修改量化表数值为部分为0,存储时舍弃量化表中为0位置的频谱数据,进行压缩编码存储。

文件类的使用:向文件写入数据示例:CFile QuantFile("",CFile::modeCreate|CFile::modeReadWrite );( pQuantResult , n);();从文件读取数据示例:5CFile QuantFile("",CFile::modeReadWrite );(pQuantResult , n);();sprintf(oneline,"%d, %d, %10d, %10lf, %10lf\r\n",u,v,p,r,Q);5.各编写函数的功能BOOL CBMPEdit::DCTQuantify(){i nt height = int width = pQuantResult = new __int8[height*width];//add your code here//对DCT 系数进行量化//对DCT的系数pFuvArray[]进行量化//即对pFuvArray[]中的数据除以量化表QuantTbl[][],//需要考虑量化表8*8的位置对应,以及量化表中为0数据的量化处理//量化结果放入量化结果缓冲区pQuantResult[]r eturn TRUE;}BOOL CBMPEdit::DCTWrite(){//add your code here//把量化后的系数写入文件。

//可有所选择//把量化后的数据pQuantResult[]写入文件//对于量化表QuantTbl[][]中为0的数据的对应位置,无需存储。

//向文件写入数据示例://CFile QuantFile("",CFile::modeCreate|CFile::modeReadWrite );//( pQuantResult , n);//();r eturn TRUE;}BOOL CBMPEdit::IDCTRead(){//add your code here//把写入系数的文件读入内存//把文件中的数据读入量化结果缓冲区pQuantResult[]//对于量化表QuantTbl[][]中为0数据所对应的位置,补入0。

//从文件读取数据示例://CFile QuantFile("",CFile::modeReadWrite );//(pQuantResult , n);//();r eturn TRUE;}BOOL CBMPEdit::IDCTQuantify(){//add your code here//对量化后的系数进行反量化处理//对文件读入的数据pQuantResult[]进行反量化//即对pQuantResult[]中的数据乘以量化表QuantTbl[][]//需要考虑量化表8*8的位置对应。

//反量化结果放入pFuvArray[]中r eturn TRUE;}可根据需要自行调整设计。

6.关键数据结构的说明*pImageData:图像原始数据缓冲区指针。

*pData:图像显示缓冲区指针。

*pDCTResultD:图像DCT变换后用于显示的数据缓冲区指针。

*pIDCTResult:对DCT变换结果进行IDCT变换的结果数据缓冲区指针。

HGLOBAL m_hgImageData; //图像数据句柄HGLOBAL m_DCTResultD; //DCT变换结果显示缓冲区句柄7HGLOBAL m_IDCTResult; //IDCT反变换结果缓冲区句柄HGLOBAL m_Error; //IDCT反变换结果-原图句柄double *pFuvArray; //DCT变换结果缓冲区double *pImage8; //8*8变换图像缓冲区double *pFuv8; //8*8变换频谱缓冲区__int8 *pQuantResult; //DCT 量化结果7.菜单DCT变换的接口void CMy02testView::OnDCTTransform(){// TODO: Add your command handler code hereC My02testDoc* pDoc = GetDocument();p Doc->();p Doc->();p Doc->();p Doc->(m_pMemDC,CPoint(0,0));I nvalidate(FALSE);}8.菜单DCT反变换的接口void CMy02testView::OnIDCTTransform(){// TODO: Add your command handler code hereC My02testDoc* pDoc = GetDocument();p Doc->();p Doc->();p Doc->();p Doc->(m_pMemDC,CPoint(0,0));I nvalidate(FALSE);}9.菜单残差的接口void CMy02testView::OnError(){// TODO: Add your command handler code hereC My02testDoc* pDoc = GetDocument();p Doc->();p Doc->(m_pMemDC,CPoint(0,0));I nvalidate(FALSE);}10.相关函数说明主要功能函数:BOOL CBMPEdit::LoadBmpFile(const CString&sBmpFileName)主要功能:读入BMP文件。

在此函数中,读入原来图像的数据,并把图像原始数据存入数据缓冲区。

主要功能函数:BOOL CBMPEdit::PlayBmp(CDC *pDC, const CPoint&StartPoint)主要功能:把图像数据写入CDC,供显示用。

在此函数中,把读入的原始图像数据区里的数据写到pDC->GetSafeHdc(),即CDC里。

主要功能函数:BOOL CBMPEdit::DCTTransform()主要功能:DCT变换。

在此函数中,取出图像数据缓冲区的数据,并对其进行DCT变换。

主要功能函数:BOOL CBMPEdit::IDCTTransform()主要功能:IDCT变换。

在此函数中,取出图像DCT变换结果缓冲区的数据,并对其进行IDCT变换。

主要功能函数:BOOL CBMPEdit::PlayBmpDCT(CDC *pDC, const CPoint &StartPoint)主要功能:把图像数据写入CDC,供显示用。

在此函数中,把图像DCT变换结果数据区里的数据写到pDC->GetSafeHdc(),即CDC里。

主要功能函数:BOOL CBMPEdit::PlayBmpIDCT(CDC *pDC, const CPoint &StartPoint)主要功能:把图像数据写入CDC,供显示用。

在此函数中,把图像IDCT变换结果数据区里的数据写到pDC->GetSafeHdc(),即CDC里。

9。

相关文档
最新文档