gpt4 book ai didi

python - 了解fftfreq函数的输出以及图像中单行的fft图

转载 作者:行者123 更新时间:2023-12-02 17:03:58 24 4
gpt4 key购买 nike

我试图了解函数fftfreq以及通过为图像中的一行添加实部和虚部生成的结果图。这是我所做的:

import numpy as np
import cv2
import matplotlib.pyplot as plt

image = cv2.imread("images/construction_150_200_background.png", 0)
image_fft = np.fft.fft(image)
real = image_fft.real
imag = image_fft.imag

real_row_bw = image_fft[np.ceil(image.shape[0]/2).astype(np.int),0:image.shape[1]]
imag_row_bw = image_fft[np.ceil(image.shape[0]/2).astype(np.int),0:image.shape[1]]

sum = real_row_bw + imag_row_bw

plt.plot(np.fft.fftfreq(image.shape[1]), sum)
plt.show()

这是生成的图的图像:
FIgure-1

我从磁盘读取图像,计算傅立叶变换并提取实部和虚部。然后,我对 sinecosine组件求和,并使用 pyplot库进行绘图。

有人可以帮我理解 fftfreq函数吗?另外,下图中的峰在图中代表什么:
Figure-2

我了解傅立叶变换将图像从空间域映射到频域,但是从图形上我没有多大意义。

注意:我无法在此处直接上传图像,因为在提出问题时,我遇到了上传错误。

最佳答案

我认为您确实不需要fftfreq在图像中查找频域信息,但是无论如何我都会尽力进行解释。
fftfreq用于计算与您计算的FFT中的每个bin对应的频率。您正在使用fftfreq在图形上定义x坐标。
fftfreq有两个参数:一个是必需参数,一个是可选参数。必选的第一个参数是整数,即您用于计算FFT的窗口长度。您在FFT中将拥有与窗口中相同数量的频点数量。可选的第二个参数是每个窗口的时间段。如果您未指定,则默认值为1。我不知道采样率是否对图像有意义,因此我可以理解您未指定它。也许您想以像素为单位指定周期?由你决定。

FFT的频率仓始于负奈奎斯特频率,该频率是采样率的一半(默认= -0.5)或更高。并以奈奎斯特正频率(+0.5)或稍低一点结束。
fftfreq函数以有趣的顺序返回频率。零频率始终是第零个元素。频率计数到最大正频率,然后翻转到最大负频率并向上计数到零。这种奇怪排序的原因是,如果对实值数据执行FFT(实际上,图像像素没有复数值),则负频率数据与相应的正频率数据完全相同,并且是多余的。这种排序方式可以很容易地消除负频率:只需取阵列的前半部分即可。由于您未这样做,因此您也在绘制负频率。如果您选择忽略阵列的后半部分,则负频率将被消除。

至于您在图像零频率处看到的强烈尖峰,这可能是因为图像数据是RGB值,范围从0到255。数据中存在很大的“DC偏移”。看来您正在使用Matplotlib。如果在交互式窗口中绘图,则可以使用缩放矩形查看该水平线。如果您将DC偏移推到刻度之外,将Y轴刻度设置为±500,我敢打赌,您将开始看到水平线毕竟不是完全水平。

一旦知道哪个容器包含您的DC偏移量,如果您不想看到它,就可以将那个容器中的fft的值分配为零。然后,图形将自动缩放。

顺便说一下,这两行代码执行相同的计算,因此您实际上并没有像文本中那样使用正弦和余弦分量:

real_row_bw = image_fft[np.ceil(image.shape[0]/2).astype(np.int),0:image.shape[1]]
imag_row_bw = image_fft[np.ceil(image.shape[0]/2).astype(np.int),0:image.shape[1]]

最后一件事:正确地对正弦和余弦分量求和(一旦有了),因为它们成直角,所以需要使用 vector 和而不是标量和。查看函数 numpy.linalg.norm

关于python - 了解fftfreq函数的输出以及图像中单行的fft图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57942516/

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