Materi Pertemuan 4

Materi Pertemuan 4

Memahami Dasar Operasi Piksel dan Histogram Citra Digital

Selamat datang di materi pembelajaran Pertemuan ke-4 mata kuliah Pengolahan Citra Digital. Pada sesi kali ini, kita akan membahas tahapan awal dalam Perbaikan Kualitas Citra (Image Enhancement), yaitu penguasaan terhadap Operasi Piksel dan analisis Histogram.

Teknik-teknik dasar ini sangat esensial karena menjadi fondasi sebelum kita melangkah pada pemrosesan citra tingkat lanjut seperti segmentasi maupun ekstraksi ciri.

1. Apa itu Operasi Piksel? Secara sederhana, operasi piksel adalah teknik pengolahan citra yang memetakan nilai baru pada setiap piksel yang bergantung sepenuhnya pada nilai piksel itu sendiri. Ada dua modifikasi utama yang sering kita lakukan menggunakan operasi matematis ini:

  • Pengubahan Kecerahan (Image Brightness): Operasi ini bertujuan untuk membuat keseluruhan gambar menjadi lebih terang atau lebih gelap. Secara matematis, hal ini dilakukan dengan menambahkan sebuah nilai konstanta pada seluruh piksel. Jika nilai konstanta bernilai positif, citra akan semakin terang, dan jika negatif, citra akan menjadi gelap.

  • Peregangan Kontras (Contrast Stretching): Kontras menyatakan distribusi warna terang dan gelap. Sebuah citra dikatakan memiliki kontras rendah jika nilai intensitas warnanya hanya berkumpul di area sempit. Untuk memperbaiki hal ini, kita melakukan modifikasi dengan mengalikan piksel dengan konstanta tertentu agar jangkauan aras keabuan (0-255) terdistribusi lebih lebar.

2. Mengukur Intensitas dan Kontras secara Kuantitatif

Kualitas sebuah citra tidak hanya dilihat secara kasatmata, namun juga dapat diukur secara matematis:

  • Luminosity (Kecerahan): Diukur menggunakan nilai rata-rata (Mean) dari histogram. Citra bernuansa gelap akan memiliki grafik histogram yang menumpuk di sisi kiri, sedangkan citra terang akan menumpuk di sisi kanan.

  • Tingkat Kontras: Diukur menggunakan perhitungan Standar Deviasi (Standard Deviation).

3. Histogram Citra dan Ekualisasi Histogram citra adalah diagram fundamental yang menggambarkan frekuensi kemunculan setiap nilai intensitas (aras keabuan) pada seluruh piksel citra. Semakin tinggi batang diagram pada angka tertentu (misalnya rentang 0 hingga 255), maka semakin banyak jumlah piksel yang memiliki warna tersebut.

4. Memahami Perhitungan Histogram secara Konseptual

Histogram tidak hanya sekadar grafik visual, melainkan representasi data yang menjadi dasar algoritma perbaikan citra. Untuk menghitung histogram—khususnya pada citra grayscale 8-bit (yang memiliki rentang nilai 0 hingga 255)—kita pada dasarnya melakukan "sensus" terhadap setiap piksel penyusun gambar.

Sistem akan menghitung berapa kali setiap derajat keabuan muncul di dalam matriks citra. Misalnya, jika di dalam gambar berukuran 100x100 piksel terdapat 300 piksel berwarna hitam pekat (nilai 0) dan 500 piksel berwarna putih murni (nilai 255), maka pada grafik histogram, batang pada titik 0 akan setinggi 300, dan pada titik 255 setinggi 500. Pemahaman perhitungan dasar ini sangat penting untuk tahap modifikasi citra selanjutnya.

5. Mekanisme Ekualisasi Histogram (Perataan Histogram)

Seperti yang disinggung sebelumnya, ekualisasi digunakan untuk meratakan sebaran cahaya/warna. Lalu, bagaimana proses ini bekerja secara komputasi? Ada beberapa tahapan perhitungan sistematis (diskrit) yang dilakukan oleh komputer:

  1. Mencari Histogram Citra Asli: Menghitung jumlah kemunculan (frekuensi) tiap nilai piksel.

  2. Menghitung Distribusi Kumulatif: Menjumlahkan frekuensi piksel secara berurutan dari nilai terendah hingga tertinggi (akumulasi).

  3. Normalisasi: Nilai kumulatif tersebut kemudian dikalikan dengan rentang derajat keabuan maksimal (misalnya nilai maksimalnya adalah aras keabuan $L-1$, biasanya 255) lalu dibagi dengan total keseluruhan jumlah piksel gambar.

  4. Pembulatan: Mengingat nilai warna piksel harus berupa bilangan bulat, maka hasil pembagian tadi dibulatkan ke nilai integer terdekat.

  5. Pemetaan (Mapping): Nilai piksel pada citra yang lama diganti dengan nilai piksel baru hasil ekualisasi. Hasilnya, gambar yang semula terlalu gelap atau terlalu terang (washed out) akan memiliki rentang kontras yang optimal.

