Pertemuan ke 5

Pertemuan ke 5

Memahami Tujuan Perbaikan Citra (Image Enhancement) dalam Pengolahan Citra Digital

Modul Pertemuan 5: Perbaikan Kualitas Citra & Filter Spasial
⛶ Buka Presentasi Full Screen (Tab Baru)
Program Studi Sistem dan Teknologi Informasi

Perbaikan Kualitas Citra & Filter Spasial

Mata Kuliah: Pengolahan Citra Digital — Pertemuan 5

By Alimin, M.Kom
Spatial Filtering & Image Enhancement
Fokus Bahasan: Memahami operasi ketetanggaan piksel (konvolusi spasial), pemodelan derau impulsif Salt & Pepper, filter pelembutan (Mean & Gaussian), filter pereduksi derau non-linier (Median), penajaman tepi (Laplacian & Unsharp Masking), serta evaluasi kualitas rekonstruksi citra melalui metrik objektif MSE dan PSNR.
By Alimin, M.Kom | PCD P05 1 / 16 Slide Berikutnya →
Capaian Pembelajaran (Sub-CPMK 5)

Sasaran Kompetensi Pertemuan 5

  • Menjelaskan konsep matematis Konvolusi Spasial 2D dan manipulasi ketetanggaan piksel lokal.
  • Mengidentifikasi karakteristik derau impulsif acak Salt & Pepper Noise pada citra digital.
  • Membandingkan karakteristik filter pelembutan linier: Mean Filter (Box Blur) vs Gaussian Blur.
  • Membuktikan keunggulan filter statistik non-linier Median Filter dalam merestorasi derau impulsif tanpa mengaburkan tepi objek.
  • Menerapkan teknik penajaman citra (*image sharpening*) menggunakan Kernel Laplacian dan Unsharp Masking.
  • Mengukur kualitas restorasi citra secara kuantitatif melalui formulasi MSE (Mean Squared Error) dan PSNR (Peak Signal-to-Noise Ratio).

Pemahaman mendalam mengenai domain spasial dan filtering lokal ini adalah fondasi krusial sebelum memasuki topik deteksi tepi (*edge detection*), transformasi frekuensi Fourier, dan segmentasi kontur.

Teori Domain Spasial

Konsep Dasar Konvolusi Spasial 2D

Berbeda dari operasi titik (pertemuan 4) yang memproses piksel secara mandiri, filter spasial bekerja pada lingkungan tetangga piksel (*neighborhood*) menggunakan matriks bobot berukuran ganjil ($3 \times 3, 5 \times 5$) yang disebut Kernel / Mask:

g(x, y) = ∑s=-a..a ∑t=-b..b w(s, t) × f(x + s, y + t)
w(s, t) = koefisien bobot kernel | f(x, y) = piksel asal | g(x, y) = nilai piksel pusat hasil konvolusi
1. Penjajaran (Alignment)
Pusat kernel digeser berurutan menutupi lingkungan tetangga piksel target.
2. Perkalian Elemen (Dot Product)
Setiap piksel di bawah kernel dikalikan dengan koefisien bobot kernel yang bersesuaian.
3. Akumulasi & Penggantian
Seluruh hasil perkalian dijumlahkan dan dijadikan nilai baru piksel pusat pada citra hasil.
Pemodelan Derau Impulsif

Karakteristik Salt & Pepper Noise

Derau impulsif (*Salt and Pepper Noise*) disebabkan oleh gangguan transmisi sinyal digital yang korup atau sensor piksel kamera yang cacat (*dead/hot pixels*):

Salt Noise (Garam) = 255

Bintik-bintik putih terang acak dengan intensitas maksimum 255. Muncul akibat lonjakan sinyal tegangan tinggi pada saat proses konversi analog ke digital.

Pepper Noise (Merica) = 0

Bintik-bintik hitam pekat acak dengan intensitas minimum 0. Muncul akibat hilangnya sinyal bit data secara mendadak saat transmisi paket.

Tantangan Pemulihan: Karena derau ini memiliki nilai ekstrem (0 dan 255), filter linier rata-rata (*Mean Filter*) akan gagal karena ikut menjumlahkan angka ekstrem tersebut, menyebabkan derau menyebar menjadi bercak buram.
Bedah Source Code Python

