Fft代码:解释numpy.fft.fft2输出

我的目标是获得具有图像空间频率的图-就像对其进行傅立叶变换一样。我不在乎频率为 f 的特征在图像上的位置(例如);我只想有一个图形,告诉我每个频率有多少(频带的幅度可以用与该频率的对比度之和表示)。

我试图通过numpy.fft.fft2函数来做到这一点。

这里是一个链接到minimal example描绘我的用例。

事实证明,我只得到明显更大的值frequencies[:30,:30],其中绝对最高值是frequencies[0,0]

每个值的振幅到底代表什么?

我的最高值在frequency[0,0]什么是0 Hz频率是什么意思?

我可以以某种方式让我的频谱是方向不可知的值?

13

freq有几个非常大的值,还有很多小的值。您可以通过绘制

plt.hist(freq.ravel(), bins=100)

(见下文)所以,当你使用

ax1.imshow(freq, interpolation="none")

Matplotlib 使用freq.min()作为颜色范围内的最低值(默认为蓝色),并使用freq.max()作为颜色范围内的最高值(默认为红色)。

您可以通过重新缩放freq中的值来获得更多信息图,以便低值更广泛地分布在颜色范围上。

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

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()

enter image description here

Fromthe docs:

输出类似于 fft,包含变换轴低阶角中的零频率项,

因此,freq[0,0]是“零频率”项。换句话说,它是discrete Fourier Transform中的常数项。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(792)
Pandas打开csv:如何用熊猫数据框打开 csv文件(open dataframe python)
上一篇
Unity hub:关于UnityHub的协助
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(77条)