6. Pengantar Filter Citra (Image Filtering)

Sebagai penutup materi pertemuan ini, kita mulai berkenalan dengan Filter Citra. Jika Operasi Piksel yang kita bahas di awal memproses piksel secara mandiri satu per satu (disebut operasi titik tunggal), maka Filter Citra menggunakan pendekatan Operasi Ketetanggaan (Neighborhood Operation).

Artinya, untuk menentukan warna baru dari sebuah titik piksel, komputer akan melihat nilai warna piksel tersebut beserta nilai warna dari piksel-piksel tetangganya di sekelilingnya (atas, bawah, kanan, kiri, dan diagonal). Proses ini biasanya melibatkan matriks kecil yang disebut Kernel atau Mask (misalnya ukuran 3x3 atau 5x5) dan menggunakan metode operasi matematika yang disebut Konvolusi.

Filter citra memiliki dua fungsi dasar yang sangat sering digunakan:

  • Image Smoothing (Pelembutan / Blurring): Berfungsi untuk menghilangkan gangguan bintik (noise) pada gambar, sehingga citra terlihat lebih halus.

  • Image Sharpening (Penajaman): Berfungsi untuk memperjelas garis tepi (edge detection) atau batas antar objek di dalam gambar agar detailnya lebih menonjol.

Rangkuman & Tindak Lanjut

Pada pertemuan ke-4 ini, kita telah memahami bagaimana sebuah gambar direpresentasikan sebagai angka, bagaimana mengubah kecerahan dan kontras melalui Operasi Piksel, menganalisis distribusi warnanya melalui Histogram, hingga memperbaikinya dengan Ekualisasi dan pengantar Filter Citra.

Modul Pertemuan 4: Operasi Piksel, Histogram, Kontras vs Brightness & Ekualisasi
⛶ Buka Presentasi Full Screen (Tab Baru)
Program Studi Sistem dan Teknologi Informasi

Operasi Piksel, Histogram & Ekualisasi Kontras

Mata Kuliah: Pengolahan Citra Digital — Pertemuan 4

By Alimin, M.Kom
Histogram Citra Digital
Fokus Bahasan: Memahami perbedaan fundamental Kontras vs Brightness, operasi titik piksel mandiri, analisis grafik sebaran intensitas (0-255), serta implementasi algoritma Global Histogram Equalization vs CLAHE (Adaptive Equalization).
By Alimin, M.Kom | PCD P04 1 / 17 Slide Berikutnya →
Capaian Pembelajaran (Sub-CPMK 4)

Sasaran Kompetensi Pertemuan 4

  • Mendeskripsikan definisi matematis dan konsep pembentukan Histogram Citra Digital.
  • Membedakan secara konseptual dan matematis antara Kontras (Gain α) dan Kecerahan/Brightness (Bias β).
  • Menganalisis sebaran kurva histogram pada kondisi Underexposed, Overexposed, dan Low Contrast.
  • Mengimplementasikan Global Histogram Equalization untuk meratakan intensitas citra global.
  • Mengimplementasikan CLAHE (Contrast Limited Adaptive Histogram Equalization) untuk perbaikan detail lokal tanpa amplifikasi noise.

Penguasaan histogram dan peregangan kontras ini merupakan prasyarat mutlak sebelum mempelajari teknik filtering spasial, deteksi tepi, dan segmentasi biner.

Statistik Citra

Definisi & Pembentukan Histogram Citra

Histogram citra adalah diagram batang yang merepresentasikan frekuensi kemunculan setiap derajat intensitas piksel (rentang 0 sampai 255 pada citra 8-bit):

h(rk) = nk   •   p(rk) = nk / (M × N)
rk = derajat intensitas ke-k (0-255) | nk = jumlah piksel bernilai rk | M × N = total seluruh piksel
Citra Gelap (Underexposed)
 