Algoritma Pembangkitan Noise (add_sp_noise)

Mekanisme pembangkitan koordinat acak derau menggunakan NumPy:

def add_sp_noise(self):
    if self.cv_img is None:
        return
    noisy = self.cv_img.copy()
    h, w, c = noisy.shape
    
    # 1. Injeksi Titik Garam Putih (2% dari total populasi piksel)
    num_salt = np.ceil(0.02 * h * w)
    coords = [np.random.randint(0, i - 1, int(num_salt)) for i in (h, w)]
    noisy[tuple(coords)] = 255
    
    # 2. Injeksi Titik Merica Hitam (2% dari total populasi piksel)
    num_pepper = np.ceil(0.02 * h * w)
    coords = [np.random.randint(0, i - 1, int(num_pepper)) for i in (h, w)]
    noisy[tuple(coords)] = 0
    
    self.noisy_img = noisy
    self.render(self.noisy_img, self.lbl_left)
    self.apply_filter()
np.random.randint(0, i - 1, int(num_salt)) menghasilkan vektor indeks baris dan kolom acak secara serempak. Penggunaan pengindeksan tuple array noisy[tuple(coords)] memungkinkan perubahan intensitas ribuan piksel secara instan tanpa membutuhkan loop Python yang lambat.
Filter Spasial Linier

Smoothing: Mean Filter vs Gaussian Blur

Filter pelembutan (*low-pass filter*) bertujuan menekan fluktuasi transisi intensitas cepat untuk mereduksi derau kontinu:

Mean Filter (Box Blur)
cv2.blur(self.noisy_img, (5, 5))

Memberikan bobot yang sama rata ($1/25$) pada setiap piksel dalam jendela $5 \times 5$. Seluruh piksel dirata-ratakan secara matematis: $$g(x, y) = \frac{1}{25} \sum f(x+s, y+t)$$ Kelemahan: Garis batas tepi objek (*edges*) menjadi sangat kabur dan blur.

Gaussian Blur
cv2.GaussianBlur(self.noisy_img, (5, 5), 1.5)

Memberikan bobot lonceng Gaussian berpusat di tengah. Piksel yang lebih dekat ke pusat mendapat pengaruh lebih besar daripada piksel di tepi: $$G(x, y) = \frac{1}{2\pi\sigma^2} e^{-\frac{x^2+y^2}{2\sigma^2}}$$ Menghasilkan pelembutan yang lebih halus dan menjaga bentuk kontur lebih baik daripada Mean Filter.

Filter Non-Linier Terbaik

Median Filter: Jawaban Derau Salt & Pepper

Median filter adalah filter statistik peringkat (*order-statistic filter*) non-linier. Alih-alih merata-ratakan, filter ini mengurutkan nilai piksel tetangga lalu mengambil nilai tengahnya:

Simulasi Lingkungan Piksel 3 × 3 yang Terkena Salt Noise (255):
Piksel Asal di Jendela Kernel : [120, 118, 122, 119, 255, 121, 124, 117, 123]
Setelah Diurutkan (*Ascending*): [117, 118, 119, 120, 121, 122, 123, 124, 255]
Nilai Median Terpilih = 121 (Titik derau 255 tereliminasi total ke urutan terujung!)
Keunggulan Utama: Median filter mampu menghilangkan 100% bintik garam-merica secara bersih tanpa merusak ketajaman garis tepi objek, menjadikannya pilihan standar industri untuk restorasi derau impulsif.
Filter Penajaman Tepi

Sharpening: Laplacian Kernel & Unsharp Masking

Filter penajaman (*high-pass filter*) menonjolkan detail halus dan transisi kontur dengan mengekstrak turunan spasial citra:

1. Kernel Laplacian (Turunan Ke-2)
kernel = np.array([[ 0, -1,  0],
                   [-1,  5, -1],
                   [ 0, -1,  0]])
res = cv2.filter2D(src, -1, kernel)

