Materi Pertemuan 2

Materi Pertemuan 2
Modul Pertemuan 2: Pengolahan Citra Digital
⛶ Buka Presentasi Full Screen (Tab Baru)
Program Studi Sistem dan Teknologi Informasi

Representasi Matriks & Ruang Warna Citra

Mata Kuliah: Pengolahan Citra Digital — Pertemuan 2

By Alimin, M.Kom
Pengolahan Citra Digital
Fokus Bahasan: Memahami representasi diskret citra sebagai matriks numerik 2D, koordinat spasial piksel f(y, x), digitalisasi sampling-kuantisasi, aplikasi terapan modern (Biometrik, Medis, Pertanian, Multimodal), serta dekomposisi ruang warna berbasis Python GUI.
By Alimin, M.Kom | PCD 1 / 15 Slide Berikutnya →
Capaian Pembelajaran (Sub-CPMK 2)

Sasaran Kompetensi Pertemuan 2

  • Menjelaskan model data penyusun matriks citra digital berdimensi M × N[cite: 1].
  • Memahami cara membaca koordinat dan nilai intensitas f(y, x) pada memori komputer[cite: 1].
  • Menganalisis proses Sampling Spasial dan Kuantisasi Amplitudo (kedalaman bit)[cite: 1].
  • Mengetahui cakupan aplikasi terapan citra digital: Biometrik, Medis, Pertanian, Budaya, dan AI Multimodal.
  • Menguraikan konversi kanal warna RGB, Grayscale, dan Citra Biner[cite: 1, 18].
  • Membangun proyek antarmuka GUI Python secara berkelompok untuk mengekstraksi dan mengamati ruang warna[cite: 1, 15, 18].

Konsep numerik ini menjadi acuan mutlak sebelum melangkah ke operasi titik piksel, perbaikan kualitas citra, filtering konvolusi, dan segmentasi pada modul berikutnya[cite: 1, 18].

Sistem Koordinat Citra

Pengalamatan Koordinat Piksel f(Baris, Kolom)

Setiap piksel diakses melalui koordinat baris vertikal (y) dan koordinat kolom horizontal (x) sebagai elemen fungsi matematis f(y, x)[cite: 1]:

f(2, 1) = 6
Baris ke-2, Kolom ke-1 bernilai 6 (Hitam)
&
f(4, 7) = 237
Baris ke-4, Kolom ke-7 bernilai 237 (Putih)
Konvensi Indeks NumPy vs Matematika:
Pada pengolahan citra digital berbasis Python/OpenCV, citra diakses dengan urutan indeks image[baris_y, kolom_x][cite: 1, 15]. Titik koordinat asal (0, 0) selalu berada pada sudut kiri paling atas dari citra.
Proses Digitalisasi Citra

Sampling Citra Kontinu: I(x, y) → I(i, j)

Citra fisik di dunia nyata bersifat kontinu. Melalui alat pemindai (scanner) atau sensor kamera, citra dicacah menjadi kisi-kisi matriks diskret (sampling)[cite: 1, 18]:

 
 
Kontinu I(x, y)
DIGITALISASI
(Scanner / Sampler)[cite: 18]
➔
       
       
       
       
       
Digital I(i, j)[cite: 18]
Semakin rapat proses pencacahan grid spasial (sampling frequency), resolusi citra akan semakin halus dan mendekati wujud asli objek kontinu di alam[cite: 1].
Kuantisasi & Kedalaman Bit

Kuantisasi Citra: Contoh Citra 3-Bit

Kedalaman bit (bit-depth) menentukan jumlah variasi derajat keabuan[cite: 1]. Citra 3-bit memiliki variasi nilai 23 = 8 derajat warna (dari nilai 0 hingga 7)[cite: 18]:

Citra Awal (3-bit: 0 - 7)[cite: 18]
5 5 3 2
7 4 0 1
5 2 2 0
3 1 6 2
➔
Citra Baru (Hasil)[cite: 18]
f'(1,1) f'(1,2) f'(1,3) f'(1,4)
f'(2,1) f'(2,2) f'(2,3) f'(2,4)
f'(3,1) f'(3,2) f'(3,3) f'(3,4)
f'(4,1) f'(4,2) f'(4,3) f'(4,4)
Pada citra grayscale standar, sistem menggunakan kuantisasi 8-bit (256 tingkat nilai keabuan dari 0 hingga 255)[cite: 1].
Aplikasi & Riset Terapan