Puncak kurva menumpuk di sisi kiri (mendekati 0)
Citra Terang (Overexposed)
 
Puncak kurva menumpuk di sisi kanan (mendekati 255)
Kontras Baik (Dynamic Range Luas)
 
Sebaran piksel terdistribusi merata dari 0 hingga 255
Konsep Fisik & Matematis

Perbedaan Mendasar: Kontras vs Brightness

Banyak yang keliru menganggap kontras dan brightness adalah hal yang sama. Keduanya memiliki perbedaan fungsi matematis dan efek visual yang sangat tegas:

Parameter Kecerahan / Brightness (β) Kontras / Contrast (α)
Operasi Matematis Penjumlahan (Offset/Bias): $f(x, y) + \beta$ Perkalian (Skalar/Gain): $\alpha \times f(x, y)$
Dampak Visual Menambah/mengurangi energi cahaya keseluruhan tanpa mengubah perbedaan selisih antar objek. Memperlebar selisih (rentang dinamis) antara area tergelap dengan area paling terang.
Efek pada Histogram Menggeser (Shift) seluruh bentuk kurva ke kanan (+β) atau ke kiri (-β). Bentuk kurva tetap. Meregangkan/Memampatkan (Scale) sebaran kurva. Kurva melebar (α > 1) atau menyempit (α < 1).
Kesimpulan: Menambah Brightness membuat seluruh gambar menjadi lebih putih secara merata, sedangkan menambah Kontras membuat bagian yang gelap menjadi semakin gelap dan bagian yang terang menjadi semakin menyala.
Transformasi Gabungan

Formula Linier & Proteksi Saturasi (Clipping)

Dalam implementasi pemrograman, transformasi kontras dan brightness digabungkan ke dalam satu persamaan linier:

g(x, y) = clip(α × f(x, y) + β, 0, 255)
Mengapa Harus Menggunakan Clip?

Tipe data citra adalah uint8 (unsigned integer 8-bit). Jika suatu piksel bernilai 200 lalu dikalikan α=1.5 (+ β=50), hasilnya adalah 350. Tanpa clip, nilai 350 akan mengalami modulo overflow ($350 \pmod{256} = 94$), sehingga area yang seharusnya sangat terang justru berubah menjadi abu-abu gelap cacat.

Dampak Clipping pada Histogram

Seluruh nilai hasil perhitungan > 255 akan dipotong dan dikumpulkan tepat di angka 255. Seluruh nilai < 0 dikumpulkan tepat di angka 0. Akibatnya, pada histogram akan muncul lonjakan garis tajam (*spike*) di bin 0 atau bin 255 saat slider ditarik terlalu ekstrem.

Ekualisasi Konvensional

Global Histogram Equalization (GHE)

Global Histogram Equalization bekerja dengan meratakan fungsi kepadatan probabilitas kumulatif (CDF - Cumulative Distribution Function) dari intensitas keabuan di seluruh citra secara menyeluruh:

sk = T(rk) = round( (L - 1) × ∑j=0..k pr(rj) )
L = 256 derajat keabuan | pr(rj) = probabilitas kemunculan intensitas rj
Kelebihan & Keterbatasan GHE:
  • Kelebihan: Otomatis, cepat, dan sangat efektif meregangkan kontras pada citra yang memiliki latar belakang dan pencahayaan seragam (homogen).
  • Kelemahan Fatal: Karena mengevaluasi citra secara global, piksel latar belakang yang mendominasi akan ditarik paksa. Akibatnya, derau bintik-bintik (*noise*) pada area gelap ikut terangkat menjadi terang dan objek utama kehilangan kontras lokalnya (*washed-out effect*).
Implementasi Python Standalone

Contoh Kode: Global Histogram Equalization

Skrip mandiri OpenCV untuk ekualisasi histogram global pada citra grayscale:

import cv2

# 1. Baca citra masukan dalam format Grayscale
img = cv2.imread('sample.jpg', cv2.IMREAD_GRAYSCALE)

# 2. Terapkan Global Histogram Equalization
# Fungsi ini langsung menghitung histogram kumulatif dan memetakan piksel
ghe_result = cv2.equalizeHist(img)

# 3. Simpan dan tampilkan hasil komparasi
cv2.imwrite('hasil_ghe.jpg', ghe_result)
cv2.imshow('Asli vs GHE', cv2.hconcat([img, ghe_result]))
cv2.waitKey(0)
cv2.destroyAllWindows()
Fungsi cv2.equalizeHist() hanya menerima citra monokrom 1-kanal (8-bit). Jika ingin diterapkan pada citra berwarna, konversikan citra ke ruang warna YCrCb atau HSV, lalu ekualisasi hanya pada kanal Y (Luminansi) atau V (Value) saja.
Ekualisasi Adaptif Modern

