光(复振幅)在自由空间中传播的matlab仿真——傅里叶光学方法

光(复振幅)在自由空间中传播的matlab仿真

  光在空间中传播是一种很常见的现象,经过前人的努力,描述光的传播已经具有一套非常完整的理论,那便是傅里叶光学。借助傅里叶分析工具,可以很容易地分析光的传播规律。本文主要介绍如何利用matlab实现光在空间中的自由传播的仿真。即若已知一个物面分布,那么就可以计算出该物面的光传播到空间中任意位置的新强度;

参考资料:

一、问题描述

在这里插入图片描述

图1 物光传播到z面的示意图

  问题说明:如图1所示,已知在z=0的平面内光波(复振幅)分布为U(x,y; 0),求解当光传播z距离之后的光波(复振幅)分布。
说明:光是一种电磁波,对光的描述可以用复振幅 U ( x , y ) = A ( x , y ) ⋅ e x p ( j ⋅ φ ( x , y ) ) U(x,y) = A(x,y) \cdot exp\left( {j \cdot \varphi (x,y)} \right) U(x,y)=A(x,y)exp(jφ(x,y))来表示,其中A(x,y)表示平面内的振幅分布,φ(x,y)表示平面内的相位分布。
  光在自由空间中传播这一基础知识点涉及到光学中的很多应用,比如光的衍射问题,生物显微成像(相位恢复),研究成像系统问题等等。而且其理论知识也比较基础,很适合作为刚接触计算成像的同学的入手点。
  如图,设置物面的振幅是“相机人”,相位是“lena”,当光传播一段距离后,相位信息会表现在光强中。
在这里插入图片描述

二、光在空间中的传播模型

  在《傅里叶光学》中,它构建了一种角谱传播理论,即从一种频谱的角度来分析光的传播规律。由傅里叶变换关系可知
U ( x , y ; 0 ) = ∫ − ∞ ∞ ∫ A ( f X , f Y ; 0 ) exp ⁡ [ − j 2 π ( f X x + f Y y ) ] d f X d f Y U(x,y;0) = \int\limits_{ - \infty }^\infty {\int {A({f_X},{f_Y};0)\exp [ - j2\pi ({f_X}x + {f_Y}y)]d{ {f_X}}d{ {f_Y}}} } U(x,y;0)=A(fX,fY;0)exp[j2π(fXx+fYy)]dfXdfY其中 A ( f X , f Y ; 0 ) {A({f_X},{f_Y};0)} A(fX,fY;0)表示在z=0平面上 U ( x , y ; 0 ) U(x,y;0) U(x,y;0)的频谱。

  因为光是一种电磁波,且在自由空间中传播是无源的,所以 U ( x , y ; 0 ) U(x,y;0) U(x,y;0)满足亥姆霍兹方程:
∇ 2 U + k 2 U = 0 {\nabla ^2}U + {k^2}U = 0 2U+k2U=0将上一式代入此式可得:
d 2 d z 2 A ( f X , f Y ; z )  + 4 π 2 [ 1 λ 2 − f X 2 − f Y 2 ] A ( f X , f Y ; z ) = 0 \frac{ { {d^2}}}{ {d{z^2}}}A\left( { {f_X},{f_Y};z} \right){\text{ + 4}}{\pi ^2}\left[ {\frac{1}{ { {\lambda ^2}}} - f_X^2 - f_Y^2} \right]A\left( { {f_X},{f_Y};z} \right) = 0 dz2d2A(fX,fY;z) + 4π2[λ21fX2fY2]A(fX,fY;z)=0这个二阶微分方程的一个基元解是
A ( f X , f Y ; z )  =  A ( f X , f Y ; 0 ) exp ⁡ ( j 2 π z 1 λ 2 − f X 2 − f Y 2 ) A\left( { {f_X},{f_Y};z} \right){\text{ = }}A\left( { {f_X},{f_Y};0} \right)\exp \left( {j2\pi z\sqrt {\frac{1}{ { {\lambda ^2}}} - f_X^2 - f_Y^2} } \right) A(fX,fY;z) = A(fX,fY;0)exp(j2πzλ21fX2fY2 )这个解就是使用matlab做仿真的关键。它描述了在传播z距离后,传播面的频谱与初始频谱之间的关系,主要表现是在不同的频率分量上引入的相位偏移;

