ChatGPTでプログラム生成⑩ Python FFT

ChatGPTでプログラム生成します。画像をFFTし周波数特性を観察するプログラムとIFFTし、元に戻ることを確認するプログラムをChatGPTを利用して生成します。

ChatGPTへ質問

以下の質問をChatGPTへ行います。

Pythonで画像をFFTしたい

この一つの質問を行うだけでソースコードが生成されます。

ChatGPTが生成したソースコード

以降に、ChatGPTが生成したソースコードを示します。

import cv2
import numpy as np
from matplotlib import pyplot as plt

# 画像をグレースケールで読み込む
image = cv2.imread('input_image.jpg', 0)

# 2次元FFTを実行する
f = np.fft.fft2(image)

# 結果のシフト
fshift = np.fft.fftshift(f)

# 絶対値を取り、対数変換する(スペクトルの表示のため)
magnitude_spectrum = 20 * np.log(np.abs(fshift))

# オリジナル画像とFFT結果の表示
plt.subplot(121), plt.imshow(image, cmap='gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(magnitude_spectrum, cmap='gray')
plt.title('FFT Result'), plt.xticks([]), plt.yticks([])
plt.show()

これをfft.pyと名付け、テキストファイルで格納します。エンコードUTF-8としてください。

実行

このプログラムを実行します。

python fft.py


ChatGPTを利用すれば、たった一行の質問でコーナー検出のプログラムが生成されます。

質問を変更

質問を以下のように変更してみましょう。

Pythonで画像をFFTし、さらにIFFTし元に戻したい

質問変更後にChatGPTが生成したソースコード

以降に、ChatGPTが生成したソースコードを示します。

import cv2
import numpy as np
from matplotlib import pyplot as plt

# 画像をグレースケールで読み込む
image = cv2.imread('input_image.jpg', 0)

# 2次元FFTを実行する
f = np.fft.fft2(image)

# 結果のシフト
fshift = np.fft.fftshift(f)

# 逆シフト
f_ishift = np.fft.ifftshift(fshift)

# 逆FFTを実行する
img_back = np.fft.ifft2(f_ishift)
img_back = np.abs(img_back)

# オリジナル画像と復元された画像の表示
plt.subplot(121), plt.imshow(image, cmap='gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(img_back, cmap='gray')
plt.title('Reconstructed Image'), plt.xticks([]), plt.yticks([])
plt.show()

実行

このプログラムを実行します。

すごいなChatGPT!(ChatGPT 3.5を利用しました。)