Panduan belajar dari slide Agus Harjoko, bersumber dari Digital Image Processing (Gonzalez & Woods, ed. ke-4, Bab 3). Semua gambar di bawah dibuat dengan Python (NumPy + Matplotlib) memakai citra uji buatan sendiri, jadi bisa dilihat langsung efek tiap filter.
1. Apa itu spatial filtering? (slide 3-4)
Citra adalah matriks angka (intensitas). Filtering spasial artinya mengubah nilai tiap piksel berdasarkan nilai piksel itu dan tetangganya. "Spasial" berarti kita bekerja langsung pada piksel (posisi x,y), bukan pada frekuensi.
Alat utamanya: kernel (disebut juga mask, filter, atau window), yaitu matriks kecil (mis. 3×3) berisi koefisien/bobot.
Langkah kerja (untuk SETIAP piksel):
Letakkan pusat kernel di atas piksel (x,y).
Kalikan tiap koefisien kernel dengan piksel di bawahnya.
Jumlahkan semua hasil kali, hasilnya menjadi nilai baru piksel (x,y) pada citra keluaran.
Geser kernel ke piksel berikutnya, ulangi sampai semua piksel selesai.
Rumus 3×3: g(x,y) = Σ Σ w(s,t)·f(x+s, y+t) dengan s,t dari −1 sampai 1.
Kenapa origin kernel di tengah? Pada Gambar 3.34, origin citra ada di kiri atas, tetapi origin kernel di pusatnya. Dengan begitu indeks s,t berjalan simetris (−1,0,1), rumus jadi ringkas, dan hasil filter "menempel" tepat pada piksel yang sedang diproses. Karena itu ukuran kernel biasanya ganjil (3×3, 5×5, ...), supaya ada satu piksel pusat.
Linear vs non-linear: bila hasilnya hanya "kali lalu jumlah" seperti di atas, filternya linear (box, Gaussian, Laplacian, Sobel). Bila memakai operasi lain, misalnya urut lalu ambil nilai tengah, filternya non-linear (median).
Kritis: slide tidak membahas tepi citra. Di piksel pinggir, sebagian kernel "keluar" dari citra. Solusi umum: zero padding (isi 0, bisa membuat tepi menggelap), replicate (ulangi piksel tepi), atau reflect (cermin; dipakai pada gambar-gambar ini). Pilihan ini berpengaruh pada hasil di pinggir.
2. Korelasi dan konvolusi (slide 5)
Rumus
Arti
Korelasi
Σ w(s,t)·f(x+s, y+t)
Kernel dipakai apa adanya
Konvolusi
Σ w(s,t)·f(x−s, y−t)
Kernel diputar 180° dulu (tanda minus)
Intinya: konvolusi = korelasi dengan kernel yang dibalik (atas↔bawah dan kiri↔kanan). Jika kernel simetris (box, Gaussian, Laplacian), hasilnya identik. Bedanya baru terasa pada kernel tak simetris seperti Sobel (tandanya terbalik).
Kenapa ada dua? Konvolusi punya sifat matematis bagus: komutatif (w⋆f = f⋆w), asosiatif, dan cocok dengan teori frekuensi (konvolusi di spasial = perkalian di frekuensi). Korelasi lebih intuitif untuk template matching (mencari pola). Banyak library (termasuk cv2.filter2D) sebenarnya menghitung korelasi walau diberi nama "convolution".
3. Contoh kernel penghalus (slide 6 & 9)
Box 3×3 (×1/9)
1
1
1
1
1
1
1
1
1
Gaussian 3×3 (K=1, σ=1), ×1/4,8976
0.3679
0.6065
0.3679
0.6065
1.0000
0.6065
0.3679
0.6065
0.3679
Gaussian dari fungsi G(s,t) = K·exp(−(s²+t²)/(2σ²)). Cek: pusat s=t=0 → e⁰ = 1; samping → e^(−1/2) = 0,6065; sudut → e^(−1) = 0,3679. Jumlah seluruhnya 4,8976, maka dibagi 4,8976 supaya total bobot = 1.
Kenapa dinormalisasi (jumlah = 1)? Supaya kecerahan rata-rata tidak berubah. Kalau jumlah bobot 2, citra jadi 2× lebih terang; kalau 0,5, jadi gelap.
Bentuk kernel 1-D: box memberi bobot sama pada semua tetangga; Gaussian memberi bobot besar pada yang dekat dan kecil pada yang jauh.
Perhatikan: σ mengatur "lebar" lonceng. σ besar → blur kuat. Aturan praktis: ukuran kernel ≈ 6σ (±3σ menangkap ~99,7% bobot). Kernel yang lebih kecil dari itu "memotong" lonceng dan hasilnya kurang akurat.
4. Lowpass: penghalus (slide 7-10)
Lowpass meloloskan perubahan lambat (area rata) dan meredam perubahan cepat (tepi tajam, detail halus, noise). Hasilnya citra lebih buram dan noise berkurang.
4.1 Box filter (Gambar 3.39)
Makin besar kernel, makin kuat blur: objek kecil hilang, garis halus menyatu, tepi jadi lembut.
Kernel 3×3 : blur ringan. Kernel 21×21 : kotak kecil hampir lenyap.
Kegunaan: menghilangkan detail kecil yang tidak penting, atau menyatukan objek besar.
Kelemahan: tepi ikut buram. Box juga tidak mulus: karena bobot sama lalu tiba-tiba nol di luar kernel, hasilnya bisa meninggalkan artefak bentuk kotak.
4.2 Gaussian filter (Gambar 3.41-3.42)
Gaussian 43×43 σ=7 hasilnya mirip box 21×21, tetapi Gaussian lebih halus alami.
Slide menyatakan Gaussian 43×43 (σ=7) "sebanding" dengan box 21×21. Itu benar secara tingkat blur, tetapi sifatnya berbeda.
Kenapa Gaussian umumnya lebih disukai? (1) bobot menurun mulus sehingga tanpa artefak kotak, (2) isotropik (sama ke segala arah), (3) bisa dipisah menjadi dua filter 1-D (baris lalu kolom) sehingga jauh lebih cepat, (4) kuat secara teori (dasar scale-space).
5. Median filter (slide 11)
Pada setiap posisi, ambil semua piksel dalam jendela, urutkan, lalu pakai nilai tengahnya. Tidak ada koefisien, jadi ini filter non-linear.
Salt-and-pepper (titik putih/hitam ekstrem): Gaussian hanya menyebar noise jadi bercak abu; median menghapusnya dengan tepi tetap tajam.
Contoh hitungan satu piksel (ada 1 piksel noise bernilai 255)
Rata-rata dan Gaussian "terseret" ke atas oleh nilai 255 (hasil ±82), padahal tetangganya sekitar 60. Median tetap 61, nilai yang wajar. Median kebal terhadap outlier; rata-rata tidak.
Kritis: median tidak selalu menang. Untuk noise Gaussian (acak halus di semua piksel), filter rata-rata/Gaussian biasanya lebih baik. Median pada jendela besar juga bisa menghapus garis tipis dan sudut tajam, dan lebih lambat karena perlu pengurutan.
6. Highpass: penajam (slide 12-15)
Highpass menonjolkan perubahan cepat (tepi, detail). Dasarnya turunan: area rata → turunan 0; ada perubahan → turunan besar. Karena itu jumlah koefisien kernel turunan = 0 (slide 14), berlawanan dengan lowpass yang berjumlah 1.
6.1 Turunan kedua: Laplacian (Gambar 3.52)
0
1
0
1
-4
1
0
1
0
1
1
1
1
-8
1
1
1
1
-0
-1
-0
-1
4
-1
-0
-1
-0
-1
-1
-1
-1
8
-1
-1
-1
-1
Laplacian ∇²f = ∂²f/∂x² + ∂²f/∂y² mengukur "seberapa beda piksel dari tetangganya". Kernel kiri hanya melihat 4 tetangga; kernel -8 juga melihat diagonal sehingga responsnya lebih ke segala arah.
Aturan tanda c: bila koefisien pusat kernel negatif (−4 atau −8), pakai c = −1; bila positif, pakai c = +1. Salah tanda = citra malah jadi "terbakar"/rusak, bukan lebih tajam.
Alur: citra buram → Laplacian (hanya tepinya, hampir hitam) → citra asli dikurangi Laplacian = lebih tajam. Kernel -8 (diagonal ikut) biasanya sedikit lebih tajam.
Contoh pada patch P di atas: Laplacian di tengah = 63+55+70+59 − 4×255 = -773 (sangat negatif karena piksel jauh lebih terang dari tetangganya). Dengan c = −1, hasil = 255 − (−773) = lebih terang lagi, yaitu tepi/titik itu makin menonjol.
Kritis: penajaman juga memperkuat noise, karena noise adalah perubahan cepat. Praktiknya, citra sering di-blur ringan dulu, baru ditajamkan. Hasil penajaman juga bisa melewati 0-255, perlu di-clip.
6.2 Turunan pertama: gradien (Gambar 3.56-3.57)
∇f = [gx, gy] adalah vektor arah perubahan terbesar. BesarnyaM = √(gx²+gy²) (sering didekati |gx|+|gy| agar hitungan cepat). Operator: Roberts (2×2, cepat tapi sensitif noise & kurang simetris) dan Sobel (3×3, ada bobot 2 di tengah sehingga sekaligus sedikit menghaluskan noise, jadi lebih populer).
Sobel (baris)
-1
-2
-1
0
0
0
1
2
1
Sobel (kolom)
-1
0
1
-2
0
2
-1
0
1
Contoh patch tepi vertikal (kiri gelap 10, kanan terang 200):
10
10
200
10
10
200
10
10
200
kernel kolom → 760 (tepi terdeteksi kuat) kernel baris → 0 (tidak ada tepi horizontal) M = 760
Magnitudo gradien Sobel: hanya tepi yang menyala, area rata menjadi hitam. Mirip contoh lensa kontak (Gambar 3.57).
Laplacian
Gradien (Sobel)
Turunan ke-2, tidak punya arah
Turunan ke-1, punya besar & arah
Sangat sensitif noise
Lebih tahan noise
Bagus untuk detail halus & penajaman
Bagus untuk deteksi/penegasan tepi
Tepi dua sisi (respons +/−)
Tepi tebal, satu respons
7. Semua filter dari satu lowpass (slide 16-17)
Respons ideal 1-D (Gambar 3.58). Passband = frekuensi yang lolos (nilai 1), stopband = yang ditahan (nilai 0). Frekuensi rendah = perubahan lambat, frekuensi tinggi = tepi/detail.
δ(x,y) adalah unit impulse: kernel yang bernilai 1 di pusat dan 0 di tempat lain. Memfilter dengan δ tidak mengubah citra sama sekali (filter "identitas" = meloloskan semua frekuensi).
Filter
Kernel spasial
Logika
Lowpass
lp
Dasar
Highpass
hp = δ − lp
Semua − yang halus = sisanya (detail)
Bandreject
br = lp₁ + [δ − lp₂]
Tahan pita tengah: loloskan rendah (lp₁) + tinggi (hp₂)
Bandpass
bp = δ − br
Semua − bandreject = hanya pita tengah
Highpass diperoleh dengan mengurangkan versi buram dari citra asli. Yang tersisa hanya detail/tepi.Bandreject dan bandpass dibuat dari dua lowpass. Syarat: cutoff lp₁ lebih rendah daripada lp₂, artinya lp₁ memakai σ spasial lebih besar (σ=6) dan lp₂ lebih kecil (σ=2,5).
Kritis (hati-hati arah σ): di domain spasial, σ besar berarti blur kuat = cutoff frekuensi rendah. Karena itu pada bandreject, lp₁ (cutoff rendah) memakai σ lebih besar daripada lp₂. Jika terbalik, pita yang ditahan tidak terbentuk. Hasil bandpass/bandreject di gambar ini bergantung pada kombinasi σ yang dipilih.
8. Catatan kritis terhadap slide
Fuzzy logic ada di Objectives tetapi tidak ada isinya di slide. Pelajari dari buku (Bab 3.8).
Slide 13: tertulis "Lalacian" (typo, seharusnya Laplacian). Keterangan "c = 1" hanya benar bila kernel yang dipakai berkoefisien pusat positif; kernel paling kiri (pusat −4) butuh c = −1. Cek tanda sebelum menerapkan.
Slide hanya berisi gambar dan keterangan. Rumus, alasan, dan perbandingan perlu dilengkapi dari buku, sebagaimana dirangkum di sini.
Penanganan tepi citra, normalisasi hasil (skala 0-255), dan pemilihan ukuran kernel tidak dibahas, padahal sangat menentukan hasil praktik.
Gambar hasil di slide berasal dari buku. Gambar di file ini dibuat ulang dengan citra buatan sendiri, jadi tampilannya berbeda tetapi prinsipnya sama.
9. Cek pemahaman (klik untuk melihat jawaban)
1. Mengapa kernel biasanya berukuran ganjil?Supaya ada satu piksel pusat sebagai titik acuan hasil.2. Kapan korelasi = konvolusi?Saat kernel simetris 180° (mis. box, Gaussian, Laplacian).3. Mengapa box 3×3 memakai faktor 1/9?Agar jumlah bobot = 1 sehingga kecerahan rata-rata tetap.4. Noise salt-and-pepper: Gaussian atau median? Mengapa?Median. Rata-rata ikut terseret nilai ekstrem, median mengabaikannya.5. Jumlah koefisien kernel lowpass vs highpass/turunan?Lowpass = 1, turunan/highpass = 0.6. Kernel Laplacian berpusat −8: c berapa?c = −1 (koefisien pusat negatif).7. Mengapa Sobel lebih tahan noise dibanding Roberts?Kernelnya 3×3 dengan bobot 2 di tengah sehingga ada efek penghalusan.8. Bagaimana mendapatkan highpass dari lowpass?hp = δ − lp (citra asli dikurangi versi halusnya).