【问题标题】:Matplotlib imshow inverting colors of 2D IFFT arrayMatplotlib imshow 2D IFFT 数组的反转颜色
【发布时间】: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


【解决方案1】:

plt.imshow() 需要整数。

但是,我注意到即使两个整数数组看起来相同,但它们可能具有不同类型的整数。

在我的情况下,当查看“正确”数组(即颜色正确显示的那个)中的整数类型时,我得到: 类'numpy.uint8'

而在查看 plt.imshow() 中颜色反转的数组中的整数类型时,我得到: 类'numpy.int64'

我需要做的就是将数组值转换为 uint8:

image = image.astype(np.uint8)

【讨论】:

    【解决方案2】:

    一点也不。您正在处理 numpy 数组,因此您可以:

     freq = 255 - freq
    

    所以你的代码是:

    import numpy as np
    from scipy import fftpack
    import matplotlib.pyplot as plt
    import matplotlib.image as mpimg
    
    image = mpimg.imread("EGZ68.jpg")
    freq = fftpack.fft2(image)
    freq = 255 - freq  # HERE IS THE CHANGE
    IFFT = fftpack.ifft2(freq)
    IFFT = IFFT.astype('float32')
    
    plt.figure(1)
    plt.imshow(image)
    
    plt.figure(2)
    plt.imshow(IFFT)
    
    plt.show()
    

    虽然我不确定你为什么首先得到一个反转的颜色图。

    【讨论】:

      猜你喜欢
      • 2011-08-15
      • 1970-01-01
      • 2018-11-10
      • 1970-01-01
      • 2014-04-02
      • 2014-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多