簡體   English   中英

如何在快速傅立葉變換信號中轉換圖像?

[英]How to convert image in fast fourier transform signal?

我正在嘗試將圖像轉換為快速傅立葉變換信號並使用以下代碼和平:

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]

我怎樣才能讓它解決?

我們可以代替 tensorflow 轉換器: fake_A1 = tf.signal.fft2d(fake_A1) 替換為以下適用於我的代碼:

fake_A1 = np.fft.fft2(fake_A1) 

PS:如果您想進行編輯,請針對您的問題進行編輯,而不是作為答案。

現在進入主題:圖像的 2D FFT。 首先,圖像具有形狀:

image.shape = (3,rows,columns)

其中 3 代表 3 個二維矩陣,對應 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 圖。

灰度圖和 FFT 圖

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM