收藏 分享(赏)

数字图像处理实验matlab4.doc

上传人:dreamzhangning 文档编号:2605498 上传时间:2018-09-23 格式:DOC 页数:10 大小:111.14KB
下载 相关 举报
数字图像处理实验matlab4.doc_第1页
第1页 / 共10页
数字图像处理实验matlab4.doc_第2页
第2页 / 共10页
数字图像处理实验matlab4.doc_第3页
第3页 / 共10页
数字图像处理实验matlab4.doc_第4页
第4页 / 共10页
数字图像处理实验matlab4.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、9,对图 3实施正交变换编码和解码(采用离散傅立叶变换) 。建议将图 3分成4*4的 4个子图象。思路:先将图 3 数据读入模块,显示图像,将图分块进行 DFT 变换,显示图像,在进行反变换恢复原数据,在进行哈夫曼编码编码,后解码。原理:傅立叶变换傅立叶变换是数字图像处理中应用最广的一种变换,其中图像增强、图像复原和图像分析与描述等,每一类处理方法都要用到图像变换,尤其是图像的傅立叶变换。离散傅立叶(Fourier)变换的定义:二维离散傅立叶变换(DFT)为:逆变换为:式中,在 DFT变换对中, 称为离散信号 的频谱,而 称为幅度谱, 为相位角,功率谱为频谱的平方,它们之间的关系为:图像的傅立

2、叶变换有快速算法。下面给出具体的Huffman编码算法。(1)首先统计出每个符号出现的频率,例如S0到S7的出现频率分别为:0.25,0.19,0.08,0.06,0.21,0.02,0.03,0.16 (2)从左到右把上述频率按从大到小的顺序排列。10 )(2exp),(),(MxNy NvyMuxjfvuF10)(2),(),(uvvyuxjFyf ,xu 1,0,y)( ),(yxf ),(vuF),(,),(exp, vujIRvujvF(3)将最小的两个数相加的值表上*号,其余的数据不变,然后将得到的数据排序(4)重复(3),直到只有两个数据。(5) 从最后一列概率编码,从而得到最终

3、编码。具体过程如下图所示:概率压缩过程:初始信源 信源的消减步骤符号 概率 1 2 3 4 5 6S0 0.25S4 0.21S1 0.19S7 0.16S2 0.08S3 0.06S6 0.03S5 0.020.25 0.25 0.25 0.35* 0.4* 0.6*0.21 0.21 0.21 0.25 0.35 0.40.19 0.19 0.19 0.21 0.250.16 0.16 0.19* 0.190.08 0.11* 0.160.06 0.08005*表 3-1 哈夫曼概率压缩过程编码过程:初始信源 对消减信源的赋值符号 概率 编码 1 2 3 4 5 6S0 0.25 01S4

4、 0.21 10S1 0.19 11S7 0.16 001S2 0.08 0001S3 0.06 00000S6 0.03 000010S5 0.02 0000110.25 01 0.25 01 0.25 01 0.35*00 0.4* 1 0.6* 00.21 10 0.21 10 0.21 10 0.25 01 0.35 00 0.4 10.19 11 0.19 11 0.19 11 0.21 10 0.25 010.16 001 0.16 001 0.19*000 0.19 110.08 0001 0.11* 0000 0.16 00010.06 00000 0.08 00010.05*

5、 00001表 3-2 哈夫曼算法编码过程算法流程此处并没有采用概率排序,读入图像初始化统计每种灰度数灰度数排序而是采用对灰度像素个数排序,这是因为计算概率无疑增大了计算量,因此用灰度级的像素个数替代图 3-1 哈夫曼算法程序流程图程序:clc;clear;close all;A=3 3 4 4 4 4 5 24 1 1 2 2 1 5 44 3 4 4 4 4 5 24 5 2 5 0 3 1 21 5 0 3 3 5 6 42 3 1 1 2 2 1 20 3 6 5 5 7 2 03 1 2 2 1 5 0 6;subplot(2,2,1),imshow(A);title(原图 );I=

6、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);for i=1:4for j=1:4H(i,j)=K(i,j);endendfor i=1:4for j=5:8按哈夫曼算法编码将灰度编码表及原图的编码写入 txtH(i,j)=K1(i,j-4);endendfor i=5:8for j=1:4H(i,j)=K2(i-4,j);endendfor i=5:8for j=5:8H(i,j)=K3(i-4,j-4);endendsubp

7、lot(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);for i=1:4for j=1:4A1(i,j)=M(i,j);endendfor i=1:4for j=5:8A1(i,j)=M1(i,j-4);endendfor i=5:8for j=1:4A1(i,j)=M2(i-4,j);endendfor i=5:8for j=5:8A1(i,j)=M3(i-4,j-4

8、);endendsubplot(2,2,3),imshow(A1);title(复原图像 );%编码%读入图 像,定 义结构体,便于存储I=A;pix(8)=struct(huidu,0.0,.number,0.0,.bianma,);m n l=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);for t=1:l% %初始化结构数组for i=1:8

9、pix(i).number=1;pix(i).huidu=i-1;pix(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:7for j=i+1:8if pix(i).numbersumhuffman(i,j)=huffman(i+1,p);p=p+1;else%如果当前要复制的 结构体的像素个数小于或等于sum 就插入和的结构体%灰度值为-1标志这个结构体的number 是两种灰度像素的和huf

10、fman(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).numberhuffman(i+1,i).number%说 明 :大概率的 编0,小概率的编1,概率相

11、等的,标号大的 为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;endfor j=obj+1:ihuffman(i+1,j-1).bianma=huffman(i,j).bianma;endendfor k=1:count(t)huf_bac(t

12、,k)=huffman(num,k); %保存endend%写出灰度编码 表for t=1:lfor b=1:count(t)fprintf(fid,%d,huf_bact,b.huidu);fwrite(fid, );fprintf(fid,%s,huf_bact,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_bact,b.huiduM(i,j,t)=huf_b

13、act,b.huidu;%将灰度级存入解码的矩阵fprintf(fid1,%s,huf_bact,b.bianma);fwrite(fid1, );%用空格将每个灰度编码隔开break;endendendfwrite(fid1,);%用空格将每行隔开endfwrite(fid1,%);%用%将每层灰度级代码隔开endfclose(fid);fclose(fid1);M=uint8(M);save(M)%存 储解码矩阵Msubplot(2,2,4),imshow(A);title(解码后图 );像像 DFT像像像像像像像像像像像像 像像像像对应编码:0 0001 1 001 2 10 3 011

14、4 11 5 010 6 00000 7 00001矩阵的编码11 001 001 10 10 001 010 11 ,11 011 11 11 11 11 010 10 ,11 010 10 010 0001 011 001 10 ,001 010 0001 011 011 010 00000 11 ,10 011 001 001 10 10 001 10 ,0001 011 00000 010 010 00001 10 0001 ,011 001 10 10 001 010 0001 00000 ,解码矩阵:M =3 3 4 4 4 4 5 24 1 1 2 2 1 5 44 3 4 4 4 4 5 24 5 2 5 0 3 1 21 5 0 3 3 5 6 42 3 1 1 2 2 1 20 3 6 5 5 7 2 03 1 2 2 1 5 0 6

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报