Penerapan Pengolahan Citra Digital di Berbagai Bidang

Evolusi teknik pengolahan citra digital klasik menuju arsitektur kecerdasan buatan modern (Vision Transformer, Diffusion Model, & Multimodal AI):

1. Biometrik & Identifikasi Individu
  • Identifikasi sidik jari & telapak tangan (Isnanto, 2007; Putra, 2010).
  • Vision Transformer (ViT) klasifikasi biometrik (Dosovitskiy, 2020).
  • DETR & RT-DETR deteksi biometrik real-time (Carion, 2020; Zhao, 2023).
2. Medis & Kesehatan
  • Identifikasi Diabetes via citra kelopak mata (Rachmad, 2009).
  • Segment Anything Model (SAM) segmentasi organ/lesi (Kirillov, 2023).
  • Vision Transformer & GPT-4V analisis multimodal medis (OpenAI, 2023).
3. Pertanian & Pangan
  • Identifikasi kematangan buah tomat (Noor & Hariadi, 2009).
  • Vision Transformer deteksi penyakit tanaman & daun sakit.
  • Model Difusi (Stable Diffusion) augmentasi data citra pertanian.
4. Tekstil, Budaya & Multimodal
  • Fitur motif batik (Mulaab, 2010) & DINOv2 clustering (Oquab, 2023).
  • Pencarian database foto (Aribowo, 2009) & CLIP (Radford, 2021).
  • NeRF & 3D Gaussian Splatting rekonstruksi objek 3D (Kerbl, 2023).
Dekomposisi Ruang Warna

Struktur Multi-Channel RGB vs Grayscale

Citra berwarna (seperti peppers.png / coins.png) tersusun atas 3 layer matriks independen[cite: 18]. Konversi ke Grayscale melebur ketiga kanal menggunakan bobot sensitivitas mata:

GRAYSCALE[cite: 18]
1 Matriks (H × W)
 
KANAL RED[cite: 18]
I(:,:,1)[cite: 18]
 
KANAL GREEN[cite: 18]
I(:,:,2)[cite: 18]
 
KANAL BLUE[cite: 18]
I(:,:,3)[cite: 18]
 
Rumus Konversi: Grayscale = (0.299 × R) + (0.587 × G) + (0.114 × B)
Binarization & Histogram

Binerisasi Citra & Distribusi Histogram

Melalui proses thresholding, citra keabuan diubah menjadi biner 1-bit (0 = hitam, 1 = putih)[cite: 18]. Persebaran frekuensi kemunculan nilai intensitasnya dianalisis menggunakan grafik histogram[cite: 1, 18]:

Citra Biner[cite: 18]
Piksel < T = 0
Piksel ≥ T = 1[cite: 18]
➔
 
 
 
 
 
 
 
 
0Intensitas (0-255)255
Grafik Histogram H(D)[cite: 18]
Histogram memberikan informasi diagnostik apakah kualitas citra tergolong terlalu gelap (*underexposed*), terlalu terang (*overexposed*), atau memiliki rentang kontras sempit[cite: 1, 18].
Arsitektur Proyek Praktikum

Struktur Logika Program GUI Python

Implementasi logika isolasi kanal dan konversi warna menggunakan OpenCV & NumPy[cite: 15]:

# 1. Konversi Ruang Warna Baku OpenCV
gray = cv2.cvtColor(self.cv_img, cv2.COLOR_BGR2GRAY)   # Matriks 2D (H x W)
hsv  = cv2.cvtColor(self.cv_img, cv2.COLOR_BGR2HSV)    # Matriks 3D (H x W x 3)
ycrcb= cv2.cvtColor(self.cv_img, cv2.COLOR_BGR2YCrCb)  # Matriks 3D (H x W x 3)