Angka 5 di pusat mempertahankan citra asli, sementara -1 di sekelilingnya mendeteksi selisih turunan kedua. Hasilnya: tepi objek menjadi jauh lebih tegas dan tajam.

2. Unsharp Masking (Fotografi)
blurred = cv2.GaussianBlur(src, (5, 5), 2.0)
# Formula: Asli + Bobot * (Asli - Blur)
res = cv2.addWeighted(src, 1.5, blurred, -0.5, 0)

Mengurangi citra asli dengan versi kaburnya untuk membentuk masker tepi frekuensi tinggi, lalu menambahkannya kembali ke citra asli untuk menciptakan efek penajaman alami.

Evaluasi Kuantitatif Citra

Metrik Kualitas: MSE & PSNR (Peak Signal-to-Noise Ratio)

Kualitas hasil filter tidak cukup dinilai hanya dengan penglihatan mata manusia (*subjektif*). Diperlukan pengukuran objektif menggunakan metrik matematis:

Mean Squared Error (MSE)
MSE = (1/MN) ∑ [I(x,y) - K(x,y)]²

Mengukur rata-rata kuadrat selisih error antara citra referensi asli dan citra hasil olahan. Semakin kecil nilai MSE (→ 0), semakin identik citranya.

Peak Signal-to-Noise Ratio (PSNR)
PSNR = 20 × log10( 255 / √MSE )

Dinyatakan dalam satuan desibel (dB). Semakin tinggi nilai PSNR (> 30 dB), kualitas citra hasil restorasi dinilai sangat prima dan mendekati aslinya.

# Sintaks Program:
mse = np.mean((self.cv_img.astype(float) - res.astype(float)) ** 2)
psnr = 20 * np.log10(255.0 / np.sqrt(mse)) if mse != 0 else float('inf')
Arsitektur Perangkat Lunak GUI

Struktur Kelas: ImageEnhancementApp

Inisialisasi aplikasi Tkinter dan manajemen state gambar:

class ImageEnhancementApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Pertemuan 5: Perbaikan Kualitas Citra & Filter Spasial")
        self.root.geometry("980x640")
        self.root.configure(bg="#f8fafc")

        self.cv_img = None      # Menampung citra asli (ground truth)
        self.noisy_img = None   # Menampung citra yang terkontaminasi noise
        self.setup_ui()
Pemisahan antara self.cv_img dan self.noisy_img sangat krusial agar aplikasi memiliki citra acuan asli (*ground truth*) saat menghitung skor PSNR terhadap hasil filter.
Bedah Source Code Python

Eksekusi Filter Spasial (apply_filter)

Percabangan seleksi operasi filter berbasis string combobox:

mode = self.filter_var.get()
if mode == "Mean Filter (Blur 5x5)":
    res = cv2.blur(self.noisy_img, (5, 5))
elif mode == "Gaussian Blur (Smoothing)":
    res = cv2.GaussianBlur(self.noisy_img, (5, 5), 1.5)
elif mode == "Median Filter (Noise Removal)":
    res = cv2.medianBlur(self.noisy_img, 5)
elif mode == "Sharpening (Laplacian Kernel)":
    kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]])
    res = cv2.filter2D(self.noisy_img, -1, kernel)
elif mode == "Unsharp Masking":
    blurred = cv2.GaussianBlur(self.noisy_img, (5, 5), 2.0)
    res = cv2.addWeighted(self.noisy_img, 1.5, blurred, -0.5, 0)
Parameter -1 pada cv2.filter2D menyatakan bahwa kedalaman citra keluaran (output depth) akan dipertahankan persis sama dengan kedalaman citra asal (CV_8U).
Antarmuka Interaktif

Visualisasi Dual-Panel Antarmuka GUI

Antarmuka program membagi layar menjadi dua panel sinkron untuk perbandingan visual instan:

Panel Kiri: Citra Terkontaminasi
Citra Asli / Injeksi Salt & Pepper Noise
Panel Kanan: Hasil Restorasi Filter
Keluaran Filter Spasial + Skor PSNR (dB)
Fungsi self.render() secara adaptif menjaga rasio gambar (*aspect ratio preservation*) agar resolusi gambar berukuran besar tidak meluap ke luar jendela GUI Tkinter.
Tugas Praktikum Kelompok (Bagian 1)