并且具有传播的限制条件: f X 2 + f Y 2 < 1 λ 2 f_X^2 + f_Y^2 < \frac{1}{ { {\lambda ^2}}} fX2+fY2<λ21,即光无法传播空间频率大于1/λ的频率。

  在获得了z距离下的频谱之后,由傅里叶变换关系可以求得传播z距离后的光波(复振幅)分布为:
U ( x , y ; z ) = ∫ − ∞ ∞ ∫ A ( f X , f Y ; 0 ) ⋅ exp ⁡ ( j 2 π z 1 λ 2 − f X 2 − f Y 2 ) ⋅ c i r c ( f X 2 + f Y 2 λ ) ⋅ exp ⁡ [ − j 2 π ( f X x + f Y y ) ] d f X d f Y U(x,y;z) = \int\limits_{ - \infty }^\infty {\int {A({f_X},{f_Y};0) \cdot \exp \left( {j2\pi z\sqrt {\frac{1}{ { {\lambda ^2}}} - f_X^2 - f_Y^2} } \right) \cdot circ({\frac{ {\sqrt {f_X^2 + f_Y^2} }}{\lambda }}) \cdot \exp [ - j2\pi ({f_X}x + {f_Y}y)]d{f_X}d{f_Y}} } U(x,y;z)=A(fX,fY;0)exp(j2πzλ21fX2fY2 )circ(λfX2+fY2 )exp[j2π(fXx+fYy)]dfXdfY

三、光传播的matlab仿真

  遵从第二节的模型,matlab仿真流程主要为:初始化参数 -> 对图像做FT -> 计算z距离下的频谱 -> 求解图像;
在仿真中,需要注意构建具有真实量纲的频率。

% 实现光在自由空间中传播的matlab仿真
% 流程:初始化参数 -> 对图像做FT -> 角谱传播,计算z距离下的频谱 -> 求解图像;

clc, clear
close all

% 初始化参数
z = 100;      % 传播距离(mm)
L = 50;       % 物面的长
W = 50;       % 物面的宽
lamda = 532e-6; % 光波长

% 振幅和相位
A = im2double(imread('./cameraman.tif'));   % 振幅和相位可以设置不同的值,
Phi = im2double(imread('./lena.tif'));      % 可以是纯相位或纯振幅物体;
U0 = A.*exp(1j*2*pi*Phi);

% 初始化频率
[r_dim, c_dim, ~] = size(U0);
fX = [0:fix(r_dim/2),ceil(r_dim/2)-1:-1:1]/L;
fY = [0:fix(c_dim/2),ceil(c_dim/2)-1:-1:1]/L;
[fy,fx] = meshgrid(fY,fX); 

% 对图像做傅里叶变换
U0_fft = fft2(U0);

% 角谱传播
f = sqrt(fx.^2+fy.^2);
circ_f = circ(f.*lamda);    % 高于1/λ的频率无法传播
Uz_fft = U0_fft.*exp(1j*2*pi*z.*sqrt(1./lamda.^2-f.^2)).*circ_f;

% 复原图像
Uz = ifft2(Uz_fft);

% 显示图像
imshow(abs([U0 Uz]),[]);
set(gcf, 'outerposition', get(0,'ScreenSize'));

① 对于纯相位物体:对于大部分生物细胞来说是透明的,所以主要特点表征在相位中,通过衍射传播的方式可以将相位反演出来。
在这里插入图片描述
② 对于纯振幅物体:随着传播距离增加,物光图像会越来越模糊。

欢迎大家学习交流!

猜你喜欢

转载自blog.csdn.net/qq_34917728/article/details/120268145