多媒体实验报告.doc_第1页
多媒体实验报告.doc_第2页
多媒体实验报告.doc_第3页
多媒体实验报告.doc_第4页
多媒体实验报告.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

多媒体实验报告姓名:王聪班级:071082-22学号:20081003907一、实验要求1. 读入一幅格式.BMP彩色或灰度图像,图像尺寸自定。将读取到的图像灰度数据保存为文本文档;2. 对读入的图像进行离散余弦变换、量化,并将变换和量化后的数据保存为文本文档;3. 对量化后的数据进行Z变换(扫描);4. 对变换后的数据进行霍夫曼编码和行程编码,将编码结果保存为文本文档;5. 编程采用C+或MAtlab均可。二、实验分析实验任务要求掌握对图像数据的频域变换、量化和编码压缩。因为图像的大小对处理方法的要求完全一样,因此图像尺寸不宜过大,小尺寸的图像可以提高程序运行速度。这里采用下图进行实验: P01.bmp 512X512 由于C+功底不深,采用其完成实验难度较大,因此我采用Matlab,Matlab强大的数值计算功能支持数字图像处理,并且有很好的图形窗口。在编程过程中,我们可以通过查找资料比较方便的调用Matlab图像处理工具箱中的函数,来实现对图像的处理,大大降低了实验难度,这一点C+完全不可能。三、编程实现以下是Matlab完整源程序:clc;clear;close all;A=imread(E:DIPp01.bmp);s,w=size(A);f1=fopen(E:DIPdata.txt,w);for i=1:s for j=1:w fprintf(f1,%d ,A(i,j); endendfclose(f1);%读图像数据保存成文本文档%ss=mod(s,8);ww=mod(w,8);for i=1:s+8-ss for j=1:w+8-ww if(i=s)&(j=w) B(i,j)= A(i,j); else B(i,j)=0; end endend%对图像尺寸进行补偿,将图像长和宽都变为8的倍数,以便进行DCT变换h,l=size(B);B=im2double(B);T=dctmtx(8);%DCT变换模板a1=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 ;%量化表for i=1:8:h-7 for j=1:8:l-7 P=B(i:i+7,j:j+7); K=T*P*T;%DCT变换 A1(i:i+7,j:j+7)=K; K=K./a1;%量化 K(abs(K)0.03)=0; A2(i:i+7,j:j+7)=K; endendfigureimshow(A2);for i=1:8:h-7 for j=1:8:l-7 P=A2(i:i+7,j:j+7).*a1;%反量化 K=T*P*T; I4(i:i+7,j:j+7)=K; endendfigure;imshow(I4);title(复原图像);f2=fopen(E:DIPDCT.txt,w);for i=1:h for j=1:l fprintf(f2,%d ,A1(i,j); endendfclose(f2);%变换频谱保存成文本文档f3=fopen(E:DIPlianghua.txt,w);for i=1:h for j=1:l fprintf(f3,%d ,A2(i,j); endendfclose(f3);%量化数据保存成文本文档%xx=;zigzag = 0, 1, 8, 16, 9, 2, 3, 10,. 17, 24, 32, 25, 18, 11, 4, 5,. 12, 19, 26, 33, 40, 48, 41, 34,. 27, 20, 13, 6, 7, 14, 21, 28,. 35, 42, 49, 56, 57, 50, 43, 36,. 29, 22, 15, 23, 30, 37, 44, 51,. 58, 59, 52, 45, 38, 31, 39, 46,. 53, 60, 61, 54, 47, 55, 62, 63;for i=1:8:h-7 for j=1:8:l-7 pp=A2(i:i+7,j:j+7); aa = reshape(pp,1,64); % 将输入块变成1x64的向量 xx=xx aa(zigzag+1);%Z扫描 endendm,n=size(xx);f4=fopen(E:DIPxx.txt,w);for i=1:m for j=1:n fprintf(f4,%d ,xx(i,j); endendfclose(f3);%global HufData;global Len;disp(计算机正在准备输出哈夫曼编码结果,请耐心等待);GrayStatistics=imhist(A);GrayStatistics=GrayStatistics;GrayRatioo=GrayStatistics/sum(GrayStatistics);GrayRatioNO=find(GrayRatioo=0);Len=length(GrayRatioNO);%初始化灰度集,防止系统随即赋予其垃圾值GrayRatio=ones(1,Len);for i=1:LenGrayRatio(i)=GrayRatioo(i); endGrayRatio=abs(sort(-GrayRatio);%将图像灰度概率赋予结构体for i=1:Len HufData(i).value=GrayRatio(i);end% 哈夫曼编码/霍夫曼编码HuffmanCode(Len);%调用编码函数%输出码字zippedHuffman=1;f1=fopen(E:DIPhuffmancode.txt,w);for i=1:Len tmpData=HufData(i).code; str=; for j=1:length(tmpData) str=strcat(str,num2str(tmpData(j); zippedHuffman=zippedHuffman+1; end disp(strcat(a,num2str(i),= ,str); fprintf(f1,a%d=,i); fprintf(f1,%s rn,str);%注意换行方法endfclose(f1);zippedHuffman;unzipped_delete=i*8;ratio_delete=zippedHuffman/unzipped_delete;%计算图像的压缩比率ad=num2str(ratio_delete*100);str2=strcat(ad,%);disp(strcat(哈夫曼编码压缩比率,= ,str2);%行程编码J=; k=xx(1,1); num=1; for j=2:n if(xx(1,j)=k) num=num+1; else J=J num k ; num=1; k=xx(1,j); end end J=J num k ; disp(源图像大小:) whos(A2); disp(压缩图像大小:); whos(J); % disp(J); disp(图像压缩比:); disp(h*l/length(J);四、实验结果DCT变换频谱图:反量化复图像:以下为Matlab命令窗口显示的实验结果:哈夫曼编码压缩比率=146.7525%源图像大小: Name Size Bytes Class Attributes A2 520x520 2163200 double 压缩图像大小: Name Size Bytes Class Attributes J 1x20698 165584 double 图像压缩比: 13.0641五、结果分析1. 实验要求中的各步需要保存的数据均可以完整保存实现;2. 在对图像进行DCT变换之前,由于要将图像分成8X8的块变换,因此必须要求所用图像的尺寸(长、宽)都是8的倍数,所以变换之前要对图像尺寸进行补偿操作,这一点在上面的程序中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论