[英]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 圖。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.