gpt4 book ai didi

python - FFT2 中心对称物体的非零虚部?

转载 作者:行者123 更新时间:2023-12-04 09:31:10 24 4
gpt4 key购买 nike

我目前正在测试 fft包裹来自 numpy .我创建了一个人工中心对称图像,并对其进行了 2D FFT,我取了虚部并指出这不等于零。我不明白为什么,你有什么想法吗?当我从 1D 径向轮廓到 2D 图像时,也许我会想念一些东西,我真的不知道......
新更新(新示例):

import numpy as np
from scipy import interpolate
import matplotlib.pyplot as plt


I_min = 1.774E-6 #min(y_intensity[y_intensity!=0])
y = np.ones(50) #y_intensity[:50]
xv_3 = np.linspace(0,0.005,len(y))*1E3# x_intensity[:50]*1E3

new_r = np.linspace(-100,100,2**8)
interpol_index = interpolate.interp1d(xv_3, y)
X, Y = np.meshgrid(new_r,new_r)
profilegrid3 = np.ones(X.shape, float)
for i, x in enumerate(X[0, :]):
for k, z in enumerate(Y[:, 0]):
current_radius = np.sqrt(x**2 + z**2)

cond=np.logical_or(current_radius>=max(xv_3),current_radius<=min(xv_3))
if cond == True :
profilegrid3[i, k] = I_min

else :
profilegrid3[i, k] = interpol_index(current_radius)

plt.figure()
plt.imshow(np.imag(np.fft.ifftshift(np.fft.fft2(np.fft.fftshift(profilegrid3)))))
plt.colorbar()
plt.show()
图片 :
enter image description here
虚部:
enter image description here

最佳答案

您的代码有两个问题:

  • 使用 ifftshift将原点在中间的图像转换为 FFT 期望的左上角的原点。并使用 fftshift将 FFT 的输出转换为中间的原点。 (您以错误的方式使用它们。)但请注意,这两个函数对偶数大小的数组执行完全相同的操作,因此在修复此问题后您不会注意到任何区别。
  • 您的输入必须来自 size//2 .您的创作方式 new_r意味着原点正好位于像素之间。我认为添加 endpoint=False给您的 np.linspace电话解决了这个问题。
  • 关于python - FFT2 中心对称物体的非零虚部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62838714/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com