gpt4 book ai didi

python - Matplotlib imshow 反转二维 IFFT 数组的颜色

转载 作者:太空宇宙 更新时间:2023-11-03 12:57:18 27 4
gpt4 key购买 nike

我一直在做一些使用 2D Scipy FFT 对图像进行反卷积的工作。然而,Matplotlib 无缘无故地反转了生成的 IFFT 数组的配色方案,即使 RGB 值是正确的。

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)是否会改变某些东西,但由于数组是相同的,所以我不知道。

有什么想法吗?如果从数组中的每个条目中手动减去 255 是一种更有效的替代方法,我还想弄清楚如何反转整个 cmap。

First image Second image

最佳答案

plt.imshow() 需要整数。

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

在我的例子中,当查看“正确”数组(即颜色正确显示的数组)中的整数类型时,我得到:类“numpy.uint8”

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

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

image = image.astype(np.uint8)

关于python - Matplotlib imshow 反转二维 IFFT 数组的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36137980/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com