• 大小: 22KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-06-12
  • 语言: Matlab
  • 标签: MATLAB代码  

资源简介

用衍射追迹实现衍射受限透镜成像。复习菲涅尔衍射计算的S FFT算法,掌握用衍射追迹完成理想单透镜系统成像编程计算,体会和理解透镜尺寸大小对衍射受限系统成像质量的影响。MATLAB代码

资源截图

代码片段和文件信息

clear
Uo=imread(‘分辨率板_2.bmp‘);               %读入作为物的图像
% Uo=double(Uo (::,1));                     %调取第一层,转换为双精度
Uo=double(Uo (::));
lamda=6328*10^(-10);k=2*pi/lamda;          %赋值波长单位:米波矢
D=0.05;                                    %赋值透镜的孔径单位:米
f=0.4;                                     %赋值透镜的焦距单位:米
figure
subplot(221)
imshow(Uo[])
title(‘分辨率板_2.bmp‘)
[cr]=size(Uo);                            %读取物面采样数
%下面计算物光传递到透镜的衍射过程
L0=0.005                                   %赋值物面的尺寸L0单位:米
x0=linspace(-L0/2L0/2r);y0=linspace(-L0/2L0/2c); %赋值物面的坐标
[x0y0]=meshgrid(x0y0);
d1=1.2;                                    %物面到透镜的距离d1单位:米
L=r*lamda*d1/L0                            %衍射光在透镜前表面上的尺寸L单位:米
p=linspace(-L/2L/2r);q=linspace(-L/2L/2c); %赋值透镜前表面的坐标
[pq]=meshgrid(pq);
F00=exp(j*k*d1)/(j*lamda*d1)*exp(j*k/2/d1*(p.^2+q.^2));
Fpq=exp(j*k/2/d1*(x0.^2+y0.^2));
a= Uo.*Fpq;
FUpq=fft2(a);                              %做FFT变换
Ffpq=fftshift(FUpq);
Fufpq=F00.*Ffpq;                           %透镜前表面上的光场复振幅分布
I=Fufpq.*conj(Fufpq);                      %透镜前表面上的光强分布
subplot(222)
imshow(I[]) colormap(pink)title(‘透镜上的光强分布‘)
%下面计算通过透镜后的光场
DD=round(D*r/L);                           %计算孔径对应的采样数
pxy=zeros(cr);                            %生成孔径函数
for n=1:c
   for m=1:r
      if (n-c/2).^2+(m-r/2).^2<=(DD/2).^2;
      pxy(nm)=1;
      end
   end
end
subplot(223)
imshow(pxy[]);title(‘孔径函数‘)
Fufpqyp=Fufpq.*pxy.*exp(-j*k.*(p.^2+q.^2)/2/f); %计算通过透镜后的光场
%下面计算从透镜到观察面的衍射过程
d2=d1*f/(d1-f)                          %由物、像公式给出像距d2单位:米
Lyp=r*lamda*d2/L                          %给出观察面(像面)的尺寸单位:米
x=linspace(-Lyp/2Lyp/2r);y=linspace(-Lyp/2Lyp/2c); %给出观察面的坐标
[xy]=meshgrid(xy);
F0=exp(j*k*d2)/(j*lamda*d2)*exp(j*k/2/d2*(x.^2+y.^2));
F=exp(j*k/2/d2*(p.^2+q.^2));
% 计算再现像
re_image=fft2(Fufpqyp.*F);re_image=re_image.*F0;
if Lyp<0                                   %成虚像时倒像
   re_image=flipud(re_image);re_image=fliplr(re_image);%左右、上下翻转
end
subplot(224)
imshow(re_image.*conj(re_image)[])title(‘再现像‘)

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      23020  2016-04-21 21:39  implementation of the diffraction lens imaging\1.jpg

     文件       2342  2016-04-20 11:26  implementation of the diffraction lens imaging\CX6_1.m

     文件      32830  2013-07-13 09:47  implementation of the diffraction lens imaging\分辨率板_2.bmp

     目录          0  2016-04-21 21:39  implementation of the diffraction lens imaging

----------- ---------  ---------- -----  ----

                58192                    4


评论

共有 条评论