Page 1 - Praktikum 2.ipynb - Colab
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()
   1   2   3   4   5   6