Fondasi Pengolahan Citra Digital & Eksplorasi Ruang Warna
Mata Kuliah: Pengolahan Citra Digital | Teori Dasar & Panduan Praktikum Mandiri
1. Definisi & Keterkaitan Bidang Ilmu
Pengolahan Citra Digital (PCD) berfokus pada pemrosesan citra dua dimensi menggunakan komputer digital:
- Jain (1989): Pemrosesan gambar berdimensi-dua melalui komputer digital.
- Efford (2000): Istilah umum untuk berbagai teknik manipulasi dan modifikasi citra guna memenuhi tujuan visual tertentu.
PCD menjadi pondasi komputasi visual yang berhubungan langsung dengan disiplin ilmu serumpun:
- Grafika Komputer (Computer Graphics): Bertolak belakang dengan PCD; grafika komputer memproses deskripsi matematis atau data objek untuk menghasilkan gambar/visual.
- Pengenalan Pola (Pattern Recognition): Menerima luaran citra dari PCD untuk mengenali objek, mengklasifikasi entitas, dan mengambil keputusan tingkat lanjut.
2. Penerapan Nyata di Berbagai Bidang
Biometrik & Keamanan
Identifikasi sidik jari dan verifikasi pola telapak tangan. Memanfaatkan model Vision Transformer (ViT) untuk klasifikasi serta DETR / RT-DETR untuk deteksi biometrik secara real-time.
Medis & Kesehatan
Deteksi dini Diabetes mellitus melalui pembuluh darah dan citra kelopak mata. Pemanfaatan Segment Anything Model (SAM) untuk segmentasi organ dan diagnosis medis multimodal.
Pertanian & Pangan
Klasifikasi kematangan komoditas buah (misal tomat) dan deteksi hama tanaman berbasis Vision Transformer dengan augmentasi data intensif.
Pelestarian Tekstil & Budaya
Ekstraksi fitur motif batik nusantara. Model self-supervised seperti CLIP dan DINOv2 dimanfaatkan untuk klasterisasi corak tanpa label manual.
AI Multimodal & Rekonstruksi Spasial 3D
Pencarian basis data citra berbasis instruksi teks (Flamingo, LLaVA, GPT-4V), segmentasi universal berbasis konteks video (SAM 2), hingga sintesis lingkungan visual 3D menggunakan Neural Radiance Fields (NeRF) dan 3D Gaussian Splatting.
3. Tiga Prinsip Utama Pengolahan Citra
- Peningkatan Kontras (Enhancement): Memanipulasi sebaran intensitas cahaya dan kontras agar fitur atau pola yang semula samar menjadi tegas bagi mata maupun algoritma deteksi.
- Penghilangan Derau (Noise Filtering): Membersihkan gangguan piksel acak akibat transmisi sinyal atau sensor lemah, seperti derau blok maupun salt-and-pepper.
- Pencarian Bentuk & Segmentasi: Mengisolasi area atau objek tertentu dari latar belakang (misal memisahkan area daun dari ranting). Dilanjutkan dengan:
- Deteksi Tepi (Edge Detection): Menemukan batas fisik/kontur terluar objek.
- Analisis Dimensi: Menghitung luas piksel, keliling, dan estimasi ukuran geometris secara otomatis.
4. Representasi Citra Digital & Koordinat Piksel
Citra direpresentasikan sebagai matriks dua dimensi berukuran M baris × N kolom:
- Setiap sel matriks disebut piksel (picture element), diidentifikasi dengan koordinat
(x, y)di manaxadalah indeks kolom danyadalah indeks baris. - Pojok kiri-atas berkoordinat
(0, 0), sedangkan pojok kanan-bawah berkoordinat(N - 1, M - 1).
Kedalaman Nilai Penyusun Piksel:
- Citra Berwarna (RGB): Menggabungkan 3 kanal terpisah (Red, Green, Blue). Tiap piksel memiliki 3 nilai intensitas berkedalaman 24-bit (8-bit per kanal), menghasilkan hingga 16.777.216 kemungkinan kombinasi warna.
- Citra Grayscale (Monokrom): Memiliki 1 nilai intensitas keabuan (8-bit, rentang 0 hingga 255).
1. Rata-rata sederhana: y = ⅓ (R + G + B)
2. Luminansi berbobot (standar persepsi mata): y = 0.299·R + 0.587·G + 0.144·B
5. Sistem Akuisisi & Pembentukan Citra
Foton cahaya memantul dari permukaan objek menuju lensa kamera, kemudian diproyeksikan secara terbalik ke atas sensor array (CCD/CMOS). Sensor merekam rata-rata energi foton yang jatuh pada tiap grid piksel. Proses digitalisasi ini melewati dua tahap utama:
- Sampling (Spasial): Mendiskritisasi bidang koordinat spasial kontinu ke dalam kotak-kotak piksel diskrit. Skala sampling menentukan resolusi spasial citra.
- Kuantisasi (Amplitudo): Mengelompokkan kontinuum energi intensitas cahaya ke dalam tingkat skala digital diskrit (misal skala integer 0–255 pada kuantisasi 8-bit).
Gunakan konsep matriks spasial dan ruang warna di atas untuk membangun antarmuka interaktif menggunakan Python. Lengkapi bagian-bagian kode rumpang berikut ke dalam proyek script mandiri Anda.
1. Inisialisasi GUI & Dual Canvas (Tkinter)
Rancang kerangka kelas dan tata letak window display ganda untuk menampilkan citra asli bersisian dengan citra hasil konversi:
import tkinter as tk
from tkinter import filedialog, ttk
import cv2
import numpy as np
from PIL import Image, ImageTk
class ColorSpaceApp:
def __init__(self, root):
self.root = root
self.root.title("Eksplorasi Ruang Warna & Kanal Citra")
self.root.geometry("900x650")
self.cv_img = None
self.setup_ui()
def setup_ui(self):
# Frame Kontrol (Tombol Buka Citra & Dropdown Pilihan Mode)
# ...
# Dual Display Frame
body = tk.Frame(self.root, bg="#f8fafc")
body.pack(fill=tk.BOTH, expand=True, padx=15, pady=10)
f_left = tk.LabelFrame(body, text="Citra Asli (RGB)")
f_left.pack(side=tk.LEFT, fill=tk.BOTH, expand=True, padx=5)
self.lbl_orig = tk.Label(f_left, text="Pilih gambar terlebih dahulu")
self.lbl_orig.pack(fill=tk.BOTH, expand=True)
f_right = tk.LabelFrame(body, text="Hasil Transformasi")
f_right.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True, padx=5)
self.lbl_result = tk.Label(f_right, text="Belum diproses")
self.lbl_result.pack(fill=tk.BOTH, expand=True)
2. Operasi Konversi Ruang Warna (OpenCV)
OpenCV merepresentasikan citra standar dalam skema urutan BGR. Gunakan metode cv2.cvtColor() untuk melakukan pemetaan ruang warna:
# Konversi BGR ke Grayscale
gray = cv2.cvtColor(self.cv_img, cv2.COLOR_BGR2GRAY)
res = cv2.cvtColor(gray, cv2.COLOR_GRAY2BGR)
# Konversi BGR ke HSV
res = cv2.cvtColor(self.cv_img, cv2.COLOR_BGR2HSV)
# Konversi BGR ke YCrCb
res = cv2.cvtColor(self.cv_img, cv2.COLOR_BGR2YCrCb)
COLOR_BGR2GRAY di atas.3. Isolasi Kanal Warna dengan NumPy (Array Slicing)
Sesuai konsep matriks citra 3 kanal, kita dapat mengisolasi kanal tertentu dengan mengosongkan nilai intensitas kanal lainnya menjadi nol:
# Struktur array OpenCV: citra[tinggi, lebar, indeks_kanal]
# Kanal 0 = Blue, Kanal 1 = Green, Kanal 2 = Red
# Isolasi Kanal Merah (Red):
r = self.cv_img.copy()
r[:, :, 0] = 0 # Matikan kanal Blue
r[:, :, 1] = 0 # Matikan kanal Green
res = r
# [TUGAS MAHASISWA]
# 1. Tuliskan kode untuk mengisolasi Channel Green:
# 2. Tuliskan kode untuk mengisolasi Channel Blue:
4. Rendering Citra Adaptif ke Tkinter
Agar gambar berukuran besar tidak meluap keluar batas window GUI, lakukan penskalaan aspek rasio otomatis sebelum dikonversi ke format ImageTk.PhotoImage:
def render_label(self, cv_img, target_lbl):
# Konversi BGR ke format RGB (format yang dibaca PIL)
rgb = cv2.cvtColor(cv_img, cv2.COLOR_BGR2RGB)
h, w, _ = rgb.shape
# Skala proporsional agar pas dalam batas 400x450 piksel
scale = min(400 / w, 450 / h)
disp_w = max(1, int(w * scale))
disp_h = max(1, int(h * scale))
resized = cv2.resize(rgb, (disp_w, disp_h))
img_tk = ImageTk.PhotoImage(image=Image.fromarray(resized))
target_lbl.config(image=img_tk, text="")
target_lbl.image = img_tk # Menjaga referensi objek di memori
Tugas Mandiri: Integrasi Kode Program
Satukan modul-modul di atas ke dalam satu file skrip main.py dengan menyelesaikan checklist berikut:
- Tambahkan tombol "Buka Citra" yang memanggil fungsi
filedialog.askopenfilename(). - Tambahkan widget ttk.Combobox yang memuat opsi:
Grayscale,HSV,YCrCb,Channel Red,Channel Green, danChannel Blue. - Lengkapi percabangan logika
if-elif-elsedi dalam fungsiconvert_color()untuk menangani seluruh mode pemilihan kanal warna. - Jalankan skrip aplikasi dan uji dengan citra format
.jpgatau.png.