Page 1 - 220533600710_Rivan Adi Kurniawan_Praktikum 2.ipynb - Colab_Neat
P. 1
Transformasi Fourier 2D
Percobaan 1
!pip install opencv-python-headless numpy pillow
Requirement already satisfied: opencv-python-headless in /usr/local/lib/python3.12/dist-packages (4.12.0.88)
Requirement already satisfied: numpy in /usr/local/lib/python3.12/dist-packages (2.0.2)
Requirement already satisfied: pillow in /usr/local/lib/python3.12/dist-packages (11.3.0)
!pip install opencv-python numpy matplotlib
Requirement already satisfied: opencv-python in /usr/local/lib/python3.12/dist-packages (4.12.0.88)
Requirement already satisfied: numpy in /usr/local/lib/python3.12/dist-packages (2.0.2)
Requirement already satisfied: matplotlib in /usr/local/lib/python3.12/dist-packages (3.10.0)
Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (1.3.3)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (4.60.0)
Requirement already satisfied: kiwisolver>=1.3.1 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (1.4.9)
Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (25.0)
Requirement already satisfied: pillow>=8 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (11.3.0)
Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (3.2.4)
Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.12/dist-packages (from matplotlib) (2.9.0.post
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.12/dist-packages (from python-dateutil>=2.7->matplotlib) (
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 1. Baca gambar grayscale (gunakan gambar kecil agar cepat, misalnya 64x64 atau 128x128)
img = cv2.imread("/content/content/grayscaleimage.jpeg", 0)
img = cv2.resize(img, (64, 64)) # resize agar komputasi tidak berat
M, N = img.shape
# 2. Hitung DFT 2D secara manual
F = np.zeros((M, N), dtype=complex)
for u in range(M):
for v in range(N):
sum_val = 0.0
for x in range(M):
for y in range(N):
e = np.exp(-2j * np.pi * ((u*x)/M + (v*y)/N))
sum_val += img[x, y] * e
F[u, v] = sum_val
# 3. Geser spektrum ke tengah
Fshift = np.fft.fftshift(F)
# 4. Magnitudo spektrum
magnitude_spectrum = 20 * np.log(np.abs(Fshift) + 1)
# 5. Rekonstruksi citra dengan inverse DFT
img_reconstructed = np.zeros((M, N), dtype=complex)
for x in range(M):
for y in range(N):
sum_val = 0.0
for u in range(M):
for v in range(N):
e = np.exp(2j * np.pi * ((u*x)/M + (v*y)/N))
sum_val += F[u, v] * e
img_reconstructed[x, y] = sum_val / (M * N)
# 6. Tampilkan hasil
plt.figure(figsize=(15,5))
plt.subplot(131), plt.imshow(img, cmap='gray'), plt.title("Gambar Asli")
plt.subplot(132), plt.imshow(magnitude_spectrum, cmap='gray'), plt.title("Spektrum Fourier (DFT 2D)")
plt.subplot(133), plt.imshow(img_reconstructed.real, cmap='gray'), plt.title("Hasil Rekonstruksi DFT")
plt.tight_layout()
plt.show()

