首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解释numpy.fft.fft2输出

解释numpy.fft.fft2输出
EN

Stack Overflow用户
提问于 2014-01-26 11:33:55
回答 1查看 15K关注 0票数 9

我的目标是得到一幅图像的空间频率的图,就像在上面做傅里叶变换一样。我不关心频率f在特征图像上的位置;我只想要一个图形,它告诉我我拥有的每一个频率中有多少(一个频带的振幅可以用与那个频率的对比之和来表示)。

我正试图通过numpy.fft.fft2函数来实现这一点。

下面是一个描述我的用例的极小例子的链接。

结果显示,frequencies[:30,:30]的值非常大,其中绝对最高的值是frequencies[0,0]。我怎么解释这个?

  • 每个值的振幅到底代表什么?
  • 这是什么意思,我的最高值是在frequency[0,0],什么是0 Hz频率?
  • 我是否可以以某种方式将这些值存储起来,使我的频谱与方向无关?
EN

回答 1

Stack Overflow用户

发布于 2014-01-26 13:39:33

freq有几个非常大的值,还有很多小值。你可以通过密谋看到这一点

代码语言:javascript
复制
plt.hist(freq.ravel(), bins=100)

(见下文)所以,当你用

代码语言:javascript
复制
ax1.imshow(freq, interpolation="none")

Matplotlib使用freq.min()作为颜色范围内的最低值(默认为蓝色),使用freq.max()作为颜色范围内的最高值(默认为红色)。由于freq中几乎所有的值都接近蓝色端,所以整个图看起来都是蓝色的。

您可以通过重新标度freq中的值,从而使低值在颜色范围内得到更广泛的分布,从而获得更多的信息。

例如,您可以通过使用log of freq来获得更好的值分布。(您可能不想丢弃最高的值,因为它们对应于具有最高功率的频率。)

代码语言:javascript
复制
import matplotlib as ml
import matplotlib.pyplot as plt
import numpy as np
import Image
file_path = "data"
image = np.asarray(Image.open(file_path).convert('L'))
freq = np.fft.fft2(image)
freq = np.abs(freq)

fig, ax = plt.subplots(nrows=2, ncols=2, figsize=(14, 6))
ax[0,0].hist(freq.ravel(), bins=100)
ax[0,0].set_title('hist(freq)')
ax[0,1].hist(np.log(freq).ravel(), bins=100)
ax[0,1].set_title('hist(log(freq))')
ax[1,0].imshow(np.log(freq), interpolation="none")
ax[1,0].set_title('log(freq)')
ax[1,1].imshow(image, interpolation="none")
plt.show()

来自医生们

输出,类似于fft,包含在转换轴的低阶角上的零频率项,

因此,freq[0,0]是“零频率”术语。换句话说,它是离散傅里叶变换中的常量。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21362843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档