Soal 1: Rancang Bangun Program GUI

Ketentuan Pengerjaan:

Mahasiswa dalam kelompok wajib membangun program GUI Python secara mandiri dengan mengimplementasikan operasi filter spasial dan evaluasi metrik PSNR. Dilarang keras melakukan plagiasi tanpa pemahaman konsep.

  1. Membangun Antarmuka: Bangun aplikasi GUI Python (menggunakan tkinter) yang memuat tombol Load Citra, Add Salt & Pepper Noise, Combobox filter spasial, panel ganda, dan label nilai metrik PSNR/MSE.
  2. Kalkulasi Dinamis: Pastikan saat jenis filter dipilih, citra hasil langsung ditampilkan dan skor PSNR otomatis dikomputasi terhadap citra asli sebelum diberi noise.
  3. Tantangan Modifikasi (Wajib): Tambahkan minimal 2 fitur pengembangan baru, misalnya: slider untuk mengatur persentase noise Salt & Pepper secara dinamis (1% s.d. 10%) dan penambahan filter spasial baru seperti Bilateral Filter (cv2.bilateralFilter) yang mampu menghaluskan citra sekaligus mempertahankan garis tepi tajam.
Tugas Praktikum Kelompok (Bagian 2)

Soal 2: Bedah Deklarasi Program

Jelaskan secara mendalam fungsi deklarasi sintaksis berikut di dalam laporan kelompok Anda:

noisy[tuple(coords)] = 255

Jelaskan teknik manipulasi multi-dimensi NumPy di atas dalam menginjeksi derau secara serempak tanpa iterasi loop!

cv2.addWeighted(self.noisy_img, 1.5, blurred, -0.5, 0)

Jelaskan prinsip matematika di balik bobot 1.5 dan -0.5 dalam menghasilkan efek unsharp masking!

psnr = 20 * np.log10(255.0 / np.sqrt(mse))

Jelaskan mengapa angka 255.0 digunakan sebagai pembilang dan mengapa fungsi logaritma basis 10 digunakan dalam metrik PSNR!

Tugas Praktikum Kelompok (Bagian 3)

Soal 3: Pengamatan Perbedaan Visual & Metrik

Lakukan pengujian langsung pada aplikasi GUI Anda dan jawab pertanyaan analitis berikut di laporan:

1. Komparasi Skor PSNR: Mean vs Median Filter

Setelah menginjeksi derau Salt & Pepper, bandingkan skor PSNR antara Mean Filter dan Median Filter! Catat selisih nilai dB keduanya dan jelaskan mengapa Median Filter memiliki skor PSNR yang jauh lebih tinggi!

2. Efek Penajaman pada Citra yang Mengandung Noise

Apa yang terjadi jika Anda memilih Sharpening (Laplacian Kernel) secara langsung pada citra yang masih terkontaminasi Salt & Pepper noise? Mengapa operasi penajaman selalu disarankan dilakukan setelah tahap pereduksian derau (*denoising*)?

Evaluasi Akademik & Tugas Kelompok

Ketentuan Pengumpulan Tugas & Rubrik Penilaian

Anggota 1: Developer GUI
Membangun layout antarmuka Python, mengimplementasikan algoritma filter, metrik PSNR, dan menambahkan 2 fitur baru.
Anggota 2: Penulis Laporan
Menyusun dokumen laporan format PDF, membedah deklarasi baris kode program, dan menulis analisis perbandingan metrik.
Anggota 3: Video & Demo
Merekam demonstrasi interaktif software, memaparkan perbandingan PSNR antar-filter, serta mengunggah ke YouTube.
Komponen Penilaian Bobot Indikator Capaian Mutu
1. Project Coding GUI 30% Program berjalan lancar tanpa galat, kalkulasi PSNR akurat terhadap citra acuan, dan sukses menambahkan minimal 2 fitur baru.
2. Laporan & Bedah Kode 40% Ketepatan menguraikan logika konvolusi spasial, formula matematis MSE/PSNR, serta analisis komparasi filter secara mendalam.
3. Video Presentasi Demo 30% Kualitas audio visual rekaman layar jernih, demonstrasi software interaktif, dan diunggah ke kanal YouTube kelompok.
Pengumpulan: File ZIP (Folder Source Code Python + Laporan PDF berisi link video YouTube) dikumpulkan melalui LMS kampus sebelum batas waktu berakhir.