CLAHE: Mengatasi Masalah Derau GHE

Contrast Limited Adaptive Histogram Equalization (CLAHE) dikembangkan untuk mengatasi kelemahan ekualisasi global melalui 3 langkah sistematis:

1. Pembagian Tile Grid

Citra dibagi menjadi blok-blok kecil lokal yang disebut *tiles* (misalnya ukuran kisi $8 \times 8$ piksel). Histogram dihitung untuk tiap blok secara mandiri.

2. Contrast Limiting

Jika ada frekuensi histogram lokal yang melebihi ambang batas clipLimit, puncak grafik dipotong. Kelebihan piksel diredistribusikan secara merata ke bins lain.

3. Bilinear Interpolation

Agar batas antar-kotak *tile* tidak terlihat patah (*blocking artifact*), batas blok digabungkan secara halus menggunakan interpolasi bilinear.

Hasil: Tekstur halus daun, urat daun, dan detail di area bayangan tampak tajam alami tanpa menghasilkan bercak putih kasar di latar belakang.
Implementasi Python Standalone

Contoh Kode: Penerapan CLAHE di OpenCV

Skrip mandiri inisialisasi objek CLAHE dan eksekusi pada matriks citra:

import cv2

# 1. Baca citra masukan grayscale
img = cv2.imread('sample_daun.jpg', cv2.IMREAD_GRAYSCALE)

# 2. Buat objek CLAHE dengan parameter:
#    - clipLimit=2.0 (ambang pemotongan puncak kontras untuk cegah noise)
#    - tileGridSize=(8, 8) (pembagian citra ke dalam 64 blok lokal)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))

# 3. Terapkan CLAHE pada citra
clahe_result = clahe.apply(img)

# 4. Simpan hasil
cv2.imwrite('hasil_clahe.jpg', clahe_result)
cv2.imshow('Asli vs CLAHE', cv2.hconcat([img, clahe_result]))
cv2.waitKey(0)
cv2.destroyAllWindows()
Jika nilai clipLimit dinaikkan (misal 10.0), kontras lokal akan semakin tajam namun derau mulai terlihat. Jika nilai clipLimit=1.0, ekualisasi hampir tidak bekerja dan citra tetap mendekati aslinya.
Arsitektur Perangkat Lunak GUI

Struktur Kelas: HistogramApp (Tkinter + Matplotlib)

Inisialisasi komponen grafis dan integrasi kanvas Matplotlib:

class HistogramApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Pertemuan 4: Analisis Histogram & Perbaikan Kontras")
        self.root.geometry("1050x680")
        
        self.cv_img = None
        self.processed_img = None
        self.setup_ui()
Penggunaan paradigma Object-Oriented Programming (OOP) memungkinkan variabel citra asli (self.cv_img) tetap utuh di memori saat citra hasil olahan (self.processed_img) dimanipulasi berulang kali oleh slider atau tombol ekualisasi.
Bedah Source Code Python

Sinkronisasi Display Citra & Plotting Histogram

Menggambar ulang grafik histogram saat parameter diubah:

# 1. Update Plot Histogram
self.ax.clear()
self.ax.hist(self.processed_img.ravel(), bins=256, range=[0, 256], color='#0284c7', alpha=0.85)
self.ax.set_xlim([0, 256])
self.ax.set_title("Distribusi Frekuensi Pixel")
self.canvas.draw()
Fungsi self.processed_img.ravel() meratakan matriks 2D menjadi vektor 1D agar fungsi komputasi frekuensi Matplotlib dapat menghitung kemunculan tiap intensitas secara optimal tanpa loop bertingkat.
Antarmuka Interaktif

Visualisasi Dual-Panel Antarmuka GUI

Antarmuka program membagi layar menjadi dua panel sinkron: panel citra grayscale dan panel kurva histogram:

