赞
踩
光在空间中传播是一种很常见的现象,经过前人的努力,描述光的传播已经具有一套非常完整的理论,那便是傅里叶光学。借助傅里叶分析工具,可以很容易地分析光的传播规律。本文主要介绍如何利用matlab实现光在空间中的自由传播的仿真。即若已知一个物面分布,那么就可以计算出该物面的光传播到空间中任意位置的新强度;
参考资料:
问题说明:如图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[λ21−fX2−fY2]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λ21−fX2−fY2
)这个解就是使用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λ21−fX2−fY2
)⋅circ(λfX2+fY2
)⋅exp[−j2π(fXx+fYy)]dfXdfY
遵从第二节的模型,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'));
① 对于纯相位物体:对于大部分生物细胞来说是透明的,所以主要特点表征在相位中,通过衍射传播的方式可以将相位反演出来。
② 对于纯振幅物体:随着传播距离增加,物光图像会越来越模糊。
欢迎大家学习交流!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。