admin 管理员组文章数量: 1087139
2024年3月6日发(作者:电脑上手机网页)
课程名称 数字图像处理与分析
实验项目 实验一 图像FFT 和DCT变换
实验地点
实验学时 实验类型
指导教师 实 验 员
专 业 班 级
学 号 姓 名
年 月 日
成绩:
1
教师评语
一、实验目的及要求
1、了解图像变换的意义和手段;
2、熟悉傅里叶变换的孩本性质;
3、热练掌握FFT方法反变换;
4、通过实验了解二维频谱的分布特点;
5、通过本实验掌握利用MATLAB编程实现数字图像的傅立叶变换。
二、实验原理与内容
1、应用傅立叶变换进行图像处理
傅里叶变换是线性系统分析的一个有力工具,它能够定量地分析诸如数字化系统、采样点、电子放大器、卷积滤波器、噪音和显示点等的作用。通过实验培养这项技能,将有助于解决大多数图像处理问题。对任何想在工作中有效应用数字图像处理技术的人来说,把时间用在学习和掌握博里叶变换上是很有必要的。
2、傅立叶(Fourier)变换的定义
对于二维信号,二维Fourier变换定义为:
二维离散傅立叶变换为:
图像的傅立叶变换与一维信号的傅立叶变换变换一样,有快速算法,具体参见参考书目,有关傅立
2
叶变换的快速算法的程序不难找到。实际上,现在有实现傅立叶变换的芯片,可以实时实现傅立叶变换。
3利用MATLAB软件实现数字图像傅立叶变换的程序。
三、实验软硬件环境
装有MATLAB软件的电脑
四、实验过程(实验步骤、记录、数据、分析)
1、FFT实验
代码:
I=imread(''); f=I(:,:,1);
imshow(f,'InitialMagnification','fit'); %确定像素值的显示范围 title('yuantu');
F=fft2(f); %二维傅立叶变换 F1=fft2(f,256,256);%补零操作的二维傅立叶变换
F2=log(abs(F1));%对F1的幅值取对数
figure,subplot(1,2,1),imshow(F1,[-1 5],'InitialMagnification','fit'); colormap(jet); title('ftttu256*256');
subplot(1,2,2),imshow(F2,[-1 5],'InitialMagnification','fit'); colormap(jet); title('logabsffttu');
figure,imshow(ifft2(F),[ ],'InitialMagnification','fit'); title('iffttu');
figure,imshow(ifft2(F1),[ ],'InitialMagnification','fit'); title('iffttu256*256');
运行结果:
3
分析:fit的设置把原图以灰度图像输出,由原图和FFT 变换图对比可知,变换之后,灰度变低。
2、DCT压缩实验1(8*8)
代码:
Y=imread(''); A=Y(:,:,1);
I=im2double(A); T=dctmtx(8);
B=blkproc(I,[8 8],'P1*x*P2',T,T');
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];
B2=blkproc(B,[8 8],'P1.*x',mask); I2=blkproc(B2,[8 8],'P1*x*P2',T',T);
subplot(2,2,1),imshow(I);title('yuantu'); subplot(2,2,2),imshow(B);title('dcttu');
subplot(2,2,3),imshow(I2);title('yasuotu'); subplot(2,2,4),imshow(B2);title('yasuodcttu');
4
运行结果:
放大:原图
5
分析:通过放大原图和压缩图的细节图可知,经过压缩之后,图像的质量变低。
3、DCT压缩实验2(16*16)
代码:
Y=imread(''); A=Y(:,:,1); I=double(A); T=dctmtx(16);
B=blkproc(I,[16 16],'P1*x*P2',T,T');
J=zeros(16);
J(1,1)=1 ; J(1,2)=1; J(1,3)=1;
J(2,1)=1; J(2,2)=1;
J(3,1)=1;
B2=blkproc(B,[16 16],'P1.*x',J);
I2=blkproc(B2,[16 16],'P1*x*P2',T',T);
subplot(2,2,1),imshow(I,[ ]); title('yuantu');
subplot(2,2,2),imshow(B,[ ]); title('dcttu');
subplot(2,2,3),imshow(I2,[ ]); title('yasuotu');
subplot(2,2,4),imshow(B2,[ ]); title('yasuodcttu');
运行结果:
分析:通过放大原图和压缩图可知,当图像压缩比增大时,图像的质量也将降低,对比两张图,我们可以明显看出压缩后,图像像素降低。
6
4. FFT和DCT对照实验
代码:
RGB=imread(''); I=rgb2gray(RGB); f=fft2(I); J=dct2(I);
imshow(I,'InitialMagnification','fit'); title('yuantu');
figure,subplot(2,2,1),imshow(J); colormap(jet); title('dcttu');
subplot(2,2,2),imshow(log(abs(J)),[ ]); colormap(jet); title('logabsdcttu');
subplot(2,2,3),imshow(f);colormap(jet); title('ffttu');
subplot(2,2,4),imshow(log(abs(f)),[ ]); colormap(jet); title('logabsffttu');
figure,imshow(idct2(J),[],'InitialMagnification','fit'); title('huifutu');
运行结果:
分析:对比原图和逆变换之后的图像,肉眼很难分辨出有什么区别,可见压缩的效果比较理想。
5、小波变换1
代码:
A=imread('');
a=rgb2gray(A);
imshow(A);
figure,imshow(a);
[cA,cH,cV,cD] = dwt2(a,'db2');%二维离散小波变换
figure,subplot(2,2,1),imshow(cA,[]);
subplot(2,2,2),imshow(cH,[]);
subplot(2,2,3),imshow(cV,[]);
subplot(2,2,4),imshow(cD,[]);
7
X1=idwt2(cA,cH,cV,cD,'db2');%X=idwt2(cA,cH,cV,cD,'') 由信号小波分解的近似信号 cA 和细节信号 cH、cH、cV、cD 经小波反变换重构原信号 X。
X2=idwt2(cA,cH,cV,cD,'sym2');
figure,
subplot(1,2,1),imshow(X1,[]);title('db2');
subplot(1,2,2),imshow(X2,[]);title('sym2');
运行结果:
8
分析:由实验结果可知,经过一级小波变换后,原始图像被分解为4个图像中。左上角子图包含了原始图像的低频成分,但是失去了一部分边沿细节信息,这些失去的细节信息被分配到其他3个子图中区。左上角子图要比原图模糊一些,尺寸长宽降低到原来的一半。
6、小波变换2
代码:
a=imread('');
a=rgb2gray(a);
[c,s]=wavedec2(a,2,'db6');
ca2=appcoef2(c,s,'db6',2);
ch2=detcoef2('h',c,s,2);
cv2=detcoef2('v',c,s,2);
cd2=detcoef2('d',c,s,2);
ch1=detcoef2('h',c,s,1);
9
cv1=detcoef2('v',c,s,1);
cd1=detcoef2('d',c,s,1);
mA1=[ca2,ch2;cv2,cd2];
k1=s(2,1)*2-s(3,1);
k2=s(2,2)*2-s(3,2);
ch1=padarray(ch1,[k1 k2],0,'post');
cv1=padarray(cv1,[k1 k2],0,'post');
cd1=padarray(cd1,[k1 k2],0,'post');
mA2=[mA1,ch1;cv1,cd1];
imshow(mA1,[]);
figure,imshow(mA2,[]);
运行结果:
五、测试/调试及实验结果分析
1、实验结果如上图所示。
2、DCT和DFT有什么区别和联系?
答:首先,在理解这3个变量之前,你要知道DTFT:DTFT是离散时间傅里叶变换,用来表达连续的信号的频谱。
然后理解DFT:DFT是离散傅里叶变换,针对的是离散的信号和频谱。DFT是DTFT变化而来,其实就是将连续时间t变成了nT. 为什么要这样做呢,因为计算机是在数字环境下工作的,它不可能看见或者处理现实中连续的信号,只能够进行离散计算,在真实性上尽可能地逼近连续信号。所以DFT是为了我们能够去用工具分析信号而创造出来的,通常我们直接用DTFT的机会很少。
然后再理解FFT:
首先,DCT是DFT的一种形式。所谓“余弦变换”,是在DTFT傅立叶级数展开式中,如果被展开的函数是实偶函数,那么其傅立叶级数中只包含余弦项,再将其离散化(DFT)可导出余弦变换,因此称之为离散余弦变换(DCT)。其实DCT属于DFT的一个子集。DCT用于语音和图像处理比较多。
3、为什么一般DCT变换采用8*8分块?分块过大或过小会出现什么问题?
答:DCT变换的基本思路是将图像分解为8×8的子块或16×16的子块,并对每一个子块进行单独的DCT变换,然后对变换结果进行量化、编码。随着子块尺寸的增加,算法的复杂度急剧上升,因
10
此,实用中通常采用8×8的子块进行变换,但采用较大的子块可以明显减少图像分块效应。
在图像压缩中,一般把图像分解为8×8的子块,然后对每一个子块进行DCT变换、量化,并对量化后的数据进行Huffman编码。DCT变换可以消除图像的空间冗余,Huffman编码可以消除图像的信息熵冗余。过大时虽然效率增加,但是增加不大,而且复杂性大大增加。分块过小时,效率比较低。
六、实验结论与体会
1、通过实验,我了解图像变换的意义,基本掌握了利用MATLAB编程实现数字图像的傅立叶变换的方法。
2、通过实验,巩固了基础知识,了解到自己的不足和今后需努力的方向。
年 月 日
11
版权声明:本文标题:数字图像处理实验一图像FFT 和DCT变换 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1709740102a545037.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论