绘制图像的 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的主要内容,如果未能解决你的问题,请参考以下文章

用 C++ 绘制图像的光谱(fftw,OpenCV)

Qt 2D绘图之三:绘制文字路径图像复合模式

Java Graphics2D - 绘制具有渐变不透明度的图像

Direct2D 第5篇 绘制图像

在图像上绘制 Graphics2D 形状

基于OpenGL编写一个简易的2D渲染框架-04 绘制图片