# 2. Isolasi Kanal Warna Murni (Manipulasi Slicing Array NumPy)
b = self.cv_img.copy()
b[:, :, 1] = 0   # Nolkan kanal Green (Indeks 1)
b[:, :, 2] = 0   # Nolkan kanal Red (Indeks 2) -> HANYA TERSISA KANAL BLUE

r = self.cv_img.copy()
r[:, :, 0] = 0   # Nolkan kanal Blue (Indeks 0)
r[:, :, 1] = 0   # Nolkan kanal Green (Indeks 1) -> HANYA TERSISA KANAL RED
Tugas Praktikum Kelompok (Bagian 1)

Instruksi 1: Rancang Bangun Program GUI

Ketentuan Mutlak Pengerjaan:

Mahasiswa wajib membuat dan mengimplementasikan program antarmuka grafis (GUI) secara mandiri dalam kelompok menggunakan bahasa pemrograman Python[cite: 1]. Dilarang keras melakukan plagiasi tanpa pemahaman konsep[cite: 1].

  1. Membangun Antarmuka GUI: Buat program GUI berbasis Python (menggunakan tkinter atau framework GUI pilihan) yang memuat tombol pembuka file, panel citra masukan, panel citra luaran, serta menu pilihan konversi.
  2. Implementasi Konversi Warna: Terapkan fungsi manipulasi OpenCV untuk konversi ke Grayscale, HSV, YCrCb, serta teknik slicing array matriks untuk memisahkan kanal tunggal Red, Green, dan Blue[cite: 15, 18].
  3. Pengujian Program: Uji fungsionalitas program menggunakan sampel citra berwarna (seperti objek daun hijau atau pola bentuk geometris) untuk memastikan setiap kanal warna terkonversi dengan benar.
  4. Tantangan Pengembangan: Wajib menambahkan minimal 1 fitur pilihan ruang warna tambahan ke dalam aplikasi Anda, seperti CIE-LAB (cv2.COLOR_BGR2LAB) atau YUV (cv2.COLOR_BGR2YUV), lalu dokumentasikan alur kerjanya.
Tugas Praktikum Kelompok (Bagian 2)

Instruksi 2: Bedah Deklarasi Program

Jelaskan secara tertulis mekanisme deklarasi baris kode kunci berikut dalam laporan kelompok Anda:

cv2.cvtColor(self.cv_img, cv2.COLOR_BGR2GRAY)

Jelaskan mengapa matriks 3D (H×W×3) berubah menjadi matriks 2D (H×W) dan sebutkan rumus bobot persepsi mata yang digunakan[cite: 1, 15]!

b[:, :, 1] = 0  |  b[:, :, 2] = 0

Jelaskan teknik manipulasi array slicing NumPy di atas dan mengapa menolkan kanal Green & Red menghasilkan efek visual kanal Blue murni[cite: 15]!

ImageTk.PhotoImage(image=Image.fromarray(resized))

Jelaskan peran library Pillow sebagai jembatan konversi format array OpenCV BGR menjadi widget canvas Tkinter[cite: 15]!

Tugas Praktikum Kelompok (Bagian 3)

Instruksi 3: Amati Perbedaan Hasil Visual

Lakukan eksperimen visual pada antarmuka GUI dan jawab pertanyaan analitis berikut:

1. Analisis Kanal Warna Citra Daun Hijau

Saat memilih Channel Green dibandingkan dengan Channel Red: Mengapa permukaan daun hijau terlihat sangat terang menyala pada isolasi kanal Green, namun menjadi sangat gelap/hitam pada kanal Red? Hubungkan dengan nilai intensitas piksel matriks dan koefisien pantulan reflektansi r(x, y)[cite: 1]!

2. Grayscale vs Kanal Value (V) pada HSV

Amati tampilan citra mode Grayscale dengan tampilan kanal Value pada HSV. Apakah kedua citra monokrom tersebut sama persis? Jika berbeda, jelaskan perbedaan matematis di balik pembentukannya!

Evaluasi Akademik & Format Tugas Kelompok

Rubrik Penilaian & Pembagian Peran Kelompok (3 Orang)

