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


本文标签: 变换 实验 图像 分析 信号