二维傅里叶变换:FFT与傅里叶光学

2024-06-06 05:13:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用编程来增加我对傅里叶光学的理解。我知道傅里叶变换的傅里叶变换在物理上和数学上是反向的->;F{F{F(x)}=F(-x)。我有两个问题1)第二次变换除了在简单的高斯情况下(这使它更加混乱)外,不会返回任何与原始函数类似的东西,并且2)似乎有一些缩放因子需要我“放大”并扭曲变换后的图像,使其变得毫无帮助(如下所示)。**根据@Cris Luengo的建议进行编辑

enter image description here

#%% Playing with 2d Fouier Transform

import numpy as np
from scipy import fftpack
import matplotlib.pyplot as plt
import LightPipes

wavelength = 792*nm
size = 15*mm
N = 600
w0=3*mm

# Fields
sq = np.zeros([100,100])
sq[25:75, 25:75] = 1
F=Begin(size,wavelength,N)
I0 = Intensity(0,GaussBeam(F, w0, LG=True, n=0, m=0))
I1 = Intensity(0,GaussBeam(F, w0, LG=False, n=0, m=1))+Intensity(0,GaussBeam(F, w0, LG=False, n=1, m=0))

# Plot transforms
f = sq
F = np.fft.fftshift(fftpack.fft2(f))
F_F = fftpack.fft2((F))

plt.subplot(331), plt.imshow(f)
plt.title(r'f'), plt.xticks([]), plt.yticks([])
plt.subplot(332), plt.imshow(np.abs(F))
plt.title(r'F\{f\}'), plt.xticks([]), plt.yticks([])
plt.subplot(333), plt.imshow(np.abs(F_F))
plt.title('F\{F\{f\}\}'), plt.xticks([]), plt.yticks([])

# plt.subplot(331), plt.imshow(f)
# plt.title(r'f'), plt.xticks([]), plt.yticks([])
# plt.subplot(332), plt.imshow(np.abs(F))
# plt.title(r'F\{f\}'), plt.xticks([]), plt.yticks([])
# plt.subplot(333), plt.imshow(np.abs(F_F))
# plt.title('F\{F\{f\}\}'), plt.xticks([]), plt.yticks([])

f = I0
F = np.fft.fftshift(fftpack.fft2(f))
F_F = fftpack.fft2((F))

plt.subplot(334), plt.imshow(f)
plt.title(r'f'), plt.xticks([]), plt.yticks([])
plt.subplot(335), plt.imshow(np.abs(F))
plt.title(r'F\{f\}'), plt.xticks([]), plt.yticks([])
plt.subplot(336), plt.imshow(np.abs(F_F))
plt.title('F\{F\{f\}\}'), plt.xticks([]), plt.yticks([])

f = I1
F = fftpack.fft2(f)
F_F = fftpack.fft2(F)

plt.subplot(337), plt.imshow(f)
plt.title(r'f'), plt.xticks([]), plt.yticks([])
plt.subplot(338), plt.imshow(np.abs(F))
plt.title(r'F\{f\}'), plt.xticks([]), plt.yticks([])
plt.subplot(339), plt.imshow(np.abs(F_F))
plt.title('F\{F\{f\}\}'), plt.xticks([]), plt.yticks([])

plt.tight_layout()
plt.show()

Tags: importtitlenpsqpltabsimshowintensity
1条回答
网友
1楼 · 发布于 2024-06-06 05:13:46

在与Cris交谈之后,似乎没有比例因子,这种DFT似乎就是这样工作的。所以我找到的解决办法是把像素增加到我可以放大并有足够清晰的图像的程度。这不是一个很好的解决方案,但与LightPipes相结合,现在可以了解光模式的变换是什么样子,以及说明在透镜系统的像面上,它们将像在前焦场中一样出现

#%% Playing with 2d Fourier Transform

import numpy as np
import matplotlib.pyplot as plt
import LightPipes
from scipy.fftpack import fft2 as fft
from numpy.fft import fftshift, ifftshift

wavelength = 792*nm
size = 100*mm
N = 1000
w0=3*mm

# Fields
sq = np.zeros([100,100])
sq[25:75, 25:75] = 1
F=Begin(size,wavelength,N)
I0 = Intensity(0,GaussBeam(F, w0, LG=True, n=0, m=0))
I1 = Intensity(0,GaussBeam(F, w0, LG=False, n=0, m=1))+Intensity(0,GaussBeam(F, w0, LG=False, n=1, m=0))

# Plot transforms
f = sq
F = fftshift(fft(ifftshift(f)))
F_F = fftshift(fft(ifftshift(F)))

plt.subplot(331), plt.imshow(f,cmap = cmap)
plt.title(r'f'), plt.xticks([]), plt.yticks([])
plt.subplot(332), plt.imshow(np.abs(F),cmap = cmap)
plt.title(r'F\{f\}'), plt.xticks([]), plt.yticks([])
plt.subplot(333), plt.imshow(np.abs(F_F),cmap = cmap)
plt.title('F\{F\{f\}\}'), plt.xticks([]), plt.yticks([])

f = I0
F = fftshift(fft(ifftshift(f)))
F_F = fftshift(fft(ifftshift(F)))

plt.subplot(334), plt.imshow(f[450:550,450:550],cmap = cmap)
plt.title(r'f'), plt.xticks([]), plt.yticks([])
plt.subplot(335), plt.imshow(np.abs(F)[450:550,450:550],cmap = cmap)
plt.title(r'F\{f\}'), plt.xticks([]), plt.yticks([])
plt.subplot(336), plt.imshow(np.abs(F_F)[450:550,450:550],cmap = cmap)
plt.title('F\{F\{f\}\}'), plt.xticks([]), plt.yticks([])

f = I1
F = fftshift(fft(ifftshift(f)))
F_F = fftshift(fft(ifftshift(F)))

plt.subplot(337), plt.imshow(f[450:550,450:550],cmap = cmap)
plt.title(r'f'), plt.xticks([]), plt.yticks([])
plt.subplot(338), plt.imshow(np.abs(F)[450:550,450:550],cmap = cmap)
plt.title(r'F\{f\}'), plt.xticks([]), plt.yticks([])
plt.subplot(339), plt.imshow(np.abs(F_F)[450:550,450:550],cmap = cmap)
plt.title('F\{F\{f\}\}'), plt.xticks([]), plt.yticks([])

plt.tight_layout()
plt.show()

enter image description here

相关问题 更多 >