Dalam dunia Pengolahan Citra Digital, salah satu tahap awal yang paling krusial adalah Perbaikan Citra (Image Enhancement). Secara sederhana, proses ini bertujuan untuk memanipulasi atau mengubah karakteristik suatu citra visual agar hasilnya lebih sesuai untuk kebutuhan aplikasi tertentu dibandingkan dengan citra aslinya.

Proses perbaikan citra pada dasarnya bersifat subjektif. Kriteria "bagus" atau "jelasnya" sebuah citra sangat bergantung pada siapa atau apa yang akan mengamati dan menganalisis citra tersebut. Secara umum, tujuan utama dari perbaikan citra dibagi menjadi dua orientasi besar:

1. Memaksimalkan Persepsi Visual Manusia (Human Perception)

Pengamatan manusia sangat sensitif terhadap kontras, detail, dan keberadaan noise (derau). Pada orientasi ini, perbaikan citra berfokus pada peningkatan estetika dan kenyamanan visual bagi pengamat:

  • Meningkatkan Kontras dan Kecerahan (Contrast & Brightness Adjustment): Memperjelas detail pada objek yang terlalu gelap (underexposed) atau terlalu terang (overexposed) dengan cara meratakan rentang intensitas piksel.

  • Reduksi Derau (Noise Reduction): Menghilangkan bintik-bintik acak atau gangguan visual akibat transmisi sinyal dan keterbatasan sensor kamera.

  • Penajaman Detail dan Tepi (Sharpening & Edge Enhancement): Mempertegas batas-batas antar objek agar struktur penting pada gambar terlihat lebih fokus dan tajam.

  • Koreksi Warna (Color Restoration): Memperbaiki distorsi warna agar tampak lebih natural atau menonjolkan spektrum warna tertentu.

2. Memudahkan Pemrosesan Otomatis oleh Mesin (Machine Perception)

Tidak hanya untuk mata manusia, perbaikan citra sering kali digunakan sebagai tahap pra-pemrosesan (preprocessing) agar data citra siap dianalisis oleh komputer atau algoritma kecerdasan buatan (Machine Learning):

  • Penajaman Fitur Khusus (Feature Extraction Readiness): Memperjelas pola spesifik—seperti garis pantai pada citra satelit, retakan mikro pada material industri, atau pembuluh darah pada citra medis.

  • Binarisasi dan Ambang Batas (Thresholding): Mengubah citra ke format hitam-putih untuk memisahkan objek utama secara tegas dari latar belakangnya (background).

  • Peningkatan Akurasi Analisis: Memastikan fitur-fitur penting dalam gambar terisolasi dengan baik sehingga algoritma segmentasi, deteksi objek, dan klasifikasi dapat bekerja secara optimal.

Aplikasi Nyata di Berbagai Industri

Penerapan Image Enhancement dapat kita temui di berbagai sektor penting:

  1. Dunia Medis: Memperjelas hasil pemindaian X-Ray, CT-Scan, dan MRI untuk membantu dokter dalam mendiagnosis penyakit secara akurat.

  2. Geospasial & Satelit: Memperjelas dokumentasi pemetaan pemukaan bumi, analisis vegetasi, dan pengamatan pola cuaca.

  3. Keamanan & Forensik: Memperjelas rekaman CCTV yang kabur untuk mengidentifikasi wajah atau plat nomor kendaraan.

Catatan Penting: Perbaikan citra (Enhancement) berbeda dengan Restorasi Citra (Restoration). Perbaikan citra menekankan penampakan fitur visual tanpa perlu memodelkan proses kerusakan citra secara matematis, sedangkan restorasi berfokus pada mengembalikan citra ke kondisi semula berdasarkan model matematis kerusakan fisiknya.