绘制图像的 2D FFT
Posted
技术标签:
【中文标题】绘制图像的 2D FFT【英文标题】:Plot the 2D FFT of an image 【发布时间】:2016-11-14 22:01:22 【问题描述】:我正在尝试:
from scipy import fftpack, ndimage
import matplotlib.pyplot as plt
image = ndimage.imread('image2.jpg', flatten=True) # flatten=True gives a greyscale image
fft2 = fftpack.fft2(image)
plt.imshow(fft2)
plt.show()
但我得到TypeError: Image data can not convert to float
。
如何?
【问题讨论】:
我知道物理学...图像的 FFT 很复杂,但关于原点对称。通常显示为图像的是功率谱:复数变换的模平方。我不知道scipy
,但我会首先在索引中寻找“功率谱”。注意如果你想稍后反转它,请保留变换,mod-square/PS 是不可反转的。
【参考方案1】:
任何fft的结果通常由复数组成。这就是为什么你不能以这种方式绘制它。根据您要查找的内容,您可以从查看绝对值开始
plt.imshow(abs(fft2))
【讨论】:
谢谢!当然,我不知道为什么我忘了带abs(...)
...对不起!别的,这是输入:image2.jpg。为什么the output 是纯蓝色的?我在 FFT 输出中看不到任何内容...
比例不好,因为您几乎没有强分量(例如 0,0 DC 分量)。尝试使用对数刻度plt.imshow(np.log10(abs(fft2)))
已解决plt.imshow(20*np.log10(abs(fft2)))
...这是我在 2D FFT 中迈出的第一步(经过多年的音频 1D FFT + STFT 工作)... :) 知道如何删除水平线this image 通过将某些 2DFFT 箱归零然后逆 FFT?
(这是我最初的目标:去除图片的水平线或接近水平线)
这很棘手。清空 fft 组件可能无法按您的预期工作......我建议您在计算机视觉论坛上尝试。以上是关于绘制图像的 2D FFT的主要内容,如果未能解决你的问题,请参考以下文章