keras 如何在快速傅立叶变换信号中转换图像?

nqwrtyyt  于 2022-11-24  发布在  其他
关注(0)|答案(2)|浏览(195)

我在尝试将图像转换成快速傅立叶变换信号时,使用了下面的代码:

fake_A1 = tf.signal.fft2d(fake_A1)

其中输入图像类型为:〈class 'numpy.ndarray'〉但我得到以下错误:

tensorflow.python.framework.errors_impl.InvalidArgumentError: Value for attr 'Tcomplex' of float is not in the list of allowed values: complex64, complex128
; NodeDef: {{node FFT2D}}; Op<name=FFT2D; signature=input:Tcomplex -> output:Tcomplex; attr=Tcomplex:type,default=DT_COMPLEX64,allowed=[DT_COMPLEX64, DT_COMPLEX128]> [Op:FFT2D]

我该怎么解决呢?

yr9zkbsy

yr9zkbsy1#

P.S.:如果你想做编辑,那么就在你的问题上做,而不是作为答案。
现在进入正题:图像的2D FFT。首先,图像具有以下形状:

image.shape = (3,rows,columns)

其中3代表3个2维矩阵,对应于RGB。因此,要执行2D FFT,我们首先需要通过将其转换为灰度级来将其平坦化。我在这里找到了一个关于ThePythonCodingBook的有用教程。我将在这里添加用于TL:DR目的的代码。

import matplotlib.pyplot as plt
image_filename = "Earth.png"
# Read and process image
image = plt.imread(image_filename)
image = image[:, :, :3].mean(axis=2)  # Convert to grayscale
print(image.shape)
plt.set_cmap("gray")
plt.imshow(image)
plt.axis("off")
plt.show()

import numpy as np
import matplotlib.pyplot as plt
image_filename = "Earth.png"
def calculate_2dft(input):
    ft = np.fft.ifftshift(input)
    ft = np.fft.fft2(ft)
    return np.fft.fftshift(ft)
# Read and process image
image = plt.imread(image_filename)
image = image[:, :, :3].mean(axis=2)  # Convert to grayscale
plt.set_cmap("gray")
ft = calculate_2dft(image)
plt.subplot(121)
plt.imshow(image)
plt.title('Grayscale Image')
plt.axis("off")
plt.subplot(122)
plt.imshow(np.log(abs(ft)))
plt.title("2D FFT")
plt.axis("off")
plt.show()

我还将添加灰度图和FFT图。

希望这对你有帮助。

7jmck4yq

7jmck4yq2#

代替tensorflow 转换器,我们可以替换:fake_A1 = tf.signal.fft2d(fake_A1)转换为以下代码:

fake_A1 = np.fft.fft2(fake_A1)

相关问题