%本例完成夫琅和费衍射演示@wpp
clear;
clc;
close all;
%a=imread('FNE.bmp');%调入图像
display('请选择物函数类型....');
display('(1) 矩孔');
display('(2) 圆孔');
display('(3) 圆盘');
display('(4) 单缝');
yourchoose=input(':');
switch yourchoose
case 1
a=imread('REC.bmp');
tt1='矩孔';
case 2
a=imread('ROUND.bmp');
tt1='圆孔';
case 3
a=imread('ROUNDpan.bmp');
tt1='圆盘';
case 4
a=imread('SingleSlot.bmp');
tt1='单缝';
otherwise
quit;
end
a=double(a(:,:,1));
% a=double(a);
lamda=6328*10^(-10);
k=2*pi/lamda;%波矢
figure;
imshow(a);title('Original Image');
[c,r]=size(a);
%计算物光传递到透镜的衍射过程
%L0=0.001; %给出输入图像的尺寸L0,单位:米
L0=0.1;
x0=linspace(-L0/2,L0/2,r);%给出输入图像的坐标
y0=linspace(-L0/2,L0/2,c);
[x0,y0]=meshgrid(x0,y0);
% z0=0.005; %图像到透镜的距离,单位:米,可以改变
z0=input('输入衍射距离z= ');
%以下给出光传到透镜面上的尺寸L,单位:米
L=r*lamda*z0/L0;
p=linspace(-L/2,L/2,r);%给出图像在透镜面上的坐标
q=linspace(-L/2,L/2,c);
[p,q]=meshgrid(p,q);
F00=exp(j*k*z0)/(j*lamda*z0)*exp(j*k/2/z0*(p.^2+q.^2));
Fpq=exp(j*k/2/z0);
a=a.*Fpq;
FUpq=fft2(a);%做FFT变换
FUpq=FUpq.*F00;
Ffpq=fftshift(FUpq);
I=Ffpq.*conj(Ffpq);
if yourchoose==4
for i=1:1:512
I(i,:)=I(256,:);
end
end
aaa=[tt1 '夫琅和费衍射图'];
%figure;imshow(I,[]),title(tt1 & '菲涅耳衍射图');
figure;imshow(I,[]),title(aaa);
colormap(gray(255));
figure;plot(I(256,:));title('x轴强度截面图');