Panel Citra Grayscale
Preview Visual Citra Grayscale
Panel Grafik Histogram (0-255)
Canvas Matplotlib Interaktif
Setiap pergeseran slider kecerahan (β) atau kontras (α) akan langsung memperbarui citra dan kurva histogram secara real-time tanpa penundaan (*real-time reactive interface*).
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 visualisasi histogram dan perbaikan kontras citra. Dilarang keras melakukan plagiasi tanpa pemahaman konsep.

  1. Membangun Antarmuka: Bangun aplikasi GUI Python (menggunakan tkinter) yang mengintegrasikan tombol load gambar, reset, slider kecerahan, slider kontras, tombol Global Equalize, tombol CLAHE, dan kanvas Matplotlib.
  2. Sinkronisasi Real-Time: Pastikan saat slider kecerahan atau kontras digeser, fungsi np.clip langsung bekerja dan kurva histogram langsung diperbarui secara instan.
  3. Tantangan Modifikasi (Optional): Tambahkan fitur pengembangan baru, seperti tombol ekspor/simpan gambar hasil perbaikan atau opsi visualisasi kurva histogram untuk citra berwarna RGB (3 kurva warna: Merah, Hijau, Biru).
Tugas Praktikum Kelompok (Bagian 2)

Soal 2: Bedah Deklarasi Program

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

np.clip(alpha * self.cv_img + beta, 0, 255).astype(np.uint8)

Jelaskan apa yang terjadi jika fungsi np.clip dihilangkan saat nilai piksel hasil perhitungan melampaui batas 255!

cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))

Jelaskan fungsi parameter clipLimit dan pembagian matriks grid lokal pada algoritma CLAHE!

self.ax.hist(self.processed_img.ravel(), bins=256, range=[0, 256])

Jelaskan peran method ravel() dalam memetakan matriks piksel 2D ke fungsi histogram!

Tugas Praktikum Kelompok (Bagian 3)

Soal 3: Pengamatan Perbedaan Visual

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

1. Analisis Pergeseran Kurva Histogram

Ketika slider Brightness (Beta) dinaikkan ke nilai positif yang tinggi, apa yang terjadi pada posisi puncak grafik histogram? Jelaskan mengapa citra yang mengalami pemotongan saturasi di nilai 255 memiliki lonjakan tajam di ujung paling kanan grafik histogram!

2. Komparasi Global Equalize vs CLAHE

Uji citra dengan pencahayaan lokal tidak merata (misal foto dedaunan atau area bayangan). Mengapa Global Equalize cenderung memunculkan derau bintik-bintik putih kasar, sedangkan CLAHE mampu menjaga detail tekstur alami citra?

Evaluasi Akademik & Tugas Kelompok

Ketentuan Pengumpulan Tugas & Rubrik Penilaian

Anggota 1: Developer GUI
Membangun antarmuka GUI Python, kanvas Matplotlib, slider kecerahan/kontras, dan menambahkan minimal 2 fitur baru.
Anggota 2: Penulis Laporan
Menyusun dokumen laporan format PDF, membedah deklarasi baris kode program, dan menulis analisis komparasi matematis.
Anggota 3: Video & Demo
Merekam demonstrasi interaktif software, memaparkan dinamika kurva histogram saat slider digeser, serta mengunggah ke YouTube.
Komponen Penilaian Bobot Indikator Capaian Mutu
1. Project Coding GUI 30% Program berjalan lancar tanpa galat, sinkronisasi plot histogram instan saat slider digeser, dan sukses menambahkan minimal 2 fitur baru.
2. Laporan & Bedah Kode 40% Ketepatan menguraikan logika saturasi clipping, perbedaan kontras vs brightness, serta analisis komparasi Global Equalize vs CLAHE secara tajam.
3. Video Presentasi Demo 30% Kualitas audio visual rekaman layar jernih, demonstrasi software interaktif, dan diunggah ke kanal YouTube kelompok.
Pengingat Evaluasi LMS: Sesuai silabus perkuliahan, selesaikan Quiz 2 (Operasi Piksel, Kontras & Histogram) pada platform LMS Campus ALF Center sesuai jadwal yang telah ditentukan.
Materi Selanjutnya

Next: Perbaikan Citra & Filter Spasial

"Setelah menguasai operasi titik piksel dan histogram, tahap berikutnya adalah memanipulasi ketetanggaan piksel lokal melalui operasi konvolusi kernel spasial."

Pada Pertemuan 5 kita akan mengimplementasikan filter restorasi dan penajaman citra pada Python:

Pertemuan 5: Perbaikan Citra & Restorasi Noise

Filter spasial penghalusan (Mean Filter, Gaussian Blur), filter penghilang derau garam-merica (Median Filter), penajaman tepi (Laplacian & Unsharp Masking), serta evaluasi metrik PSNR dan MSE.