Anggota 1: Developer GUI
Membangun layout GUI Python, fungsi load citra, dan implementasi konversi warna (Project Coding).
Anggota 2: Penulis Laporan
Menyusun laporan PDF, membedah deklarasi baris kode program, dan menuliskan analisis komparasi visual[cite: 1].
Anggota 3: Video & Demo
Merekam demonstrasi aplikasi, menjelaskan pemrosesan matriks, mengunggah ke YouTube & melampirkan link[cite: 1, 18].
Komponen Penilaian Bobot Indikator Capaian Mutu
1. Eksekusi Program GUI 25% Program berjalan lancar tanpa error, widget berfungsi, dan berhasil menambahkan minimal 1 ruang warna baru[cite: 1, 15].
2. Bedah Deklarasi Program 35% Ketepatan menjelaskan fungsi sintaks OpenCV, modul Pillow, serta logika manipulasi matriks slicing NumPy[cite: 15].
3. Analisis Perbedaan Visual 40% Ketajaman penalaran ilmiah dalam membedah perbedaan intensitas warna daun pada kanal RGB dan model HSV[cite: 1].
Pengingat Quiz: Selain laporan tugas di atas, selesaikan Quiz 1 (Konsep Dasar Citra) pada platform LMS Campus ALF Center sesuai batas waktu yang ditentukan[cite: 1].
Materi Selanjutnya

Next: Operasi Aritmatika & Logika Citra

"Citra digital adalah matriks numerik. Setiap operasi matematis antar-piksel menghasilkan efek visual dan manipulasi data yang nyata."

Pada Pertemuan 3 kita akan mengimplementasikan operasi matematis antar-citra pada Python[cite: 1]:

Pertemuan 3: Operasi Aritmatika & Logika Citra

Penjumlahan citra, background subtraction, image blending dengan slider transparansi alpha, serta operasi boolean (AND, OR, NOT) untuk masking citra[cite: 1].

Fondasi Pengolahan Citra Digital & Eksplorasi Ruang Warna

Mata Kuliah: Pengolahan Citra Digital | Teori Dasar & Panduan Praktikum Mandiri

Bagian I: Landasan Teori Fondasional
1. Definisi & Keterkaitan Bidang Ilmu
Konsep & Definisi

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
Aplikasi & Algoritma Modern

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
Pipeline Pemrosesan
  1. Peningkatan Kontras (Enhancement): Memanipulasi sebaran intensitas cahaya dan kontras agar fitur atau pola yang semula samar menjadi tegas bagi mata maupun algoritma deteksi.
  2. Penghilangan Derau (Noise Filtering): Membersihkan gangguan piksel acak akibat transmisi sinyal atau sensor lemah, seperti derau blok maupun salt-and-pepper.
  3. 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
Representasi Matematis

Citra direpresentasikan sebagai matriks dua dimensi berukuran M baris × N kolom:

  • Setiap sel matriks disebut piksel (picture element), diidentifikasi dengan koordinat (x, y) di mana x adalah indeks kolom dan y adalah 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).
Formula Konversi Grayscale:
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
Fisika Akuisisi

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).
Bagian II: Panduan Praktikum & Implementasi Kode

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)
Arsitektur Interface

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)
Core Transformation

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)
Analisis: Hubungkan rumus pembobotan keabuan y = 0.299·R + 0.587·G + 0.144·B pada materi teori dengan cara kerja fungsi COLOR_BGR2GRAY di atas.
3. Isolasi Kanal Warna dengan NumPy (Array Slicing)
Array Manipulation

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
Image Scaling Helper

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:

  1. Tambahkan tombol "Buka Citra" yang memanggil fungsi filedialog.askopenfilename().
  2. Tambahkan widget ttk.Combobox yang memuat opsi: Grayscale, HSV, YCrCb, Channel Red, Channel Green, dan Channel Blue.
  3. Lengkapi percabangan logika if-elif-else di dalam fungsi convert_color() untuk menangani seluruh mode pemilihan kanal warna.
  4. Jalankan skrip aplikasi dan uji dengan citra format .jpg atau .png.