【发布时间】:2016-07-08 08:55:06
【问题描述】:
我一直在做一些使用 2D Scipy FFT 去卷积图像的工作。然而,即使 RGB 值是正确的,Matplotlib 也会无缘无故地反转生成的 IFFT 数组的配色方案。
import numpy as np
from scipy import fftpack
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
image = mpimg.imread("C:/Users/-----/Desktop/image.jpg")
freq = fftpack.fft2(image)
IFFT = fftpack.ifft2(freq)
IFFT = IFFT.astype('float32')
plt.figure(1)
plt.imshow(image)
plt.figure(2)
plt.imshow(IFFT)
plt.show()
根据 numpy.array_equal,IFFT 数组和图像数组相等,但第二个图形的颜色图总是反转。请参阅所附图像。这些数组实际上是相同的,并且没有指定其他颜色图,但我不得不使用以下方式手动反转所有内容:
for i in range(0, freq.shape[1]):
for j in range (0, freq.shape[0]):
for k in range(0,3):
freq[j,i,k] = 255-freq[j,i,k]
我想知道 astype 转换为 float32(或更早的 uint32)是否会改变某些东西,但由于数组是相同的,我不知道。
有什么想法吗?我还想弄清楚如何反转整个 cmap,如果这比手动从数组中的每个条目中减去 255 更有效。
【问题讨论】:
-
ifft2的结果是虚构的吗?如果是这样,请不要投射它并尝试绘制
IFFT的幅度(绝对值)。 -
一些 RGB 值确实具有虚部,但即使使用 np.absolute 而不是类型转换,颜色仍然会反转。不过我没有考虑过,谢谢。一个奇怪的问题。
标签: python numpy matplotlib scipy fft