The*_*era 9 python numpy fft frequency-distribution
我的目标是获得一个具有图像空间频率的图 - 有点像对它进行傅里叶变换.我不关心频率为f的特征图像上的位置(例如); 我想要一个图形告诉我每个频率有多少(频带的幅度可以用与该频率的对比度的总和来表示).
我试图通过该numpy.fft.fft2功能来做到这一点.
这是一个描述我的用例的最小示例的链接.
事实证明,我只得到明显更大的值frequencies[:30,:30],其中绝对最高值是frequencies[0,0].我怎么解释这个?
frequency[0,0]什么是0 Hz频率是什么意思?unu*_*tbu 11
freq有一些非常大的值,以及许多小值.你可以通过绘图来看到
plt.hist(freq.ravel(), bins=100)
Run Code Online (Sandbox Code Playgroud)
(见下文.)所以,当你使用时
ax1.imshow(freq, interpolation="none")
Run Code Online (Sandbox Code Playgroud)
Matplotlib freq.min()用作颜色范围中的最低值(默认为蓝色),并freq.max()作为颜色范围中的最高值(默认情况下为红色).由于几乎所有的值freq都在蓝色端附近,因此整个情节看起来是蓝色的.
您可以通过重新调整值来获得更丰富的信息,freq以便在颜色范围内更广泛地分布低值.
例如,你可以通过采取获得价值更好地分配log的freq.(您可能不想丢弃最高值,因为它们对应于具有最高功率的频率.)
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()
Run Code Online (Sandbox Code Playgroud)

来自文档:
类似于fft的输出包含变换轴的低阶拐角处的零频率项,
因此,freq[0,0]是"零频率"术语.换句话说,它是离散傅立叶变换中的常数项.
| 归档时间: |
|
| 查看次数: |
10979 次 |
| 最近记录: |