数字图像处理实验matlab4_第1页
数字图像处理实验matlab4_第2页
数字图像处理实验matlab4_第3页
数字图像处理实验matlab4_第4页
数字图像处理实验matlab4_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

数字图像处理实验matlab4PAGEPAGE1————————————————————————————————作者:————————————————————————————————日期: 个人收集整理勿做商业用途个人收集整理勿做商业用途个人收集整理勿做商业用途9,对图3实施正交变换编码和解码(采用离散傅立叶变换)。建议将图3分成4*4的4个子图象。思路:先将图3数据读入模块,显示图像,将图分块进行DFT变换,显示图像,,在进行反变换恢复原数据,在进行哈夫曼编码编码,后解码。原理:傅立叶变换傅立叶变换是数字图像处理中应用最广的一种变换,其中图像增强、图像复原和图像分析与描述等,每一类处理方法都要用到图像变换,尤其是图像的傅立叶变换.离散傅立叶(Fourier)变换的定义:二维离散傅立叶变换(DFT)为:逆变换为:式中,在DFT变换对中,称为离散信号的频谱,而称为幅度谱,为相位角,功率谱为频谱的平方,它们之间的关系为:图像的傅立叶变换有快速算法.下面给出具体的Huffman编码算法。(1)首先统计出每个符号出现的频率,例如S0到S7的出现频率分别为:0.25,0.19,0。08,0.06,0。21,0。02,0.03,0.16(2)从左到右把上述频率按从大到小的顺序排列。(3)将最小的两个数相加的值表上*号,其余的数据不变,然后将得到的数据排序(4)重复(3),直到只有两个数据.(5)从最后一列概率编码,从而得到最终编码。具体过程如下图所示:概率压缩过程:初始信源信源的消减步骤符号概率123456S00。250.250。250.250。35*0。4*0。6*0。210。210.210.250.350。40.190。190.190.210。250.160.160。19*0。190.080。11*0。160。060.080.05*S40。21S10。19S70.16S20。08S30。06S60.03S50。02表3-1哈夫曼概率压缩过程编码过程:初始信源对消减信源的赋值符号概率编码123456S00.25010.25010.25010。25010。35*000。4*10.6*00.21100。21100。21100。25010。35000。410.19110。19110.19110.21100。25010.160010.160010.19*0000.19110.0800010。11*00000.1600010。06000000.0800010。05*00001S40。2110S10.1911S70。16001S20。080001S30。0600000S60.03000010S50。02000011表3-2哈夫曼算法编码过程读入图像算法流程读入图像初始化初始化统计每种灰度数统计每种灰度数灰度数排序此处并没有采用概率排序,灰度数排序而是采用对灰度像素个数按哈夫曼算法编码排序,这是因为计算概率无按哈夫曼算法编码疑增大了计算量,因此用灰将灰度编码表及原图的编码写入txt将灰度编码表及原图的编码写入txt图3—1哈夫曼算法程序流程图程序:clc;clear;closeall;A=[3344445241122154434444524525031215033564231122120365572031221506];subplot(2,2,1),imshow(A);title(’原图’);I=double(A);P=A(1:4,1:4);K=fft(P);P1=A(1:4,5:8);K1=fft(P1);P2=A(5:8,1:4);K2=fft(P2);P3=A(5:8,5:8);K3=fft(P3);fori=1:4forj=1:4H(i,j)=K(i,j);endendfori=1:4forj=5:8H(i,j)=K1(i,j-4);endendfori=5:8forj=1:4H(i,j)=K2(i—4,j);endendfori=5:8forj=5:8H(i,j)=K3(i-4,j-4);endendsubplot(2,2,2),imshow(H);title(’DFT变换后的频域图像’);I=H(1:4,1:4);M=ifft(I);I1=H(1:4,5:8);M1=ifft(I1);I2=H(5:8,1:4);M2=ifft(I2);I3=H(5:8,5:8);M3=ifft(I3);fori=1:4forj=1:4A1(i,j)=M(i,j);endendfori=1:4forj=5:8A1(i,j)=M1(i,j-4);endendfori=5:8forj=1:4A1(i,j)=M2(i-4,j);endendfori=5:8forj=5:8A1(i,j)=M3(i—4,j—4);endendsubplot(2,2,3),imshow(A1);title(’复原图像');%编码%读入图像,定义结构体,便于存储I=A;pix(8)=struct('huidu',0.0,.。.'number',0。0,..。'bianma',’’);[mnl]=size(I);fid=fopen('E:\学习\数字图像处理\huffman。txt',’w');%huffman。txt是灰度级及相应的编码表fid1=fopen(’E:\学习\数字图像处理\huff_compara.txt','w');%huff_compara.txt是编码表huf_bac=cell(1,l);fort=1:l%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%初始化结构数组fori=1:8pix(i)。number=1;pix(i)。huidu=i-1;pix(i).bianma='’;end%统计每种灰度像素的个数记录在pix数组中fori=1:mforj=1:nk=I(i,j,t)+1;pix(k).number=1+pix(k).number;endend%按灰度像素个数从大到小排序fori=1:7forj=i+1:8ifpix(i).number<pix(j).numbertemp=pix(j);pix(j)=pix(i);pix(i)=temp;endendendfori=8:-1:1ifpix(i)。number~=0break;endendnum=i;count(t)=i;%记录每层灰度级%定义用于求解的矩阵clearhuffmanhuffman(num,num)=struct(’huidu’,0。0,.。.'number',0.0,。..’bianma’,’');huffman(num,:)=pix(1:num);%矩阵赋值fori=num-1:—1:1p=1;%算出队列中数量最少的两种灰度的像素个数的和sum=huffman(i+1,i+1).number+huffman(i+1,i)。number;forj=1:i%如果当前要复制的结构体的像素个数大于sum就直接复制ifhuffman(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%开始给每个灰度值编码fori=1:num—1obj=0;forj=1:iifhuffman(i,j)。huidu==-1obj=j;break;elsehuffman(i+1,j).bianma=huffman(i,j).bianma;endendifhuffman(i+1,i+1)。number〉huffman(i+1,i).number%说明:大概率的编0,小概率的编1,概率相等的,标号大的为1,标号小的为0huffman(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’];endforj=obj+1:ihuffman(i+1,j—1)。bianma=huffman(i,j).bianma;endendfork=1:count(t)huf_bac(t,k)={huffman(num,k)};%保存endend%写出灰度编码表fort=1:lforb=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%解码%按原图像数据,写出相应的编码,也就是将原数据用哈夫曼编码替代fort=1:lfori=1:mforj=1:nforb=1:count(t)ifI(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);sav

温馨提示

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

评论

0/150

提交评论