18组实验四王栩灿肖凌峰张皓.docx
- 文档编号:12101826
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:28
- 大小:1.06MB
18组实验四王栩灿肖凌峰张皓.docx
《18组实验四王栩灿肖凌峰张皓.docx》由会员分享,可在线阅读,更多相关《18组实验四王栩灿肖凌峰张皓.docx(28页珍藏版)》请在冰豆网上搜索。
18组实验四王栩灿肖凌峰张皓
实验四傅里叶变换及频率滤波
时刻:
组员:
王栩灿/肖凌峰/张皓第18组
一、实验目的
1.了解傅里叶变换在图像处置中的应用;
2.把握频率滤波的原理和特点;
3.把握傅里叶变换的大体性质;
4.通过实验了解二维频谱的散布特点。
二、实验内容
1.构造同时包括50Hz和120Hz的正弦信号进行傅里叶变换并分析。
2.以高斯光束为例(自己选的例子亦可),利用matlab实现二维图像的傅里叶变换,选取不同的抽样距离,观看抽样距离对结果的阻碍并分析。
3.对某一图像(如)
(1)编程实现图像的理想低通、高斯低通、布特沃斯低通滤波,分析不同的截止频率对滤波后图像的阻碍。
(2)编程实现图像的理想高通、高斯高通、布特沃斯高通滤波,分析不同的截止频率对滤波后图像的阻碍。
(3)在空域中实现高斯低通滤波,并与频域的结果进行比较。
4.利用FFT实现二维高斯光束的菲涅尔衍射和夫琅禾费衍射,并分析光束在不同传输距离上的衍射图样(传输距离自定,至少三个数值说明即可)。
利用一幅图像进行菲涅尔衍射和夫琅禾费衍射后会是什么样子?
三、实验原理
①快速傅里叶变换
有限长序列能够通过(DFT)将其频域也离散化成有限长序列。
但其计算量太大,很难实时地处置问题,因此引出了快速傅里叶变换(FFT).1965年,Cooley和Tukey提出了计算(DFT)的快速算法,将DFT的运算量减少了几个数量级。
从此,对快速傅里叶变换(FFT)的研究便不断深切,这门新兴学科也随FFT的显现和进展而迅速进展。
依照对序列分解与选取方式的不同而产生了FFT的多种算法,大体算法是基2DIT和基2DIF。
FFT在离散傅里叶反变换、线性等方面也有重要应用。
快速傅立叶变换(FFT),是傅氏变换的快速,它是依照离散傅氏变换的奇、偶、虚、实等特性,对离散的算法进行改良取得的。
FFT的大体思想是把原始的N点序列,依次分解成一系列的短序列。
充分利用DFT计算式中指数因子所具有的对称性质和周期性质,进而求出这些短序列相应的DFT并进行适当组合,达到删除重复计算,减少乘法运算和简化结构的目的。
尔后,在这思想基础上又开发了高基和割裂基等快速算法,随着数字技术的高速进展,1976年显现成立在数论和多项式理论基础上的维诺格勒傅里叶变换算法(WFTA)和素因子傅里叶变换算法。
它们的一起特点是,当N是素数时,能够将DFT算转化为求循环卷积,从而更进一步减少乘法次数,提高速度。
②理想低通/高通滤波器
是一种假想的低通/高通滤波器,其关于高于/低于截止频率的信号完全截止,而关于低于/高于截止频率的信号完全无失真传输。
③布特沃斯低通/高通滤波器
截止频率位于距原点D0的n阶布特沃斯滤波器(BLPF)的传递函数概念为
与IFPF不同,BLPF并无字通过频率和滤除频率之间给出明显截止的急剧不持续性。
且空间域的一阶布特沃斯滤波器没有振铃现象。
④高斯低通/高通滤波器
高斯滤波器的二维形式由下式给出:
⑤Fresnel衍射与Fraunhofer衍射
在光学里,菲涅耳衍射(Fresneldiffraction)指的是在近场区域的,即光源或衍射的图样的屏与衍射孔(障碍物)的距离是有限的。
菲涅耳衍射积分式能够用来计算光波在近场区域的传播,因法国物理学者奥古斯丁·菲涅耳而命名,是基尔霍夫衍射公式的近似。
夫琅禾费衍射是指把单色点光源放在透镜的核心上,通过透镜后的单色平行光垂直照射时,在屏后面不同距离上会观看到一些现象,其中当屏远离到足够大的距离后,中心显现一个较大的亮斑,外围是一些较弱的明暗相间的同心圆环,尔后再往外移动,衍射花腔显现稳固散布,中心处老是亮的,只是半径不断扩大罢了,这种衍射称为夫琅禾费衍射,又称(而当距离较近时为,较近时没有夫琅禾费衍射)。
四、实验程序与结果
①构造同时包括50Hz和120Hz的正弦信号进行傅里叶变换并分析。
主程序
f1=fun_GenSinWave(1000,1000,50);
%plot(f1);
f2=fun_GenSinWave(1000,1000,120);
%figure;plot(f2);
f=f1+f2;
y=fft(f);
figure;plot(y);
正弦波生成函数
function[output]=fun_GenSinWave(fs,N,f)
%partone,generate50Hzand100HzsinsignalanddoFourierchange
fsm=fs;%采样频率
Ns=N;
n=0:
N-1;
t=n/fs;
f1=f;
x=sin(2*pi*f1*t);
能够看到不同的频率在做傅里叶变换后被区分开来。
②以高斯光束为例(自己选的例子亦可),利用matlab实现二维图像的傅里叶变换,选取不同的抽样距离,观看抽样距离对结果的阻碍并分析。
采纳lena图像进行二维傅里叶变换
主程序:
%二维傅里叶变换
f=imread('');%以lena图为例
f=rgb2gray(f);%转为灰度图
f=double(f);%转为double值
F1=fft2(f);%利用MATLAB库傅里叶变换函数
F1=abs(F1);
F1=fftshift(F1);%浮点移动到中央位置
F1=log10(F1);
F1=uint8(F1);%取对数,恢复至无符号八位整形
imshow(F1,[])%显示图像。
imwrite(F1,'');
F2=downsample(f,2);%利用downsample函数进行降采样
F2=fft2(f);%利用MATLAB库傅里叶变换函数
F2=abs(F2);
F2=fftshift(F2);%浮点移动到中央位置
F2=log10(F2);
F2=uint8(F2);%取对数,恢复至无符号八位整形
figure,imshow(F2,[])%显示图像。
imwrite(F2,'');
原图像
二维傅里叶变换后图像二维傅里叶变换后图像(降采样)
采纳了matlab库函数中的快速傅里叶变换函数(FFT)进行变换,尽管从结果图上不易看到降采样产生的阻碍,可是在查看图像的矩阵中数值时能够观看到像元的值是不一样的。
③对某一图像(如)
(1)编程实现图像的理想低通、高斯低通、布特沃斯低通滤波,分析不同的截止频率对滤波后图像的阻碍。
(2)编程实现图像的理想高通、高斯高通、布特沃斯高通滤波,分析不同的截止频率对滤波后图像的阻碍。
主程序:
clearall
clc
f=imread('图3-5');
R1=30;
R2=90;
R3=160;
f=double(f);
F=fft2(f);
F=fftshift(F);%原图像的傅里叶逆变换
%------------------------理想低通滤波--------------------------------------
Lowpass_Filters1=fun_Lowpass_Filters(F,R1);
imwrite(Lowpass_Filters1,'R=30的理想低通滤波.bmp');
Lowpass_Filters2=fun_Lowpass_Filters(F,R2);
imwrite(Lowpass_Filters2,'R=90的理想低通滤波.bmp');
Lowpass_Filters3=fun_Lowpass_Filters(F,R3);
imwrite(Lowpass_Filters3,'R=160的理想低通滤波.bmp');
%------------------------理想高通滤波--------------------------------------
Highpass_Filters1=fun_Highpass_Filters(F,R1);
imwrite(Highpass_Filters1,'R=30的理想高通滤波.bmp');
Highpass_Filters2=fun_Highpass_Filters(F,R2);
imwrite(Highpass_Filters2,'R=90的理想高通滤波.bmp');
Highpass_Filters3=fun_Highpass_Filters(F,R3);
imwrite(Highpass_Filters3,'R=160的理想高通滤波.bmp');
%------------------------高斯低通滤波--------------------------------------
Gaussian_Lowpass_Filters1=fun_Gaussian_Lowpass_Filters(F,R1);
imwrite(Gaussian_Lowpass_Filters1,'R=30的高斯低通滤波.bmp');
Gaussian_Lowpass_Filters2=fun_Gaussian_Lowpass_Filters(F,R2);
imwrite(Gaussian_Lowpass_Filters2,'R=90的高斯低通滤波.bmp');
Gaussian_Lowpass_Filters3=fun_Gaussian_Lowpass_Filters(F,R3);
imwrite(Gaussian_Lowpass_Filters3,'R=160的高斯低通滤波.bmp');
%------------------------高斯高通滤波--------------------------------------
Gaussian_Highpass_Filters1=fun_Gaussian_Highpass_Filters(F,R1);
imwrite(Gaussian_Highpass_Filters1,'R=30的高斯高通滤波.bmp');
Gaussian_Highpass_Filters2=fun_Gaussian_Highpass_Filters(F,R2);
imwrite(Gaussian_Highpass_Filters2,'R=90的高斯高通滤波.bmp');
Gaussian_Highpass_Filters3=fun_Gaussian_Highpass_Filters(F,R3);
imwrite(Gaussian_Highpass_Filters3,'R=160的高斯高通滤波.bmp');
%------------------------布特沃斯低通滤波-----------------------------------
Butterworth_Lowpass_Filters1=fun_Butterworth_Lowpass_Filters(F,R1);
imwrite(Butterworth_Lowpass_Filters1,'R=30的布特沃斯低通滤波.bmp');
Butterworth_Lowpass_Filters2=fun_Butterworth_Lowpass_Filters(F,R2);
imwrite(Butterworth_Lowpass_Filters1,'R=90的布特沃斯低通滤波.bmp');
Butterworth_Lowpass_Filters3=fun_Butterworth_Lowpass_Filters(F,R3);
imwrite(Butterworth_Lowpass_Filters1,'R=160的布特沃斯低通滤波.bmp');
%------------------------布特沃斯高通滤波-----------------------------------
Butterworth_Highpass_Filters1=fun_Butterworth_Highpass_Filters(F,R1);
imwrite(Butterworth_Highpass_Filters1,'R=30的布特沃斯高通滤波.bmp');
Butterworth_Highpass_Filters2=fun_Butterworth_Highpass_Filters(F,R2);
imwrite(Butterworth_Highpass_Filters2,'R=90的布特沃斯高通滤波.bmp');
Butterworth_Highpass_Filters3=fun_Butterworth_Highpass_Filters(F,R3);
imwrite(Butterworth_Highpass_Filters3,'R=160的布特沃斯高通滤波.bmp');
利用的自概念函数
理想低通/高通
function[output]=fun_Highpass_Filters(H_Image,R)
%------------------------变量------------------------------
%Image读取的图像
%R理想低通滤波的半径
Low=H_Image;
r=R;
[M,N]=size(Low);
h=zeros(M,N);
m=round(M/2);
n=round(N/2);
fori=1:
M
forj=1:
N
S=sqrt((i-m)^2+(j-n)^2);
ifS<=r
h(i,j)=1;
else
h(i,j)=0;
end
end
end
Lowpass_Filters=h.*Low;%理想低通滤波
Lowpass_Filters=uint8(real(ifft2(ifftshift(Lowpass_Filters))));
figure('Name','理想低通滤波');
imshow(Lowpass_Filters);
output=Lowpass_Filters;
function[output]=fun_Highpass_Filters(H_Image,R)
%------------------------变量------------------------------
%Image读取的图像
%R理想高通滤波的半径
High=H_Image;
r=R;
[M,N]=size(High);
h=zeros(M,N);
m=round(M/2);
n=round(N/2);
fori=1:
M
forj=1:
N
S=sqrt((i-m)^2+(j-n)^2);
ifS<=r
h(i,j)=0;
else
h(i,j)=1;
end
end
end
Highpass_Filters=h.*High;%理想低通滤波
Highpass_Filters=uint8(real(ifft2(ifftshift(Highpass_Filters))));
figure('Name','理想高通滤波');
imshow(Highpass_Filters);
output=Highpass_Filters;
高斯低通/高通
function[output]=fun_Gaussian_Lowpass_Filters(G_Image,R)
%------------------------------变量------------------------------
%H_Image通过傅里叶变换处置的图像
%R高斯低通滤波的半径
Gaussian_Lowpass=G_Image;
[M,N]=size(Gaussian_Lowpass);
m1=fix(M/2);
n1=fix(N/2);
r=R;
fori=1:
M
forj=1:
N
d=sqrt((i-m1)^2+(j-n1)^2);
G_H(i,j)=exp(-d^2/2/r^2);
end
end
Gaussian_Lowpass_Filters=Gaussian_Lowpass.*G_H;
Gaussian_Lowpass_Filters=ifftshift(Gaussian_Lowpass_Filters);
Gaussian_Lowpass_Filters=ifft2(Gaussian_Lowpass_Filters);
Gaussian_Lowpass_Filters=mat2gray(real(Gaussian_Lowpass_Filters));
figure('Name','高斯低通滤波');
imshow(Gaussian_Lowpass_Filters);
output=Gaussian_Lowpass_Filters;
function[output]=fun_Gaussian_Highpass_Filters(G_Image,R)
%------------------------变量------------------------------
%H_Image通过傅里叶变换处置的图像
%R高斯高通滤波的半径
Gaussian_Highpass=G_Image;
[M,N]=size(Gaussian_Highpass);
m1=fix(M/2);
n1=fix(N/2);
r=R;
fori=1:
M
forj=1:
N
d=sqrt((i-m1)^2+(j-n1)^2);
G_Hh(i,j)=1-exp(-d^2/2/r^2);
end
end
Gaussian_Highpass_Filters=Gaussian_Highpass.*G_Hh;
Gaussian_Highpass_Filters=ifftshift(Gaussian_Highpass_Filters);
Gaussian_Highpass_Filters=ifft2(Gaussian_Highpass_Filters);
Gaussian_Highpass_Filters=mat2gray(real(Gaussian_Highpass_Filters));
figure('Name','高斯高通滤波');
imshow(Gaussian_Highpass_Filters);
output=Gaussian_Highpass_Filters;
布特沃斯低通/高通
function[output]=fun_Butterworth_Lowpass_Filters(B_Image,R)
%------------------------变量------------------------------
%B_Image通过傅里叶变换处置的图像
%R布特沃斯低通滤波的半径
Butterworth_Lowpass=B_Image;
[M,N]=size(Butterworth_Lowpass);
r=R;
m2=fix(M/2);
n2=fix(N/2);
fori=1:
M
forj=1:
N
d=sqrt((i-m2)^2+(j-n2)^2);
B_Hl=1/(1+(d/r)^(2*2));
resultBl(i,j)=B_Hl*Butterworth_Lowpass(i,j);
end
end
Butterworth_Lowpass_Filters=ifftshift(resultBl);
Butterworth_Lowpass_Filters=ifft2(Butterworth_Lowpass_Filters);
Butterworth_Lowpass_Filters=uint8(real(Butterworth_Lowpass_Filters));
figure('Name','布特沃斯低通滤波');
imshow(Butterworth_Lowpass_Filters);
output=Butterworth_Lowpass_Filters;
function[output]=fun_Butterworth_Highpass_Filters(B_Image,R)
%------------------------变量------------------------------
%B_Image通过傅里叶变换处置的图像
%R布特沃斯高通滤波的半径
Butterworth_Highpass=B_Image;
[M,N]=size(Butterworth_Highpass);
r=R;
m2=fix(M/2);
n2=fix(N/2);
fori=1:
M
forj=1:
N
d=sqrt((i-m2)^2+(j-n2)^2);
B_HH=1/(1+(r/d)^(2*2));
resultBH(i,j)=B_HH*Butterworth_Highpass(i,j);
end
end
Butterworth_Highpass_Filters=ifftshift(resultBH);
Butterworth_Highpass_Filters=ifft2(Butterworth_Highpass_Filters);
Butterworth_Highpass_Filters=uint8(real(Butterworth_Highpass_Filters));
figure('Name','布特沃斯高通滤波');
imshow(Butterworth_Highpass_Filters);
output=Butterworth_Highpass_Filters;
结果图:
理想低通滤波
半径R
30
90
160
图片
理想高通滤波
半径R
30
90
160
图片
布特沃斯低通滤波
半径R
30
90
160
图片
布特沃斯高通滤波
半径R
30
90
160
图片
高斯低通滤波
半径R
30
90
160
图片
高斯高通滤波
半径R
30
90
160
图片
(3)在空域中实现高斯低通滤波,并与频域的结果进行比较。
空域高斯滤波(R=90)
比较能够得出,相关于频率域高斯滤波,空域高斯滤波取得的图像灰度值较高一些。
4.利用FFT实现二维高斯光束的菲涅尔衍射和夫琅禾费衍射,并分析光束在不同传输距离上的衍射图样(传输距离自定,至少三个数值说明即可)。
实验主程序
由于版本不同及兼容问题汉字部份会变成乱码,源程序可看。
%===========·ÆÄù¶ûÑÜÉäÓë·òÀź̷ÑÑÜÉä========
%
%
%
%
%========================================
clearall;
clc;
%¶ÁÈ¡ÑÜÉäÃæµÄͼÏñ
f=imread('¶þά¸ß˹¹âÊøÕñ·ù·Ö²¼.jpg');
f=double(f)./255;
figure;
imshow(f);
title('¶þά¸ß˹¹âÊøÔÚÑÜÉäÃ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 18 实验 四王栩灿肖凌峰张皓
![提示](https://static.bdocx.com/images/bang_tan.gif)