Anda di halaman 1dari 229

Bab 1

Pengantar Pengolahan Citra

ata atau informasi tidak hanya disajikan dalam bentuk teks, tetapi juga
dapat berupa gambar, audio (bunyi, suara, musik), dan video. Keempat
macam data atau informasi ini sering disebut multimedia. Era teknologi
informasi saat ini tidak dapat dipisahkan dari multimedia. Situs web (website) di
Internet dibuat semenarik mungkin dengan menyertakan visualisasi berupa
gambar atau video yang dapat diputar. Beberapa waktu lalu istilah SMS (Short
Message Service) begitu populer bagi pengguna telepon genggam (handphone
atau HP). Tetapi, saat ini orang tidak hanya dapat mengirim pesan dalam bentuk
teks, tetapi juga dapat mengirim pesan berupa gambar maupun video, yang
dikenal dengan layanan MMS (Multimedia Message Service).
Citra (image)1 istilah lain untuk gambar sebagai salah satu komponen
multimedia memegang peranan sangat penting sebagai bentuk informasi visual.
Citra mempunyai karakteristik yang tidak dimiliki oleh data teks, yaitu citra kaya
dengan informasi. Ada sebuah peribahasa yang berbunyi sebuah gambar
bermakna lebih dari seribu kata (a picture is more than a thousand words).
Maksudnya tentu sebuah gambar dapat memberikan informasi yang lebih banyak
daripada informasi tersebut disajikan dalam bentuk kata-kata (tekstual).
Bab pertama ini berisi pembahasan mengenai citra dan pengolahannya. Selain itu,
di dalam bab ini dipaparkan pula bidang-bidang yang berkaitan dengan pengolahan
citra, seperti grafika komputer dan pengenalan pola.
1

Di dalam buku ini, kata gambar dan citra digunakan secara bergantian, namun keduanya
mengacu pada objek yang sama. Kata citra akan lebih banyak digunakan pada materi yang
berkaitan dengan konseptual dan teknis, sementara kata gambar digunakan jika mengacu pada
objek yang dibicarakan dalam kehidupan sehari-hari.

Bab 1_Pengantar Pengolahan Citra

1.1 Citra
Secara harafiah, citra (image) adalah gambar pada bidang dwimatra (dua
dimensi). Gambar 1.1 adalah citra seorang gadis model yang bernama Lena, dan
gambar di sebelah kanannya adalah citra kapal di sebuah pelabuhan. Ditinjau dari
sudut pandang matematis, citra merupakan fungsi menerus (continue) dari
intensitas cahaya pada bidang dwimatra. Sumber cahaya menerangi objek, objek
memantulkan kembali sebagian dari berkas cahaya tersebut. Pantulan cahaya ini
ditangkap oleh oleh alat-alat optik, misalnya mata pada manusia, kamera,
pemindai (scanner), dan sebagainya, sehingga bayangan objek yang disebut citra
tersebut terekam.
Citra sebagai keluaran dari suatu sistem perekaman data dapat bersifat [MUR92]:
1. optik berupa foto,
2. analog berupa sinyal video seperti gambar pada monitor televisi,
3. digital yang dapat langsung disimpan pada suatu pita magnetik.
Citra yang dimaksudkan di dalam keseluruhan isi buku ini adalah citra diam
(still images). Citra diam adalah citra tunggal yang tidak bergerak. Gambar 1.1
adalah dua buah citra diam. Untuk selanjutnya, citra diam kita sebut citra saja.

(b) Kapal

(a) Lena
Gambar 1.1 Citra Lena dan citra kapal

Citra bergerak (moving images) adalah rangkaian citra diam yang ditampilkan
secara beruntun (sekuensial) sehingga memberi kesan pada mata kita sebagai
gambar yang bergerak. Setiap citra di dalam rangkaian itu disebut frame.
Gambar-gambar yang tampak pada film layar lebar atau televisi pada hakikatnya
terdiri atas ratusan sampai ribuan frame.
2

Pengolahan Citra Digital

1.2 Definisi Pengolahan Citra


Meskipun sebuah citra kaya informasi, namun seringkali citra yang kita miliki
mengalami penurunan mutu (degradasi), misalnya mengandung cacat atau derau
(noise), warnanya terlalu kontras, kurang tajam, kabur (blurring), dan sebagainya.
Tentu saja citra semacam ini menjadi lebih sulit diinterpretasi karena informasi
yang disampaikan oleh citra tersebut menjadi berkurang.
Agar citra yang mengalami gangguan mudah diinterpretasi (baik oleh manusia
maupun mesin), maka citra tersebut perlu dimanipulasi menjadi citra lain yang
kualitasnya lebih baik. Bidang studi yang menyangkut hal ini adalah pengolahan
citra (image processing).
Pengolahan citra adalah pemrosesan citra, khususnya dengan menggunakan
komputer, menjadi citra yang kualitasnya lebih baik. Sebagai contoh, citra burung
nuri pada Gambar 1.2 (a) tampak agak gelap, lalu dengan operasi pengolahan
citra kontrasnya diperbaiki sehingga menjadi lebih terang dan tajam (b).
Umumnya, operasi-operasi pada pengolahan citra diterapkan pada citra bila
[JAI89]:
1. perbaikan atau memodifikasi citra perlu dilakukan untuk meningkatkan
kualitas penampakan atau untuk menonjolkan beberapa aspek informasi yang
terkandung di dalam citra,
2. elemen di dalam citra perlu dikelompokkan, dicocokkan, atau diukur,
3. sebagian citra perlu digabung dengan bagian citra yang lain.

(a)

(b)

Gambar 1.2. (a) Citra burung nuri yang agak gelap, (b) Citra burung yang telah diperbaiki kontrasnya
sehingga terlihat jelas dan tajam

Bab 1_Pengantar Pengolahan Citra

Di dalam bidang komputer, sebenarnya ada tiga bidang studi yang berkaitan
dengan data citra, namun tujuan ketiganya berbeda, yaitu:
1. Grafika Komputer (computer graphics).
2. Pengolahan Citra (image processing).
3. Pengenalan Pola (pattern recognition/image interpretation).
Hubungan antara ketiga bidang (grafika komputer, pengolahan citra, pengenalan
pola) ditunjukkan pada Gambar 1.3.

citra

Pengolahan Citra

Grafika
Komputer

citra

Pengenalan
Pola

deskripsi

deskripsi

Gambar 1.3. Tiga bidang studi yang berkaitan dengan citra

Grafika Komputer bertujuan menghasilkan citra (lebih tepat disebut grafik atau
picture) dengan primitif-primitif geometri seperti garis, lingkaran, dan
sebagainya. Primitif-primitif geometri tersebut memerlukan data deskriptif untuk
melukis elemen-elemen gambar. Contoh data deskriptif adalah koordinat titik,
panjang garis, jari-jari lingkaran, tebal garis, warna, dan sebagainya. Grafika
komputer memainkan peranan penting dalam visualisasi dan virtual reality.
data
deskriptif

Grafika
Komputer

citra

Contoh grafika komputer misalnya menggambar sebuah rumah yang dibentuk


oleh garis-garis lurus, dengan data masukan berupa koordinat awal dan koordinat
ujung garis (Gambar 1.4).

Pengolahan Citra Digital

Program:

Gambar hasil:

Line(0, 0, 0, 40)
Line(0, 40, 60, 60)
Line(40, 60, 80, 40)
Line(0, 40, 80, 40)
Line(80, 40, 80, 0)
Line(80, 0, 0, 0)
Line(20, 0, 25, 25)
Line(25, 25, 35, 25)
Line(35, 25, 35, 0)

(a)
(b)
Gambar 1.4. (a) Program Grafika Komputer untuk membuat gambar rumah (b)

Pengolahan Citra bertujuan memperbaiki kualitas citra agar mudah diinterpretasi


oleh manusia atau mesin (dalam hal ini komputer). Teknik-teknik pengolahan
citra mentransformasikan citra menjadi citra lain. Jadi, masukannya adalah citra
dan keluarannya juga citra, namun citra keluaran mempunyai kualitas lebih baik
daripada citra masukan. Termasuk ke dalam bidang ini juga adalah pemampatan
citra (image compression).

citra

Pengolahan
Citra

citra

Pengubahan kontras citra seperti pada Gambar 1.2 adalah contoh operasi
pengolahan citra. Contoh operasi pengolahan citra lainnya adalah penghilangan
derau (noise) pada citra Lena (Gambar 1.4). Citra Lena yang di sebelah kiri
mengandung derau berupa bintik-bintik putih (derau). Dengan operasi penapisan
(filtering), yang akan dijelaskan di dalam Bab 7, derau pada citra masukan ini
dapat dikurangi sehingga dihasilkan citra Lena yang kualitasnya lebih baik.

Bab 1_Pengantar Pengolahan Citra

(a)

(b)

Gambar 1.4. (a) Citra Lena yang mengandung derau, (b) hasil dari operasi penapisan derau.

Pengenalan Pola mengelompokkan data numerik dan simbolik (termasuk citra)


secara otomatis oleh mesin (dalam hal ini komputer). Tujuan pengelompokan
adalah untuk mengenali suatu objek di dalam citra. Manusia bisa mengenali objek
yang dilihatnya karena otak manusia telah belajar mengklasifikasi objek-objek di
alam sehingga mampu membedakan suatu objek dengan objek lainnya.
Kemampuan sistem visual manusia inilah yang dicoba ditiru oleh mesin.
Komputer menerima masukan berupa citra objek yang akan diidentifikasi,
memproses citra tersebut, dan memberikan keluaran berupa deskripsi objek di
dalam citra.

citra

Pengenalan
Pola

deskripsi
objek

Contoh pengenalan pola misalnya citra pada Gambar 1.5 adalah tulisan tangan
yang digunakan sebagai data masukan untuk mengenali karakter A. Dengan
menggunakan suatu algoritma pengenalan pola, diharapkan komputer dapat
mengenali bahwa karakter tersebut adalah A.

Pengolahan Citra Digital

Gambar 1.5. Citra karakter A yang digunakan sebagai masukan untuk pengenalan huruf.

1.3 Computer Vision dan Hubungannya dengan


Pengolahan Citra
Terminologi lain yang berkaitan erat dengan pengolahan citra adalah computer
vision atau machine vision. Pada hakikatnya, computer vision mencoba meniru
cara kerja sistem visual manusia (human vision). Human vision sesungguhnya
sangat kompleks. Manusia melihat objek dengan indera penglihatan (mata), lalu
citra objek diteruskan ke otak untuk diinterpretasi sehingga manusia mengerti
objek apa yang tampak dalam pandangan matanya. Hasil interpretasi ini mungkin
digunakan untuk pengambilan keputusan (misalnya menghindar kalau melihat
mobil melaju di depan).
Computer vision merupakan proses otomatis yang mengintegrasikan sejumlah
besar proses untuk persepsi visual, seperti akuisisi citra, pengolahan citra,
klasifikasi, pengenalan (recognition), dan membuat keputusan.
Computer vision terdiri dari teknik-teknik untuk mengestimasi ciri-ciri objek di
dalam citra, pengukuran ciri yang berkaitan dengan geometri objek, dan
menginterpretasi informasi geometri tersebut. Mungkin berguna bagi anda untuk
mengingat persamaan [JAI95] berikut:
Vision = Geometry + Measurement + Interpretation

(1.1)

Proses-proses di dalam computer vision dapat dibagi menjadi tiga aktivitas:


1. Memperoleh atau mengakuisisi citra digital.
2. Melakukan teknik komputasi untuk memperoses atau memodifikasi data citra
(operasi-operasi pengolahan citra).
3. Menganalisis dan menginterpretasi citra dan menggunakan hasil pemrosesan
untuk tujuan tertentu, misalnya memandu robot, mengontrol peralatan,
memantau proses manufaktur, dan lain-lain.

Bab 1_Pengantar Pengolahan Citra

[SCH89] mengklasifikasikan proses-proses di dalam computer vision dalam


hirarkhi sebagai berikut :
Hirarkhi Pemrosesan
preprocessing

Contoh Algoritma
noise removal
contrast enhancement

lowest-level feature extraction

edge detection
texture detection

intermediate-level feature
identification

connectivity
pattern matching
boundary coding

high-level scene interpretation


via images

model-base recognition

Dari penjelasan di atas, dapat kita lihat bahwa pengolahan citra dan pengenalan
pola merupakan bagian dari computer vision. Pengolahan citra merupakan proses
awal (preprocessing) pada computer vision, sedangkan pengenalan pola merupakan
proses untuk menginterpretasi citra. Teknik-teknik di dalam pengenalan pola
memainkan peranan penting dalam computer vision untuk mengenali objek.
Jika dihubungkan dengan grafika komputer, maka computer vision merupakan
kebalikannya. Grafika komputer membentuk (sintesis) citra, sedangkan computer
vision mengoraknya (analisis). Pada masa awal kedua bidang ini, tidak ada
hubungan antara keduanya, tetapi beberapa tahun belakangan kedua bidang
tersebut berkembang semakin dekat. Computer vision menggunakan representasi
kurva dan permukaan dan beberapa teknik lain dari grafika komputer, sedangkan
grafika komputer menggunakan teknik-teknik di dalam computer vision untuk
memuat citra realistik (virtual reality) [JAI95].

1.4 Operasi Pengolahan Citra


Operasi-operasi yang dilakukan di dalam pengolahan citra banyak ragamnya.
Namun, secara umum, operasi pengolahan citra dapat diklasifikasikan dalam
beberapa jenis sebagai berikut:
1. Perbaikan kualitas citra (image enhancement).
8

Pengolahan Citra Digital

Jenis operasi ini bertujuan untuk memperbaiki kualitas citra dengan cara
memanipulasi parameter-parameter citra. Dengan operasi ini, ciri-ciri khusus
yang terdapat di dalam citra lebih ditonjolkan.
Contoh-contoh operasi perbaikan citra:
a. perbaikan kontras gelap/terang
b. perbaikan tepian objek (edge enhancement)
c. penajaman (sharpening)
d. pembrian warna semu (pseudocoloring)
e. penapisan derau (noise filtering)
Gambar 1.6 adalah contoh operasi penajaman. Operasi ini menerima
masukan sebuah citra yang gambarnya hendak dibuat tampak lebih tajam.
Bagian citra yang ditajamkan adalah tepi-tepi objek.

(a)

(b)

Gambar 1.6 (a) Citra Lena asli, (b) Citra Lena setelah ditajamkan

2. Pemugaran citra (image restoration).


Operasi ini bertujuan menghilangkan/meminimumkan cacat pada citra.
Tujuan pemugaran citra hampir sama dengan operasi perbaikan citra.
Bedanya, pada pemugaran citra penyebab degradasi gambar diketahui.
Contoh-contoh operasi pemugaran citra:
a. penghilangan kesamaran (deblurring).
b. penghilangan derau (noise)
Gambar 1.7 adalah contoh operasi penghilangan kesamaran. Citra masukan
adalah citra yang tampak kabur (blur). Kekaburan gambar mungkin
disebabkan pengaturan fokus lensa yang tidak tepat atau kamera bergoyang
pada pengambilan gambar. Melalui operasi deblurring, kualitas citra
masukan dapat diperbaiki sehingga tampak lebih baik.

Bab 1_Pengantar Pengolahan Citra

(a)

(b)

Gambar 1.7 Kiri: Citra Lena yang kabur (blur), kanan: citra Lena setelah deblurring

3. Pemampatan citra (image compression).


Jenis operasi ini dilakukan agar citra dapat direpresentasikan dalam bentuk
yang lebih kompak sehingga memerlukan memori yang lebih sedikit. Hal
penting yang harus diperhatikan dalam pemampatan adalah citra yang telah
dimampatkan harus tetap mempunyai kualitas gambar yang bagus. Contoh
metode pemampatan citra adalah metode JPEG. Perhatikan Gambar 1.8.
Gambar sebelah kiri adalah citra kapal yang berukuran 258 KB. Hasil
pemampatan citra dengan metode JPEG dapat mereduksi ukuran citra semula
sehingga menjadi 49 KB saja.

(a)

(b)

Gambar 1.8. (a) Citra boat.bmp (258 KB) sebelum dimampatkan, (b) citra boat.jpg (49 KB)
sesudah dimampatkan.

10

Pengolahan Citra Digital

4. Segmentasi citra (image segmentation).


Jenis operasi ini bertujuan untuk memecah suatu citra ke dalam beberapa
segmen dengan suatu kriteria tertentu. Jenis operasi ini berkaitan erat dengan
pengenalan pola.
5. Pengorakan citra (image analysis)
Jenis operasi ini bertujuan menghitung besaran kuantitif dari citra untuk
menghasilkan deskripsinya. Teknik pengorakan citra mengekstraksi ciri-ciri
tertentu yang membantu dalam identifikasi objek. Proses segmentasi
kadangkala diperlukan untuk melokalisasi objek yang diinginkan dari
sekelilingnya.
Contoh-contoh operasi pengorakan citra:
a. Pendeteksian tepi objek (edge detection)
b. Ekstraksi batas (boundary)
c. Representasi daerah (region)
Gambar 1.9 adalah contoh operasi pendeteksian tepi pada citra Camera.
Operasi ini menghasilkan semua tepi (edge) di dalam citra.

(a)

(b)

Gambar 1.9. (a) Citra camera, (b) citra hasil pendeteksian seluruh tepi

6. Rekonstruksi citra (image reconstruction)


Jenis operasi ini bertujuan untuk membentuk ulang objek dari beberapa citra
hasil proyeksi. Operasi rekonstruksi citra banyak digunakan dalam bidang
medis. Misalnya beberapa foto rontgen dengan sinar X digunakan untuk
membentuk ulang gambar organ tubuh.

Bab 1_Pengantar Pengolahan Citra

11

1.5 Aplikasi Pengolahan Citra dan Pengenalan


Pola
Pengolahan citra mempunyai aplikasi yang sangat luas dalam berbagai bidang
kehidupan. Di bawah ini disebutkan beberapa aplikasi dalam beberapa bidang
[MEN89].
1. Bidang perdagangan
(a) Pembacaan kode batang (bar code) yang tertera pada barang (umum
digunakan di pasar swalayan/supermarket).
(b) Mengenali huruf/angka pada suatu formulir secara otomatis.
2. Bidang militer
(a) Mengenali sasaran peluru kendali melalui sensor visual.
(b) Mengidentifikasi jenis pesawat musuh.
3. Bidang kedokteran
(a) Pengolahan citra sinar X untuk mammografi (deteksi kanker payudara)
(b) NMR (Nuclear Magnetic Resonance)
(c) Mendeteksi kelainan tubuh dari foto sinar X.
(d) Rekonstruksi foto janin hasil USG
4. Bidang biologi
Pengenalan jenis kromosom melalui gambar mikroskopik
5. Komunikasi data
Pemampatan citra yang ditransmisi.
6. Hiburan
Pemampatan video (MPEG)
7. Robotika
Visualy-guided autonomous navigation
8. Pemetaan
Klasifikasi penggunaan tanah melalui foto udara/LANDSAT
9. Geologi
Mengenali jenis batu-batuan melalui foto udara/LANDSAT
10. Hukum
(a) Pengenalan sidik jari
(b) Pengenalan foto narapidana.

12

Pengolahan Citra Digital

1.6 Citra Uji


Pada pembahasan operasi-operasi pengolahan citra, biasanya penulis buku/
literatur menggunakan beberapa contoh citra uji (test images) atau sampel.
Terdapat sejumlah citra yang sering dipakai di dalam literatur pengolahan citra
atau computer vision. Citra-citra tersebut banyak ditemukan di situs-situs web
universitas yang menawarkan mata kuliah (course) pengolahan citra. Anda bisa
mencari citra tersebut dengan menggunakan bantuan mesin pencari Google
(www.google.com) Kebanyakan dari citra tersebut merupakan citra klasik dalam
pengolahan citra. Inilah beberapa diantaranya (dengan keterangan nama citra dan
ukurannya, lebar tinggi, dalam satuan pixel):

Lena, 256 256

Peppers 512 512

Zelda 512 512

Bird 256 256

Camera 256 256

Mandrill 512 512

Barbara 512 512

Boat 512 512

Slope 256 256

Bab 1_Pengantar Pengolahan Citra

13

San Fransisco 256 256

Collie 256 256

Squares 256 256

Text 256 256

Goldhill 512 512

Eltoro 512 512

14

Circle 256 256

Mountain 640 480

Girl 256 256

Pengolahan Citra Digital

Bab 2

Pembentukan Citra

itra ada dua macam: citra kontinu dan citra diskrit. Citra kontinu dihasilkan dari
sistem optik yang menerima sinyal analog, misalnya mata manusia dan
kamera analog. Citra diskrit dihasilkan melalui proses digitalisasi terhadap
citra kontinu. Beberapa sistem optik dilengkapi dengan fungsi digitalisasi sehingga
ia mampu menghasilkan citra diskrit, misalnya kamera digital dan scanner. Citra
diskrit disebut juga citra digital. Komputer digital yang umum dipakai saat ini
hanya dapat mengolah citra digital. Bab 2 ini berisi konsep pembentukan citra,
baik citra kontinu maupun citra digital.

2.1 Model Citra


Pada bagian kuliah yang pertama sudah dijelaskan bahwa citra merupakan fungsi
malar (kontinyu) dari intensitas cahaya pada bidang dwimatra. Secara matematis
fungsi intensitas cahaya pada bidang dwimatra disimbolkan dengan f(x, y), yang
dalam hal ini:
(x, y) : koordinat pada bidang dwimatra
f(x, y) : intensitas cahaya (brightness) pada titik (x, y)
Gambar 2.1 memperlihatkan posisi koordinat pada bidang citra. Sistem koordinat
yang diacu adalah sistem koordinat kartesian, yang dalam hal ini sumbu mendatar
menyatakan sumbu-X, dan sumbu tegak menyatakan sumbu-Y.

Bab 2_Pembentukan Citra

15

Gambar 2.1. Cara menentukan koodinat titik di dalam citra.

Karena cahaya merupakan bentuk energi, maka intensitas cahaya bernilai antara 0
sampai tidak berhingga,
0 f(x, y) <
Nilai f(x, y) sebenarnya adalah hasil kali dari [GON77]:
1. i(x, y) =jumlah cahaya yang berasal dari sumbernya (illumination), nilainya
antara 0 sampai tidak berhingga, dan
2. r(x, y) = derajat kemampuan obyek memantulkan cahaya (reflection),
nilainya antara 0 dan 1.
Gambar 2.2 memperlihatkan proses pembentukan intensitas cahaya. Sumber
cahaya menyinari permukaan objek. Jumlah pancaran (iluminasi) cahaya yang
diterima objek pada koodinat (x, y) adalah i(x, y). Objek memantulkan cahaya
yang diterimanya dengan derajat pantulan r(x, y). Hasil kali antara i(x, y) dan r(x,
y) menyatakan intensitas cahaya pada koordinat (x, y) yang ditangkap oleh sensor
visual pada sistem optik.
Jadi,
f(x, y) = i(x, y) r(x, y)
yang dalam hal ini,
0 i(x, y) <
0 r(x, y) 1
16

Pengolahan Citra Digital

sehingga
0 f(x, y) <

sumber
cahaya

i(x,y)

permukaan

normal

f(x,y)

Gambar 2.2 Pembentukan Citra [PIT93]

Nilai i(x, y) ditentukan oleh sumber cahaya, sedangkan r(x, y) ditentukan oleh
karakteristik objek di dalam gambar. Nilai r(x,y) = 0 mengindikasikan penerapan
total, sedangkan r(x,y) = 1 menyatakan pemantulan total. Jika permukaan
mempunyai derajat pemantulan nol, maka fungsi intensitas cahaya, f(x, y), juga
nol. Sebaliknya, jika permukaan mempunyai derajat pemantulan 1, maka fungsi
intensitas cahaya sama dengan iluminasi yang diterima oleh permukaan tersebut.
Contoh-contoh nilai i(x, y):
1. pada hari cerah, matahari menghasilkan iluminasi i(x, y) sekitar 9000 foot
candles,
2. pada hari mendung (berawan), matahari menghasilkan iluminasi i(x, y)
sekitar 1000 foot candles,
3. pada malam bulan purnama, sinar bulan menghasilkan iluminasi i(x, y)
sekitar 0.01 foot candle.
Contoh nilai r(x, y)
1. benda hitam mempunyai r(x, y) = 0.01,
2. dinding putih mempunyai r(x, y) = 0.8,
3. benda logam dari stainlessteel mempunyai r(x, y) = 0.65,
4. salju mempunyai r(x, y) = 0.93.
Bab 2_Pembentukan Citra

17

Intensitas f dari gambar hitam putih pada titik (x, y) disebut derajat keabuan
(grey level), yang dalam hal ini derajat keabuannya bergerak dari hitam ke putih,
sedangkan citranya disebut citra hitam-putih (greyscale image) atau citra
monokrom (monochrome image).
Derajat keabuan memiliki rentang nilai dari lmin sampai lmax, atau
lmin < f < lmax
Selang (lmin, lmax) disebut skala keabuan.
Biasanya selang (lmin, lmax) sering digeser untuk alasan-alasan praktis menjadi
selang [0, L], yang dalam hal ini nilai intensitas 0 menyatakan hitam, nilai
intensitas L menyatakan putih, sedangkan nilai intensitas antara 0 sampai L
bergeser dari hitam ke putih.
Sebagai contoh, citra hitam-putih dengan 256 level artinya mempunyai skala abu
dari 0 sampai 255 atau [0, 255], yang dalam hal ini nilai intensitas 0 menyatakan
hitam, nilai intensitas 255 menyatakan putih, dan nilai antara 0 sampai 255
menyatakan warna keabuan yang terletak antara hitam dan putih.
Citra hitam-putih disebut juga citra satu kanal, karena warnanya hanya ditentukan
oleh satu fungsi intensitas saja. Citra berwarna (color images) dikenal dengan
nama citra spektral, karena warna pada citra disusun oleh tiga komponen warna
yang disebut komponen RGB, yaitu merah (red), hijau (green), dan biru (blue).
Intensitas suatu titik pada citra berwarna merupakan kombinasi dari tiga
intensitas: derajat keabuan merah (fmerah(x,y)), hijau (fhijau(x,y)), dan biru (fbiru(x,y)).

2.2 Digitalisasi Citra


Agar dapat diolah dengan dengan komputer digital, maka suatu citra harus
direpresentasikan secara numerik dengan nilai-nilai diskrit. Representasi citra dari
fungsi malar (kontinu) menjadi nilai-nilai diskrit disebut digitalisasi. Citra yang
dihasilkan inilah yang disebut citra digital (digital image). Pada umumnya citra
digital berbentuk empat persegipanjang, dan dimensi ukurannya dinyatakan
sebagai tinggi lebar (atau lebar panjang).
Citra digital yang tingginya N, lebarnya M, dan memiliki L derajat keabuan dapat
dianggap sebagai fungsi [DUL97]:

0 x M

f(x, y) 0 y N
0 f L

18

Pengolahan Citra Digital

Citra digital yang berukuran N M lazim dinyatakan dengan matriks yang


berukuran N baris dan M kolom sebagai berikut:

f (0,0)
f (1,0)
f(x, y)

f ( N 1,0)

f (0,1)

...

f (1,1)
...
M
M
f ( N 1,1) ...

f (1, M )

f ( N 1, M 1)
f (0, M )

Indeks baris (i) dan indeks kolom (j) menyatakan suatu koordinat titik pada citra,
sedangkan f(i, j) merupakan intensitas (derajat keabuan) pada titik (i, j).
Masing-masing elemen pada citra digital (berarti elemen matriks) disebut image
element, picture element atau pixel atau pel. Jadi, citra yang berukuran N M
mempunyai NM buah pixel. Sebagai contoh, misalkan sebuah berukuran 256
256 pixel dan direpresentasikan secara numerik dengan matriks yang terdiri dari
256 buah baris (di-indeks dari 0 sampai 255) dan 256 buah kolom (di-indeks dari
0 sampai 255) seperti contoh berikut:
0
0

220

M
M

221

134
167
187
M
M
219

145
201
189
M
M
210

...
...
...
M
M
...

...
...
...
M
M
...

231
197

120

M
M

156

Pixel pertama pada koordinat (0, 0) mempunyai nilai intensitas 0 yang berarti
warna pixel tersebut hitam, pixel kedua pada koordinat (0, 1) mempunyai
intensitas 134 yang berarti warnanya antara hitam dan putih, dan seterusnya.
Proses digitalisasi citra ada dua macam:
1. Digitalisasi spasial (x, y), sering disebut sebagai penerokan (sampling).
2. Digitalisasi intensitas f(x, y), sering disebut sebagai kuantisasi.

Penerokan
Citra kontinu diterok pada grid-grid yang berbentuk bujursangkar (kisi-kisi dalam
arah horizontal dan vertikal). Perhatikan Gambar 2.3.

Bab 2_Pembentukan Citra

19

Penerok

Citra kontinu

Citra digital
Gambar 2.3. Penerokan secara spasial

Terdapat perbedaan antara koordinat gambar (yang diterok) dengan koordinat


matriks (hasil digitalisasi). Titik asal (0, 0) pada gambar dan elemen (0, 0) pada
matriks tidak sama. Koordinat x dan y pada gambar dimulai dari sudut kiri bawah,
sedangkan penomoran pixel pada matriks dimulai dari sudut kiri atas (Gambar
2.4).

M-1

Dy

i
Dx

M pixel
N pixel

Dy

N-1
(0,0)
x

Dx

Gambar 2.4. Hubungan antara elemen gambar dan elemen matriks [GAL90]

Dalam hal ini,

i=x
,0iN1
j = (M y)
,0jM1
x = Dx/N increment
y = Dy/M increment
20

Pengolahan Citra Digital

N = jumlah maksimum pixel dalam satu baris


M = jumlah maksimum pixel dalam satu kolom
Dx = lebar gambar (dalam inchi)
Dy = tinggi gambar (dalam inchi)
Catatan: beberapa referensi menggunakan (1,1) ketimbang (0,0) sebagai
koordinat elemen pertama di dalam matriks.
Elemen (i, j) di dalam matriks menyatakan rata-rata intensitas cahaya pada area
citra yang direpresentasikan oleh pixel. Sebagai contoh, tinjau citra biner yang
hanya mempunyai 2 derajat keabuan, 0 (hitam) dan 1 (putih). Sebuah gambar
yang berukuran 10 10 inchi dinyatakan dalam matriks yang berukuran 5 4,
yaitu lima baris dan 4 kolom. Tiap elemen gambar lebarnya 2.5 inchi dan
tingginya 2 inci akan diisi dengan sebuah nilai bergantung pada rata-rata
intensitas cahaya pada area tersebut (Gambar 2.5).
Area 2.5 2.0 inchi pada sudut kiri atas gambar dinyatakan dengan lokasi (0, 0)
pada matriks 5 4 yang mengandung nilai 0 (yang berarti tidak ada intensitas
cahaya). Area 2.5 2.0 inchi pada sudut kanan bawah gambar dinyatakan dengan
lokasi (4, 3) pada matriks 5 4 yang mengandung nilai 1 (yang berarti iluminasi
maksimum).
hitam

10 inchi

putih
0
0

0
?

?
?

?
?

?
?

?
?

?
?

?
?

?
?

10 inchi

(a)

(b)

Gambar 2.5 (a) Gambar yang diterok, (b) matriks yang merepresentasikan gambar [GAL90]

Untuk memudahkan implementasi, jumlah terokan biasanya diasumsikan


perpangkatan dari dua,

N = 2n
yang dalam hal ini,
N = jumlah penerokan pada suatu baris/kolom
n = bilangan bulat positif
Contoh ukuran penerokan: 256 256 pixel, 128 256 pixel.
Bab 2_Pembentukan Citra

21

Pembagian gambar menjadi ukuran tertentu menentukan resolusi (yaitu derajat


rincian yang dapat dilihat) spasial yang diperoleh. Semakin tinggi resolusinya,
yang berarti semakin kecil ukuran pixel (atau semakin banyak jumlah pixel-nya),
semakin halus gambar yang diperoleh karena informasi yang hilang akibat
pengelompokan derajat keabuan pada penerokan semakin kecil.
Gambar 2.6 mempelihatkan efek perbedaan penerokan pada citra Lena, masingmasing 256 256, 128 128, 64 64, dan 32 32 pixel, seluruh citra
mempunyai jumlah derajat keabuan sama, yaitu 256 buah. Karena area tampilan
untuk keempat citra Lena pada Gambar 2.6 sama, (yaitu 256 256 pixel), maka
pixel-pixel citra yang beresolusi rendah diduplikasi untuk mengisi seluruh bidang
tampilan. Hal ini menghasilkan efek blok-blok yang sering diamati pada gambar
beresolusi rendah pada umumnya.

(a) 256 256 pixel

(b) 128 128 pixel

(c) 64 64 pixel

(d) 32 32 pixel

Gambar 2.6. Ukuran penerokan yang berbeda-beda menghasilkan kualitas citra yang berbeda
pula Kuantisasi

22

Pengolahan Citra Digital

Langkah selanjutnya setelah proses penerokan adalah kuantisasi. Proses


kuantisasi membagi skala keabuan (0, L) menjadi G buah level yang dinyatakan
dengan suatu harga bilangan bulat (integer), biasanya G diambil perpangkatan
dari 2,

G = 2m
yang dalam hal ini,

G = derajat keabuan
m = bilangan bulat positif
Skala Keabuan

Rentang Nilai Keabuan

Pixel Depth

21
22
23
28

0, 1
0 sampai 7
0 sampai 15
0 sampai 255

1 bit
2 bit
3 bit
8 bit

(2 nilai)
(4 nilai)
(16 nilai)
(256 nilai)

Hitam dinyatakan dengan nilai derajat keabuan terendah, yaitu 0, sedangkan putih
dinyatakan dengan nilai derajat keabuan tertinggi, misalnya 15 untuk 16 level.
Jumlah bit yang dibutuhkan untuk mereprentasikan nilai keabuan pixel disebut
kedalaman pixel (pixel depth). Citra sering diasosiasikan dengan kedalaman
pixel-nya. Jadi, citra dengan kedalaman 8 bit disebut juga citra 8-bit (atau citra
256 warna)
Pada kebanyakan aplikasi, citra hitam-putih dikuantisasi pada 256 level dan
membutuhkan 1 byte (8 bit) untuk representasi setiap pixel-nya (G = 256 = 28 ).
Citra biner (binary image) hanya dikuantisasi pada dua level: 0 dan 1. Tiap pixel
pada citra biner cukup direpresentasikan dengan 1 bit, yang mana bit 0 berarti
htam dan bit 1 berarti putih.
Besarnya daerah derajat keabuan yang digunakan menentukan resolusi kecerahan
dari gambar yang diperoleh. Sebagai contoh, jika digunakan 3 bit untuk
menyimpan harga bilangan bulat, maka jumlah derajat keabuan yang diperoleh
hanya 8, jika digunakan 4 bit, maka derajat keabuan yang diperoleh adalah 16
buah. Semakin banyak jumlah derajat keabuan (berarti jumlah bit kuantisasinya
makin banyak), semakin bagus gambar yang diperoleh karena kemenerusan
derajat keabuan akan semakin tinggi sehingga mendekati citra aslinya.
Gambar 2.7 mempelihatkan efek perbedaan kuantisasi citra Lena yang berukuran
256 256 pixel, masing-masing 256 level dan 128 level keabuan.

Bab 2_Pembentukan Citra

23

(a) 256 level

(b) 128 level

Gambar 2.7. Citra Lena yang dikuantisasi pada 256 level dan 128 level

Penyimpanan citra digital yang diterok menjadi N M buah pixel dan dikuantisasi
menjadi G = 2m level derajat keabuan membutuhkan memori sebanyak

b=NMm
bit. Sebagai contoh, menyimpan citra Lena yang berukuran dengan 512 512
pixel dengan 256 derajat keabuan membutuhkan memori sebesar 512 512 8
bit = 2048.000 bit.
Secara keseluruhan, resolusi gambar ditentukan oleh N dan m. Makin tinggi nilai
N (atau M) dan m, maka citra yang dihasilkan semakin bagus kualitasnya
(mendekati citra menerus). Untuk citra dengan jumlah objek yang sedikit,
kualitas citra ditentukan oleh nilai m. Sedangkan untuk citra dengan jumlah objek
yang banyak, kualitasnya ditentukan oleh N (atau M).
Seluruh tahapan proses digitalisasi (penerokan dan kuantisasi) di atas dikenal
sebagai konversi analog-ke-digital, yang biasanya menyimpan hasil proses di
dalam media penyimpanan.

24

Pengolahan Citra Digital

2.3 Elemen-elemen Citra Digital


Citra digital mengandung sejumlah elemen-elemen dasar. Elemen-elemen dasar
tersebut dimanipulasi dalam pengolahan citra dan dieksploitasi lebih lanjut dalam
computer vision. Elemen-elemen dasar yang penting diantaranya adalah:
1. Kecerahan (brightness).
Kecerahan adalah kata lain untuk intensitas cahaya. Sebagaimana telah dijelaskan
pada bagian penerokan, kecerahan pada sebuah titik (pixel) di dalam citra
bukanlah intensitas yang riil, tetapi sebenarnya adalah intensitas rata-rata dari
suatu area yang melingkupinya. Sistem visual manusia mampu menyesuaikan
dirinya dengan tingkat kecerahan (brightness level) mulai dari yang paling rendah
sampai yang paling tinggi dengan jangkauan sebesar 1010 [MEN89].
2. Kontras (contrast).
Kontras menyatakan sebaran terang (lightness) dan gelap (darkness) di dalam
sebuah gambar. Citra dengan kontras rendah dicirikan oleh sebagian besar
komposisi citranya adalah terang atau sebagian besar gelap. Pada citra dengan
kontras yang baik, komposisi gelap dan terang tersebar secara merata.
3. Kontur (contour)
Kontur adalah keadaan yang ditimbulkan oleh perubahan intensitas pada pixelpixel yang bertetangga. Karena adanya perubahan intensitas inilah mata kita
mampu mendeteksi tepi-tepi (edge) objek di dalam citra.
4. Warna (color)
Warna adalah persepsi yang dirasakan oleh sistem visual manusia terhadap panjang
gelombang cahaya yang dipantulkan oleh objek. Setiap warna mempunyai panjang
gelombang () yang berbeda. Warna merah mempunyai panjang gelombang
paling tinggi, sedangkan warna ungu (violet) mempunyai panjang gelombang
paling rendah.

Warna-warna yang diterima oleh mata (sistem visual manusia) merupakan hasil
kombinasi cahaya dengan panjang gelombang berbeda. Penelitian memperlihatkan
bahwa kombinasi warna yang memberikan rentang warna yang paling lebar
adalah red (R), green (G), dan blue (B).
Persepsi sistem visual manusia terhadap warna sangat relatif sebab dipengaruhi
oleh banyak kriteria, salah satunya disebabkan oleh adaptasi yang menimbulkan
distorsi. Misalnya bercak abu-abu di sekitar warna hijau akan tampak keunguunguan (distorsi terhadap ruang), atau jika mata melihat warna hijau lalu
langsung dengan cepat melihat warna abu-abu, maka mata menangkap kesan
warna abu-abu tersebut sebagai warna ungu (distorsi terhadap waktu) [MEN89].

Bab 2_Pembentukan Citra

25

5. Bentuk (shape)
Shape adalah properti intrinsik dari objek tiga dimensi, dengan pengertian bahwa
shape merupakan properti intrinsik utama untuk sistem visual manusia [BAL82].
Manusia lebih sering mengasosiasikan objek dengan bentuknya ketimbang
elemen lainnya (warna misalnya). Pada umumnya, citra yang dibentuk oleh mata
merupakan citra dwimatra (2 dimensi), sedangkan objek yang dilihat umumnya
berbentuk trimatra (3 dimensi). Informasi bentuk objek dapat diekstraksi dari
citra pada permulaaan pra-pengolahan dan segmentasi citra. Salah satu tantangan
utama pada computer vision adalah merepresentasikan bentuk, atau aspek-aspek
penting dari bentuk.
6. Tekstur (texture)
Tekstur dicirikan sebagai distribusi spasial dari derajat keabuan di dalam
sekumpulan pixel-pixel yang bertetangga [JAI95]. Jadi, tekstur tidak dapat
didefinisikan untuk sebuah pixel. Sistem vissual manusia pada hakikatnya tidak
menerima informasi citra secara independen pada setiap pixel, melainkan suatu
citra dianggap sebagai suatu kesatuan. Resolusi citra yang diamati ditentukan
oleh skala pada mana tekstur tersebut dipersepsi. Sebagai contoh, jika kita
mengamati citra lantai berubin dari jarak jauh, maka kita mengamati bahwa
tekstur terbentuk oleh penempatan ubin-ubin secara keseluruhan, bukan dari
persepsi pola di dalam ubin itu sendiri. Tetapi, jika kita mengamati citra yang
sama dari jarak yang dekat, maka hanya beberapa ubin yang tampak dalam
bidanng pengamatan, sehingga kita mempersepsi bahwa tekstur terbentuk oleh
penempatan pola-pola rinci yang menyusun tiap ubin.

2.4 Elemen Sistem Pemrosesan Citra Digital


Secara umum, elemen yang terlibat dalam pemrosesan citra dapat dibagi menjadi
empat komponen:
a. digitizer
b. komputer digital
c. piranti tampilan
d. piranti penyimpanan
Keempat komponen di atas ditunjukkan pada Gambar 2.8 [GON77].

26

Pengolahan Citra Digital

Media
Penyimpanan

Citra

Digitizer

Komputer
Digital

Piranti
Tampilan

Gambar 2.8. Elemen pemrosesan citra

Operasi dari sistem pemrosesan citra tersebut dapat dibagi menjadi empat
kategori prinsip: digitalisasi, pemrosesan, penayangan, dan penyimpanan.

Digitizer (atau digital image acquisition system) merupakan sistem penangkap


citra digital yang melakukan penjelajahan citra dan mengkonversinya ke
representasi numerik sebagai masukan bagi komputer digital. Hasil dari digitizer
adalah matriks yang elemen-elemennya menyatakan nilai intensitas cahaya pada
suatu titik. Contoh digitizer adalah kamera digital, scanner.
Digitizer terdiri dari tiga komponen dasar: sensor citra yang bekerja sebagai
pengukur intensitas cahaya, perangkat penjelajah yang berfungsi merekam hasil
pengukuran intensitas pada seluruh bagian citra, dan pengubah analog-ke-digital
yang berfungsi melakukan penerokan dan kuantisasi.
Komputer digital yang digunakan pada sistem pemroses citra dapat bervariasi
dari komputer mikro sampai komputer besar yang mampu melakukan bermacammacam fungsi pada citra digital resolusi tinggi.

Bab 2_Pembentukan Citra

27

Piranti tampilan peraga berfungsi mengkonversi matriks intensitas yang


merepresentasikan citra ke tampilan yang dapat diinterpretasi oleh mata manusia.
Contoh piranti tampilan adalah monitor peraga dan pencetak (printer).
Media penyimpanan adalah piranti yang mempunyai kapasitas memori besar
sehingga gambar dapat disimpan secara permanen agar dapat diproses lagi pada
waktu yang lain.

28

Pengolahan Citra Digital

Bab 3

Struktur Data untuk Citra Digital


dan Format Citra Bitmap

itra digital diolah dengan menggunakan komputer, oleh karena itu kita
perlu mendefinisikan struktur data untuk merepresentasikan citra di dalam
memori komputer. Matriks adalah struktur data yang tepat untuk
merepresentasikan citra digital. Elemen-elemen matriks dapat diakses secara
langsung melalui indeksnya (baris dan kolom).

Di dalam bab ini kita akan mendefinisikan struktur data matriks untuk citra
digital. Notasi algoritmik yang kita gunakan untuk menjelaskan struktur data ini
(beserta beberapa primitif operasi citra) adalah notasi Bahasa C (lebih tepatnya
notasi ANSI C). Pemrograman citra digital lebih cocok menggunakan Bahasa C
karena Bahasa C mempunyai penanganan tipe pointer yang lebih dinamis
daripada Bahasa Pascal. Pada pembahasan nanti kita akan melihat bahwa struktur
data matriks direpresentasikan dengan menggunakan tipe pointer mengingat
ukuran matriks tidak diketahui sebelum pemrosesan citra digital.

3.1 Matriks
Sebagaimana telah dijelaskan pada Bab 2, citra digital yang berukuran N M
(tinggi = N, lebar = M) lazim dinyatakan dengan matriks N baris dan M kolom
sebagai berikut:

Bab 3_Struktur Data untuk Citra Digital dan Format Citra Bitmap

29

f (0,0 )
f (1,0)
f(x, y)

f ( N 1,0)

f ( 0,1)

...

f (1,1)
M

...
M

f ( N 1,1) ...

f (1, M )

f ( N 1, M 1)
f (0, M )

Untuk citra dengan 256 derajat keabuan, harga setiap elemen matriks adalah
bilangan bulat di dalam selang [0, 255]. Karena itu, kita dapat menggunakan tipe
unsigned char untuk menyatakan tipe elemen matriks. Unsigned char adalah tipe
integer positif di dalam Bahasa C yang rentang nilainya hanya dari 0 sampai 255.
Kita dapat menggunakan matriks statik untuk merepresentasikan citra digital
secara fisik di dalam memori komputer sebagai berikut:
unsigned char f[N][M];

dengan N dan M sudah terdefinisi sebelumnya sebagai suatu konstant. Elemen


matriks diacu dengan f[i][j] , 0 i N 1 dan 0 j M 1.
Pada kebanyakan kasus, ukuran citra tidak diketahui sebelum pemrosesan
dilakukan. Ada kemungkinan ukuran citra yang akan diolah melebihi nilai N dan
M yang sudah ditetapkan di dalam deklarasi struktur data. Oleh karena itu,
representasi citra dengan struktur matriks statik menjadi tidak relevan. Tipe data
yang cocok untuk citra adalah pointer.
Tinjau tipe pointer untuk tabel atau larik (array). Di dalam Bahasa C, elemen
larik a[i] ekivalen dengan *(a+i). Tanda * menyatakan pointer yang
menunjuk pada alamat suatu elemen di memori.
Larik yang berukuran N elemen dapat dibuat secara dinamik pada saat run-time
dengan prosedur alokasi malloc:
unsigned char *a;
a=(unsigned char*) malloc (N * sizeof(unsigned char));

Pernyataan di atas berarti kita meminta komputer mengalokasikan memori untuk


elemen larik a sebanyak N elemen, setiap elemen panjangnya 1 byte (yaitu
panjang byte tipe unsigned char). Nilai N dapat ditetapkan pada saat run-time.
Matriks dapat dianggap sebagai larik satu matra (matra = dimensi) dari vektor
seperti yang ditunjukkan pada Gambar 3.1. Pointer **a menunjuk ke larik
pointer *a[0], *a[1], , *a[N-1], yang masing-masing larik menunjuk ke
baris-baris dari citra.

30

Pengolahan Citra Digital

**a

a[0][0]

a[0][1]

...

a[0][M-1]

*a[1]

a[1][0]

a[1][1]

...

a[1][M-1]

a[N-1][0]

a[N-1][1]

...

a[N-1][M-1]

...

*a[0]

*a[N-1]

Gambar 3.1. Representasi matriks dengan larik pointer [PIT93]

Dengan demikian, deklarasi matriks dinamis untuk citra f adalah sebagai berikut
ini:
unsigned char **f;

atau dengan menggunakan user defined type:


typedef unsigned char **citra;
citra f;

Alokasi memori untuk matriks citra f yang berukuran N M dilakukan pada saat
run-time dengan memanggil fungsi alokasi seperti yang ditunjukkan oleh
Algoritma 3.1.
citra alokasi(int N, int M)
/* Mengalokasikan memori untuk citra f yang berukuran N x M pixel. */
{
int i;
f=(unsigned char**)malloc(N * sizeof(unsigned char*));
if (f==NULL) return(NULL);
/* memori habis */
for (i=0; i<N; i++)
{
f[i]=(unsigned char*)malloc(M*sizeof(unsigned char));
if (f[i]==NULL)
{ /* memori habis, dealokasi semua elemen baris matriks */
dealokasi(f, N);
return(NULL);
}
}
return f;
}

Algoritma 3.1. Alokasi memori untuk matriks citra f

Bab 3_Struktur Data untuk Citra Digital dan Format Citra Bitmap

31

Cara pemanggilan fungsi alokasi adalah dengan menampung keluaran fungsi


dalam peubah yang tipenya sama dengan tipe citra:
f = alokasi(N, M)

Untuk citra berwarna, yang mana setiap nilai intensitas merah, hijau, dan biru
disimpan di dalam matriks r, g, dan b, maka kita harus mengalokasikan memori
untuk ketiga buah matriks tersebut:
r = alokasi(N, M)
g = alokasi(N, M)
b = alokasi(N, M)

Bila citra selesai diproses, maka memori yang dipakai oleh citra tersebut
dikembalikan (dealokasi) kepada sistem. Dealokasi memori untuk matriks citra f
dapat dilakukan dengan memanggil fungsi dealokasi pada Algoritma 3.2.

void dealokasi(citra f, int N)


/* Dealokasi memori dari citra f yang mempunyai N baris pixel */
{
int i;
for (i=0; i<N; i++)
{
free(f[i]); /* bebaskan memori semua elemen pada baris i */
}
free(f);
}

Algoritma 3.2. Dealokasi memori untuk dari citra f

Selain matriks yang merepresentasikan citra, kita mungkin memerlukan matriks


lain yang menyimpan nilai-nilai bertipe riil dan matriks yang menyimpan nilainilai integer (yang rentang nilainya lebih besar daripada unsigned char). Oleh
karena itu, kita perlu mendedinisikan dua tipe matriks lain sebagai berikut:
typedef float **rmatrik;
typedef int **imatriks;

Selain menggunakan Algoritma 3.1, kita juga dapat menggunakan algoritma


pengalokasian memori untuk matriks secara umum (jadi, tidak hanya untuk
matriks citra yang bertipe unsined char saja) yang dibentuk pada saat run-time.
Algoritma pengalokasian memori matriks tersebut ditunjukkan pada Algoritma
3.3. Pada prinsipnya, cara pengalokasian memori untuk matriks pada algoritma
3.3 sama saja dengan Algoritma 3.1, hanya saja Algoritma 3.3 dapat digunakan
untuk mengalokasikan memori matriks yang bertipe apa saja. Dengan demikian,
32

Pengolahan Citra Digital

kita tidak perlu menulis tiga prosedur yang berbeda untuk mengalokasikan
matriks yang bertipe berbeda pula.

void **alokasi(int N, int M, int UkuranElemen)


/* Mengalokasikan memori untuk matriks yang berukuran N x M. Setiap elemen
matriks membutuhkan ruang memori sebesar UkuranElemen byte */
{
int i;
void **larik = (void**)xalloc(N * sizeof(void *)); /* buat array N
elemen */
for (i=0; i<N; i++)
larik[i] = (void*)xalloc(M * UkuranElemen);
return larik;
}

void *xalloc(unsigned ukuran)


/* Mengalokasikan memori dan memeriksa apakah alokasi memori berhasil */
{
void *p = malloc(ukuran);
if (p==NULL)
{
printf("Memori tidak cukup untuk alokasi matriks");
exit(0);
}
return p;
}

Algoritma 3.3. Alokasi memori untuk matriks bertipe sembarang

Untuk mengalokasikan memori untuk citra Image yang berukuran N M elemen


dan setiap elemen bertipe unsigned char, perintahnya di dalam program adalah
sebagai berikut:
Image = (unsigned char**) alokasi (N, M, sizeof(unsined char));

Sedangkan untuk mengalokasikan memori matriks Mat yang berukuran N M


elemen dan setiap elemen bertipe float, perintahnya di dalam program adalah
sebagai berikut:
Mat = (float**) alokasi (N, M, sizeof(float));

Sebagai catatan, semua algoritma alokasi dan dealokasi matriks yang berbasis
stuktur data pointer harus menyertakan pustaka alloc.h di dalam programnya:
#include <alloc.h>

Bab 3_Struktur Data untuk Citra Digital dan Format Citra Bitmap

33

3.2 Menampilkan Citra ke Layar


Citra ditampilkan ke layar peraga jika card grafik tersedia pada komputer yang
digunakan dan card tersebut mampu menghasilkan warna untuk setiap komponen
RGB (Red, Green, Blue). Fungsi baku untuk menampilkan citra adalah
setpixel:
setpixel(unsigned char r,unsigned char g, unsigned char b,
int i,int j);
/* menampilkan pixel dengan komponen rgb pada koordinat i, j */

Prosedur menampilkan citra berwarna yang setiap intensitas merah, hijau, dan
biru disimpan di dalam matriks r, g, dan b selengkapnya ditunjukkan pada
Algoritma 3.4.
void tampilkan_citra(citra r,citra g,citra b, int N,int M)
/* Menampilkan citra yang berukuran N x M pixel ke layar. */
{ int i, j;
for (i=0; i<N; i++)
for (j=0; j<M; j++)
setpixel(r[i][j],g[i][j],b[i][j],j,i);
}

Algoritma 3.4. Prosedur menampilkan citra ke layar

Jika citra yang ditampilkan adalah citra hitam-putih (matriks intensitas pixel-nya
adalah f), maka perubahan yang dilakukan adalah pada:
setpixel(f[i][j],f[i][j],f[i][j], j, i);

Pixel (i,j) ditampilkan pada posisi (j,i) di layar karena perbedaan sistem koordinat
yang digunakan pada representasi citra dan layar peraga (lihat Gambar 3.2).
(0,0)

(0,0)

f(i,j)

x
f(x,y)

Koordinat citra

Koordinat layar

Gambar 3.2. Perbedaan antara koordinat citra dan koordinat layar

34

Pengolahan Citra Digital

Prosedur menampilkan citra pada platform Windows berbeda dengan prosedur di


atas. Algoritma 3.5 berikut ini adalah prosedur menampilkan citra hitam-putih
dengan 256 derajat keabuan di lingkungan Windows.

void WIN_tampilkan_citra(citra Image, int N, int M)


/* Menampilkan citra Image yang berukuran N x M di lingkungan Windows */
{
HDC
MemDC;
/* Handle ke memory device context */
HBITMAP mbitmap;
/* Handle ke citra */
HWND
hwnd;
/* Handle ke window */
COLORREF TabelWarna[256];
/* Tabel warna (palet) */
int i, j, palet;
hwnd = GetActiveWindow();
MemDC = CreateCompatibleDC(GetDC(hwnd));
mbitmap = CreateCompatibleBitmap(GetDC(hwnd),M,N);
SelectObject(MemDC,mbitmap);
/* Definisikan palet */
for (i=0; i<256; i++)
TabelWarna[i]=GetNearestColor(MemDC, RGB(i,i,i));
/* Isikan pixel ke memori device (layar) */
for (i=0; i<N; i++)
for (j=0; j<M; j++)
{
palet = Image[i][j];
SetPixelV(MemDC,j,i,TabelWarna[palet]);
}
/* Tembakkan citra ke layar */
BitBlt(GetDC(hwnd),0,0,M,N,MemDC,0,0,SRCCOPY);
}

Algoritma 3.5. Prosedur menampilkan citra hitam-putih ke layar di lingkungan Windows.

Jika citra yang ditampilkan adalah citra berwarna (matriks intensitas pixel-nya
masing-masing adalah r, g, dan b), maka perubahan yang dilakukan adalah
sebagai berikut:
for (i=0; i<N; i++)
for (j=0; j<M; j++)
{
palet = GetNearestColor(MemDC, RGB(b[i][j], g[i][j], r[i][j]);
SetPixelV(MemDC, j, i, palet);
}
/* Tembakkan citra ke layar */
BitBlt(GetDC(hwnd), 0, 0, M, N, MemDC, 0, 0, SRCCOPY);

Bab 3_Struktur Data untuk Citra Digital dan Format Citra Bitmap

35

3.3 Membaca Citra dari Arsip


Citra disimpan di dalam arsip biner untuk sewaktu-waktu dibuka dan dibaca
kembali. Arsip tersebut ada yang mempunyai header dan ada yang tanpa header.
Header adalah informasi yang terletak pada bagian awal arsip. Header berisi
informasi bagaimana citra disimpan. Kita perlu mengetahui header agar kita
mengetahui cara membaca data citra. Saat ini terdapat bermacam-macam format
penyimpanan citra di dalam arsip (misalnya BMP, GIF, TIFF, PCX, JPG, dan
lain-lain). Dua format yang populer saat ini dan seolah-olah menjadi standard
adalah GIF dan JPG. Pembahasan format-format citra di dalam arsip diluar
cakupan buku ini, namun khusus format bitmap (BMP) akan diberikan di dalam
Bab 3 ini sebagai satu studi kasus.
Algoritma 3.6 berisi prosedur untuk membaca citra hitam-putih (greyscale) dari
dalam arsip yang berisi data citra mentah (raw image). Disebut data citra mentah
karena arsip tersebut hanya berisi ukuran citra dan nilai keabuan setiap pixel.
Tidak ada informasi lain di dalam arsip selain ukuran citra. Ukuran citra
panjangnya 32 bit, masing-masing 16 bit (atau 2 byte) untuk tinggi (N) dan 16 bit
untuk lebar (M). Byte-byte berikutnya berisi nilai keabuan setiap pixel di dalam
citra. Setiap pixel berukuran 1 byte. Gambar 3.3 memperlihatkan susunan byte di
dalam arsip yang berisi data citra mentah.
N

2 byte

2 byte

...

...

M byte

M byte

...

...

...

...
M byte

N kali

Gambar 3. 3. Susunan data di dalam arsip data citra mentah

Mula-mula kita membaca data tinggi (N) dan lebar (M) citra. Kita bisa
menggunakan peubah N dan M yang bertipe unsigned short int karena tipe ini
panjangnya 2 byte. Selanjutnya, data pixel-pixel di dalam citra dibaca baris per
baris. Setiap baris panjangnya M byte. Setiap byte ke-j dari baris i menyatakan
nilai pixel pada koordinat (i, j). Nilai ini disimpan pada elemen matriks f[i][j].

36

Pengolahan Citra Digital

void baca_citra_dari_arsip(char nama_arsip[], citra f)


/* Membaca citra dari arsip nama_arsip. Citra hasil pembacaan disimpan di
dalam matriks f.
*/
{
FILE *fp;
int i, j;
unsigned short int N, M;
if((fp=fopen(nama_arsip, rb))==NULL)
{
printf(Arsip tidak ada);
exit(0);
}
fread(&N, sizeof(unsigned short int), 1, fp);
fread(&M, sizeof(unsigned short int), 1, fp);

/* baca tinggi citra */


/* baca lebar citra */

f = alokasi(N, M) /* alokasi memori matriks untuk citra f */


if(f==NULL)
{ printf(Memori tidak cukup);
exit(0);
}
/* baca data citra baris demi baris */
for(i=0; i<N; i++)
{
/* baca data citra baris ke-i */
fread(f[i], sizeof(citraunsigned char), M, fp);
}
close(fp);
}

Algoritma 3.6. Prosedur membaca citra dari arsip.

3.4 Menyimpan Citra ke dalam Arsip


Operasi menyimpan citra ke dalam arsip merupakan kebalikan dari operasi arsip.
Citra disimpan di dalam dengan susunan yang sama seperti pada Gambar 3.3.
Algoritma 3.7 berisi prosedur menyimpan citra ke dalam arsip. Ukuran citra (N
dan M) disimpan pada awal arsip. Selanjutnya, data citra disimpan baris per baris
pixel.
void tulis_citra_ke_arsip(char nama_arsip[], citra f)
/* Menulis citra f ke dalam arsip nama_arsip. */
{
FILE *fp;
int i, j;
unsigned short int N, M;
if((fp=fopen(nama_arsip, wb))==NULL)
{
printf(Arsip tidak dapat dibuat);

Bab 3_Struktur Data untuk Citra Digital dan Format Citra Bitmap

37

exit(0);
}
fwrite(N, sizeof(unsigned short int), 1, fp);
fwrite(M, sizeof(unsigned short int), 1, fp);

/* tulis tinggi citra */


/* tulis lebar citra */

/* baca data citra baris demi baris */


for(i=0; i<N; i++)
{
/* tulis data citra baris ke-i */
fwrite(f[i], sizeof(unsigned char), M, fp);
}
close(fp);
}

Algoritma 3.7. Prosedur menulis citra ke dalam arsip.

3.5 Format Berkas Bitmap


Citra disimpan di dalam berkas (file) dengan format tertentu. Format citra yang
baku di lingkungan sistem operasi Microsoft Windows dan IBM OS/2 adalah
berkas bitmap (BMP). Saat ini format BMP memang kalah populer
dibandingkan format JPG atau GIF. Hal ini karena berkas BMP pada umumnya
tidak dimampatkan, sehingga ukuran berkasnya relatif lebih besar daripada
berkas JPG maupun GIF. Hal ini juga yang menyebabkan format BMP sudah
jarang digunakan.
Meskipun format BMP tidak mangkus dari segi ukuran berkas, namun format
BMP mempunyai kelebihan dari segi kualitas gambar. Citra dalam format BMP
lebih bagus daripada citra dalam format yang lainnya, karena citra dalam format
BMP umumnya tidak dimampatkan sehingga tidak ada informasi yang hilang
(pemampatan citra dibahas secara mendalam di dalam Bab 10). Terjemahan
bebas bitmap adalah pemetaan bit. Artinya, nilai intensitas pixel di dalam citra
dipetakan ke sejumlah bit tertentu. Peta bit yang umum adalah 8, artinya setiap
pixel panjangnya 8 bit. Delapan bit ini merepresentasikan nilai intensitas pixel.
Dengan demikian ada sebanyak 28 = 256 derajat keabuan, mulai dari 0 sampai
255.
Citra dalam format BMP ada tiga macam: citra biner, citra berwarna, dan citra
hitam-putih (greyscale). Citra biner hanya mempunyai dua nilai keabuan, 0 dan 1.
Oleh karena itu, 1 bit sudah cukup untuk merepresentasikan nilai pixel. Citra
berwarna adalah citra yang lebih umum. Warna yang terlihat pada citra bitmap
merupakan kombinasi dari tiga warna dasar, yaitu merah, hijau, dan biru. Setiap
pixel disusun oleh tiga komponen warna: R (red), G (green), dan B (blue).
Kombinasi dari ketiga warna RGB tersebut menghasilkan warna yang khas untuk
pixel yang bersangkutan. Pada citra 256 warna, setiap pixel panjangnya 8 bit,
tetapi komponen warna RGB-nya disimpan di dalam tabel RGB yang disebut

38

Pengolahan Citra Digital

palet. Setiap komponen panjangnya 8 bit, jadi ada 256 nilai keabuan untuk warna
merah, 256 nilai keabuan untuk warna hijau, dan 256 nilai keabuan untuk warna
biru. Nilai setiap pixel tidak menyatakan derajat keabuannya secara langsung,
tetapi nilai pixel menyatakan indeks tabel RGB yang memuat nilai keabuan merah
(R), nilai keabuan hijau (G), dan nilai keabuan biru (B) untuk pixel yang
bersangkutan. Pada citra hitam-putih, nlai R = G = B untuk menyatakan bahwa
citra hitam-putih hanya mempunyai satu kanal warna. Citra hitam-putih
umumnya adalah cira 8-bit.
Citra yang lebih kaya warna adalah citra 24-bit. Setiap pixel panjangnya 24 bit,
karena setiap pixel langsung menyatakan komponen warna merah, komponen
warna hijau, dan komponen warna biru. Masing-masing komponen panjangnya 8
bit. Citra 24-bit disebut juga citra 16 juta warna, karena ia mampu menghasilkan
224 = 16.777.216 kombinasi warna.
Saat ini beredar tiga versi berkas bitmap, (i) berkas bitmap versi lama dari
Microsoft Windows atau IBM OS/2, (ii) berkas bitmap versi baru dari Microsoft
Windows, dan (iii) berkas bitmap versi baru dari IBM OS/2. Yang membedakan
ketiga versi berkas tersebut adalah panjang header-nya. Header adalah data yang
terdapat pada bagian awal berkas citra. Data di dalam header berguna untuk
mengetahui bagaimana citra dalam format bitmap dikodekan dan disimpan. Data
di dalam header misalnya ukuran citra, kedalaman pixel, ofset ke data bitmap,
dan sebagainya.
Setiap berkas bitmap terdiri atas header berkas, header bitmap, informasi palet,
dan data bitmap (Gambar 3.4).

Header berkas
Header bitmap
Informasi palet
Data bitmap
14 byte
12 s/d 64 byte 0 s/d 1024 byte N byte

Gambar 3. 4. Format berkas bitmap

Ukuran header berkas sama untuk semua versi, yaitu 14 byte. Tabel 3.1
memperlihatkan field-field penyusun header berkas. Ukuran header bitmap
berbeda-beda untuk setiap versi. Untuk berkas bitmap versi lama, header bitmap
berukuran 12 byte (Tabel 3.2), untuk berkas bitmap versi baru dari Microsoft
Windows, header bitmap berukuran 40 (Tabel 3.3), dan untuk berkas bitmap versi
baru dari IBM OS/2, header bitmap berukuran 64 byte (Tabel 3.4).

Bab 3_Struktur Data untuk Citra Digital dan Format Citra Bitmap

39

Tabel 3.1. Header berkas bitmap (panjang = 14 byte)


Byte ke-

Panjang (byte)

Nama

12

BmpType

36
78
9 10
11 14

4
2
2
4

BmpSize
XhotSpot
YhotSpot
OffBits

Keterangan
Tipe berkas bitmap:
BA = bitmap array, CI = icon
BM = bitmap, CP = color pointer
PT = pointer
Ukuran berkas bitmap
X hotspot untuk kursor
Y hotspot untuk kursor
Ofset ke awal data bitmap (dalam byte)

Tabel 3.2. Header bitmap versi lama dari Microsoft Windows (12 byte)
Byte ke-

Panjang (byte)

14
56
78
9 10
11 12

4
2
2
2
2

Nama
HdrSize
Width
Height
Planes
BitCount

Keterangan
Ukuran header dalam satuan byte
Lebar bitmap dalam satuan pixel
Tinggi bitmap dalam satuan pixel
Jumlah plane (umum- nya selalu satu)
Jumlah bit per pixel

Tabel 3.3. Header bitmap versi baru dari Microsoft Windows (40 byte)
Byte ke-

Panjang (byte)

14
58
9 12
13 14
15 16
17 20
21 24
25 28
29 32
33 36
37 40

4
4
4
2
2
4
4
4
4
4
4

40

Nama

Keterangan

HdrSize
Width
Height
Planes
BitCount
Compression
ImgSize
HorzRes
VertRes
ClrUsed
ClrImportant

Ukuran header dalam satuan byte


Lebar bitmap dalam satuan pixel
Tinggi bitmap dalam satuan pixel
Jumlah plane (umum- nya selalu satu)
Jumlah bit per pixel
0=tak dimampatkan, 1=dimampatkan
Ukuran bitmap dalam byte
Resolusi horizontal
Resolusi vertikal
Jumlah warna yang digunakan
Jumlah warna yang penting

Pengolahan Citra Digital

Tabel 3.4. Header bitmap versi baru dari IBM OS/2 (64 byte)
Byte ke-

Panjang (byte)

14
58
9 12
13 14
15 16
17 20

4
4
4
2
2
4

HdrSize
Width
Height
Planes
BitCount
Compression

21 24
25 28
29 32
33 36
37 40
41 42
43 44
45 46
47 48
49 52
53 56
57 60
61 64

4
4
4
4
4
2
2
2
2
4
4
4
4

ImgSize
HorzRes
VertRes
ClrUsed
ClrImportant
Units
Reserved
Recording
Rendering
Size1
Size2
ClrEncoding
Identifier

Nama

Keterangan
Ukuran header dalam satuan byte
Lebar bitmap dalam satuan pixel
Tinggi bitmap dalam satuan pixel
Jumlah plane (umumnya selalu satu)
Jumlah bit per pixel
0 = tak dimampatkan,
1 = dimampatkan
Ukuran bitmap dalam byte
Resolusi horizontal
Resolusi vertikal
Jumlah warna yang digunakan
Jumlah warna yang penting
Satuan pengukuran yang dipakai
Field Cadangan
Algoritma perekaman
Algoritma halftoning
Nilai ukuran 1
Nilai ukuran 2
Pengkodean warna
Kode yang digunakan aplikasi

Informasi palet warna terletak sesudah header bitmap. Informasi palet warna
dinyatakan dalam suatu tabel RGB. Setiap entry pada tabel terdiri atas tiga buah
field, yaitu R (red), G (green), dan B (blue).
Data bitmap diletakkan sesudah informasi palet. Penyimpanan data bitmap di
dalam berkas disusun terbalik dari bawah ke atas dalam bentuk matriks yang
berukuran Height Width. Baris ke-0 pada matriks data bitmap menyatakan data
pixel di citra baris terbawah, sedangkan baris terakhir pada matriks menyatakan
data pixel di citra baris teratas.
Contoh format citra 8-bit kira-kira seperti Gambar 3.5. Format citra 4-bit (16
warna) serupa dengan format citra 8-bit. Pada citra 4-bit dan citra 8-bit, warna
suatu pixel diacu dari tabel informasi palet pada entry ke-k (k merupakan nilai
dengan rentang 0 15 untuk citra 16 warna dan 0 255 untuk citra 256 warna).
Sebagai contoh pada Gambar 3.5, pixel pertama bernilai 2; warna pixel pertama
ini ditentukan oleh komponen RGB pada tabel palet warna entry ke-2, yaitu R =
14, G = 13, dan B = 16. Pixel kedua serupa dengan pixel pertama. Pixel ketiga
bernilai 1, warnanya ditentukan oleh komponen RBG pada tabel warna entry ke1, yaitu R = 20, G = 45, dan B = 24. Demikian seterusnya untuk pixel-pixel
lainnya. Khusus untuk citra hitam-putih (8 bit), komponen R, G, dan B suatu pixel

Bab 3_Struktur Data untuk Citra Digital dan Format Citra Bitmap

41

bernilai sama dengan data bitmap pixel tersebut. Jadi, pixel dengan nilai data
bitmap 129, memiliki nilai R = 129, G = 129, dan B = 129.

<header berkas>
<header bitmap>
<palet warna RGB>
R
G
1
20
45
2
14
13
3
12
17

256
46
78

B
24
16
15
25

<data bitmap>
2 2 1 1 1 3 5

Gambar 3. 5. Format citra 8-bit (256 warna)

Berkas citra 24-bit (16,7 juta warna) tidak emmpunyai palet RGB, karena nilai
RGB langsung diuraikan dalam data bitmap. Setiap elemen data bitmap
panjangnya 3 byte, masing-masing byte menyatakan komponen R, G, dan B.
Contoh format citra 24-bit (16 juta warna) kira-kira seperti pada Gambar 3.6.
Pada contoh format citra 24-bit tersebut pixel pertama mempunyai R = 20, G =
19, B = 21, pixel kedua mempunyai R = 24, G = 24, B = 23. Demikian seterusnya

<header berkas>
<header bitmap>
<data bitmap>
20 19 21 24 24 23 24
Gambar 3. 6. Format citra 24-bit (16,7 juta warna)

Tabel 3.5 memperlihatkan panjang informasi palet untuk setiap versi bitmap,
masing-masing untuk citra 16 warna, 256 warna, dan 16,7 juta warna.

42

Pengolahan Citra Digital

Tabel 3.5. Panjang informasi palet untuk setiap versi berkas bitmap
Citra m warna
Citra 16 warna
Citra 256 warna
Citra 16,7 juta warna

Versi lama
(Windows)
48 byte
768 byte
0 byte

Versi baru
(Windows)
64 byte
1024 byte
0 byte

Versi baru
(OS/2)
64 byte
1024 byte
0 byte

3.6 Primitif Citra Bitmap


Meskipun saat ini kakas pemrograman visual (visual programming) seperti Visual
C++, Delphi, Borland C++ Builder, dan lain-lain, sudah banyak memberikan
kemudahan untuk memprogram citra bitmap (dengan menyediakan komponen,
struktur data, dan metode-metode untuk mengkases citra bitmap), namun ada
baiknya kita membuat sendiri primitif-primitif citra bitmap. Primitif tersebut
adalah berupa fungsi dan prosedur untuk membaca citra dari arsip, menyimpan
citra ke dalam arsip, dan menampilkan citra ke layar.
Berikut ini diberikan beberapa primitif citra bitmap. Citra bitmap yang ditangani
hanyalah citra dengan kedalaman 8-bit (256 warna) dan citra 24-bit (16,7 juta
warna), baik berupa citra skala-abu maupun citra berwarna. Citra biner (1-bit)
tidak ditangani di sini karena citra biner dimampatkan dengan metode RLE (Run
Length Encoding). Hingga bab 3 ini kita belum membicarkan metode
pemampatan citra. Pembahasan mengenai metode RLE dapat anda baca di dalam
Bab 10.
1.

Berkas header
Nama arsip: bitmap.h
Penjelasan: Berkas header berisi struktur data untuk citra bitmap

#ifndef bitmap_H
#define bitmap_H
#include
#include
#include
#include

<stdio.h>
<io.h>
<stdlib.h>
<alloc.h>

/* maksimum derajat keabuan */


#define DERAJAT_KEABUAN
255
/* tipe data citra bitmap 8-bit */
#define TIPE_CITRA
unsigned char

Bab 3_Struktur Data untuk Citra Digital dan Format Citra Bitmap

43

/* tipe data citra bitmap 24-bit */


typedef struct
{
unsigned char R;
unsigned char G;
unsigned char B;
} TIPE_CITRA24BIT;
TIPE_CITRA
**Image;
TIPE_CITRA24BIT **Image24bit;

/* Matriks bitmap citra 8-bit */


/* Matriks bitmap citra 24-bit */

/* HEADER BERKAS CITRA BMP, ada dua macam, yaitu header arsip
dan header data bitmap (BMP) */
/* 1. Header arsip
unsigned char
unsigned char
unsigned long
unsigned short int
unsigned short int
unsigned int

*/
TipeBMP1;
TipeBMP2;
UkuranBMP;
XhotSpot;
YhotSpot;
OffBits;

/* 2.Header data bitmap


a. Ukuran header data BMP: 12 byte (versi lama), 40 byte (versi baru
Windows), dan 64 byte (versi OS 2)
*/
unsigned long UkuranHeader;

/*
b.1. Header data BMP versi lama */
unsigned short int LebarBMPvLama;
unsigned short int TinggiBMPvLama;
unsigned short int BidangBMPvLama;
unsigned short int JumlahBitBMPvLama;
/*
b.2. Header data BMP versi Windows */
unsigned int
LebarBMPvBaru;
unsigned int
TinggiBMPvBaru;
unsigned short int BidangBMPvBaru;
unsigned short int JumlahBitBMPvBaru;
unsigned int
MampatBMPvBaru;
unsigned int
UkuranCitraBMPvBaru;
unsigned int
ResolusiHorizontalBMPvBaru;
unsigned int
ResolusiVertikalBMPvBaru;
unsigned int
WarnaTerpakaiBMPvBaru;
unsigned int
WarnaPentingBMPvBaru;
/*
b.3. Header data BMP versi OS 2 */
unsigned int
LebarBMPvOS2;
unsigned int
TinggiBMPvOS2;
unsigned short int BidangBMPvOS2;
unsigned short int JumlahBitBMPvOS2;
unsigned int
MampatBMPvOS2;
unsigned int
UkuranCitraBMPvOS2;
unsigned int
ResolusiHorizontalBMPvOS2;
unsigned int
ResolusiVertikalBMPvOS2;
unsigned int
WarnaTerpakaiBMPvOS2;
unsigned int
WarnaPentingBMPvOS2;
unsigned short int UnitBMPvOS2;
unsigned short int CadanganBMPvOS2;
unsigned short int PerekamanBMPvOS2;
unsigned short int RenderingBMPvOS2;

44

Pengolahan Citra Digital

unsigned
unsigned
unsigned
unsigned

int
int
int
int

/* 3. Informasi
typedef struct
{
unsigned char
unsigned char
unsigned char
} RGBvLama;
typedef struct
{
unsigned char
unsigned char
unsigned char
unsigned char
} RGBvBaru;

Ukuran1BMPvOS2;
Ukuran2BMPvOS2;
PengkodeanWarnaBMPvOS2;
PenciriBMPvOS2;
palet */

R;
G;
B;

R;
G;
B;
cadangan;

/* peubah-peubah bantu */
RGBvLama *paletVlama;
RGBvBaru *paletVbaru;
int lebar, tinggi, jumlahpalet, jumlahbit;
char* NamaArsip;
/* Purwarupa fungsi yang digunakan */
void **alokasi(int N, int M, int UkuranElemen);
void *xalloc(unsigned ukuran);
void BacaBerkasCitra(char *NamaArsip);
void AlokasiMemoriCitra(int N, int M);
void AlokasiMemoriCitra24Bit(int N, int M);
void BacaHeader(FILE *fp);
void BacaDataBitmap(FILE *masukan, N, int M);
void TampilkanCitra(int N, int M);
void DealokasiMemoriCitra(int N, int jumlahbit);
#endif

Algoritma 3.8. Berkas bitmap.h.

2.

Membaca citra dari arsip.


Nama fungsi: BacaBerkasCitra(char *NamaArsip)
Include: bitmap.h
Penjelasan: Fungsi untuk membaca citra dari arsip.

void BacaBerkasCitra(char *NamaArsip)


/* Membaca citra bitmap dari arsip */
{
FILE *fp; /* berkas masukan */
int i, j;
fp=fopen(NamaArsip,"rb");
/* Baca header berkas citra masukan */

Bab 3_Struktur Data untuk Citra Digital dan Format Citra Bitmap

45

BacaHeader(fp);
/* Alokasi memori untuk citra */
if (jumlahbit == 8)
/* citra 8 bit */
AlokasiMemoriCitra(lebar, tinggi);
else
if (jumlahbit == 24) /* citra 24 bit */
AlokasiMemoriCitra24Bit(lebar, tinggi);
else
{
printf(Tidak menangani citra selain 8-bit dan 24-bit);
exit(0);
}
/* baca seluruh pixel citra */
BacaDataBitmap(fp, lebar, tinggi);
fclose(fp);
/* Tampilkan citra yang sudah dibaca dari arsip */
TampilkanCitra(lebar, tinggi);
}

Algoritma 3.9. Membaca citra dari arsip.

3.

Membaca header berkas bitmap.


Nama fungsi: BacaHeader(FILE *fp)
Include: bitmap.h
Penjelasan: Fungsi untuk membaca header berkas bitmap.

void BacaHeader(FILE *fp)


/* Membaca header berkas citra BMP. fp adalah berkas citra yang
dimampatkan. */
{
/* Baca header arsip */
fread(&TipeBMP1,sizeof(unsigned char),1,fp);
fread(&TipeBMP2,sizeof(unsigned char),1,fp);
fread(&UkuranBMP,sizeof(unsigned long),1,fp);
fread(&XhotSpot,sizeof(unsigned short int),1,fp);
fread(&YhotSpot,sizeof(unsigned short int),1,fp);
fread(&OffBits,sizeof(unsigned int),1,fp);
if (TipeBMP1 == 'B' && TipeBMP2 == 'M')
{
fread(&UkuranHeader,sizeof(unsigned long),1,fp);

/*baca ukuran header


BMP */
/* berkas BMP versi lama */

if (UkuranHeader==12)
{
/* baca header BMP versi lama */
fread(&LebarBMPvLama,sizeof(unsigned short int),1,fp);
fread(&TinggiBMPvLama,sizeof(unsigned short int),1,fp);
fread(&BidangBMPvLama,sizeof(unsigned short int),1,fp);
fread(&JumlahBitBMPvLama,sizeof(unsigned short int),1,fp);
tinggi = (int) TinggiBMPvLama;
lebar = (int) LebarBMPvLama;

46

/* tinggi citra */
/* lebar citra */

Pengolahan Citra Digital

jumlahbit = (int) JumlahBitBMPvLama; /* kedalaman warna */


}
else
{
if (UkuranHeader==40)
/* berkas BMP versi Windows */
{
/* baca hader BMP versi Windows */
fread(&LebarBMPvBaru,sizeof(unsigned int),1,fp);
fread(&TinggiBMPvBaru,sizeof(unsigned int),1,fp);
fread(&BidangBMPvBaru,sizeof(unsigned short int),1,fp);
fread(&JumlahBitBMPvBaru,sizeof(unsigned short int),1,fp);
fread(&MampatBMPvBaru,sizeof(unsigned int),1,fp);
fread(&UkuranCitraBMPvBaru,sizeof(unsigned int),1,fp);
fread(&ResolusiHorizontalBMPvBaru,sizeof(unsigned int),1,fp);
fread(&ResolusiVertikalBMPvBaru,sizeof(unsigned int),1,fp);
fread(&WarnaTerpakaiBMPvBaru,sizeof(unsigned int),1,fp);
fread(&WarnaPentingBMPvBaru,sizeof(unsigned int),1,fp);
tinggi = (int) TinggiBMPvBaru;
lebar = (int) LebarBMPvBaru;
jumlahbit = (int) JumlahBitBMPvBaru;

/* tinggi citra */
/* lebar citra */
/* kedalaman pixel */

}
else
/* UkuranHeader = 64, berkas BMP versi OS2 */
{
/* baca header BMP versi OS2 */
fread(&JumlahBitBMPvOS2,sizeof(unsigned short int),1,fp);
fread(&MampatBMPvOS2,sizeof(unsigned int),1,fp);
fread(&UkuranCitraBMPvOS2,sizeof(unsigned int),1,fp);
fread(&ResolusiHorizontalBMPvOS2,sizeof(unsigned int),1,fp);
fread(&ResolusiVertikalBMPvOS2,sizeof(unsigned int),1,fp);
fread(&WarnaTerpakaiBMPvOS2,sizeof(unsigned int),1,fp);
fread(&WarnaPentingBMPvOS2,sizeof(unsigned int),1,fp);
fread(&UnitBMPvOS2,sizeof(unsigned short int),1,fp);
fread(&CadanganBMPvOS2,sizeof(unsigned short int),1,fp);
fread(&PerekamanBMPvOS2,sizeof(unsigned short int),1,fp);
fread(&RenderingBMPvOS2,sizeof(unsigned short int),1,fp);
fread(&Ukuran1BMPvOS2,sizeof(unsigned int),1,fp);
fread(&Ukuran2BMPvOS2,sizeof(unsigned int),1,fp);
fread(&PengkodeanWarnaBMPvOS2,sizeof(unsigned int),1,fp);
fread(&PenciriBMPvOS2,sizeof(unsigned int),1,fp);
tinggi = (int) TinggiBMPvOS2;
/* tinggi citra */
lebar = (int) LebarBMPvOS2;
/* lebar citra */
jumlahbit = (int) JumlahBitBMPvOS2; /* kedalaman warna */
}
}
/* baca palet */
if (UkuranHeader==12) /* citra BMP versi lama */
{
jumlahpalet = 1 << JumlahBitBMPvLama;
/* 2^JumlahBitBMPvLama */
paletVlama = (RGBvLama*) malloc (jumlahpalet*sizeof(RGBvLama));
fread(paletVlama,sizeof(RGBvLama),jumlahpalet,fp);
}
else /* citra BMP versi baru */
if (UkuranHeader==40)
{
if (JumlahBitBMPvBaru != 24)
{
if (WarnaTerpakaiBMPvBaru == 0)
jumlahpalet = 1 << JumlahBitBMPvBaru;
else

Bab 3_Struktur Data untuk Citra Digital dan Format Citra Bitmap

47

jumlahpalet = WarnaTerpakaiBMPvBaru;
paletVbaru = (RGBvBaru*) malloc (jumlahpalet*sizeof(RGBvBaru));
fread(paletVbaru,sizeof(RGBvBaru),jumlahpalet,fp);
}
}
else
if (UkuranHeader==64)
{
if (JumlahBitBMPvOS2 != 24)
{
if (WarnaTerpakaiBMPvOS2 == 0)
jumlahpalet = 1 << JumlahBitBMPvOS2;
else
jumlahpalet = WarnaTerpakaiBMPvOS2;
paletVbaru = (RGBvBaru*)malloc(jumlahpalet*sizeof(RGBvBaru));
fread(paletVbaru,sizeof(RGBvBaru),jumlahpalet,fp);
}
}
}
else
{
printf("Bukan berkas citra bitmap");
exit(0);
}
}

Algoritma 3.10. Pembacaan header berkas bitmap.

4.

Membaca data bitmap.


Nama fungsi: BacaDataBitmap(FILE *fp, int N, int M)
Include: bitmap.h
Penjelasan: Fungsi untuk membaca data bitmap.

void BacaDataBitmap(FILE *fp, int N, int M)


/* Membaca data pixel dari berkas masukan fp untuk citra yang berukuran N
x M */
{
int i, j, k;
switch (jumlahbit)
{
case 8:
{
for (i=N-1; i>=0; i--)
/* Baca pixel per baris */
if (fread(Image[i],sizeof(TIPE_CITRA),M,fp)!= (unsigned int)M)
{
printf("Data bitmap tidak lengkap");
exit(0);
}
break;
}
case 24:
{

48

Pengolahan Citra Digital

for (i=N-1; i>=0; i--)


/* Baca pixel per baris */
if (fread(Image24bit[i],sizeof(TIPE_CITRA24BIT),M,fp)!= (unsigned
int)M)
{
printf("Data bitmap tidak lengkap");
exit(0);
}
break;
}
default:
{
printf("Bukan format citra 8 atau 24 bit");
exit(0);
}
}
}

Algoritma 3.11. Pembacaan header berkas bitmap.

5.

Menampilkan citra ke layar.


Nama fungsi: TampilkanCitra(int N, int M)
Include: bitmap.h
Penjelasan: Fungsi untuk menampilkan citra ke layar.

void TampilkanCitra(int N, int M)


/* Menampilkan citra yang berukura
{
COLORREF TabelWarna[256];
HDC
MemDC;
HBITMAP mbitmap;
HWND
hwnd;
int

palet,
i, j;

N x M ke layar */
/*
/*
/*
/*

Tabel warna (palet) citra BMP */


Handle ke memory device context */
Handle ke citra */
Handle ke window */

/* indeks palet pixel */

hwnd = GetActiveWindow();
MemDC = CreateCompatibleDC(GetDC(hwnd));
mbitmap = CreateCompatibleBitmap(GetDC(hwnd), M, N);
SelectObject(MemDC, mbitmap);
switch (jumlahbit)
{
case 8:
{
/* Definisikan palet */
for (i=0; i<jumlahpalet; i++)
{
if (UkuranHeader==40 ||UkuranHeader==64) /* bitmap versi baru */
TabelWarna[i]=GetNearestColor(MemDC, RGB(paletVbaru[i].B,
paletVbaru[i].G,
paletVbaru[i].R));
else /*UkuranHeader=12, bitmap versi lama */
TabelWarna[i]=GetNearestColor(MemDC, RGB(paletVlama[i].B,
paletVlama[i].G,
paletVlama[i].R));

Bab 3_Struktur Data untuk Citra Digital dan Format Citra Bitmap

49

}
/* Isikan pixel ke memori device (layar) */
for (i=0; i<N; i++)
for (j=0; j<M; j++)
{ palet = Image[i][j];
SetPixelV(MemDC, j, i, TabelWarna[palet]);
}
/* Tembakkan citra ke layar */
BitBlt(GetDC(hwnd), 0, 0, M, N, MemDC, 0, 0, SRCCOPY);
break;
}
case 24:
{
for (i=0; i<N; i++)
for (j=0; j<M; j++)
{ palet = GetNearestColor(MemDC, RGB(Image24bit[i][j].B,
Image24bit[i][j].G,
Image24bit[i][j].R));
SetPixelV(MemDC, j, i, palet);
}
/* Tembakkan citra ke layar */
BitBlt(GetDC(hwnd), 0, 0, M, N, MemDC, 0, 0, SRCCOPY);
}
}
}

Algoritma 3.12. Menampilkan citra ke layar.

6.

Alokasi/dealoaksi memori matriks (citra).


Nama fungsi: a. AlokasiMemoriCitra(int N, int M)
b. AlokasiMemoriCitra24Bit(int N, int M)
c. **alokasi(int N, int M, int UkuranElemen)
d. *xalloc(unsigned ukuran)
e. DealokasiMemoriCitra(int N, int jumlahbit)
Include: bitmap.h
Penjelasan: Fungsi-fungsi untuk alokasi/dealokasi memori matriks.

void AlokasiMemoriCitra(int N, int M, int jumlahbit)


/* Mengalokasikan memori untuk citra 8-bit yang berukuran N x M */
{
Image = (TIPE_CITRA**) alokasi (N, M, sizeof(TIPE_CITRA));
}
void AlokasiMemoriCitra24Bit(int N, int M, int jumlahbit)
/* Mengalokasikan memori untuk citra 24-bit yang berukuran N x M */
{
Image24bit = (TIPE_CITRA24BIT**) alokasi (N, M, sizeof(TIPE_CITRA24BIT));
}

void *xalloc(unsigned ukuran)

50

Pengolahan Citra Digital

/* Mengalokasikan memori dan memeriksa apakah alokasi memori berhasil */


{
void *p = malloc(ukuran);
if (p==NULL)
{
printf("Memori tidak cukup untuk alokasi matriks");
exit(0);
}
return p;
}

void **alokasi(int N, int M, int UkuranElemen)


/* Mengalokasi memori untuk matriks yang berukuran N x M. Setiap elemen
martiks
berukuran UkuranElemen byte.
*/
{
int i;
void **larik = (void**)xalloc(N * sizeof(void *));
for (i=0; i<N; i++)
larik[i] = (void*)xalloc(M * UkuranElemen);
return larik;
}

void DealokasiMemoriCitra(int N, int jumlahbit)


/* Mengembalikan memori yang digunakan oleh matriks */
{
int i;
if (jumlahbit!=24)
{
for (i=0; i<N; i++)
{
free(citra[i]);
}
free(citra);
}
else
{
for (i=0; i<N; i++)
{
free(citra24bit[i]);
}
free(citra24bit);
}
}

Algoritma 3.13. Alokasi/dealokasi memori matriks.

Gambar 3.7 adalah contoh antarmuka program yang membaca dan menampilkan
citra bitmap ke layar, dengan menggunakan primitif-primitif bitmap yang sudah
Bab 3_Struktur Data untuk Citra Digital dan Format Citra Bitmap

51

disebutkan di atas. Program dibuat dengan Borland C++ Bulder 6 dan diberi
nama SimpleView. Pengguna membuka citra bitmap dengan memilih nama berkas
citra dari daftar arsip. Citra bitmap yang dibuka kemudian ditampilkan ke layar.
Contoh citra yang ditampilkan adalah citra girl.

Gambar 3.7 Program SimpleView untuk membuka dan menampilkan citra bitmap
(dibuat dengan Borland C++ Builder)

52

Pengolahan Citra Digital

Bab 4

Operasi-operasi Dasar Pengolahan


Citra Dijital

itra dijital direpresentasikan dengan matriks. Operasi pada citra dijital pada
dasarnya adalah memanipulasi elemen-elemen matriks. Elemen matriks
yang dimanipulasi dapat berupa elemen tunggal (sebuah pixel),
sekumpulan elemen yang berdekatan, atau keseluruhan elemen matriks. Di dalam
bab ini akan diuraikan operasi-operasi dasar pada pengolahan citra dijital.

4.1 Aras Komputasi


Operasi-operasi yang dilakukan pada pengolahan citra dapat dikelompokkan ke
dalam empat aras (level) komputasi, yaitu aras titik, aras lokal, aras global, dan
aras objek [JAI95]. Kita mulai pembahasan komputasi pada aras titik.

1. Aras Titik
Operasi pada aras titik hanya dilakukan pada pixel tunggal di dalam citra. Operasi
titik dikenal juga dengan nama operasi pointwise. Operasi ini terdiri dari
pengaksesan pixel pada lokasi yang diberikan, memodifikasinya dengan operasi
operasi lanjar (linear) atau nirlanjar (nonlinear), dan menempatkan nilai pixel
baru pada lokasi yang bersesuaian di dalam citra yang baru. Operasi ini diulangi
untuk keseluruhan pixel di dalam citra.
Secara matematis, operasi pada aras titik dinyatakan sebagai (Gambar 4.1):
fB(x, y) = Otitik{fA(x, y)}

Bab 4_Operasi-operasi Dasar Pengolahan Citra Dijital

(4.1)

41

yang dalam hal ini fA dan fB masing-masing adalah citra masukan dan citra
keluaran, Otitik dapat berupa operasi lanjar (linear) atau nirlanjar (nonlinear).
Yang dimaksud dengan operasi lanjar adalah operasi yang dapat dinyatakan
secara matematis sebagai persamaan lanjar, kebalikannya adalah persamaan
nirlanjar.

Otitik{f(x,y)}

Gambar 4.1 Operasi aras titik pada citra dijital.

Operasi pada aras titik dapat dibagi menjadi tiga macam: berdasarkan intensitas,
berdasarkan geometri, atau gabungan keduanya.
a. Berdasarkan intensitas.
Nilai intensitas u suatu pixel diubah dengan transformasi h menjadi nilai
intensitas baru v:
v = h(u),

u, v [0, L]

(4.2)

Contoh operasi titik berdasarkan intensitas adalah operasi pengambangan


(thresholding). Pada operasi pengambangan, nilai intensitas pixel dipetakan ke
salah satu dari dua nilai, a1 atau a2, berdasarkan nilai ambang (threshold) T:

a ,
f(x, y) = 1
a 2 ,

f ( x, y ) < T

(4.3)

f ( x, y ) T

Jika a1 = 0 dan a2 = 1, maka operasi pengambangan mentransformasikan citra


hitam-putih ke citra biner. Dengan kata lain, nilai intensitas pixel semula
dipetakan ke dua nilai saja: hitam dan putih. Nilai ambang yang dipakai dapat
berlaku untuk keseluruhan pixel atau untuk wilayah tertentu saja (berdasarkan
penyebaran nilai intensitas pada wilayah tersebut).
Operasi pengambangan pada citra Lena dengan fungsi transformasi:

0,
f(x, y) =
1,

42

f ( x, y ) < 128
f ( x, y ) 128

(4.4)

Pengolahan Citra Digital

menghasilkan citra biner seperti yang diperlihatkan pada Gambar 4.2(a).


Persamaan 4.4 menyatakan bahwa pixel-pixel yang nilai intensitasnya di bawah
128 diubah menjadi hitam (nilai intensitas = 0), sedangkan pixel-pixel yang nilai
intensitasnya di atas 128 diubah menjadi putih (nilai intensitas = 1) . Algoritma
transformasi citra hitam-putih menjadi citra biner ditunjukkan oleh Algoritma 4.1.

(a)

(b)

Gambar 4.2. (a) Citra biner Lena, (b) citra negatif Lena

void biner(citra A, citra_biner B, int T, int N, int M)


/* Membuat citra biner dari citra A berdasarkan nilai ambang (threshold)
T yang dispesifikasikan. Ukuran citra adalah N M. citra_biner adalah
tipe data untuk citra biner).
*/
{ int i, j;
citra_biner B;
for (i=0; i<=N-1; i++)
for (j=0; j<=M-1; j++)
{
if (A[i][j] < T)
B[i][j] = 0;
else
B[i][j] = 1;
/* atau diisi dengan 255 pada citra 8-bit */
}
}

Algoritma 4.1. Mengubah citra A menjadi citra biner.

Contoh operasi titik yang lain adalah:


Bab 4_Operasi-operasi Dasar Pengolahan Citra Dijital

43

(i) Operasi negatif, yaitu mendapatkan citra negatif (negative image) meniru
film negatif pada fotografi dengan cara mengurangi nilai intensitas pixel dari
nilai keabuan maksimum. Misalnya pada citra dengan 256 derajat keabuan (8
bit), citra negatif diperoleh dengan persamaan:
f(x, y) = 255 f(x, y)

(4.5)

Sedangkan pada citra dengan 128 derajat keabuan,


f(x, y) = 127 f(x, y)

(4.6)

Hasil operasi negatif pada citra Lena diperlihatkan pada Gambar 4.2(b).
Algoritma pembentukan citra negatif untuk citra hitam-putih dengan 256
derajat keabuan ditunjukkan oleh Algoritma 4.2. Untuk citra berwarna, citra
negatifnya diperoleh dengan melakukan hal yang sama untuk setiap
komponen RGB.

void negatif(citra A, citra B, int N, int M)


/* Membuat citra negatif dari citra A. Hasilnya disimpan di dalam citra
B.
Ukuran citra adalah N M.
*/
{ int i, j;
for (i=0; i<=N-1; i++)
for (j=0; j<=M-1; j++)
{
B[i][j] = 255 - A[i][j];
}
}

Algoritma 4.2. Membuat citra negatif dari sebuah citra dengan 256 derajat keabuan

(ii) Pemotongan (clipping)


Operasi ini dilakukan jika nilai intensitas pixel hasil suatu operasi
pengolahan citra terletak di bawah nilai intensitas minimum atau di atas nilai
intensitas maksimum:
f ( x, y ) > 255
255,

f(x, y) = f ( x, y ), 0 f ( x, y ) 255
0,
f ( x, y ) < 0

(4.7)

Pemotongan (clipping) termasuk ke dalam operasi pengambangan juga.

44

Pengolahan Citra Digital

(iii) Pencerahan citra (image brightening)


Kecerahan citra dapat diperbaiki dengan menambahkan (atau mengurangkan)
sebuah konstanta kepada (atau dari) setiap pixel di dalam citra.
Secara matematis operasi ini ditulis sebagai
f(x, y) = f(x, y) + b

(4.8)

Jika b positif, kecerahan citra bertambah, sebaliknya jika b negatif kecerahan


citra berkurang. Lihat contoh pencerahan citra pada Gambar 4.3 yang
diterapkan pada citra Zelda. Semula citra Zelda tampak gelap, tetapi dengan
menambahkan setiap nilai pixel dengan b = 10, citra Zelda menjadi lebih
terang.
Persamaan 4.8 mengisyaratkan bahwa operasi pencerahan citra dapat
menghasilkan nilai di bawah nilai intensitas minimum atau d atas nilai
intensitas maksimum. Oleh karena itu, operasi clipping perlu diterapkan.
Algoritma pencerahan citra ntuk citra dengan 256 derajat keabuan
ditunjukkan oleh Algoritma 4.3.

void brightening(citra A, int b, citra B, int N, int M)


/* Pencerahan citra dengan cara menjumlahkan setiap pixel di dalam citra
A dengan sebuah skalar b. Hasil disimpan di dalam citra B. Citra A
berukuran N M.
*/
{ int i, j, temp;
for (i=0; i<=N-1; i++)
for (j=0; j<=M-1; j++)
{
temp = A[i][j] + b;
/* clipping */
if (temp < 0)
B[i][j] = 0;
else
if (temp > 255)
B[i][j]=255;
else
B[i][j]=temp;
}
}

Algoritma 4.3. Pencerahan citra

Bab 4_Operasi-operasi Dasar Pengolahan Citra Dijital

45

Gambar 4.3. Kiri: citra Zelda (agak gelap); kanan: citra Zelda setelah operasi pencerahan

b. Berdasarkan geometri.
Posisi pixel diubah ke posisi yang baru, sedangkan intensitasnya tidak berubah.
Contoh operasi titik berdasarkan geometri misalnya pemutaran (rotasi), pergeseran
(translasi), penskalaan (dilatasi), pembetulan erotan (distorsi) geometri (akan
dijelaskan kemudian).
c. Gabungan intensitas dan geometri.
Operasi ini tidak hanya mengubah nilai intensitas pixel, tapi juga mengubah
posisinya. Misalnya image morphing, yaitu perubahan bentuk objek beserta nilai
intensitasnya.

2. Aras Lokal
Operasi pada aras lokal menghasilkan citra keluaran yang intensitas suatu pixel
bergantung pada intensitas pixel-pixel tetangganya (Gambar 4.4).
fB(x, y) = Olokal{fA(xi, yj);

(xi, yj) N(x, y) }

(4.9)

(keterangan: N = neighborhood, yaitu pixel-pixel yang berada di sekitar (x, y) )

46

Pengolahan Citra Digital

Olokal{f(xi,yi), (xi, yi) pixel


di sekitar (x,y)}

Gambar 4.4. Operasi aras lokal

Contoh operasi beraras lokal adalah operasi konvolusi untuk mendeteksi tepi
(edge detection) dan pelembutan citra (image smoothing). Gambar 4.5 adalah
citra Lena hasil pendeteksian tepi. Konsep pendeteksian tepi dan penghalusan
citra masing-masing akan dibahas di dalam Bab 8 dan Bab 7.

Gambar 4.5. Hasil pendeteksian semua tepi dari citra Lena

3. Aras Global
Operasi pada aras global menghasilkan citra keluaran yang intensitas suatu pixel
bergantung pada intensitas keseluruhan pixel (Gambar 4.6).
fB(x, y) = Oglobal{fA(x, y)}

Bab 4_Operasi-operasi Dasar Pengolahan Citra Dijital

(4.10)

47

Oglobal{f(x, y)}

Gambar 4.6. Operasi aras global

Contoh operasi beraras global adalah operasi penyetaraan histogram untuk


meningkatkan kualitas citra (akan dibahas pada kuliah selanjutnya).

4. Aras Objek
Operasi jenis ini hanya dilakukan pada objek tertentu di dalam citra. Tujuan dari
operasi pada aras objek adalah untuk mengenali objek tersebut, misalnya dengan
menghitung rata-rata intensitas, ukuran, bentuk, dan karakteristik lain dari objek.
Operasi aras objek adalah operasi yang sangat sulit, karena sebelumnya kita harus
dapat menjawab: apakah objek itu, bagaimana menemukannya?

4.2 Operasi Aritmetika


Karena citra dijital adalah matriks, maka operasi-operasi aritmetika matriks juga
berlaku pada citra. Operasi matriks yang dapat dilakukan adalah:
1. Penjumlahan atau pengurangan antara dua buah citra A dan B:
C(x, y) = A(x, y) B(x, y),
2. Perkalian dua buah citra:
C(x, y) = A(x, y) B(x, y),
3. Penjumlahan/pengurangan citra A dengan skalar c:
B(x, y) = A(x, y) c,
4. Perkalian/pembagian citra A dengan sebuah skalar c:
B(x, y) = c A(x, y)

48

Pengolahan Citra Digital

Ditinjau dari aras komputasi, operasi aritmetika termasuk ke dalam operasi aras
titik. Penjelasan masing-masing operasi aritmetika matriks adalah sebagai berikut.
1. Penjumlahan Dua Buah citra
Persamaannya:

C(x, y) = A(x, y) + B(x, y)

(4.11)

C adalah citra baru yang intensitas setiap pixel-nya adalah jumlah dari intensitas
tiap pixel pada A dan B. Jika hasil penjumlahan intensitas lebih besar dari 255,
maka intensitasnya dibulatkan ke 255. Algoritma penjumlahan dua buah citra
ditunjukkan pada Algoritma 4.4.
void addition(citra A, citra B, citra C, int N, int M)
/* Menjumlahkan dua buah citra A dan B menjadi citra baru, C.
Citra A, B, dan C masing-masing berukuran N M.
*/
{ int i, j, temp;
for (i=0; i<=N-1; i++)
for (j=0; j<=M-1; j++)
{
temp=A[i][j] + B[i][j];
if (temp > 255) C[i][j]=255; else C[i][j]=temp;
}
}

Algoritma 4.4.Penjumlahan dua buah citra

Operasi penjumlahan citra dapat digunakan untuk mengurangi pengaruh derau


(noise) di dalam data, dengan cara merata-ratakan derajat keabuan setiap pixel
dari citra yang sama yang diambil berkali-kali. Misalnya untuk citra yang sama
direkam dua kali, f1 dan f2, lalu dihitung intensitas rata-rata untuk setiap pixel:
1
f (x,y) = { f1(x, y) + f2(x, y) }
2
Hasil operasi mungkin bernilai riil, karena itu semua nilai riil tersebut perlu
dibulatkan ke nilai bulat terdekat, nilai maksimum adalah 255.
2. Pengurangan Dua Buah Citra
Persamaannya:

C(x, y) = A(x, y) B(x, y)

Bab 4_Operasi-operasi Dasar Pengolahan Citra Dijital

(4.12)

49

C adalah citra baru yang intensitas setiap pixel-nya adalah selisih antara intensitas
pixel pada A dan B.
Ada kemungkinan hasil operasi ini menghasilkan nilai negatif, oleh karena itu,
operasi pengurangan citra perlu melibatkan operasi clipping.
Contoh aplikasi operasi pengurangan citra adalah untuk memperoleh suatu objek
dari dua buah citra [HEN95]. Citra pertama misalnya foto sebuah ruangan yang
kosong, citra kedua adalah foto ruangan yang sama tetapi ada orang di dalamnya.
Hasil pengurangan citra kedua dengan gambar pertama menghasilkan citra yang
latar belakangnya hitam, sedangkan latar depannya (objek orang) berwarna putih.
Algoritmanya ditunjukkan pada Algoritma 4.5.
void substraction (citra A, citra B, citra C, int N, int M)
/* Mengurangkan dua buah citra A dan B menajdi citra baru, C.
Citra A, B, dan C berukuran N M.
*/
{ int i, j;
for (i=0; i<=N-1; i++)
for (j=0; j<=M-1; j++)
{
C[i][j]=A[i][j] - B[i][j];
if (C[i][j] != 0) C[i][j]=255;
}

/* nyatakan objek berwarna putih */

Algoritma 4.5. Pengurangan dua buah citra untuk mendapatkan objek di dalamnya.

Pengurangan citra juga dapat digunakan untuk mendeteksi perubahan yang terjadi
selama selang waktu tertentu bila dua buah citra yang diambil adalah citra dari
adegan yang sama. Teknik semacam ini dipakai pada moving images.
3. Perkalian Citra
Persamaannya:

C(x, y) = A(x, y) B(x, y)

(4.13)

Perkalian citra sering digunakan untuk mengoreksi kenirlanjaran sensor dengan


cara mengalikan matriks citra dengan matrik koreksi. Jadi, dalam hal ini A adalah
citra sedangkan B adalah matriks koreksi. Hasil operasi mungkin bernilai riil,
karena itu semua nilai dibulatkan ke nilai bulat terdekat, nilai maksimum adalah
255. Algoritma perkalian citra dengan matriks koreksi ditunjukkan pada Algoritma
4.3. Kita mengasumsikan di sini ukuran citra dan matriks koreksi adalah N N.

50

Pengolahan Citra Digital

Contoh 4.1. [GAL90] Mengalikan citra A dengan matriks koreksi:

0 12 142 255 0.3


1 6 40 254 0.3


24 0 20 255 0.3


30 2 10 240 0.4
Matriks citra A

0.4
0.0
0.0
0 .1

0.1
0.0
0.0
0.0

0.1 0 17 157 255


0.1 2 6 40 255

=
0.0 32 0 20 255


0.1 42 3 10 255

Matriks koreksi B

Matriks keluaran C

void multiplication(citra A, matriks_riil B, citra C, int N)


/* Mengalikan buah citra A dengan matriks koreksi B menjadi citra C.
Citra A, matriks B, dan hasil perkalian C berukuran N N.
*/
{ int i, j, temp;
for (i=0; i<=N-1; i++)
for (j=0; j<=N-1; j++)
{
temp=0;
for (k=0; k<=N-1; k++)
{
temp = temp + A[i][k]*B[k][j];
/* clipping */
if (temp < 0)
C[i][j] = 0;
else
if (temp > 255)
C[i][j]=255;
else
C[i][j]=temp;
}
}
}

Algoritma 4.6. Perkalian citra A dengan matriks koreksi B.

4. Penjumlahan/pengurangan citra dengan skalar


Persamaannya:

B(x, y) = A(x, y) c

(4.14)

Penjumlahan citra A dengan skalar c adalah menambah setiap pixel di dalam citra
dengah sebuah skalar c, dan menghasilkan citra baru B yang intensitasnya lebih
terang daripada A. Kenaikan intensitas sama untuk seluruh pixel, yaitu c.

Bab 4_Operasi-operasi Dasar Pengolahan Citra Dijital

51

Pengurangan citra A dengan skalar c adalah mengurangkan setiap pixel di dalam


citra dengah sebuah skalar c, dan menghasilkan citra baru B yang intensitasnya
lebih gelap daripada A. Penurunan intensitas sama untuk seluruh pixel, yaitu c.
Contoh operasi penjumlahan/pengurangan citra dengan sebuah skalar adalah
operasi pencerahan citra (lihat pembahasan operasi aras titik).
Baik operasi penjumlahan maupun pengurangan citra dengan sebuah skalar
melibatkan operasi clipping. Algoritma penjumlahan/pengurangan citra dengan
sebuah skalar sama seperti Algoritma 4.3.
5. Perkalian/pembagian Citra dengan Skalar
Persamaannya:

B(x, y) = c A(x, y), dan B(x, y) = A(x, y) / c

(4.15)

Perkalian citra A dengan skalar c menghasilkan citra baru B yang intensitasnya


lebih terang daripada A. Kenaikan intensitas setiap pixel sebanding dengan c.
Operasi perkalian citra dengan skalar dipakai untuk kalibrasi kecerahan
(callibration of brightness).
Pembagian citra A dengan skalar c menghasilkan citra baru B yang intensitasnya
lebih gelap daripada A. Penurunan intensitas setiap pixel berbanding terbalik
dengan c. Operasi pembagian citra dengan skalar dipakai untuk normalisasi
kecerahan (normalization of brightness).
Algoritma perkalian/pembagian citra dengan sebuah skalar serupa dengan
Algoritma 4.3, hanya saja operasi + atau diganti dengan * atau /.

4.3 Operasi Boolean pada Citra


Selain operasi aritmetika, pemrosesan citra dijital juga melibatkan operasi
Boolean (and, or, dan not):
C(x, y) = A(x, y) and B(x, y),
C(x, y) = A(x, y) or B(x, y),
C(x, y) = not A(x, y).

(4.16)

(dalam notasi Bahasa C, ketiga operasi di atas ditulis sebagai:


C[x][y]=A[x][y]&B[x][y]
C[x][y]=A[x][y]|B[x][y]
C[x][y]=!A[x][y]
52

Pengolahan Citra Digital

)
Operasi Boolean mempunyai terapan yang penting pada pemrosesan morfologi
pada citra biner. Pada citra biner, operasi not dapat digunakan untuk menentukan
komplemen dari citra (Gambar 4.7). Algoritma membentuk komplemen dari citra
biner ditunjukan oleh Algoritma 4.7.

(a) Ganesha

(b) not Ganesha

Gambar 4.7. Hasil operasi not pada citra biner Ganesha

void not(citra_biner A, citra_biner B, int N, int M)


/* Membuat citra komplemen dari citra biner A. Komplemennya disimpan di
dalam B. Ukuran citra A adalah N M.
*/
{ int i, j;
for (i=0; i<=N-1; i++)
for (j=0; j<=M-1; j++)
{
B[i][j] = !A[i][j];
}
}

Algoritma 4.7. Membuat citra komplemen dari citra biner

4.5 Operasi Geometri pada Citra


Pada operasi geometrik, koordinat pixel berubah akibat transformasi, sedangkan
intensitasnya tetap. Ini berbeda dengan dengan operasi aritmetika yang mana
koordinat pixel tetap sedangkan intensitasnya berubah.

Bab 4_Operasi-operasi Dasar Pengolahan Citra Dijital

53

Operasi geometri yang dilakukan misalnya translasi, rotasi, penskalaan citra, dan
pencerminan citra (flipping). Pengubahan geometri dari citra f(x, y) menjadi citra
baru f (x, y) dapat ditulis sebagai:
f (x, y) = f(g1(x, y), g2(x, y))

(4.17)

yang dalam hal ini, g1(x) dan g2(y) adalah fungsi transformasi geometrik. Dengan
kata lain,
x = g1(x, y);
y = g2(x, y)

(4.18)

a. Translasi
Rumus translasi citra:

x = x + m
y = y + n

(4.19)

yang dalam hal ini, m adalah besar pergeseran dalam arah x, sedangkan n adalah
besar pergeseran dalam arah y. Jika citra semula adalah A dan citra hasil translasi
adalah B, maka translasi dapat diimplementasikan dengan menyalin citra dari A
ke B:
B[x][y] = A[x + m][y + n]

(4.20)

Algoritma translasi citra ditunjukkan oleh Algoritma 4.8, sedangkan contoh


translasi pada citra camera diperagakan pada Gambar 4.8.
void translation(citra A, citra B, int N, int M, int m, int n)
/* Mentranslasi citra A sejauh m, n. Hasil translasi disimpan di dala B.
Ukuran citra adalah N M.
*/
{ int i, j;
for (i=0; i<=N-1; i++)`
for (j=0; j<=M-1; j++)
{
B[i][j]=A[i+m][j+n];
}
}

Algoritma 4.8. Operasi translasi citra

54

Pengolahan Citra Digital

(a)

(b)

Gambar 4.8. Translasi pada citra camera: (a) citra semula, (b) citra hasil translasi dengan m = 30 dan
n = 25. (Terima kasih kepada Nanda Firdausi M atas izin menggunakan output programnya).

b. Rotasi
Rumus rotasi citra:

x = x cos() y sin()
y = x sin() + y cos()

(4.21)

yang dalam hal ini, = sudut rotasi berlawanan arah jarum jam (lihat Gambar
4.9). Jika citra semula adalah A dan citra hasil rotasi adalah B, maka rotasi citra
dari A ke B:
B[x][y] = B[x cos() y sin()][x cos() + y cos()] = A[x][y]

(4.22)

(x',y' )

(x,y)
x

Gambar 4.9. Model rotasi citra

Bab 4_Operasi-operasi Dasar Pengolahan Citra Dijital

55

Jika sudut rotasinya 90, maka implementasinya lebih mudah dilakukan dengan
cara menyalin pixel-pixel baris ke pixel-pixel kolom pada arah rotasi (Gambar
4.10). Rotasi 180 diimplementasikan dengan melakukan rotasi 90 dua kali.
Algoritma rotasi citra sejauh 90 derajat berlawanan arah jarum jam ditunjukkan
pada Algoritma 4.9, sedangkan rotasi citra sejauh 90 derajat searah jarum jam
ditunjukkan pada Algoritma 4.10 [HEN95].

====>

Gambar 4.10. Rotasi citra Lena sejauh 90 berlawanan arah jarum jam

void rotation90CCW(citra A, citra B, int N, int M)


/* Rotasi citra A sejauh 90 berlawanan arah jarum jam (CCW = Clock
Counter-wise).
Ukuran citra adalah N M. Hasil rotasi disimpan di dalam citra B.
*/
{ int i, j, k;
for (i=0; i<=N-1; i++)
{
k=M-1;
for (j=0; j<=M-1; j++)
{
B[k][i]=A[i][j];
k--;
}
}
}

Algoritma 4.8. Rotasi citra sejauh 90 berlawanan arah jarum jam.

56

Pengolahan Citra Digital

void rotation90CW(citra A, citra B, int N, int M)


/* Rotasi citra A sejauh 90 searah jarum jam (CW = Clock-wise).
Ukuran citra adalah N M. Hasil rotasi disimpan di dalam cira B.
*/
{ int i, j, k;

k=M-1;
for (i=0; i<=N-1; i++)
{
for (j=0; j<=M-1; j++)
{
B[j][k]=A[i][j];
}
k--;
}

Algoritma 4.9. Rotasi citra sejauh 90 searah jarum jam.

c. Penskalaan Citra
Penskalaan citra, disebut juga image zooming, yaitu pengubahan ukuran citra
(membesar/zoom out atau mengecil/zoom in).

Rumus penskalaan citra:


x = sx x
y = sy y

(4.23)

yang dalam hal ini, sx dan sy adalah faktor skala masing-masing dalam arah x dan
arah y.
Jika citra semula adalah A dan citra hasil penskalaan adalah B, maka penskalaan
citra dinyatakan sebagai:
B[x][y] = B[sx x][ sy y] = A[x][y]

(4.24)

Operasi zoom out dengan faktor 2 (yaitu, sx = sy = 2) diimplementasikan dengan


menyalin setiap pixel sebanyak 4 kali (Gambar 4.11a). Jadi, citra 2 2 pixel akan
menjadi 4 4 pixel. Algoritma zoom out dengan faktor skala = 2 ditunjukkan oleh
Algoritma 4.10. Contoh citra yang diperbesar dua kali diperlihatkan pada Gambar
4.12 (citra kota San Fransisco).
Operasi zoom in (pengecilan) dengan faktor skala = dilakukan dengan
mengambil rata-rata dari 4 pixel yang bertetangga menjadi 1 pixel (Gambar
4.11b).

Bab 4_Operasi-operasi Dasar Pengolahan Citra Dijital

57

(a)

(b)

Gambar 4.11. (a) Zoom out dengan faktor skala = 2, (b) Zoom in dengan faktor skala = 1/2

void zoom_out(citra A, citra B, int N, int M)


/* perbesaran citra A dengan faktor skala 2
Ukuran citra adalah N M. Hasil perbesaran disimpa d dalam citra B.
*/
{ int i, j, k, m, n;
m=0; n=0;
for (i=0; i<=N-1; i++)
{
for (j=0; j<=M-1; j++)
{
B[m][n]= A[i][j];
B[m][n+1]= A[i][j];
B[m+1][n]= A[i][j];
B[m+1][n+1]= A[i][j];
n=n+2;
}
m=m+2;
n=0;
}
}

Algoritma 4.10. Zoom out dengan faktor skala = 2

58

Pengolahan Citra Digital

(a)

(b)

Gambar 4.12. (a) Citra kota San Fransisco (ukuran normal), (b) citra kota San Fransisco setelah
diperbesar 2 kali (sx = sy = 2):

d. Flipping
Flipping adalah operasi geometri yang sama dengan pencerminan (image
reflection). Ada dua macam flipping: horizontal dan vertikal (Gambar 4.13).

(a) citra

(b) flip horizontal

(c) flip vertikal

Gambar 4.13. Flipping

Flipping horizontal adalah pencerminan pada sumbu-Y (cartesian) dari citra A


menjadi citra B, yang diberikan oleh:
B[x][y] = A[N x][y]
Bab 4_Operasi-operasi Dasar Pengolahan Citra Dijital

(4.25)
59

Flipping vertikal adalah pencerminan pada sumbu-X (cartesian) dari citra A


menjadi citra B, yang diberikan oleh:
B[x][y] = A[x][M y]

(4.26)

Algoritma flipping vertikal ditunjukkan oleh Algoritma 4.11 [HEN95].


Pencerminan pada titik asal (cartesian) dari citra A menjadi citra B diberikan
oleh:
B[x][y] = A[N x][M y]

(4.27)

Pencerminan pada garis x = y dari citra A menjadi citra B diberikan oleh:


B[x][y] = A[y][x]

void vertical_flip(citra A, citra B, int N, int M)


/* Flipping vertikal (pencerminan terhadap sumbu-X) terhadap citar A. */
Ukuran citra adalah N M. Hasil flipping disimpan di dalam citra B.
*/
{ int i, j, k;
k=M-1;
for (i=0; i<=N-1; i++)
{
for (j=0; j<=M-1; j++)
{
B[k][j]=A[i][j];
}
k--;
}
}

Algoritma 4.11. Flipping vertikal.

60

Pengolahan Citra Digital

5. Konvolusi dan Transformasi Fourier


Bab ini berisi konsep matematis yang melandasi teori pengolahan citra. Dua operasi matematis
penting yang perlu dipahami dalam mempelajari pengolahan citra dijital adalah operasi konvolusi
dan Transformasi Fourier. Konvolusi terdapat pada operasi pengolahan citra yang mengalikan
sebuah citra dengan sebuah mask atau kernel (akan dijelaskan kemudian), sedangkan Transformasi
Fourier dilakukan bila citra dimanipulasi dalam ranah (domain) frekuensi ketimbang dalam ranah
spasial. Bagian pertama di dalam Bab 5 ini akan membahas konvolusi, dan bagian kedua akan
membahas Transformasi Fourier.

5.1 Teori Konvolusi


Operasi yang mendasar dalam pengolahan citra adalah operasi konvolusi. Konvolusi 2 buah fungsi
f(x) dan g(x) didefinisikan sebagai berikut:

h( x ) = f ( x ) * g ( x ) =

f (a ) g ( x a )da

(5.1)

yang dalam hal ini, tanda * menyatakan operator konvolusi, dan peubah (variable) a adalah peubah
bantu (dummy variable).
Untuk fungsi diskrit, konvolusi didefinisikan sebagai

h( x ) = f ( x ) * g ( x ) =

f (a ) g ( x a )

(5.2)

a =

Pada operasi konvolusi di atas, g(x) disebut kernel konvolusi atau kernel penapis (filter). Kernel
g(x) merupakan suatu jendela yang dioperasikan secara bergeser pada sinyal masukan f(x), yang
dalam hal ini, jumlah perkalian kedua fungsi pada setiap titik merupakan hasil konvolusi yang
dinyatakan dengan keluaran h(x).
Ilustrasi konvolusi adalah sebagai berikut. Misalkan fungsi f(x) dan g(x) diperlihatkan pada Gambar
5.1(a) dan 5.1(b). Langkah-langkah perhitungan hasil konvolusi ditunjukkan mulai dari Gambar
5.1(c) sampai 5.11(f). Hasil konvolusi ditunjukkan pada Gambar 5.1(g), yaitu:
0 x <1
x / 2,

f ( x ) * g ( x ) = 1 x / 2, 1 x 2
0,
lainnya

(5.3)

f(a)

g(a)

1
1/2
1

(a)

(b)

g(-a)

g(x - a)

1/2

1/2
a

a
-1

-1

(c)

(d)

f(a)g(x-a)

f(a)g(x-a)

0<=x<=1
1/2

1<=x<=2
1/2

a
-1

a
-1

x-1

(e)

(e)

f(x)*g(x)

1/2

(f)

Gambar 5.1. Ilustrasi proses konvolusi [GON77]

Contoh ilustrasi konvolusi yang lain adalah dengaan fungsi delta. Ada dua macam fungsi delta:
delta Dirac dan delta Kronecker.
Fungsi delta Dirac disebut juga fungsi denyut (impuls). Fungsi ini bernilai 0 untuk x 0, dan
lebar denyutnya sama dengan 1. Secara matematis fungsi delta Dirac definisikan sebagai

( x ) = 0, x 0
lim

( x )dx = 1

(5.4)

Gambar 5.2 memperlihatkan bentuk fungsi delta Dirac.


Sifat-sifat fungsi delta Dirac:

f ( x' ) ( x x' )dx' = f ( x)

1.

(5.5)

2. ( ax ) =

( x)

(5.6)

Fungsi delta Dirac adalah fungsi dengan daerah asal bilangan riil. Bila kita bekerja dengan fungsi
diskrit, maka fungsi delta yang digunakan adalah fungsi delta Kronecker, yang didefinisikan
sebagai
0, n 0
1, n = 0

(n) =

(5.7)

dengan sifat

f (m) (n m) = f (n)

(5.8)

m =

Bentuk dwimatra dari fungsi delta diperoleh dengan mengalikan bentuk satumatranya:
Dirac:
Kronecker:

(x,y) = (x) (y)


(m,n) = (m) (n)

(x )

x
Gambar 5.2. Fungsi delta Dirac
2

Hasil konvolusi fungsi f(x) pada Gambar 5.3(a) dengan fungsi g(x) =(x + T) + (x) + (x T) pada
Gambar 5.3(b) ditunjukkan pada Gambar 5.3(c).
f(a)

g(a)
A

-T

(a)

-T

(b)

(c)

Gambar 5.3. Konvolusi dengan fungsi impuls

Salah satu penggunaan fungsi delta adalah melakukan penerokan (sampling) pada sinyal malar f(x).
Proses penerokan umumnya dilakukan pada periode yang tetap. Jika sinyal malar f(t) diterok
dengan periode tetap T, maka diperoleh serangkaian nilai diskrit fd (n):
fd (n) = f(nT),

< n < +

Proses penerokan ini ditunjukkan dengan Gambar 5.4.

fd(nT)

f(t)
Penerokan

Gambar 5.4. Proses penerokan

Secara matematis, proses penerokan dinyatakan sebagai perkalian sinyal malar f(t) dengan fungsi
penerok berupa rentetan sinyal delta sejarak T satu sama lain (Gambar 5.5). Fungsi penerok itu
dapat dinyatakan sebagai

s(t) =

(t nT )

(5.9)

Dengan demikian,

fd(t) = f(t)s(t) = f(t)

(t nT ) =

f (t ) (t nT )

(5.10)

Ilustrasi grafis proses penerokan ditunjukkan pada Gambar 5.6

Gambar 5.5. Fungsi penerok s

f(t)

s(t)

f(t)s(t)

Gambar 5.6. Ilustrasi grafis proses penerokan

5.1 Konvolusi Pada Fungsi Dwimatra


Untuk fungsi dengan dua peubah (fungsi dua dimensi atau dwimatra), operasi konvolusi
didefinisikan sebagai berikut:
a) untuk fungsi malar

h( x, y ) = f ( x, y ) * g ( x, y ) =

f (a, b) g ( x a, y b)dadb

(5.11)

b) untuk fungsi diskrit


h( x, y ) = f ( x, y ) * g ( x, y ) =

f ( a , b ) g ( x a , y b)

(5.12)

a = b =

Fungsi penapis g(x,y) disebut juga convolution filter atau convolution mask atau convolution kernel
atau template. Dalam ranah diskrit kernel konvolusi dinyatakan dalam bentuk matriks (umumnya 3
3, namun ada juga yang berukuran 2 2 atau 2 1 atau 1 2). Ukuran matriks ini biasanya lebih
kecil dari ukuran citra. Setiap elemen matriks disebut koefisien konvolusi.
Ilustrasi konvolusi ditunjukkan pada Gambar 5.7.

p1 p2 p3
p4 p5 p6

f(i,j)

p7 p8 p9

kernel
citra

f(i,j) = A p1 + B p2 + C p3 + D p4 + E p5 + F p6 + G p7 + H p8 + I p9
Gambar 5.7 Ilustrasi konvolusi [JAI95]

Operasi konvolusi dilakukan dengan menggeser kernel konvolusi pixel per pixel. Hasil konvolusi
disimpan di dalam matriks yang baru.

Contoh 5.1. Misalkan citra f(x, y) yang berukuran 5 5 dan sebuah kernel atau yang berukuran 3
3 masing-masing adalah sebagai berikut:

4
6

f(x, y) = 5

6
3

4
6
6
7
5

3
5
6
5
2

5
5
6
5
4

4
2

3
4

0 1 0
g(x, y) = 1 4 1

0 1 0

Keterangan: Tanda menyatakan posisi (0, 0) dari kernel.


Operasi konvolusi antara citra f(x, y) dengan penapis g(x, y):
f(x, y) * g(x, y)
dapat digambarkan sebagai berikut:
(1) Tempatkan kernel pada sudut kiri atas:
4

Nilai intensitas baru dari pixel pada posisi (0, 0) dari kernel dihitung dengan cara berikut:
(0 4) + (-1 4) + (0 3) + (-1 6) + (4 6) + (-1 5) + (0 5) + (-1 6) + (0 6) = 3
(2) Geser kernel satu pixel ke kanan, kemudian hitung nilai pixel pada posisi (0, 0) dari kernel:

Nilai intensitas baru dari pixel pada posisi (0, 0) dari kernel dihitung dengan cara berikut:
(0 4) + (-1 3) + (0 5) + (-1 6) + (4 5) + (-1 5) + (0 6) + (-1 6) + (0 6) = 0

(3) Geser kernel satu pixel ke kanan, kemudian hitung nilai pixel pada posisi (0, 0) dari kernel:
4

Nilai intensitas baru dari pixel pada posisi (0, 0) dari kernel dihitung dengan cara berikut:
(0 3) + (-1 5) + (0 4) + (-1 5) + (4 5) + (-1 2) + (0 6) + (-1 6) + (0 2) = 2

(4) Selanjutnya, geser kernel satu pixel ke bawah, lalu mulai lagi melakukan konvolusi dari sisi kiri
citra. Setiap kali konvolusi, geser kernel satu pixel ke kanan:
(i)

Nilai intensitas baru dari pixel pada posisi (0, 0) dari kernel dihitung dengan cara berikut:
(0 6) + (-1 6) + (0 5) + (-1 5) + (4 6) + (-1 6) + (0 6) + (-1 7) + (0 5) = 0
(ii)

Nilai intensitas baru dari pixel pada posisi (0, 0) dari kernel dihitung dengan cara berikut:
(0 6) + (-1 5) + (0 5) + (-1 6) + (4 6) + (-1 6) + (0 7) + (-1 5) + (0 5) = 2

(iii)

Nilai intensitas baru dari pixel pada posisi (0, 0) dari kernel dihitung dengan cara berikut:
(0 5) + (-1 5) + (0 2) + (-1 6) + (4 6) + (-1 2) + (0 5) + (-1 5) + (0 3) = 6
Dengan cara yang sama seperti di atas, maka pixel-pixel pada baris ketiga dikonvolusi sehingga
menghasilkan:

Sebagai catatan, jika hasil konvolusi menghasilkan nilai pixel negatif, maka nilai tersebut dijadikan
0, sebaliknya jika hasil konvolusi menghasilkan nilai pixel lebih besar dari nilai keabuan
maksimum, maka nilai tersebut dijadikan ke nilai keabuan maksimum (ingat operasi clipping).
Masalah timbul bila pixel yang dikonvolusi adalah pixel pinggir (border), karena beberapa koefisien
konvolusi tidak dapat dapat diposisikan pada pixel-pixel citra (efek menggantung), seperti contoh
di bawah ini:
4

Masalah menggantung seperti ini selalu terjadi pada pixel-pixel pinggir kiri, kanan, atas, dan
bawah. Solusi untuk masalah ini adalah [SID95]:
1.

Pixel-pixel pinggir diabaikan, tidak di-konvolusi. Solusi ini banyak dipakai di dalam pustaka
fungsi-fungsi pengolahan citra. Dengan cara seperti ini, maka pixel-pixel pinggir nilainya tetap

sama seperti citra asal. Gambar 5.8 memperlihatkan hasil konvolusi pada Contoh 5.1, yang
dalam hal ini nilai pixel-pixel pinggir sama dengan nilai pixel semula.
2.

Duplikasi elemen citra, misalnya elemen kolom pertama disalin ke kolom M+1, begitu juga
sebaliknya, lalu konvolusi dapat dilakukan terhadap pixel-pixel pinggir tersebut.

3.

Elemen yang ditandai dengan ? diasumsikan bernilai 0 atau konstanta yang lain, sehingga
konvolusi pixel-pixel pinggir dapat dilakukan.

Solusi dengan ketiga pendekatan di atas mengasumsikan bagian pinggir citra lebarnya sangat kecil
(hanya satu pixel) relatif dibandingkan denagn ukuran citra, sehingga pixel-pixel pinggir tidak
memperlihatkan efek yang kasat mata.

Gambar 5.8 Pixel-pixel pinggir (yang tidak diarsir) tidak dikonvolusi (dari Contoh 5.1)

Algoritma konvolusi citra N M dengan dengan mask atau kernel yang berukuran 3 3
ditunjukkan pada Algoritma 5.1. Pixel yang dikonvolusi adalah elemen (i, j). Delapan buah pixel
yang bertetangga dengan pixel (i, j) diperlihatkan pada Gambar 5.9.

i-1,j-1

i-1,j

i-1,j+1

i, j-1

i,j

i, j+1

i+1,j-1

i+1,j

i+1,j+1

Gambar 5.9 Pixel-pixel pinggir (yang tidak diarsir) tidak dikonvolusi (dari Contoh 5.1)

void konvolusi(citra Image, citra ImageResult, imatriks Mask, int N, int M)


/* Mengkonvolusi citra Image yang berukuran N M dengan mask 3 3. Hasil
konvolusi disimpan di dalam matriks ImageResult.
*/
{ int i, j;
for (i=1; i<=N-3; i++)
for(j=1; j<=M-3; j++)
ImageResult[i][j]=
Image[i-1][j-1]*Mask[0][0] +
Image[i-1][j+1]*Mask[0][1] +
Image[i-1][j]*Mask[0][2] +
Image[i][j-1]*Mask[1][0] +
Image[i][j]*Mask[1][1] +
Image[i][j+1]*Mask[1][2] +
Image[i+1][j-1]*Mask[2][0] +
Image[i+1][j]*Mask[2][1] +
Image[i+1][j+1]*Mask[2][2];
}

Algoritma 5.1. Konvolusi citra dengan sebuah mask yang berukuran 3 3.

Anda dapat melihat bahwa operasi konvolusi merupakan komputasi pada aras lokal, karena
komputasi untuk suatu pixel pada citra keluaran melibatkan pixel-pixel tetangga pada citra
masukannya.
Konvolusi berguna pada proses pengolahan citra seperti:
- perbaikan kualitas citra (image enhancement)
- penghilangan derau
- mengurangi erotan
- penghalusan/pelembutan citra
- deteksi tepi, penajaman tepi
- dll
Sebagai contoh, Gambar 5.9 memperlihatkan konvolusi citra Lena dengan penapis Gaussian untuk
mempertajam tepi-tepi di dalam citra. Penapis Gaussian adalah sebuah mask yang berukuran 3 3:
1 2 1
g ( x, y ) = 2 4 2

1 2 1

10

1 2 1
2 4 2

1 2 1

(a) Citra Lena semula

(b) Citra Lena sesudah konvolusi

Gambar 5.10 Konvolusi citra Lena dengan penapis Gaussian untuk mempertajam gambar.

Karena konvolusi dilakukan per pixel, dan untuk setiap pixel dilakukan operasi perkalian dan
penjumlahan, maka jelas konvolusi mengkonsumsi banyak waktu. Jika citra berukuran N N dan
kernel berukuran m m, maka jumlah perkalian adalah dalam orde N2m2. Sebagai contoh jika citra
berukuran 512 512 dan kernel berukuran 16 16, maka ada sekitar 32 juta perkalian yang
dibutuhkan. Ini jelas tidak cocok untuk proses yang real time tanpa perangkat keras yang dedicated.
Satu cara mengurangi waktu komputasi adalah mentransformasi citra dan kernel ke dalam ranah
frekuensi (dengan menggunakan Transformasi Fourier akan diuraikan di upabab 5.2), selanjutnya
konvolusi dilakukan dalam ranah waktu. Keuntungan utama dari penggunaan ranah frekuensi
adalah proses konvolusi dapat diterapkan dalam bentuk perkalian langsung.
Proses perubahan fungsi dari ranah ranah spasial ke ranah frekuensi dilakukan melalui
Transformasi Fourier. Sedangkan perubahan fungsi dari ranah frekuensi ke ranah spasial
dilakukan melalui Transformasi Fourier Balikan (invers).

f(x, y)

Transformasi Fourier

F(u, v)

F(u, v)

Transformasi Fourier Balikan

f(x, y)

Dengan demikian, operasi konvolusi dua buah fungsi dalam ranah frekuensi menjadi:
h(x, y) = f(x, y) * g(x, y)

H(u, v)

H(u, v) = F(u, v) G(u, v)

Transformasi Fourier Balikan

h(x, y)

11

5.3 Transformasi Fourier


Transformasi Fourier merupakan transformasi paling penting di dalam bidang pengolahan sinyal
(signal processing), khususnya pada bidang pengolahan citra.
Umumnya sinyal dinyatakan sebagai bentuk plot amplitudo versus waktu (pada fungsi satu matra)
atau plot amplitudo versus posisi spasial (pada fungsi dwimatra). Pada beberapa aplikasi
pengolahan sinyal, terdapat kesukaran melakukan operasi karena fungsi dalam ranah waktu/spasial,
misalnya pada operasi konvolusi di atas. Operasi konvolusi dapat diterapkan sebagai bentuk
perkalian langsung bila fungsi berada dalam ranah frekunsi.
Transformasi Fourier adalah kakas (tool) untuk mengubah fungsi dari ranah waktu/spasial ke ranah
frekuensi. Untuk perubahan sebaliknya digunakan Transformasi Fourier Balikan. Intisari dari
Transformasi Fourier adalah menguraikan sinyal atau gelombang menjadi sejumlah sinusoida dari
berbagai frekuensi, yang jumlahnya ekivalen dengan gelombang asal.
Di dalam pengolahan citra, transformasi Fourier digunakan untuk menganalisis frekuensi pada
operasi seperti perekaman citra, perbaikan kualitas citra, restorasi citra, pengkodean, dan lain-lain.
Dari analisis frekuensi, kita dapat melakukan perubahan frekuensi pada gambar. Perubahan
frekuensi berhubungan dengan spektrum antara gambar yang kabus kontrasnya samapi gambar yang
kaya akan rincian visualnya. Sebagai contoh, pada proses perekaman citra mungkin terjadi
pengaburan kontras gambar. Pada gambar yang mengalami kekaburan kontras terjadi perubahan
intensitas secara perlahan, yang berarti kehilangan informasi frekuensi tinggi. Untuk meningkatkan
kualitas gambar, kita menggunakan penapis frekuensi tinggi sehingga pixel yang berkontras kabur
dapat dinaikkan intensitasnya [.

5.4 Transformasi Fourier Malar


Transformasi Fourier untuk satu peubah:

{ f ( x )} = F (u ) =

f ( x )e

i 2ux

du

(5.13)

Transformasi Fourier Balikan untuk satu peubah:

1{F (u )} = f ( x ) =

F (u )e

i 2ux

du

(5.14)

yang dalam hal ini,


i = imaginer = 1
u adalah peubah frekuensi
Baik transformasi Fourier maupuna Transformasi Fourier Balikan keduanya dinamakan pasangan
transformasi Fourier.

12

Untuk f(x) real, F(u) adalah fungsi kompleks dan dapat dituliskan sebagai:

F(u) = R(u) + iI(u) = F (u ) e i ( u )

(5.15)

Amplitudo atau F(u) disebut spektrum Fourier dari f(x) dan didefinisikan sebagai:

F (u ) = R 2 (u ) + I 2 ( u )

(5.16)

Sudut fase spektrum,

(u ) = tan 1[

I (u )
]
R (u )

(5.17)

menyatakan pergeseran fase atau sudut fase dari setiap frekuensi u.


Dengan mengingat kesamaan Euler
e ix = cos( x ) i sin( x )

(5.18)

maka pasangan transformasi Euler dapat juga ditulis sebagai

F (u ) =

f ( x )e

i 2ux

dx =

f ( x) =

f ( x){cos(2ux) i sin (2ux )}dx

(5.19)

F (u )e i 2ux du =

F (u){cos(2ux) + i sin (2ux)}du

(5.20)

Transformasi Fourier untuk fungsi dengan dua peubah adalah


F (u, v ) =

f ( x, y )e i 2 ( ux +uy ) dudv

(5.21)

sedangkan Transformasi Fourier Balikannya adalah


f ( x, y ) =

F (u, v )ei 2 ( ux +uy ) dudv

(5.22)

yang dalam hal ini, x dan y adalah peubah spasial, sedangkan u dan v adalah peubah frekuensi.
Spektrum Fourier dari fungsi dua peubah:
F ( u , v ) = R 2 ( u , v ) + I 2 ( u, v )

(5.23)

13

sedangkan sudut fasenya:


(u, v ) = tan 1[

I (u, v )
]
R ( u, v )

(5.24)

Sifat-sifat Transformasi Fourier


Jika f(t) F(u) dan g(t) G(u), maka sifat-sifat Transformasi Fourier dirumuskan di dalam Tabel
5.1.
Tabel 5.1 Sifat-sifat Transformasi Fourier

Sifat

Ranah Waktu

Ranah Frekuensi

1. Kelanjaran

af (t ) + bg (t )

aF (u ) + bG (u )

2. Penskalaan

f (at )

1
F (u / a )
a

3. Pergeseran

f (t a )

F (u a )

4. Modulasi

e i 2at f (t )

F (u )e i 2ua

5. Konyugasi

f * (t )

F * ( u )

6. Konvolusi

h ( t ) = f (t ) * g (t )

H (u ) = F (u )G (u )

7. Perkalian

h (t ) = f (t ) g (t )

H (u ) = F (u ) * G (u )

8. Diferensiasi

d n f (t )
dt n

(i 2u ) n F (u )

9. Simetri

F (t )

f ( u )

10. Hasil kali dalam

f (t ) g (t )dt
*

F (u)G (u)du
*

5.5 Transformasi Fourier Diksrit


Pada pengolahan sinyal dengan komputer digital, fungsi dinyatakan oleh himpunan berhingga nilai
diskrit. Transformasi Fourier Diskrit (TFD) ditujukan bagi persoalan yang tidak menghasilkan
solusi transformasi Fourier dalam bentuk fungsi malar.
Bila f(x) yang menerus dibuat diskrit dengan mengambil N buah terokan (sampling) sejarak x,
yaitu himpunan nilai {f(x0), f(x0 + x), f(x0 + 2x), , f(x0 + (N-1)x)}.
Jadi,
fx = f(x0 + x x), x = 0, 1, 2, , N 1
14

Pasangan Transformasi Fourier Diskrit untuk fungsi dengan satu peubah:


Fu =
fx =

1
N

N 1

f e
x

i 2ux / N

, u = 0, 1, 2, , N 1

(5.25)

, x = 0, 1, 2, , N 1

(5.26)

x =0

N 1

F e
u

i 2ux / N

u =0

Dengan mengingat kesamaan Euler, pasangan Transformasi Fourier Diskrit dapat ditulis dalam
bentuk
Fu =

fx =

1
N

N 1

[ f

cos(2ux / N ) i f x sin(2ux / N )]

(5.27)

x =0

N 1

[ F

cos(2ux / N ) + i Fu sin(2ux / N )]

(5.28)

u =0

Interpretasi dari TFD adalah sebagai berikut: TFD mengkonversi data diskrit menjadi sejumlah
sinusoida diskrit yang frekuensinya dinomori dengan u = 0, 1, 2, , N 1, dan ampiltudonya
diberikan oleh F(u).
Faktor 1/N pada persamaan F(u) adalah faktor skala yang dapat disertakan dalam persamaan F(u)
atau dalam persamaan f(x), tetapi tidak kedua-duanya.
Contoh 5.2. [MEN89] Diketahui fungsi sinyal f(t) dengan hasil penerokan ke dalam nilai-nilai
diskrit sebagai berikut (N = 4):
x0 = 0.5, f0 = 2
x1 = 0.75, f1 = 3
x2 = 1.0, f2= 4
x3 = 1.25, f3= 4

Transformasi Fourier Diskrit adalah sebagai berikut:


F0 =

1 3
1 3
1 3
1
f x e i.0.2x / 4 =
f x e0 =
f x = ( f 0 + f1 + f 2 + f 3 ) = 3.25
4 x =0
4 x =0
4 x =0
4

1 3
1
f x e i.1.2x / 4 = ( f 0 e 0 + f1e i / 2 + f 2 e i + f 3 e i 3 / 2 )
4 x =0
4
1
= ( 2 + 3[cos( / 2) i sin( / 2)] + 4[cos( ) i sin( )] + 4[cos(3 / 2) i sin(3 / 2)])
4
1
1
= ( 2 + 3[0 i ] + 4[ 1 0] + 4[0 + i ]) = ( 2 i )
4
4

F1 =

15

F2 =

F3 =

1 3
1
f x e i.2.2x / 4 = ( 2e 0 + 3e i + 4e i 2 + 4e i 3 )
4 x =0
4

1
1
(1 + 0i ) =
4
4
1
(2 + i )
4

Spektrum Fouriernya:

F0 = 3.25
F1 = (1 / 2) 2 + (1 / 4) 2 = 1 / 4 + 1 / 16 = 5 / 16 =

1
5
4

1
4
1
F3 =
5
4
F2 =

Algoritma TFD dan algoritma TFD Balikan ditunjukkan masing-masing pada Algoritma 5.2 dan
Algoritma 5.3.

void TFD(int N)
/* Melakukan Transformasi Fourier Diskrit untuk N buah data masukan. Hasil
transformasi disimpan di dalam array R dan I. Array R menyimpan bagian
riil, dan array I menyimpan bagian bagian imajiner. Kedau array ini
dideklarasikan sebagai peubah global. Data masukan disimpan di dalam array f[0]
s/d f[N-1]
*/
{
int j, k;
double tetha;
for (j=0; j<N; j++)
{
R[j]=0.0;
I[j]=0.0;
}
for (k=0; k<=N; k++)
for (j=0; j<=N-1; j++)
{
tetha= k*2*3.14*j/(double)N;
R[k]=R[k]+(f[j]*cos(tetha))/(double)N;
I[k]=I[k]-(f[j]*sin(tetha))/(double)N;
}
}

Algoritma 5.2. Transformasi Fourier Diskrit


16

void TFD_balikan(int N)
/* Melakukan Transformasi Fourier Diskrit Balikan untuk N buah data masukan.
Masukan disimpan di dalam array R dan I. Array R menyimpan bagian riil, dan
array I menyimpan bagian bagian imajiner. Kedau array ini
dideklarasikan sebagai peubah global. Data keluaran disimpan di dalam array
fReal[0] s/d f[N-1] dan array fImag[1] s/d fImag[N-1].
*/
{
int j, k;
double tetha, epsilon = 1E-12;
for (j=0; j<N; j++)
{
fReal[j]=0;
fImag[j]=0;
}
for (k=0; k<N1; k++)
{
for (j=0; j<N; j++)
{
tetha=k*2*3.14*j/(double)N;
fReal[k]=fReal[k]+(R[j]*cos(tetha)I[j]*sin(tetha));
fImag[k]=fImag[k]+(I[j]*cos(tetha)+ R[j]sin(tetha));
}
if (fImag[k] < epsilon) fImag[k]=0;
}
}

Algoritma 5.3. Transformasi Fourier Diskrit Balikan

Citra dijital adalah fungsi diskrit dalam ranah spasial, dengan dua peubah, x dan y. Pada fungsi
diskrit dengan dua peubah dan berukuran N M, pasangan Transformasi Fourier Diskritnya adalah:
Fu ,v =
f x, y =

1
NM

N 1 M 1

f x , y e i 2 ( ux / N + vy / M )

, u dan v = 0, 1, 2, , N 1

(5.29)

x =0 y = 0

N 1 M 1

Fu ,v e i 2 ( ux / N + vy / M )

, x dan y = 0, 1, 2, , N 1

(5.30)

u =0 v =0

atau
Fu ,v =
f x, y =

1
N

N 1

N 1

u =0

f x , y e i 2ux / N

x =0

Fu ,v e i 2ux / N

1
M

M 1

i 2vy / M

(5.31)

y =0

M 1

x, y e

u ,v e

i 2vy / M

(5.31)

v =0

untuk u, x = 0, 1, , N 1 dan v, y = 0, 1, , M 1.

17

Algoritma TFD dan balikannya dapat diterapkan untuk fungsi diskrit dwimatra. Mula-mula
transformasi dilakukan dalam arah x (dengan nilai y tetap). Kemudian, hasilnya ditransformasikan
lagi dalam arah y.
Algoritma TFD tidak bagus untuk N yang besar karena komputasinya memakan waktu yang lama.
Kompleksitas waktu algoritmanya adalah O(N2). Algoritma yang dikenal cepat untuk menghitung
transformasi Fourier diskrit adalah FFT (Fast Fourier Transform). Algoritma FFT mempunyai
kompleksitas waktu O(N 2log N). Jadi, untuk N = 50, TFC kira-kira 10 kali lebih cepat daripada
TFD, untuk N = 1000 sekitar 100 kali lebih cepat. Algoritma FFT tidak dibahas di dalam buku ini.

18

Bab 6

Histogram Citra

nformasi penting mengenai isi citra digital dapat diketahui dengan membuat
histogram citra. Histogram citra adalah grafik yang menggambarkan
penyebaran nilai-nilai intensitas pixel dari suatu citra atau bagian tertentu di
dalam citra. Dari sebuah histogram dapat diketahui frekuensi kemunculan nisbi
(relative) dari intensitas pada citra tersebut. Histogram juga dapat menunjukkan
banyak hal tentang kecerahan (brightness) dan kontas (contrast) dari sebuah
gambar. Karena itu, histogram adalah alat bantu yang berharga dalam pekerjaan
pengolahan citra baik secara kualitatif maupun kuantitatif.

6.1 Membuat Histogram


Misalkan citra digital memiliki L derajat keabuan, yaitu dari nilai 0 sampai L 1
(misalnya pada citra dengan kuantisasi derajat keabuan 8-bit, nilai derajat
keabuan dari 0 sampai 255). Secara matematis histogram citra dihitung dengan
rumus
hi =

ni
n

, i = 0, 1, , L 1

(6.1)

yang dalam hal ini,


ni = jumlah pixel yang memiliki derajat keabuan i
n = jumlah seluruh pixel di dalam citra

Bab 6_Histogram Citra

83

Plot hi versus fi dinamakan histogram. Gambar 6.1 adalah contoh sebuah


histogram citra. Secara grafis histogram ditampilkan dengan diagram batang.
Perhatikan dari persamaan 6.1 bahwa nilai ni telah dinormalkan dengan
membaginya dengan n. Nilai hi berada di dalam selang 0 sampai 1.

hi

i
Gambar 6.1. Histogram citra

Sebagai contoh, misalkan matriks di bawah ini menyatakan citra dijital yang
berukuran 8 8 pixel dengan derajat keabuan dari 0 sampai 15 (ada 16 buah
derajat keabuan):

3 7 7 8 10 12 14 10
2 0 0 0 1 8 15 15

14 6 5 9 8 10 9 12

12 12 11 8 8 10 11 1
0 2 3 4 5 13 10 14

4 5 0 0 1 0 2 2
15 13 11 10 9 9 8 7

2 1 0 10 11 14 13 12
Tabulasi perhitungan histogramnya ditunjukan pada Tabel 6.1. Mudah dilihat
bahwa semakin besar nilai ni maka semakin besar pula nilai hi.
Tabel 6.1 Perhitungan histogram

84

ni

0
1
2

8
4
5

hi = ni/n ( n = 64)
0.125
0.0625
0.078125

Pengolahan Citra Digital

3
4
5
6
7
8
9
10
11
12
13
14
15

2
2
3
1
3
6
4
7
4
5
3
4
3

0.03125
0.03125
0.046875
0.015625
0.046875
0.09375
0.046875
0.109375
0.0625
0.078125
0.046875
0.0625
0.046875

6.2 Algoritma Perhitungan Histogram


Algoritma perhitungan histogram ditunjukkan pada Algoritma 6.1 [HEN95].
Citra masukan mempunyai 256 derajat keabuan yang nilai-nilainya dari 0 sampai
255. Intensitas pixel disimpan di dalam Image[0..N-1][0..M-1], sedangkan
histogram disimpan di dalam tabel Hist[0..255] .
Gambar 6.2 memperlihatkan histogram citra kapal (512 512). Beberapa
program komersil seperti Adobe Photoshop, Paintshop, dan PolyView, dapat
digunakan untuk membangkitkan histogram citra.
void histogram(citra Image, int N, int M, float Hist[256])
/* Menghitung histogram untuk citra Image yang berukuran N M.
Histogram disimpan di dalam tabel Hist yang bertipe riil(float).
*/
{ int i, j, n;
/* inisialisasi Hist[0..255] dengan 0 */
for(i=0;i<=255;i++)
Hist[i]=0;
for(i=0;i<=N-1;i++)
for(j=0;j<=M-1;j++)
Hist[Image[i][j]]=Hist[Image[i][j]]+1;

/*normalisasi Hist[i] dengan jumlah seluruh pixel*/


n=N*M;
for(i=0;i<=255;i++)
Hist[i]=Hist[i]/(float)n;

Algoritma 6.2. Perhitungan histogram citra

Bab 6_Histogram Citra

85

(b) Histogram citra kapal (by PolyView )

(a) kapal 512 512, 8-bit


Gambar 6.2. Citra Kapal (512 512) dan histogramnya

Khusus untuk citra berwarna, histogramnya dibuat untuk setiap kanal RGB
(merah, hijau, dan biru). Misalnya citra berwarna pepper 512 512 pixel 8-bit,
pada Gambar 6.3, histogramnya ada tiga buah, masing-masing untuk komponen
merah, hijau, dan biru. Histogram tersebut dihasilkan dari program [WIC01].

(b) Histogram untuk kanal merah

(a) pepper (color), 512 512, 24-bit

86

Pengolahan Citra Digital

(c) Histogram untuk kanal hijau

(d) Histogram untuk kanal biru

Gambar 6.3. Citra berwarna pepper dan histogram masing-masing kanal warnanya

Histogram citra banyak memberikan informasi penting sebagai berikut:


1. Nilai hi menyatakan peluang (probability) pixel, P(i), dengan derajat keabuan
i. Jumlah seluruh nilai hi sama dengan 1, atau
L 1

h = 1
i

i =0

Peluang suatu pixel memiliki derajat keabuan lebih kecil atau sama dengan
derajat keabuan tertentu adalah jumlah hi untuk 0 i j, atau
P (i j ) =

h ,
i

0jL1

i =0

2. Puncak histogram menunjukkan intensitas pixel yang menonjol. Lebar dari


puncak menunjukkan rentang kontras dari gambar. Citra yang mempunyai
kontras terlalu terang (overexposed) atau terlalu gelap (underexposed)
memiliki histogram yang sempit. Histogramnya terlihat hanya menggunakan
setengah dari daerah derajat keabuan. Citra yang baik memiliki histogram
yang mengisi daerah derajat keabuan secara penuh dengan distribusi yang
merata pada setiap nilai intensitas pixel (Gambar 6.4).

Bab 6_Histogram Citra

87

h(i)

h(i)

i
0

255

255
(b)

(a)

h(i)

h(i)

i
0

255
(c)

i
0

255
(d)

Gambar 6.4. (a) citra gelap, (b) citra terang, (c) citra normal (normal brightness), (d) normal
brightness dan high contrast

Gambar 6.5 memperlihatkan tiga buah citra Lena. Citra Lena yang pertama
terlalu gelap. Histogramnya banyak menumpuk pada bagian kiri karena citra
tersebut mengandung banyak nilai intensitas yang dekat dengan 0 (hitam). Citra
Lena yang kedua terlalu terang. Histogramnya banyak menumpuk pada bagian
kanan karena citra tersebut mengandung banyak nilai intensitas yang dekat
dengan 255 (putih). Citra Lena yang ketiga adalah citra yang normal (bagus).
Histogramnya tersebar merata di seluruh daerah derajat keabuan. Tiga buah
histogram tersebut dihasilkan dengan program Adobe Photoshop.

88

Pengolahan Citra Digital

(a) Kiri: citra Lena yang terlalu gelap; kanan: histogramnya (by Photoshop)

(b) Kiri: citra Lena yang terlalu terang; kanan: histogramnya

Gambar 6.5. Bermacam-macam histogram dari beberapa kasus citra Lena

Bab 6_Histogram Citra

89

(c) Kiri: citra Lena yang bagus (normal); kanan: histogramnya


Gambar 6.5 (lanjutan).

90

Pengolahan Citra Digital

7. Perbaikan Kualitas Citra

Perbaikan kualitas citra (image enhancement) merupakan salah satu proses awal dalam
pengolahan citra (image preprocessing). Perbaikan kualitas diperlukan karena seringkali citra
yang dijadikan objek pembahasan mempunyai kualitas yang buruk, misalnya citra mengalami
derau (noise) pada saat pengiriman melalui saluran transmisi, citra terlalu terang/gelap, citra
kurang tajam, kabur, dan sebagainya. Melalui operasi pemrosesan awal inilah kualitas citra
diperbaiki sehingga citra dapat digunakan untuk aplikasi lebih lanjut, misalnya untuk aplikasi
pengenalan (recognition) objek di dalam citra

7.1 Lingkup Proses Perbaikan Kualitas Citra


Yang dimaksud dengan perbaikan kualitas citra adalah proses mendapatkan citra yang lebih
mudah diinterpretasikan oleh mata manusia. Pada proses ini, ciri-ciri tertentu yang terdapat
di dalam citra lebih diperjelas kemunculannya [DUL97]. Secara matematis, image
enhancement dapat diartikan sebagai proses mengubah citra f(x, y) menjadi f (x, y) sehingga
ciri-ciri yang dilihat pada f(x, y) lebih ditonjolkan.
Proses-proses yang termasuk ke dalam perbaikan kualitas citra [DUL97]:
1. Pengubahan kecerahan gambar (image brightness)
2. Peregangan kontras (contrast stretching)
3. Pengubahan histogram citra.
4. Pelembutan citra (image smoothing)
5. Penajaman (sharpening) tepi (edge).
6. Pewarnaan semu (pseudocolouring)
7. Pengubahan geometrik
Beberapa operasi image enhancemnent (4 dan 5) dapat dipandang sebagai operasi penapisan
untuk memperoleh citra yang lebih baik. Operasi penapisan adalah adalah operasi konvolusi
citra f(x, y) dengan penapis h(x, y):
f (x, y) = h(x, y) * f(x, y)

(7.1)

atau dalam ranah frekuensi:


F (u, v) = H(u, v)F(u, v)

(7.2)

Pada umumnya, f(x,y) sudah diketahui sehingga persoalannya adalah memilih h(x,y)
sedemikian rupa sehingga f (x, y) merupakan citra yang menonjolkan ciri tertentu dari f(x, y).

7.2 Pengubahan Kecerahan Gambar (Image Brightness)


Untuk membuat citra lebih terang atau lebih gelap, kita melakukan pengubahan kecerahan
gambar. Kecerahan/kecemerlangan gambar dapat diperbaiki dengan menambahkan (atau
mengurangkan) sebuah konstanta kepada (atau dari) setiap pixel di dalam citra. Akibat dari
operasi ini, histogram citra mengalami pergeseran.
Secara matematis operasi ini ditulis sebagai
f(x, y) = f(x, y) + b

(7.3)

Jika b positif, kecerahan gambar bertambah, sebaliknya jika b negatif kecerahan gambar
berkurang.
Algoritma pengubahan kecerahan gambar ditunjukkan pada Algoritma 7.1. Citra masukan
mempunyai 256 derajat keabuan yang nilai-nilainya dari 0 sampai 255. Intensitas pixel
disimpan di dalam Image[0..N-1,0..M-1], sedangkan hasil pengubahan tetap
disimpan di dalam citra Image.

void ImageBrightness(citra Image, int N, int M, int b)


/* Mengubah kecerahan citar Image yang berukuran N M dengan penambahan
intensitas setiap pixel sebesar b.
*/
{ int i, j, n;
for(i=0;i<=N-1;i++)
for(j=0;j<=M-1;j++)
Image[i][j]+=b;
}

Algoritma 7.1. Perhitungan histogram citra


Nilai pixel hasil pengubahan mungkin derajat keabuan minimum (0) atau derajat keabuan
maksimum (255). Karena itu, pixel tersebut perlu dilakukan clipping ke nilai keabuan
minimum atau ke nilai keabuan maksimum.
Sebagai contoh, Gambar 7.1(a) adalah citra Zelda (beserta histogramnya) yang tampak
gelap, sedangkan Gambar 7.1(b) adalah citra Zelda (beserta histogramnya) yang lebih terang
(nilai b = 80).

(a) Citra Zelda

(b) Histogram citra Zelda

(c) Citra Zelda setelah penambahan kecerahan


dengan b

(d) Histogram citra Zelda setelah penambahan


kecerahan

Gambar 7.1. Citra Zelda; Atas: sebelum operasi penambahan kecerahan terlihat agak gelap;
Bawah: Zelda setelah operasi penambahan kecerahan dengan b = 80.

7.3 Peregangan Kontras


Kontras menyatakan sebaran terang (lightness) dan gelap (darkness) di dalam sebuah gambar.
Citra dapat dikelompokkan ke dalam tiga kategori kontras: citra kontras-rendah (low
contrast), citra kontras-bagus (good contrast atau normal contrast), dan citra kontras-tinggi
(high contrast). Ketiga kategori ini umumnya dibedakan secara intuitif.
Citra kontras-rendah dicirikan dengan sebagian besar komposisi citranya adalah terang atau
sebagian besar gelap. Dari histogramnya terlihat sebagian besar derajat keabuannya
terkelompok (clustered) bersama atau hanya menempati sebagian kecil dari rentang nilai-nilai
keabuan yang mungkin. Jika pengelompokan nilai-nilai pixel berada di bagian kiri (yang
berisi nilai keabuan yang rendah), citranya cenderung gelap. Jika pengelompokan nilai-nilai
pixel berada di bagian kanan (yang berisi nilai keabuan yang tinggi), citranya cenderung
terang. Tetapi, mungkin saja suatu citra tergolong kontras-rendah meskipun tidak terlalu
terang atau tidak terlalu gelap bila semua pengelompokan nilai keabuan berada di tengah
histogram.
Citra kontras-bagus memperlihatkan jangkauan nilai keabuan yang lebar tanpa ada suatu nilai
keabuan yang mendominasi. Histogram citranya memperlihatkan sebaran nilai keabuan yang
relatif seragam.
Citra kontras-tinggi, seperti halnya citra kontras bagus, memiliki jangkauan nilai keabuan
yang lebar, tetapi terdapat area yang lebar yang didominasi oleh warna gelap dan area yang
lebar yang didominasi oleh warna terang. Gambar dengan langit terang denganlatar depan
yang gelap adalah contoh citra kontras-tinggi. Pada histogramnya terlihat dua puncak, satu
pada area nilai keabuan yang rendah dan satu lagi pada area nilai keabuan yang tinggi.
Citra dengan kontras-rendah dapat diperbaiki kualitasnya dengan operasi peregangan kontras.
Melalui operasi ini, nilai-nilai keabuan pixel akan merentang dari 0 sampai 255 (pada citra 8bit), dengan kata lain seluruh nilai keabuan pixel terpakai secara merata.
Gambar 7.2 memperlihatkan tiga buah citra Lena yang masing-masing memiliki kontrasrendah, kontras-tinggi, dan kontras-bagus.

(a) Citra Lena yang terlalu gelap


(kontras rendah)

Histogram

(b) Citra Lena yang terlalu terang


(kontras tinggi)

Histogram

(c) Citra Lena yang bagus (normal)


(kontras bagus)

Histogram

Gambar 7.2. Tiga buah citra Lena dengan tiga macam kontras.

Algoritma peregangan kontras adalah sebagai berikut:


1.

Cari batas bawah pengelompokan pixel dengan cara memindai (scan) histogram dari
nilai keabuan terkecil ke nilai keabuan terbesar (0 sampai 255) untuk menemukan pixel
pertama yang melebihi nilai ambang pertama yang telah dispesifikasikan.

2.

Cari batas atas pengelompokan pixel dengan cara memindai histogram dari nilai
keabuan tertinggi ke nilai keabuan terendah (255 sampai 0) untuk menemukan pixel
pertama yang lebih kecil dari nilai ambang kedua yang dispesifikasikan.

3.

Pixel-pixel yang berada di bawah nilai ambang pertama di-set sama dengan 0,
sedangkan pixel-pixel yang berada di atas nilai ambang kedua di-set sama dengan 255.

4.

Pixel-pixel yang berada di antara nilai ambang pertama dan nilai ambang kedua
dipetakan (diskalakan) untuk memenuhi rentang nilai-nilai keabuan yang lengkap (0
sampai 255) dengan persamaan:
s=

r rmax
255
rmin rmax

(7.4)

yang dalam hal ini, r adalah nilai keabuan dalam citra semula, s adalah nilai keabuan
yang baru, rmin adalah nilai keabuan terendah dari kelompok pixel, dan rmax adalah nilai
keabuan tertinggi dari kelompok pixel (Gambar 7.3).

r
rmax

Gambar 7.3 Peregangan kontras

7.4 Pengubahan Histogram Citra


Untuk memperoleh histogram citra sesuai dengan keinginan kita, maka penyebaran nilai-nilai
intensitas pada citra harus diubah. Terdapat dua cara pengubahan citra berdasarkan
histogram:
1. Perataan historam (histogram equalization)
Nilai-nilai intensitas di dalam citra diubah sehingga penyebarannya seragam (uniform).
2. Pembentukan histogram (histogram spesification)
Nilai-nilai intensitas di dalam citra diubah agar diperoleh histogram dengan bentuk yang
dispesifikasikan oleh pengguna.
Kedua macam pengubahan histogram citra ini dibahas lebih rinci di dalam upabab 7.5 dan 7.6
di bawah ini.

7.5 Perataan Histogram


Sebagaimana telah dijelaskan pada pembahasan terdahulu, histogram citra memberikan
informasi tentang penyebaran intensitas pixel-pixel di dalam citra. Misalnya, citra yang
terlalu terang atau terlalu gelap memiliki histogram yang sempit.
Agar kita memperoleh citra yang baik, maka penyebaran nilai intensitas harus diubah. Teknik
yang lazim dipakai adalah perataan histogram (histogram equalization). Tujuan dari
perataan histogram adalah untuk memperoleh penyebaran histogram yang merata, sedemikian
sehingga setiap derajat keabuan memiliki jumlah pixel yang relatif sama.
Karena histogram menyatakan peluang pixel dengan derajat keabuan tertentu, maka rumus
menghitung histogram ditulis kembali sebagai fungsi peluang

Pr ( rk ) =

nk
n

(7.5)

yang dalam hal ini,


rk =

k
L 1

,0k L1

(7.6)

yang artinya, derajat keabuan (k) dinormalkan terhadap derajat keabuan terbesar (L 1).
Nilai rk = 0 menyatakan hitam, dan rk = 1 menyatakan putih dalam skala keabuan yang
didefinisikan.
Contohnya, jika L = 8, maka nilai-nilai rk dinyatakan di dalam tabel 7.1.

Tabel 7.1 Nilai-nilai rk jika L = 8

k
0
1
2
3
4
5
6
7

rk
0/7 = 0
1/7
2/7
3/7
4/7
5/7
6/7
7/7 = 1

Yang dimaksud dengan perataan histogram adalah mengubah derajat keabuan suatu pixel (r)
dengan derajat keabuan yang baru (s) dengan suatu fungsi transformasi T, yang dalam hal ini
s = T(r). Gambar 7.4 memperlihatkan transformasi r menjadi s.
Dua sifat yang dipertahankan pada transformasi ini:
1. Nilai s merupakan pemetaan 1 ke 1 dari r. Ini untuk menjamin representasi intensitas
yang tetap. Ini berarti r dapat diperoleh kembali dari r dengan transformasi invers:

r = T 1 ( s )

,0s1

(7.7)

2. Untuk 0 ri 1, maka 0 T(r) 1. Ini untuk menjamin pemetaan T konsisten pada


rentang nilai yang diperbolehkan.

s
1

sk = T(rk)

rk

Gambar 7.4 Fungsi transformasi

Untuk fungsi histogram yang menerus,


r

s = T ( r ) = Pr ( w)dw

,0r1

(7.8)

yang dalam hal ini w adalah peubah bantu.


Dalam bentuk diskrit, nilai-nilai s diperoleh dengan persamaan berikut:
sk = T ( rk ) =

nj

n P (r )
=

j =0

(7.9)

j =0

yang dalam hal ini, 0 rk 1, k = 0, 1, 2, , L 1


Contoh 7.1. [GON77] Misalkan terdapat citra yang berukuran 64 64 dengan jumlah derajat
keabuan (L) = 8 dan jumlah seluruh pixel (n) = 64 64 = 4096:

rk
0/7 = 0.00
1/7 = 0.14
2/7 = 0.29
3/7 = 0.43
4/7 = 0.57
5/7 = 0.71
6/7 = 0.86
7/7 = 1.00

k
0
1
2
3
4
5
6
7

Pr(rk) = nk/n
0.19
0.25
0.21
0.16
0.08
0.06
0.03
0.02

nk
790
1023
850
656
329
245
122
81

Gambar 7.5 adalah histogram citra semula sebelum perataan.

0.30

Pr(rk)

0.25
0.20
0.15
0.10
0.05
0 1/7

3/7

5/7

rk

Gambar 7.5. Histogram citra sebelum perataan

Perhitungan perataan histogram adalah sbb:


s0 = T ( r0 ) =

P (r ) = P (r ) = 0.19
r

j =0

s1 = T ( r1 ) =

P (r ) = P (r ) + P (r ) = 0.19 + 0.25 = 0.44


r

j =0

s2 = T ( r2 ) =

P (r ) = P (r ) + P (r ) + P (r ) = 0.19 + 0.25 + 0.21 = 0.65


r

j =0

dan seterusnya, diperoleh:


s3 = 0.81
s4 = 0.89
s5 = 0.95

s6 = 0.98
s7 = 1.00

Karena pada citra ini hanya ada 8 nilai intensitas, maka nilai-nilai sk harus dibulatkan ke nilainilai r yang terdekat:
s0 = 0.19 lebih dekat ke nilai 1/7 ( = 0.14), maka s0 = 1/7
s1 = 0.44 lebih dekat ke nilai 3/7 ( = 0.43), maka s1 = 3/7
s2 = 0.65 lebih dekat ke nilai 5/7 ( = 0.71), maka s2 = 5/7
s3 = 0.81 lebih dekat ke nilai 6/7 ( = 0.86), maka s3 = 6/7
s4 = 0.89 lebih dekat ke nilai 6/7 ( = 0.86), maka s4 = 6/7
s5 = 0.95 lebih dekat ke nilai 7/7 ( = 1.00), maka s5 = 7/7
s6 = 0.98 lebih dekat ke nilai 7/7 ( = 1.00), maka s6 = 7/7
s7 = 1.00 lebih dekat ke nilai 7/7 ( = 1.00), maka s7 = 7/7
Hasil transformasinya :
k
0
1
2
3
4
5
6
7

rk
0
1/7
2/7
3/7
4/7
5/7
6/7
1

sk
1/7
3/7
5/7
6/7
6/7
1
1
1

Terlihat dari contoh di atas hanya lima nilai intensitas yang terisi (1/7, 3/7, 5/7, 6/7, dan 1).
Notasi untuk tiap hasil transformasi didefinisi ulang menjadi:
s0 = 1/7, s1 = 3/7, s2 = 5/7, s4 = 6/7, s5 = 1

Karena r0 = 0 dipetakan ke s0 = 1/7, terdapat 790 pixel hasil transformasi yang memiliki nilai
intensitas 1/7. Selanjutnya, s1 = 3/7 memiliki 1023 pixel, s2 =5/7 memiliki 850 pixel. Juga,
karena r3 dan r4 dipetakan ke nilai yang sama, s3 = 6/7, maka jumlah pixel yang bernilai 6/7
adalah 656 + 329 = 985. Jumlah pixel hasil transformasi diringkas pada tabel di bawah ini:
Ps(sk) = nk/n
0.19
0.25
0.21
0.23
0.11

nk
790
1023
850
656 + 329 = 958
245 + 122 + 81 = 448

sk
1/7
3/7
5/7
6/7
7/7

Gambar 7.5 adalah histogram citra hasil perataan.

Ps(sk)
0.30
0.25
0.20
0.15
0.10
0.05
0 1/7

3/7

5/7

sk

Gambar 7.5. Histogram citra hasil perataan

Gambar 7.6 memperlihatkan perataan histogram pada citra anjing collie. Pada mulanya citra
collie terlihat terlalu gelap. Histogramnya menumpuk pada daerah derajat keabuan bagian
kiri. Dengan teknik perataan histogram, citra anjing collie terlihat lebih bagus. Hal ini dapat
dilihat juga pada histogramnya yang tersebar merata di seluruh daerah derajat keabuan.
Meskipun perataan histogram bertujuan menyebarkan secara merata nilai-nilai derajat
keabuan, tetapi seringkali histogram hasil perataan tidak benar-benar tersebar secara merata
(misalnya pada contoh di atas). Alasannya adalah:
1. Derajat keabuan terbatas jumlahnya. Nilai intensitas baru hasil perataan merupakan
pembulatan ke derajat keabuan terdekat.
2. Jumlah pixel yang digunakan sangat terbatas.
Agar hasil perataan benar-benar seragam sebarannya, maka citra yang diolah haruslah dalam
bentuk malar (continue), yang dalam praktek ini jelas tidak mungkin.

10

(a) Kiri: citra anjing collie yang terlalu gelap; Kanan: histogramnya

(b) Kiri: citra anjing collie setelah perataan histogram; kanan: histogramnya

Gambar 7.6. Contoh perataan histogram pada citra anjing collie

Algoritma perataan histogram ditunjukkan pada Algoritma 7.2 [HEN95]. Citra masukan
mempunyai 256 derajat keabuan yang nilai-nilainya dari 0 sampai 255. Intensitas pixel
disimpan di dalam Image[0..N-1][0..M-1]. Histogram citra semula disimpan di dalam
tabel Hist[0..255] yang bertipe riil. Histogram hasil perataan disimpan di dalam
HistEq[0..255] yang bertipe integer.

11

void PerataanHistogram(citra Image, int N, int M)


/* Mengubah citra Image yang berukuran N M dengan melakukan perataan
histogram (histogram equalization).
*/
{
int i, j;
float sum, float Hist[256];
int HistEq[256];
/* histogram hasil perataan */
histogram(Image,N,M,Hist);
for(i=0;i<256;i++)
{
sum=0.0;
for (j=0;j<=i;j++)
sum=sum+Hist[j];
HistEq[i]=floor(255*sum);
}

/* hitung histogram citra */

/* update citra sesuai histogram hasil perataan */


for(i=0;i<=N-1;i++)
for(j=0;j<=M-1;j++)
Image[i][j]=HistEq[Image[i][j]];

Algoritma 7.2 Perataan histogram citra

7.6 Pembentukan Histogram


Perataan histogram memetakan histogram citra semula menjadi histogram yang seragam. Bila
histogram yang diinginkan tidak seragam, maka cara ini tidak dapat digunakan.
Metode pembentukan histogram (histogram spesification) memberikan cara menghasilkan
histogram yang dispesifikasikan oleh pengguna. Cara pembentukannya memanfaatkan sifat
pada perataan histogram. Bila fungsi transformasi pada perataan histogram menghasilkan
histogram semula menjadi histogram yang seragam, maka fungsi balikannya (inverse)
memetakan histogram yang seragam menjadi histogram semula. Sifat ini dapat dimanfaatkan
untuk mengubah histogram citra menjadi histogram lain yang tidak seragam.
Dasar teorinya adalah sebagai berikut: misalkan Pr(r) dan Pz(z) masing-masing adalah
histogram citra semula dan histogram yang diinginkan. Fungsi transformasi T mula-mula
memetakan intensitas citra semula menjadi histogram yang seragam dengan cara perataan
histogram,
r

s = T ( r ) = Pr ( w)dw
0

Jika histogram yang diinginkan sudah dispesifikasikan, kita dapat melakukan perataan
histogram pula dengan fungsi transformasi G:

12

v = G ( z ) = Pz ( w)dw

(7.10)

Balikan (invers) dari fungsi G,


z = G 1 ( v )

(7.11)

akan menghasilkan histogram yang diinginkan kembali.


Dengan mengganti v dengan s pada persamaan yang terakhir,
z G 1 ( s )

(7.12)

maka kita dapat memperoleh nilai intensitas yang diinginkan. Hasil yang diperoleh
merupakan hampiran karena kita mencoba menemukan nilai s yang transformasinya
mendekati nilai z.
Algoritma pembentukan histogram adalah sebagai berikut:
1. Misalkan Pr(r) adalah histogram citra semula. Lakukan perataan histogram terhadap citra
semula dengan fungsi transformasi T,
r

s = T ( r ) = Pr ( w)dw
0

Dalam bentuk diskrit, nilai-nilai s diperoleh dengan persamaan berikut:


sk = T ( rk ) =

nj

n P (r )
=

j =0

j =0

2. Tentukan histogram yang diinginkan, misalkan Pz(z) adalah histogram yang diinginkan.
Lakukan perataan histogram dengan fungsi transformasi G,
z

v = G ( z ) = Pz ( w)dw
0

Dalam bentuk diskrit, nilai-nilai v diperoleh dengan persamaan berikut:


vk = G ( zk ) =

nj

n = P (z )
z

j =0

j =0

13

3. Terapkan fungsi transformasi balikan, z = G-1(s) terhadap histogram hasil langkah 1.


Caranya adalah dengan mencari nilai-nilai s yang memberi nilai z terdekat.
Dengan kata lain, histogram nilai-nilai intensitas pada citra semula dipetakan menjadi
intensitas z pada citra yang diinginkan dengan fungsi
z = G-1[T(r)]
Ketiga langkah di dalam algoritma pembentukan histogram di atas digambarkan dalam bagan
pada Gambar 7.7.

T(r)
Pr(r)

G-1 (s)
Histogram Seragam

Pz(z)

Gambar 7.7 Langkah-langkah metode Pembentukan Histogram


Contoh 7.2. [GON77] Tinjau kembali citra yang berukuran 64 64 dengan jumlah derajat
keabuan (L) = 8 dan jumlah seluruh pixel (n) = 64 64 = 4096. Tabel histogram citra semula
dan tabel histogram yang diinginkan adalah sebagai berikut:

Tabel histogram citra semula


rk
0/7 = 0.00
1/7 = 0.14
2/7 = 0.29
3/7 = 0.43
4/7 = 0.57
5/7 = 0.71
6/7 = 0.86
7/7 = 1.00

nk
790
1023
850
656
329
245
122
81

Pr(rk) = nk/n
0.19
0.25
0.21
0.16
0.08
0.06
0.03
0.02

Tabel histogram yang diinginkan


zk
0/7 = 0.00
1/7 = 0.14
2/7 = 0.29
3/7 = 0.43
4/7 = 0.57
5/7 = 0.71
6/7 = 0.86
7/7 = 1.00

Pz(zk)
0.00
0.00
0.00
0.15
0.20
0.30
0.20
0.15

Histogram citra semula dan histogram yang diinginkan diperlihatkan secara grafis pada
Gambar 7.8.

14

0.30

Pz(zk)

Pr(rk)

0.30

0.25

0.25

0.20

0.20

0.15

0.15

0.10

0.10

0.05

0.05

0 1/7

3/7

5/7

rk

0 1/7

Histogram citra semula:

3/7

5/7

zk

Histogram yang diinginkan

Gambar 7.8 Histogram citra semula dan histogram yang diinginkan

Langkah-langkah pembentukan histogram adalah sebagai berikut:


Langkah 1: Hasil perataan histogram terhadap citra semula,
sk = T ( rk ) =

nj

n P (r )
=

j =0

j =0

telah dilakukan (lihat Contoh 7.1), dan ini hasilnya:


nk
790
1023
850
656 + 329 = 958
245 + 122 + 81 = 448

rj sk
r0 s0 = 1/7
r1 s1 = 3/7
r2 s2 = 5/7
r3, r4 s3 = 6/7
r5, r6, r7 s4 = 7/7

Ps(sk) = nk/n
0.19
0.25
0.21
0.23
0.11

Langkah 2: Lakukan perataan terhadap histogram yang diinginkan, Pz(z), dengan persamaan
vk = G ( zk ) =

j =0

Hasilnya adalah sbb:


v0 = G(z0) = 0.00
v1 = G(z1) = 0.00
v2 = G(z2) = 0.00
v3 = G(z3) = 0.15

nj

n = P (z )
j

j =0

v4 = G(z4) = 0.35
v5 = G(z5) = 0.65
v6 = G(z6) = 0.85
v7 = G(z7) = 1.00

15

Langkah 3: Gunakan transformasi z = G-1(s) untuk memperoleh nilai z dari nilai s hasil
perataan histogram.
s0 = 1/7 0.14 paling dekat dengan 0.15 = G(z3),
s1 = 3/7 0.43 paling dekat dengan 0.35 = G(z4),
s2 = 5/7 0.71 paling dekat dengan 0.65 = G(z5),
s3 = 6/7 0.86 paling dekat dengan 0.85 = G(z6),
s4 = 1 1.00 paling dekat dengan 1.00 = G(z7),

jadi G-1(0.14) = z3 =1/7


jadi G-1(0.43) = z4 =4/7
jadi G-1(0.71) = z5 =5/7
jadi G-1(0.86) = z6 =6/7
jadi G-1(1.00) = z7 =1

Diperoleh pemetaan langsung sebagai berikut:


r0 = 0 z3 = 3/7
r1 = 1/7 z4 = 4/7
r2 = 2/7 z5 = 5/7
r3 = 3/7 z6 = 6/7

r4 = 4/7 z6 = 6/7
r5 = 5/7 z7 = 1
r6 = 6/7 z7 = 1
r7 = 1 z7 = 1

Penyebaran pixel:
Karena r0 = 0 dipetakan ke z3 = 3/7, maka terdapat 790 pixel hasil transformasi yang memiliki
nilai intensitas 3/7.
Karena r1 = 1/7 dipetakan ke z4 = 4/7, maka terdapat 1023 pixel hasil transformasi yang
memiliki nilai intensitas 4/7.
Karena r2 = 2/7 dipetakan ke z5 = 5/7, maka terdapat 850 pixel hasil transformasi yang
memiliki nilai intensitas 5/7.
Karena r3 = 3/7 dan r4 = 4/7 dipetakan ke z6 = 6/7, terdapat 245 + 122 + 81 = 448 pixel hasil
transformasi yang memiliki nilai intensitas 1.
Selanjutnya, tidak ada pixel yang mempunyai intensitas z0 = 0, z1 = 1/7, dan z2 = 2/7, karena
tidak ada rk yang dipetakan ke nilai-nilai z tersebut.
zk
0
1/7
2/7
3/7
4/7
5/7
6/7
1

nk
0
0
0
790
1023
850
985
448

Pz(zk) = nk/n
0.00
0.00
0.00
0.19
0.25
0.21
0.24
0.11

16

Histogram yang terbentuk:


Pz(zk)
0.30
0.25
0.20
0.15
0.10
0.05
0 1/7

3/7

5/7

zk

Seperti yang sudah disebutkan sebelum ini, histogram yang diperoleh merupakan hampiran
dari histogram yang dispesifikasikan karena kita mencoba menemukan nilai s yang
transformasinya mendekati nilai z.
Dalam praktek, mungkin terdapat ambiguitas pada nilai transformasi balikan, G-1(s). Dengan
kata lain, nilai transformasi balikan dari s ke z tidak tunggal. Hal ini terjadi karena: (i) proses
pembulatan G-1(s) ke nilai intensitas terdekat, atau (ii) terdapat nilai intensitas yang tidak
terisi di dalam histogram spesifikasi. Solusi termudah untuk masalah ini adalah memilih nilai
z yang terdekat dengan histogram yang dispesifikasikan.
Algoritma Pembentukan Histogram ditunjukkan pada Algoritma 7.3. Citra masukan
mempunyai 256 derajat keabuan yang nilai-nilainya dari 0 sampai 255. Intensitas pixel
disimpan di dalam Image[0..N-1][0..M-1]. Hasil perataan histogram dari citra
semula disimpan kembali di dalam matriks Image[0..N-1][0..M-1]. Histogram yang
dispesifikasikan disimpan di dalam Spec[0..255]. Histogram hasil perataan dari Spec
disimpan di dalam tabel SpecEq[0..255]. Histogram hasil transformasi balikan disimpan
di dalam tabel InvHist[0..255] .

void PembentukanHistogram(citra Image, int N, int M, float Spec[256])


/* Mengubah citra Image yang berukuran N M berdasarkan histogram yang
dispesifikasikan oleh pengguna (Spec).
*/
{
int i, j, minj, minval;
float sum, Hist[256];
int HistEq[256], SpecEq[256], InvHist[256];
/* lakukan perataan histogram terhadap citra semula */
histogram(Image,N,M,Hist); /* hitung histogram citra */
for(i=0;i<256;i++)
{
sum=0.0;
for (j=0;j<=i;j++)

17

sum=sum+Hist[j];
HistEq[i]=floor(255*sum);
}
/* lakukan perataan histogram terhadap citra Spec */
for(i=0;i<=255;i++)
{
sum=0.0;
for (j=0;j<=i;j++)
sum=sum+Spec[j];
SpecEq[i]=floor(255*sum);
}
/* lakukan transformasi balikan */
for(i=0;i<=N-1;i++)
{
minval=abs(HistEq[i] SpecEq[0]);
minj=0;
for(j=0;j<=255;j++)
if (abs(HistEq[i] SpecEq[j]) < minval)
{
minval = abs(HistEq[i] SpecEq[j]);
minj=j;
}
InvHist[i]=minj;
}
/* update citra setelah pembentukan histogram */
for(i=0;i<=N-1;i++)
for(j=0;j<=M-1;j++)
Image[i][j]]=InvHist[Image[i][j]];

Algoritma 7.3 Pengubahan citra berdasarkan histogram yang dispesifikasikan

18

7.7 Pelembutan Citra (Image Smoothing)


Pelembutan citra (image smoothing) bertujuan untuk menekan gangguan (noise) pada citra.
Gangguan tersebut biasanya muncul sebagai akibat dari hasil penerokan yang tidak bagus
(sensor noise, photographic grain noise) atau akibat saluran transmisi (pada pengiriman
data).
Gangguan pada citra umumnya berupa variasi intensitas suatu pixel yang tidak berkorelasi
dengan pixel-pixel tetangganya. Secara visual, gangguan mudah dilihat oleh mata karena
tampak berbeda dengan pixel tetangganya. Gambar 7.9 adalah citra Lena yang mengalami
gangguan berupa spike atau speckle yang tampil pada gambar dalam bentuk bercak putih atau
hitam seperti beras.
Pixel yang mengalami gangguan umumnya memiliki frekuensi tinggi (berdasarkan analisis
frekuensi dengan transformasi Fourier). Komponen citra yang berfrekuensi rendah umumnya
mempunyai nilai pixel konstan atah berubah sangat lambat. Operasi pelembutan citra
dilakukan untuk menekan komponen yang berfrekuensi tinggi dan meloloskan komponen
yang berfrekuensi rendah.

Gambar 7.9. Citra Lena yang mengalami gangguan berupa spike

Operasi pelembutan dapat dilakukan pada ranah spsial maupun pada ranah frekuensi. Pada
ranah spasial, operasi pelembutan dilakukan dengan mengganti intensitas suatu pixel dengan
rata-rata dari nilai pixel tersebut dengan nilai pixel-pixel tetangganya. Jadi, diberikan citra
f(x,y) yang berukuran N M. Citra hasil pelembutan, g(x,y), didefinisikan sebagai berikut:

g ( x, y ) =

1
d

m2

n2

f ( x + r, y + s)

(7.13)

r =m1 s = n1

yang dalam hal ini d adalah jumlah pixel yang terlibat dalam perhitungan rata-rata. Gambar
7.10 memperlihatkan dua buah skema perata-rataan [GON77]. Pada skema pertama, tetangga
sebuah pixel adalah pixel-pixel yang berjarak x, sedangkan pada skema kedua tetangga
sebuah pixel adalah pixel-pixel yang berjarak paling jauh 2 x.

Tetangga pixel +

radius = x
(a)

Tetangga pixel +

radius = 2 x
(b)

Gambar 7.10. Skema perata-rataan

Operasi perata-rataan di atas dapat dipandang sebagai konvolusi antara citra f(x,y) dengan
penapis h(x,y):
g(x,y) = f(x,y) h(x,y)

(7.14)

Penapis h disebut penapis rerata (mean filter). Dalam ranah frekuensi, operasi konvolusi
tersebut adalah
G(u,v) = F(u,v)H(u,v)

(7.15)

Contoh penapis rerata yang berukuran 3 3 dan 2 2 adalah seperti di bawah ini (elemen
yang bertanda menyatakan posisi (0, 0) dari pixel yan dikonvolusi)):
1 / 9 1 / 9 1 / 9
(i) 1 / 9 1 / 9 1 / 9

1 / 9 1 / 9 1 / 9

1 / 4 1 / 4
(ii)

1 / 4 1 / 4

Algoritma pelembutan citra dengan penapis 3 3 ditunjukkan pada Algoritma 7.4.

void PerataanCitra(citra Image, citra ImageResult, int N, int M)


/* Melembutkan citra Image yang berukuran N M dengan melakukan konvolusi
citra Image dengan penapis rerata yang berukuran 3 3. Hasil pelembutna
disimpan di dalam ImageResult.
*/
{ int i, j;
for (i=1; i<=N-1; i++)
for(j=1; j<=M-1; j++)
{
ImageResult[i][j]=
Image[i-1][j-1] + Image[i-1][j] + Image[i-1,j+1]+
Image[i][j-1] + Image[i][j] + Image[i,j+1] +
Image[i+1][j-1] + Image[i+1][j] + Image[i+1,j+1];
ImageResult[i][j]=ImageResult[i][j]/9;
}
}

Algoritma 7.4. Operasi pelembutan citra dengan penapis rerata 3 3.

Operasi penapisan ini mempunyai efek pemerataan derajat keabuan, sehingga gambar yang
diperoleh tampak lebih kabur kontrasnya. Efek pengaburan ini disebut efek blurring. Gambar
7.11 adalah hasil pelembutan citra Lena dari Gambar 7.9 dengan penapis rata-rata 3 3.
Efek pengaburan yang dihasilkan dari penapis rata-rata dapat dikurangi dengan prosedur
pengambangan berikut:
1

g ( x, y ) = d

f ( x, y ),

m2

n2

f ( x + r, y + s )

jika f ( x, y )

r =m1 s =n1

1
d

m2

n2

f ( x + r, y + s) > T

r =m1 s =n1

lainnya
(7.16)

dengan T adalah nilai ambang yang dispesifikasikan.

Gambar 7.11. Citra Lena yang sudah dilembutkan dengan penapis rerata 3 3

Penapis h(x,y) pada operasi pelembutan citra disebut juga penapis lolos-rendah (low-pass
filter), karena penapis tersebut menekan komponen yang berfrekuensi tinggi (misalnya pixel
gangguan, pixel tepi) dan meloloskan komponen yang berfrekuensi rendah.

Penapis Lolos-Rendah
Penapis rata-rata adalah salah satu penapis lolos-rendah yang paling sederhana. Aturan untuk
penapis lolos-rendah adalah [GAL95]:
1. Semua koefisien penapis harus positif
2. Jumlah semua koefisien harus sama dengan 1
Jika jumlah semua koefisien lebih besar dari 1, maka konvolusi menghasilkan penguatan
(tidak diinginkan). Jika jumlah semua koefisien kurang dari 1, maka yang dihasilkan adalah
penurunan, dan nilai mutlak setiap pixel di seluruh bagian citra berkurang. Akibatnya, citra
hasil pelembutan tampak lebih gelap.
Ilustrasi konvolusi dengan penapis rata-rata 3 3 terhadap citra yang mengandung pixel
derau diperlihatkan di bawah ini. Pixel yang mengalami gangguan dimisalkan bernilai 17,
sedangkan nilai pixel tetangganya (yang tidak mengalami gangguan) bernilai rendah,
misalkan 8. Efek dari penapis lolos-rendah adalah sbb: pixel-pixel tetangga tidak mengalami
perubahan (kecuali bila terdapat perbedaan nilai atau gradien antara pixel-pixel yang
bertetangga), sedangkan pixel derau nilainya turun menjadi 9:
8 8 8 8
8 17 8 8

8 8 8 8
(i) sebelum konvolusi

8 8 8 8
8 9 9 8

8 8 8 8
(ii) setelah konvolusi

Nilai 9 ini diperoleh dari hasil perhitungan konvolusi:


f (1,1) = (8 + 8 + 8 + 8 + 17 + 8 + 8 + 8 + 8)/9 = 81/9 = 9

Selain dengan penapis rata-rata, penapis lolos-rendah lain yang dapat digunakan pada operasi
pelembutan adalah:
1 / 16 1 / 8 1 / 16
(i) 1 / 8 1 / 4 1 / 8

1 / 16 1 / 8 1 / 16

1 / 10 1 / 10 1 / 10
(ii) 1 / 10 1 / 5 1 / 10

1 / 10 1 / 10 1 / 10

1 / 16 1 / 8 1 / 16
(iii) 1 / 8 1 / 4 1 / 8

1 / 16 1 / 8 1 / 16

Jika citra hasil penapisan lolos-rendah dikurangi dari citra semula (yang mengandung derau),
maka yang dihasilkan adalah peningkatan relatif komponen citra yang berfrekuensi tinggi
tanpa peningkatan komponen derau. Akibatnya, citra hasil pengurangan muncul lebih tajam
dari citra semula. Ini dapat digunakan untuk menonjolkan bagian citra yang tidak jelas,
misalnya tertutup oleh kabut atau awan. Aplikasi ini dapat diterapkan untuk mendapatkan
citra kota Jakarta yang lebih bagus daripada citra kota Jakarta yang tertutup oleh kabut.
Penapis lolos-rendah yang disebutkan di atas merupakan penapis lanjar (linear). Operasi
pelembutan dapat juga dilakukan dengan menggunakan penapis nirlanjar, yaitu:
a. Penapis minimum (min filter)
b. Penapis maksimum (max filter)
c. Penapis median (median filter)
Penapis nirlanjar sebenarnya tidak termasuk kategori operasi konvolusi yang lazim. Cara
kerja penapis tersebut berbeda dari penapis lanjar. Operasi dengan penapis nirlanjar dihitung
dengan mengurutkan nilai intensitas sekelompok pixel, lalu mengganti nilai pixel yang
sedang diproses dengan nilai tertentu dari kelompok tersebut (misalnya nilai median dari
kelompok pixel, nilai maksimum atau nilai minimum dari kelompok pixel)

Penapis Median
Penapis nirlanjar yang akan dijelaskan adalah penapis median. Penapis ini dikembangkan
oleh Tukey. Pada penapis median, suatu jendela (window) memuat sejumlah pixel (ganjil).
Jendela digeser titik demi titik pada seluruh daerah citra. Pada setiap pergeseran dibuat
jendela baru. Titik tengah dari jendela ini diubah dengan nilai median dari jendela tersebut.
Sebagai contoh, tinjau jendela berupa kelompok pixel (berbentuk kotak diarsir) pada sebuah
citra pada Gambar 7.12(a). Pixel yang sedang diproses adalah yang mempunyai intensitas 35.
Urutkan pixel-pixel tersebut:
9

10

10

10

10

10

11

12

35

Median dari kelompok tersebut adalah 10 (dicetak tebal). Titik tengah dari jendela (35)
sekarang diganti dengan nilai median (10). Hasil dari penapis median diperlihatkan pada
Gambar 7.12(b). Jadi, penapis median menghilangkan nilai pixel yang sangat berbeda dengan
pixel tetangganya.

13

10

15

14

18

13

10

15

14

18

12

10

10

10

15

12

10

10

10

15

11

11

35

10

10

11

11

10

10

10

13

12

10

12

13

12

10

12

13

12

10

13

12

10

(a) Pixel bernilai 35 terkena derau

(b) 35 diganti dengan median dari


kelompok 3 3 pixel

Gambar 7.12. Penghilangan derau dengan penapis median 3 3.

Selain berbentuk kotak, jendela pada penapis median dapat bermacam-macam bentuknya,
seperti palang (cross), lajur vertikal (vertical strip), atau lajur horizontal (horizontal strip).
Gambar 7.13 adalah hasil pelembutan citra dari Gambar 7.9 dengan penapis median 3 3.
Dari kedua contoh penapis (penapis rerata dan penapis median), dapat dilihat bahwa penapis
median memberikan hasil yang lebih baik dibandingkan penapis rerata untuk citra yang
mengalami gangguan dalam bentuk spike berupa bercak-bercak putih.

Gambar 7.13. Citra Lena yang dilembutkan dengan penapis median.

Cara lain yang dapat dilakukan pada pelembutan citra adalah merata-ratakan derajat keabuan
setiap pixel dari citra yang sama yang diambil berkali-kali. Misalnya untuk gambar yang
sama direkam dua kali, lalu dihitung intensitas rata-rata untuk setiap pixel:
1
f (x,y) = { f1(x, y) + f2(x, y) }
(7.16)
2

7.8 Penajaman Citra (Image Sharpening)


Operasi penajaman citra bertujuan memperjelas tepi pada objek di dalam citra. Penajaman
citra merupakan kebalikan dari operasi pelembutan citra karena operasi ini menghilangkan
bagian citra yang lembut.
Operasi penajaman dilakukan dengan melewatkan citra pada penapis lolos-tinggi (high-pass
filter). Penapis lolos-tinggi akan meloloskan (atau memperkuat) komponen yang berfrekuensi
tinggi (misalnya tepi atau pinggiran objek) dan akan menurunkan komponen berfrekuensi
rendah. Akibatnya, pinggiran objek telihat lebih tajam dibandingkan sekitarnya.
Karena penajaman citra lebih berpengaruh pada tepi (edge) objek, maka penajaman citra
sering disebut juga penajaman tepi (edge sharpening) atau peningkatan kualitas tepi (edge
enhancement). Gambar 7.14 adalah citra Lena setelah ditajamkan gambarnya.

(a)

(b)

Gambar 7.14 (a) Citra Lena semula, (b) Citra Lena setelah penajaman

Selain untuk mempertajam gambar, penapis lolos-tinggi juga digunakan untuk mendeteksi
keberadaan tepi (edge detection). Dalam hal ini, pixel-pixel tepi ditampilkan lebih terang
(highlight) sedangkan pixel-pixel bukan tepi dibuat gelap (hitam). Masalah pendeteksian tepi
akan dibahas dalam pokok bahasan tersendiri.

Penapis Lolos-Tinggi
Aturan penapis lolos-tinggi [GAL95]:
1. koefisien penapis boleh positif, negatif, atau nol
2. jumlah semua koefisien adalah 0 atau 1
Jika jumlah koefisien = 0, maka komponen berfrekuensi rendah akan turun nilainya,
sedangkan jika jumlah koefisien sama dengan 1, maka komponen berfrekuensi rendah akan
tetap sama dengan nilai semula.

Contoh-contoh penapis lolos-tinggi:

1 1 1
(i) 1 8 1

1 1 1
=0

1 1 1
(ii) 1 9 1

1 1 1
=1

0 1 0
(iii) 1 5 1

0 1 0
=1

1 2 1
(iv) 2 5 2

1 2 1
=1

1 2 1
(v) 2 4 2

1 2 1
=0

0 1 0
(vi) 1 4 1

0 1 0
=0

Nilai koefisien yang besar di titik pusat penapis memainkan peranan kunci dalam proses
konvolusi. Pada komponen citra dengan frekuensi tinggi (yang berarti perubahan yang besar
pada nilai intensitasnya), nilai tengah ini dikalikan dengan nilai pixel yang dihitung.
Koefisien negatif yang lebih kecil di sekitar titik tengah penapis bekerja untuk mengurangi
faktor pembobotan yang besar. Efek nettonya adalah, pixel-pixel yang bernilai besar
diperkuat, sedangkan area citra dengan intensitas pixel konstan tidak berubah nilanya.
Gambar 7.15 mempelihatkan konvolusi dengan penapis lolos-tinggi, gambar (a) adalah citra
yang tidak mempunyai pixel tepi, dan gambar (b) adalah citra yang mempunyai pixel tepi.
Penapis lolos-tinggi yang digunakan adalah penapis (i) dan (ii).
Karena koefisien penapis mengandung nilai negatif, maka konvolusi mungkin saja
menghasilkan pixel bernilai negatif. Meskipun intensitas bernilai negatif menarik, tetapi kita
tidak dapat menampilkannya. Untuk alasan terakhir ini, implementasi konvolusi men-set nilai
negatif menjadi nilai 0. Cara lainnya adalah dengan mengambil nilai mutlaknya atau
menskalakan semua nilai-nilai pixel secara menaik sehingga nilai yang paling negatif
menjadi 0.

Citra semula:

Citra semula:

4
4

4
4

4 4 4 4 4 4
4 4 4 4 4 4

4 4 4 4 4 4

4 4 4 4 4 4
4 4 4 4 4 4

4
4

4
4

Kurva yang merepresentasikan citra:

4 4 8 8 8 8
4 4 8 8 8 8

4 4 8 8 8 8

4 4 8 8 8 8
4 4 8 8 8 8

Kurva yang merepresentasikan citra:


f(x,y)

f(x,y)
8

Hasil konvolusi dengan penapis (i):

x x x x x x
x 0 0 0 0 0

x 0 0 0 0 0

x 0 0 0 0 0
x x x x x x

x
x

x
x

Hasil konvolusi dengan penapis (ii):

x x x x x x
x 4 4 4 4 4

x 4 4 4 4 4

x 4 4 4 4 4
x x x x x x
(a)

x
x

x
x

Hasil konvolusi dengan penapis (i):

x
x
x x
x x
x 0 12 + 12 0 0

x 0 12 + 12 0 0

x 0 12 + 12 0 0
x x
x
x
x x

x
x

x
x

Hasil konvolusi dengan penapis (ii):

x
x x
x x x
x 4 8 + 20 8 8

x 4 8 + 20 8 8

x 4 8 + 20 8 8
x x x
x
x x

x
x

x
x

(b)

Gambar 7.15 Hasil konvolusi dengan penapis lolos-tinggi: (a) citra yang tidak memiliki
pixel tepi, (b) citra yang mengandung pixel-pixel tepi

Gambar 7.16 adalah contoh lain penajaman gambar terhadap citra girl, masing-masing
dengan penapis (ii), (iii), dan (iv).

(a)

(b)

(c)

(d)

Gambar 7.16 (a) citra girl sebelum penajaman; (b), (c), dan (d) masing-masing adalah hasil
penajaman dengan penapis lolos-tinggi (ii), (iii), dan (iv)

7.9 Pewarnaan Semu


Pewarnaan semu adalah proses memberi warna tertentu pada nilai-nilai pixel suatu citra
skala-abu pada suatu citra berdasarkan kriteria tertentu, misalnya suatu warna tertentu untuk
suatu interval derajat keabuan tertentu. Hal ini dilakukan karena mata manusia mudah
membedakan banyak jenis warna.

7.10 Koreksi Geometrik


Koreksi geometrik dilakukan pada citra yang memiliki gangguan yang terjadi pada waktu
proses perekaman citra, misalnya pergeseran koordinat citra (translasi), perubahan ukuran
citra, dan perubahan orientasi koordinat citra (skew). Proses koreksi geometri untuk
meningkatkan kualitas citra tersebut disebut juga koreksi geometri. Koreksi geometri yang
sederhana adalah dengan operasi geometri sederhana seperti rotasi, translasi, dan penskalaan
citra.
Gambar 7.17 kiri adalah citra kota San Fransisco yang condong (skew) ke kanan. Rotasi
sejauh 6 berlawanan arah jarum jam menghasilkan perbaikan yang ditunjukkan pada
Gambar 8.11 kanan.

(a)

(b)

Gambar 7.17 (a) Citra San Fransisco yang condong ke kanan; (b) Hasil rotasi sejauh 6
berlawanan arah jarum jam.

10

Bab 8

Pendeteksian Tepi (Edge Detection)

eningkatan kualitas citra (image enhancement) bertujuan menghasilkan citra


dengan kualitas yang lebih baik dibandingkan dengan citra semula. Langkah
selanjutnya dalam pengolahan citra adalah analisis citra (image analysis).
Analisis citra bertujuan mengidentifikasi parameter-parameter yang diasosiasikan
dengan ciri (feature) dari objek di dalam citra, untuk selanjutnya parameter
tersebut digunakan dalam menginterpretasi citra. Analisis citra pada dasarnya
terdiri dari tiga tahapan: ekstrakasi ciri (feature extraction), segmentasi, dan
klasifikasi.

Faktor kunci dalam mengekstraksi ciri adalah kemampuan mendeteksi keberadaan


tepi (edge) dari objek di dalam citra. Setelah tepi objek diketahui, langkah
selanjutnya dalam analisis citra adalah segmentasi, yaitu mereduksi citra menjadi
objek atau region, misalnya memisahkan objek-objek yang berbeda dengan
mengekstraksi batas-batas objek (boundary). Langkah terakhir dari analisis citra
adalah klasifikasi, yaitu memetakan segmen-segmen yang berbeda ke dalam kelas
objek yang berbeda pula.

8.1 Definisi Tepi


Yang dimaksud dengan tepi (edge) adalah perubahan nilai intensitas derajat
keabuan yang mendadak (besar) dalam jarak yang singkat (Gambar 8.1).
Perbedaan intensitas inilah yang menampakkan rincian pada gambar. Tepi
biasanya terdapat pada batas antara dua daerah berbeda pada suatu citra. Tepi
dapat diorientasikan dengan suatu arah, dan arah ini berbeda-beda pada
bergantung pada perubahan intensitas.
Bab 8_Pendeteksian Tepi (Edge Detection)

121

jarak
perubahan intensitas

= arah tepi

Gambar 8.1 Model tepi satu-matra

Perhatikan Gambar 8.2. Ada tiga macam tepi yang terdapat di dalam citra digital.
Ketiganya adalah:
1. Tepi curam
Tepi dengan perubahan intensitas yang tajam. Arah tepi berkisar 90.
2. Tepi landai
Disebut juga tepi lebar, yaitu tepi dengan sudut arah yang kecil. Tepi landai
dapat dianggap terdiri dari sejumlah tepi-tepi lokal yang lokasinya berdekatan.
3. Tepi yang mengandung derau (noise)
Umumnya tepi yang terdapat pada aplikasi computer vision mengandung
derau. Operasi peningkatan kualitas citra (image enhancement) dapat dilakukan
terlebih dahulu sebelum pendeteksian tepi.

derajat
keabuan

derajat
keabuan

derajat
keabuan

(b) tepi landai

derajat keabuan

(a) Tepi curam

(d) break down tepi landai

4 4 4
4 4 4

4 4 4

4 4 4
4 4 4
(e) citra
curam

(c) tepi curam dengan derau

8 8 8 8 8 4 4 5 6 7 8 8 8
8 8 8 8 8 4 4 5 6 7 8 8 8

8 8 8 8 8 4 4 5 6 7 8 8 8


8 8 8 8 8 4 4 5 6 7 8 8 8
8 8 8 8 8 4 4 5 6 7 8 8 8
dengan tepi (f) citra dengan tepi landai

Gambar 8.2 Jenis-jenis tepi

122

Pengolahan Citra Digital

8.2 Tujuan Pendeteksian Tepi


Pendeteksian tepi merupakan langkah pertama untuk melingkupi informasi di
dalam citra. Tepi mencirikan batas-batas objek dan karena itu tepi berguna untuk
proses segmentasi dan identifikasi objek di dalam citra.
Tujuan operasi pendeteksian tepi adalah untuk meningkatkan penampakan garis
batas suatu daerah atau objek di dalam citra. Karena tepi termasuk ke dalam
komponen berfrekuensi tinggi, maka pendeteksian tepi dapat dilakukan dengan
penapis lolos-tinggi.
Terdapat beberapa teknik yang digunakan untuk mendeteksi tepi, antara lain:
1. Operator gradien pertama (differential gradient)
2. Operator turunan kedua (Laplacian)
3. Operator kompas (compass operator)

8.3 Pendeteksian Tepi dengan Operator Gradien


Pertama
Perubahan intensitas yang besar dalam jarak yang singkat dipandang sebagai
fungsi yang memiliki kemiringan yang besar. Kemiringan fungsi biasanya
dilakukan dengan menghitung turunan pertama (gradient). Karena citra f(x,y)
adalah fungsi dwimatra dalam bentuk diskrit, maka turunan pertamanya adalah
secara parsial, masing-masing dalam arah-x dan dalam arah-y, sebagai berikut:

f
G x
f = fx =
G y
y

(8.1)

yang dalam hal ini,


Gx =

f ( x, y ) f ( x + x, y ) f ( x, y )
=
x
x

(8.2)

Gy =

f ( x, y ) f ( x, y + y ) f ( x, y )
=
y
y

(8.3)

Biasanya x = y = 1 , sehingga persamaan turunan pertama menjadi:


f ( x, y )
= f ( x + 1, y ) f ( x, y )
x
f ( x, y )
Gy =
= f ( x, y + 1) f ( x, y )
y

Gx =

Bab 8_Pendeteksian Tepi (Edge Detection)

(8.4)
(8.5)

123

Titik-titik yang terlibat dalam perhitungan turunan pertama diperlihatkan pada


Gambar 8.3.
y
(x-1,y+1)

(x ,y+ 1) (x+ 1,y+ 1)

(x,y)

(x-1,y)

(x+ 1,y)

(x-1,y-1) (x,y-1)

(x+ 1,y-1)
x

Gambar 8.3 Titik-titik yang dilibatkan dalam perhitungan gradien

Kedua turunan tersebut dapat dipandang sebagai dua buah mask konvolusi
sebagai berikut:

G1 ( x ) = [ 1 1] dan

1
G1 ( y ) =
1

Contoh 8.1. [LOW91] Misalkan terdapat sebuah 5 5 citra dengan dua derajat
keabuan sebagai berikut:

1
1

1
1

1
1
1
1
1

1
1
1
0
0

1
1
0
0
0

1
1

0
0

Hasil perhitungan gradien setiap pixel di dalam citra adalah sebagai berikut:
Citra
1
1

1
1

1
1
1
1
1

1
1
1
0
0

1
1
0
0
0

Gradien-x
1
1

0
0

0 0
0
0 0
0
0 0 1
0 1 0
0 1 0

0
0
0
0
0

Gradien-y
*
*
*
*
*

Arah gradien

0
0

0 0 0 0
0 0 1 1

*
*

*
*

* * *
* b b

0
0

0 1
0 0

0
0

0
0

* *

* *
*
* * *
* * *

*
*
*

124

Pengolahan Citra Digital

Berdasarkan konvolusi dengan kedua mask tersebut, kita menghitung kekuatan


tepi, G[f(x,y)], yang merupakan magnitudo dari gradien, dan arah tepi, (x,y),
untuk setiap pixel:
G[f(x,y)]=

Gx + G y

(x,y) = tan-1

(8.6)

Gy

(8.7)

Gx

Karena menghitung akar adalah persoalan rumit dan menghasilkan nilai riil, maka
dalam praktek kekuatan tepi biasanya disederhanakan perhitungannya dengan
menggunakan salah satu dari alternatif rumus berikut [DUL97]:
2

(i) G[f(x,y)] = G x + G y , atau


(ii) G[f(x,y)] = G x + G y , atau
2

(iii) G[f(x,y)] = max{ G x , G y } , atau


(iv) G[f(x,y)] = max{ G x , G y } .
Dalam praktek, persamaan (ii) dan (iv) biasanya lebih disukai dan lebih mudah
dikerjakan karena mengandung jumlah operasi aritmetika yang lebih sedikit.
Hasil pendeteksian tepi adalah citra tepi (edges image) g(x,y), yang nilai setiap
pixel-nya menyatakan kekuatan tepi:
g ( x, y ) = G[ f ( x, y )]
Keputusan apakah suatu pixel merupakan tepi atau bukan tepi dinyatakan dengan
operasi pengambangan berikut:

1,
g ( x, y ) =
0,

jika G[ f ( x, y )] T
lainnya

(8.8)

yang dalam hal ini T adalah nilai ambang, pixel tepi dinyatakan putih sedangkan
pixel bukan tepi dinyatakan hitam. Gambar 8.4 adalah contoh hasil deteksi
semua tepi citra Lena, citra Camera, dan citra botol.

Bab 8_Pendeteksian Tepi (Edge Detection)

125

Gambar 8.4 Deteksi semua tepi citra Lena, camera, dan botol

126

Pengolahan Citra Digital

Selain operator gradien yang sudah disebutkan di atas, masih ada beberapa
operator gradien pertama yang lain yang dapat digunakan untuk mendeteksi tepi
di dalam citra, yaitu:
(a) Operator gradien selisih-terpusat (center-difference):
Dx ( x, y ) =

f ( x, y ) f ( x + 1, y ) f ( x 1, y )
=
2
x

(8.9)

D y ( x, y ) =

f ( x, y ) f ( x, y + 1) f ( x, y 1)
=
y
2

(8.10)

yang ekivalen dengan mask berikut:

D2 ( x ) = [ 1 0 1]

dan

1
D2 ( y ) = 0

1

(b) Operator Sobel


Tinjau pengaturan pixel di sekitar pixel (x,y):
a0
a
7
a6

a1
a2
( x, y ) a3

a5
a 4

Operator Sobel adalah magnitudo dari gradien yang dihitung dengan


M=

s x2 + s 2y

yang dalam hal ini, turunan parsial dihitung dengan

s x = ( a2 + ca3 + a4 ) ( a0 + ca7 + a6 )

(8.11)

s y = ( a0 + ca1 + a22 ) ( a6 + ca5 + a4 )

(8.12)

dengan konstanta c = 2. Dalam bentuk mask, sx dan sy dapat dinyatakan


sebagai
1 0 1
S x = 2 0 2

1 0 1

dan

Bab 8_Pendeteksian Tepi (Edge Detection)

2
1
1

Sy = 0
0
0

1 2 1
127

Arah tepi dihitung dengan persamaan


Sy
Sx

(x,y) = tan-1

(8.13)

Contoh 8.2. Contoh berikut ini memeperlihatkan pendeteksian tepi dengan


operator Sobel. Konvolusi pertama dilakukan terhadap pixel yang bernilai 1 (di
titik pusat mask):

3
2

4
2

4
1
5
2
5

2
6
7
5
1

5
4
1
7
3

1
2

1
2

* * * * *

* 18

(i) citra semula

(ii) hasil konvolusi

Nilai 18 pada citra hasil konvolusi diperoleh dengan perhitungan berikut:


Sx = (3)(-1) + (2)(-2) + (3)(-1) + (2)(1) + (6)(2) + (7)(1) = 11
Sy = (3)(1) + (4)(2) + (2)(1) + (3)(-1) + (5)(-2) + (7)(-1) = -7
M=

s x2 + s 2y = 112 + ( 7) 2 S x + S y = 11 + 7 = 18

Pada contoh ini, nilai M =

s x2 + s 2y dihampiri dengan menghitung

M Sx + S y .

Contoh 8.3. Di bawah ini contoh lain pendeteksian tepi dengan operator Sobel,
dimana hasil konvolusi diambangkan dengan T = 12.

Citra:
0
0

0
0

0 0 0 0 0 2 0 3 3
0 0 1 0 0 0 2 4 3

0 2 0 2 4 3 3 2 3

0 1 3 3 4 3 3 3 3
1 0 4 3 3 2 4 3 2

0 1 2 3 3 4 4 4 3

128

gradien - x + gradien - y :

*
*

*
*

* *
4 6 4 10 14 12 14 4 *

6 8 10 20 16 12 6 0 *

4 10 14 10 2 4 2 4 *
2 12 12 2 2 4 6 8 *

* * * * * * * * *
*

Pengolahan Citra Digital

Hasil pengambangan dengan T = 12:


*
*

*
*

* * * * * * * * *
4 6 4 10 14 12 14 4 *

6 8 10 20 16 12 6 0 *

4 10 14 10 2 4 2 4 *
2 12 12 2 2 4 6 8 *

* * * * * * * * *

(c) Operator Prewitt


Persamaan gradien pada operator Prewitt sama seperti operator Sobel, tetapi
menggunakan nilai c = 1:
1 0 1
Px = 1 0 1

1 0 1

dan

1
1
1

Py = 0
0
0

1 1 1

(d) Operator Roberts


Operator Roberts sering disebut juga operator silang (gambar 8.5). Gradien
Roberts dalam arah-x dan arah-y dihitung dengan rumus:

R+ ( x, y ) = f ( x + 1, y + 1) f ( x, y )

(8.14)

R ( x, y ) = f ( x, y + 1) f ( x + 1, y )

(8.15)

f(x, y+1)

f(x, y)

f(x + 1, y+1)

f(x + 1, y)

x
Gambar 8.5 Operator silang

Bab 8_Pendeteksian Tepi (Edge Detection)

129

Operator R+ adalah hampiran turunan berarah dalam arah 45, sedangkan Radalah hampiran turunan berarah dalam arah 135.
Dalam bentuk mask konvolusi, operator Roberts adalah:
1 0
0 1
R+ =
dan R =

0 1
1 0
Khusus untuk operator Roberts, arah tepi dihitung dengan rumus

( x, y ) =

+ tan 1 (

R
)
R+

(8.17)

Sedangkan kekuatan tepi umumnya dihitung dengan rumus


G[f(x,y)] = R+ + R
Contoh 8.4. Contoh berikut ini memeperlihatkan pendeteksian tepi dengan
operator Roberts.

3
2

4
2

4 2 5 1
1 6 4 2

5 7 1 3

2 5 7 1
5 1 3 2

(i) citra semula

4
5

1
*

3 3 6 *
7 8 2 *

5 4 4 *

1 8 7 *
* * * *

(ii) hasil konvolusi

Nilai 4 pada pojok kiri atas pada citra hasil konvolusi diperoleh dengan perhitungan
sebagai berikut:
f [0,0] = 3 1 + 4 2 = 4

8.4 Pendeteksian Tepi dengan Operator Turunan


Kedua
Operator turunan kedua disebut juga operator Laplace. Operator Laplace
mendeteksi lokasi tepi lebih akurat khususnya pada tepi yang curam. Pada tepi
yang curam, turunan keduanya mempunyai persilangan nol (zero-crossing), yaitu
titik di mana terdapat pergantian tanda nilai turunan kedua (Gambar 8.6),

130

Pengolahan Citra Digital

sedangkan pada tepi yang landai tidak terdapat persilangan nol. Persilangan nol
merupakan lokasi tepi yang akurat.
Turunan kedua fungsi dengan dua peubah adalah:
2 f 2 f
+
x 2 y 2

2 f =

(8.18)

f(x)

f /x

2f /x2

(a) Tepi landai

(b) Tepi curam

Gambar 8.6 Deteksi tepi dengan operator turunan kedua

Dengan menggunakan definisi hampiran selisih-mundur (backward difference


approximation):
G3 ( x ) =

f ( x, y ) f ( x, y ) f ( x x, y )
=
x
x

(8.19)

G3 ( y ) =

f ( x, y ) f ( x, y ) f ( x, y y )
=
y
y

(8.20)

Bab 8_Pendeteksian Tepi (Edge Detection)

131

maka
2 f =

2 f 2 f
+
x 2 y 2

= G1 (G3 ( x )) + G1 (G3 ( y ))
1
1
=
G1 ( f ( x, y )) G1 ( f ( x x, y )) +
G1 ( f ( x, y )) G1 ( f ( x, y y ))
x
y
1 f ( x + x , y ) f ( x , y ) f ( x , y ) + f ( x x , y )
{
}
x
x
1 f ( x , y + y ) f ( x , y ) f ( x , y ) + f ( x , y y )
+
{
}
y
y

f ( x + x , y ) 2 f ( x , y ) + f ( x x , y )
( x ) 2

f ( x , y + y ) 2 f ( x , y ) + f ( x , y y )
( y ) 2

Dengan mengasumsikan x = y = 1, maka diperoleh:

2 f ( x, y ) = f ( x + 1, y ) 2 f ( x, y ) + f ( x 1, y ) + f ( x, y + 1) 2 f ( x, y ) + f ( x, y 1)
= f ( x, y 1) + f ( x 1, y ) 4 f ( x, y ) + f ( x + 1, y ) + f ( x, y + 1)
(8.21)
atau dapat dinyatakan sebagai mask:
0 1 0
1 4 1

0 1 0
Selain mask di atas, masih ada dua hampiran operator Laplace yang lain, yaitu
1 1 1
1 2 1
1 8 1 dan 2 4 2

1 1 1
1 2 1

132

Pengolahan Citra Digital

Kadang-kadang diinginkan memberi bobot yang lebih pada pixel tengah di antara
pixel tetangganya. Operator Laplace yang digunakan untuk tujuan ini adalah
4
1
1
4 20 4

4
1
1
Operator Laplace termasuk ke dalam penapis lolos-tinggi sebab jumlah seluruh
koefisiennya nol dan koefisiennya mengandung nilai negatif maupun positif.

Contoh 8.5. [GAL90] Contoh berikut ini memperlihatkan pendeteksian tepi


vertikal dengan operator Laplace:

4
4

4
4

4 4 8 8 8 8
4 4 8 8 8 8

4 4 8 8 8 8

4 4 8 8 8 8
4 4 8 8 8 8

*
*

*
*

* *
* * * *
0 + 4 4 0 0 *

0 + 4 4 0 0 *

0 + 4 4 0 0 *
* *
* * * *
(ii) Hasil konvolusi

(i) Citra semula


8

+4

-4

Satu baris dari hasil pendeteksian tepi:


0 +4

4 0 0

Pada contoh di atas, persilangan nol bersesuaian dengan tepi pada citra semula,
yang terdapat pada titik tengah antara dua buah pixel yang bersesuaian. Pixel tepi
seharusnya ditandai secara konsisten, apakah pixel di sebelah kiri atau di sebelah
kanan garis |.

Bab 8_Pendeteksian Tepi (Edge Detection)

133

Contoh 8.6. [GAL90] Pendeteksian tepi diagonal (miring) dengan operator Laplace:
4
4

4
4

8
8

8
4 4 4 4 4 8 8

4
4
4
4

8
4
4
4

8
8
4
4

8
8
8
4

8
8
8
8

8
8
8
8

*
*

*
*

* *
*
*
*
0 +8 4 0
0
0 0 +8 4 0
0 0
0 +8 4
*

*
*

*
* *

*
0
0
0

(ii) Hasil konvolusi

(i) Citra semula

Contoh 8.7. Pendeteksian tepi landai dengan operator Laplace:

2
2

2
2

2 2 5 8 8 8 8
2 2 5 8 8 8 8

2 2 5 8 8 8 8

2 2 5 8 8 8 8
2 2 5 8 8 8 8
(i) Citra semula

*
*

*
*

* * *
0 + 3 0 3 0 0 *

0 + 3 0 3 0 0 *

0 + 3 0 3 0 0 *
* * * * * * *
*

(ii) Hasil konvolusi

Satu baris dari hasil pendeteksian tepi:


0 +3 0 3 0
Pada contoh di atas tidak terdapat persilangan nol; lokasi tepi yang sesungguhnya
ditentukan secara interpolasi.

Kadangkala pendeteksian tepi dengan operator Laplace menghasilkan tepi-tepi


palsu yang disebabkan oleh gangguan pada gambar [DUL97]. Untuk mengurangi
kemunculan tepi palsu, citra disaring dulu dengan fungsi Gaussian (Gambar 8.7).

134

Pengolahan Citra Digital

f(x,y)

dihaluskan dengan
fungsi Gauss, G(x,y)

h(x,y)
operator Laplace,
2

k(x,y)
Gambar 8.7 Skema pendeteksian tepi untuk citra yang mengalami gangguan.

Berdasarkan skema pada Gambar 8.7:


k ( x, y ) = 2 h( x, y )

(8.22)

h ( x, y ) = f ( x, y ) * G ( x, y )

(8.23)

dan

maka dapat dibuktikan bahwa


2 [ f ( x, y ) * G ( x, y )] = f ( x, y ) * 2G ( x, y )

(8.24)

k ( x, y ) = f ( x, y ) * 2G ( x, y )

(8.25)

Jadi,

yang dalam hal ini,


x 2 + y 2 2 2
e
G ( x, y ) =
4

Bab 8_Pendeteksian Tepi (Edge Detection)

(x2 + y2 )
2 2

(8.26)

135

Fungsi 2G(x,y) merupakan turunan kedua dari fungsi Gauss, kadang-kadang


disebut juga fungsi Laplacian of Gaussian (LoG) atau fungsi topi orang Mexico
(Mexican Hat), karena bentuk kurvanya seperti topi Meksiko.
Jadi, untuk mendeteksi tepi dari citra yang mengalami gangguan, kita dapat
melakukan salah satu dari dua operasi ekivalen di bawah ini:
1.

Konvolusi citra dengan fungsi Gauss G(x,y), kemudian lakukan operasi


Laplacian terhadap hasilnya, atau

2.

Konvolusi citra dengan penapis LoG.

Contoh penapis LoG yang berukuran 5 5:


0 1 0
0
0
0 1 2 1 0

1 2 16 2 1

0 1 2 1 0
0
0 1 0
0

Hasil pendeteksian tepi dengan operator Laplace dan Laplacian of Gaussian


diperlihatkan pada Gambar 8.8.

(a)
136

(b)
Pengolahan Citra Digital

(c)

(d)

Gambar 8.8 (a) citra botol; (b) Laplace; (c) Laplace dengan bobot lebih; (d) Laplacian of Gaussian
(LoG)

8.5 Pendeteksian Tepi dengan Operator Kompas


Operator kompas (compass operator) digunakan untuk mendeteksi semua tepi
dari berbagai arah di dalam citra. Operator kompas yang dipakai untuk
pendeteksian tepi menampilkan tepi dari 8 macam arah mata angin: Utara, Timur
Laut, Timur, Tenggara, Selatan, Barat Daya, dan Barat Laut. Pendeteksian tepi
dilakukan dengan mengkonvolusikan citra dengan berbagai mask kompas, lalu
dicari nilai kekuatan tepi (magnitude) yang terbesar dan arahnya. Jika misalnya
digunakan sebanyak p buah mask kompas dan nilai kekuatan tepi pada pixel (x, y)
untuk semua mask adalah G1[f(x,y)], G2[f(x,y)], , Gp[f(x,y)], maka besar
kekuatan tepi adalah:

G[ f ( x, y )] = max{Gi [ f ( x, y )] i = 1,2,..., p}
i

(8.27)

Jika mask k adalah mask yang memberikan kekuatan terbesar, maka arah tepi
ditentukan dari mask k tersebut.
Operator kompas yang dipakai untuk pendeteksian tepi menampilkan tepi dari 8
macam arah mata angin:

Bab 8_Pendeteksian Tepi (Edge Detection)

137

Utara
1
1
1
1 2 1

1 1 1

Timur Laut
1 1
1
1 2 1

1 1 1

Timur
1 1
1 2

1 1

1
1

Tenggara
1 1 1
1 2 1

1
1 1

Selatan
1 1 1
1 2 1

1
1
1

Barat Daya
1 1 1
1 2 1

1 1
1

Barat
1 1 1
1 2 1

1 1 1

Barat Laut
1
1 1
1 2 1

1 1 1

Operator kompas yang tersedia dapat juga digunakan untuk mendeteksi tepi
dalam arah tertentu saja. Misalnya diinginkan mendeteksi tepi dalam arah
horizontal dan vertikal, seperti hasil pendeteksian tepi citra San Fransisco
(Gambar 8.9) dan citra WTC1109.

Tepi horizontal

Tepi vertikal

Gambar 8.9 Deteksi tepi horizontal dan vertikal dari citra San Fransisco

138

Pengolahan Citra Digital

Gambar 8.10. Citra WTC1109

Tepi vertikal

Bab 8_Pendeteksian Tepi (Edge Detection)

139

Tepi horizontal
Gambar 8.10 (lanjutan).

140

Pengolahan Citra Digital

Bab 9

Kontur dan Representasinya

endeteksi tepi menghasilkan citra tepi yang berupa citra biner (pixel tepi
berwarna putih, sedangkan pixel bukan-tepi berwarna hitam). Tetapi, tepi
belum memberikan informasi yang berguna karena belum ada keterkaitan
antara suatu tepi dengan tepi lainnya. Citra tepi ini harus diproses lebih lanjut
untuk menghasilkan informasi yang lebih berguna yang dapat digunakan dalam
mendeteksi bentuk-bentuk sederhana (misalnya garis lurus, lingkaran, elips, dan
sebagainya) pada proses analisis citra.

Rangkaian pixel-pixel tepi yang membentuk batas daerah (region boundary)


disebut kontur (contour) [JAI95]. Kontur dapat terbuka atau tertutup. Kontur
tertutup berkoresponden dengan batas yang mengelililingi suatu daerah lihat
Gambar 9.1(a). Pixel-pixel di dalam daerah dapat ditemukan dengan algoritma
pengisian (filling algorithm). Batas daerah berguna untuk mendeskripsikan
bentuk objek dalam tahap analisis citra (misalnya untuk mengenali objek).
Kontur terbuka dapat berupa fragmen garis atau bagian dari batas daerah yang
tidak membentuk sirkuit (Gambar 9.1(b)).

(a)

(b)
Gambar 9.1 (a) kontur tertutup, (b) kontur terbuka

Bab 9_Kontur dan Representasinya

141

9.1 Representasi Kontur


Representasi kontur dapat berupa senarai tepi (edge list) atau berupa kurva.
Senarai tepi merupakan himpunan terurut pixel-pixel tepi. Representasi kontur ke
dalam kurva merupakan representasi yang kompak dan mangkus untuk analisis
citra. Misalnya, rangkaian pixel tepi yang membentuk garis dapat direpresentasikan
hanya dengan sebuah persamaan garis lurus. Representasi semacam ini
menyederhanakan perhitungan selanjutnya seperti arah dan panjang garis.
Kode Rantai
Kode rantai (chain code)adalah notasi untuk mengkodekan senarai tepi yang
membentuk batas daerah. Kode rantai menspesifikasikan arah setiap pixel tepi di
dalam senarai tepi. Arah yang digunakan adalah 8 arah mata angin seperti yang
terlihat pada pada Gambar 9.2 (a).
0

batas

objek
titik awal

(a)

(b)

Gambar 9.2 (a) Kode rantai, (b) representasi batas objek dengan kode rantai.

Dimulai dari sebuah pixel tepi dan searah jarum jam, arah setiap pixel tepi yang
membentuk batas objek dikodekan dengan salah satu dari delapan kode rantai.
Kode rantai merepresentasikan batas objek dengan koordinat pixel tepi pertama
lalu diikuti dengan senarai kode rantai. Karena ada 8 arah, maka cukup 3 bit
untuk mengkodekan setiap arah. Gambar 9.3 memperlihatkan contoh pengkodean
batas objek dengan kode rantai.

142

Pengolahan Citra Digital

Titik awal
A

1
0

2
4

4
6

Kode rantai: (A), 22222332244466666666667700221


Gambar 9.3 Contoh pengkodean batas objek dengan kode rantai.

Pencocokan Kurva
Kurva yang merepresentasikan kontur dicari dengan teknik pencocokan kurva
(curve fitting). Ada dua macam teknik pencocakan kurva: interpolasi dan
penghampiran (approximation). Interpolasi kurva adalah mencari kurva yang
melalui semua pixel tepi, sedangkan penghampiran kurva adalah mencari kurva
yang paling dekat melalui pixel-pixel tepi, tetapi tidak perlu melalui semua pixel
tersebut.
Di dalam bab ini kita hanya membahas teknik pencocokan kurva dengan
penghampiran. Salah satu metode penghampiran kurva yang populer dalam
pengolahan citra adalah transformasi Hough. Transformasi Hough akan dibahas
dalam upa-bab 9.3 di bawah ini.

9.2 Transformasi Hough


Transformasi Hough menspesifikasikan kurva dalam bentuk parametrik. Kurva
dinyatakan sebagai bentuk parametrik
(x(u), y(u))

Bab 9_Kontur dan Representasinya

143

dari parameter u. Bentuk parametrik tersebut menspesifikasikan titik-titik


sepanjang kurva dari titik awal kurva p1 = (x(u1), y(u1) ke titik akhir p2 = (x(u2), y(u1).
Panjang kurva adalah
u2

L=

u1

dx dy
+ du
du du

(9.1)

Transformasi Hough menggunakan mekanisme voting untuk mengestimasi nilai


parameter. Setiap titik di kurva menyumbang suara untuk beberapa kombinasi
parameter. Parameter yang memperoleh suara terbanyak terpilih sebagai pemenang.
Pada awalnya, Transformasi Hough digunakan untuk mendeteksi garis lurus.
Namun, ia juga dapat digunakan untuk mendeteksi kurva sederhana lainnya
seperti lingkaran dana elips. Pembahasan dimulai dengan transformasi Hough
untuk mendeteksi keberadaan garis lurus di dalam citra tepi.

Mendeteksi Garis Lurus


Misalkan citra tepi berukuran n = N M pixel. Cara yang paling sederhana
mendeteksi garis lurus adalah menemukan semua garis yang ditentukan oleh dua
buah pixel dan memeriksa apakah sebagian dari pixel tepi termasuk ke dalam
garis tersebut (cara exhaustive search).
Jumlah maksimum garis yang dideteksi adalah n (n 1)/2. Karena setiap pixel
harus diperiksa apakah ia termasuk ke dalam suatu garis, maka kompleksitas
algoritma pendeteksian garis lurus untuk kasus terburuk adalah O(n3). Untuk
aplikasi praktis, jelas metode pendeteksian dengan cara ini tidak mangkus.
Transformasi Hough mengurangi kompleksitas komputasi dengan menggunakan
bentuk parametrik dan menggunakan mekanisme pemungutan suara terbanyak
(voting) untuk menentukan nilai parameter yang tepat.
Tinjau persamaan garis lurus:
y = mx + c

(9.2)

Dalam bentuk parametrik, setiap garis dinyatakan sebagai (m, c) di dalam ruang
parameter m-c. Persamaan 9.2 dapat ditulis menjadi
c = y mx

(9.3)

Sembarang titik (x,y) pada bidang planar X-Y berkoresponden dengan sebuah
garis lurus pada ruang parameter mc.

144

Pengolahan Citra Digital

Tinjau 3 buah titik pada sebuah garis lurus pada Gambar 9.4(a). Sembarang garis
yang melalui titik (x1,y1) berkoresponden dengan garis c = y1 mx1 pada ruang
parameter m-c. Begitu juga, sembarang garis lurus yang melalui (x2,y2)
berkoresponden dengan garis c = y2 mx2 dan sembarang garis lurus yang
melalui (x3,y3) berkoresponden dengan garis c = y3 mx3 pada ruang m-c.
Perpotongan (m,c) dari ketiga garis pada ruang m-c tersebut menentukan garis
unik yang melalui (xi,yi), i = 1, 2, 3, di bidang X-Y.
Dengan cara ini, maka setiap pixel pada garis lurus di bidang citra
berkoresponden dengan sejumlah garis lurus yang melalui satu ititik tertentu di
ruang parameter m-c. Sifat ini dimanfaatkan untuk mendeteksi garis lurus. Jika
setiap pixel tepi melakukan pemungutan suara pada ruang parameter, maka
keberadaan garis lurus pada citra ditandai dengan penumpukan suara pada
tempat-tempat tertentu di ruang parameter.
y

c = y - mx 1

c = y - mx 3

(x1,y1)
(x2,y2)
(x3,y3)

c = y - mx 2
x

(a)

(b)

Gambar 9. 4 (a) Garis lurus pada ruang X-Y; (b) representasinya dalam ruang parameter m-c.

Karena itu, prosedur mendeteksi garis lurus adalah sebaga i berikut:


1. Ruang parameter didiskritkan sebagai matriks P(m, c), yang dalam hal ini m1
m mK dan c1 c cL.
2. Tiap elemen pada ruang parameter diasumsikan sebagai akumulator.
Inisialisasi setiap elemen P(m, c) dengan 0.
3. Untuk setiap pixel tepi (xi, yi) pixel tepi dicirikan mempunyai nilai intensitas
putih (1) dalam skala 0 - 1) hitung nilai c = yi mxi. Untuk setiap nilai
parameter m, m1 m mK, yang berkoresponden dengan nilai c, maka elemen
matriks P(m, c) yang bersesesuaian dinaikkan satu:
P(m, c) = P(m, c) + 1

(9.4)

Dengan kata lain, tambahkan satu suara pada ruang parameter m-c.

Bab 9_Kontur dan Representasinya

145

4. Ulangi langkah 3 sampai seluruh pixel di dalam citra tepi ditelusuri.


5. Pada akhir prosedur, tiap elemen matriks P(m, c) menyatakan jumlah pixel
tepi yang memenuhi persamaan (1). Tentukan elemen matriks yang memiliki
penumpukan suara cukup besar (yang nilainya di atas nilai ambang tertentu).
Misalkan tempat-tempat itu adalah
{(m1, c1), (m2, c2), , {(mk, ck ),
Hal ini berarti terdapat k garis lurus yang terdeteksi pada citra.

Tingkat ketelitian dari Transformasi Hough bergantung pada ukuran matriks P(m,
c), yaitu K L. Kompleksitas komputasi Transformasi Hough pada kasus
terburuk adalah O(Kn), yang dalam hal ini K adalah jumlah pembagian parameter
m, dan n adalah jumlah pixel di dalam citra tepi. Karena O(Kn) < O(n3), maka
pendeteksian garis lurus dengan Transformasi Hough lebih cepat daripada metode
exhaustive search.
Model parametrik pada persamaan 9.2 tidak dapat digunakan untuk mendeteksi
garis vertikal atau hampir vertikal karena gradiennya (m) menuju nilai takberhingga. Karena itu, garis dinyatakan dalam representasi polar:
r = x cos + y sin

(9.4)

yang dalam hal ini r adalah jarak garis ke titik asal (Gambar 9.5).

( r, )
r

Gambar 9.5 Representasi polar dari garis lurus

Sembarang garis yang melalui (x1,y1) pada ruang xy berkoresponden dengan


kurva sinusoida r = x1 cos + y1 sin pada ruang r. Pixel-pixel yang terletak
segaris pada citra tepi berkoresponden dengan titik potong seluruh kurva
sinusoidanya pada ruang parameter r.

146

Pengolahan Citra Digital

Prosedur yang sama untuk mendeteksi garis lurus dapat digunakan kembali
dengan mengganti ruang parameter mc menjadi ruang parameter r, yang
dalam hal ini,

N2 + M 2 r N2 + M 2
-/2 /2
Algoritma Transformasi Hough diperlihatkan pada Algoritma 9.1 [PIT93].
Algoritma tersebut mengasumsikan citra tepi (citra hasil pendeteksian tepi)
disimpan di dalam matriks Edge[0..N-1,0..M-1]. Ruang parameter r
dinyatakan sebagai matriks P yang berukuran n m. Nilai cosinus dan sinus
disimpan di dalam lookup table COS[0..p-1] dan SIN[0..p-1] yang
dibentuk dengan Algoritma 9.2.
void Hough(citra Edge, int N, int M, imatriks P, int n, int m,
float *COS, float *SIN)
/* prosedur yang melakukan Transformasi Hough.
Masukan: citra tepi Edge yang berukuran N x M.
Keluaran: matriks parameter P yang berukuran n x m
*/
{
int k, l, i, j, kk, ll;
float r, b;
float SQRTD =sqrt((float)N*(float)N + (float)M*(float)M);
/* inisialisasi P[0..p-1, 0,,q-1] dengan 0 */
for(kk=0;kk<=p-1;kk++)
for(ll=0;ll<=q-1;ll++)
P[kk][ll]=0;
/*telusuri citra tepi. Jika pixel merupakan tepi, lakukan pemungutan
suara pada elemen matriks P yang bersesuaian.
tetha dari pi/2 sampai pi/2.
r dari sqrt(N*N+M*M) sampai sqrt(N*N+M*M).
*/
for (k=0;k<=N-1;k++)
for (l=0;l<=M-1;l++)
{
if (Edge[k][l]==1)
{
for (i=0;i<=p-1;i++)
{
r = k*COS[i] + l*SIN[i];
b = SQRTD;
r+=b; r/=(SQRTD*2.0); r*=(m-1); r+=0.5;
j=floor(r);
P[i][j]++;
}
}
}
}

Algoritma 9.1 Transformasi Hough

Bab 9_Kontur dan Representasinya

147

void LookUpTable(float *COS, *SIN, int m)


/* Membuat tabel cosinus dan sinus untuk fungsi COS dan SIN.
Masukan: m adalah jumlah baris tabel
Keluaran: tabel COS dan tabel SIN
*/
{
int i;
float th, R_TO_D = 0.017453
for(i=0;i<=p-1;i++)
{
th = (float)i * 180.0/(m-1)-90.0;
th = th * R_TO_D;
COS[i] = (double) cos((double)th);
SIN[i] = (double) sin((double)th);
}

Algoritma 9.2 Transformasi Hough

Setelah Transformasi Hough selesai dilakukan, langkah berikutnya adalah


melakukan operasi pengambangan (thresholding) untuk menentukan tempattempat pada ruang paramater r yang mempunyai penumpukan suara lebih besar
dari nilai ambang T. Elemen matriks P yang nilainya di atas nilai ambang tersebut
menyatakan parameter garis lurus. Misalkan tempat-tempat itu adalah {(m1, c1),
(m2, c2), , {(mk , ck ), hal ini berarti terdapat k garis lurus yang terdeteksi pada
citra. Algoritma pengambangan ditunjukkan pada Algoritma 9.3.
void threshold(imatriks P, int n, in m, int T)
/* Melakukan pengambangan pada matriks parameter P.
Setiap elemen matriks P yang nilainya di atas T menyatakan parameter
garis lurus.
Masukan: matriks parameter P yang berukuran n x m.
Keluaran: matriks parameter P yang sudah di-threshold.
*/
{ int i, j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if (P[i][j]>T)
P[i][j]=1;
else
P[i][j=0;
}

Algoritma 9.3 Pengambangan hasil transformasi Hough

Pixel-pixel tepi yang termasuk di dalam garis lurus hasil deteksi Transformasi
Hough dapat dihasilkan dengan algoritma Transformasi Hough Balikan
(inverse Hough Transform). Untuk setiap elemen matriks Par yang bernilai 1,

148

Pengolahan Citra Digital

garis lurus yang bersesuaian (yang intensitasnya 1) digambarkan pada matriks


keluaran Out. Operasi and dengan citra tepi dilakukan untuk mengklarifikasi
keberadaan pixel tepi.
Algoritma Transformasi Hough Balikan diperlihatkan pada Algoritma 9.4
[PIT93]. Algoritma tersebut mengasumsikan citra tepi (citra hasil pendeteksian
tepi) disimpan di dalam matriks Edge[0..N-1,0..M-1]. Ruang parameter
r dinyatakan sebagai matriks P yang berukuran n n. Citra keluaran yang
berisi pixel-pixel tepi pembentuk garis lurus disimpan di dalam matriks
Out[0..N-1,0..M-1].
void InverseHough(citra Edge, citra Out, int N, int M, imatriks P,
int n, int m, float *COS, float *SIN)
/* prosedur yang melakukan Transformasi Hough Balikan
Masukan: 1. citra tepi Edge yang berukuran N x M.
2. matriks parameter P yang berukuran n x m
Keluaran: citra Out yang berisi pixel-pixel pembentuk garis lurus.
*/
{
int k, l, i, j;
float r, y;
float SQRTD =sqrt((float)N*(float)N + (float)M*(float)M);
/* inisialisasi citra keluaran dengan 0 */
for(kk=0;kk<=p-1;kk++)
for(ll=0;ll<=q-1;ll++)
Out[p][q]=0;
/* Matriks parameter P telah dilakukan operasi thresholding.
Untuk setiap elemen P yang bernilai 1, garis lurus yang
bersesuaian digambarkan ke dalam matriks Out.
Operasi and dengan citra tepi dikerjakan.
for (k=0;k<=p-1;k++)
for (l=0;l<=q-1;l++)
{
y=(float)0.0;
if (P[k][l]==1) /* atau P[k][l]== 255 */
{
for (i=0;i<=N-1;i++)
{
r = (float)l * 2.0 * SQRTD/(m-1) SQRTD;
if (SIN[k]==(float)0.0)
y++;
else
y=(r (float)i * COS[k])/SIN[k];
y+=0.5; j=floor(y);
if (j >=0 && j < M)
if (Edge[i][j]==1) Out[i][j]++;
}
}
}
}

Algoritma 9.4 Transformasi Hough Balikan

Bab 9_Kontur dan Representasinya

149

Mendeteksi Lingkaran
Transformasi Hough dapat juga digunakan untuk mendeteksi bentuk lingkaran di
dalam citra tepi. Persamaan lingkaran yang berpusat di titik (a, b) dengan jari-jari
r adalah

( x a)2 + ( y b)2 = r 2

(9.5)

Jadi, ruang parameter untuk lingkaran adalah rab , sehingga matriks trimatra
P(r, a, b) dibutuhkan untuk menyimpan perhitungan suara.
Persamaan polar untuk setiap titik (x, y) di lingkaran:
x = a + r cos
y = b + r sin

(9.6)
(9.7)

Persamaan (9.6) dan (9.7) dapat ditulis menjadi persamaan


a = x r cos
b = y r sin

(9.8)
(9.9)

Pada operasi deteksi tepi, selain magnitudo pixel tepi, juga dihasilkan arah tepi, .
Karena itu, cos dan sin dapat dihitung.
Misalkan (x i, yi) adalah pixel tepi dan adalah arah tepi . Ada dua kasus yang
akan ditinjau:
(i) jika jari-jari lingkaran diketahui, (ii) jika jari-jari lingkaran tidak diketahui.

Kasus 1: Jari-jari lingkaran diketahui


Jika jari-jari jari-jari lingkaran diketahui r = R, maka ruang parametrik trimatra,
P(r,a,b), dapat direduksi menjadi ruang dwimatra, P(a,b).

(a,b)

(x i,yi)

Gambar 9. 5 Proses penumpukan suara untuk mendeteksi lingkaran

150

Pengolahan Citra Digital

Titik pusat lingkaran, (a,b), yang mempunyai jari-jari r = R dan melalui titik (x i,
yi) dapat dihitung dengan persamaan
a = xi R cos
b = yi R sin

(9.10)
(9.11)

seperti yang ditunjukkan pada Gambar 9.5, lalu tambahkan elemen P(a, b) yang
bersesuaian dengan satu. Proses ini diulangi untuk pixel-pixel tepi yang lain.
Elemen matriks P(a, b) yang memiliki jumlah suara di atas nilai ambang tertentu
menyatakan lingkaran yang terdapat di dalam citra tepi.

Kasus 2: Jari-jari lingkaran tidak diketahui


Jika jari-jari lingkaran tidak diketahui, maka penumpukan suara dilakukan untuk
semua nilai r, 0 < r r max, nilai a dan b untuk pixel tepi (xi, yi) dihitung dengan
persamaan
a = xi r cos
b = yi r sin

(9.12)
(9.13)

dan elemen P(r, a, b) yang bersesuaian dinaikkan satu. Proses ini diulangi untuk
pixel-pixel tepi yang lain. Elemen matriks P(r, a, b) yang memiliki jumlah suara
di atas nilai ambang tertentu menyatakan lingkaran yang terdapat di dalam citra
tepi.
Persamaan (9.12) dan (9.13) dapat dimanipulasi dengan mengeliminasi r dari
kedua persamaan:
(x a)
a = x r cos r =
cos
( x a)
b = y r sin b = y
sin = y ( x a ) tan
cos
b = a tan x tan + y

(9.14)

Dengan demikian, maka ruang parametrik trimatra, P(r,a,b), dapat direduksi


menjadi ruang dwimatra, P(a,b). Untuk untuk semua nilai r, yang dalam hal ini a1
< a aK, nilai ordinat b dari titik pusat lingkaran (a,b) yang melalui titik (xi, yi)
dapat dihitung dengan persamaan (11), lalu tambahkan elemen P(a, b) yang
bersesuaian dengan satu. Proses ini diulangi untuk pixel-pixel tepi yang lain.
Elemen matriks P(a, b) yang memiliki jumlah suara di atas nilai ambang tertentu
menyatakan lingkaran yang terdapat di dalam citra tepi.
Gambar 9.6 memperlihatkan hasil transformasi Hough untuk mendeteksi
lingkaran dari citra slope dengan menggunakan nilai ambang T = 30.
Bab 9_Kontur dan Representasinya

151

(a)

(b)

Gambar 9. 6 (a) Citra slope, (b) hasil deteksi lingkaran dengan Transformasi Hough (Terima kasih
kepada Danu Pranantha atas izin menggunakan output program tugasnya)

Transformasi Hough untuk Mendeteksi Bentuk Sembarang


Transformasi Hough dapat dirampatkan untuk mendeteksi sembarang kurva yang
berbentuk f(x, a) = 0, yang dalam hal ini x adalah vektor peubah dan a adalah
vektor parameter. Memori yang dibutuhkan untuk matriks parametrik P(a)
meningkat menjadi Kq, yang dalam hal ini q adalah jumlah parameter. Tahapan
yang dilakukan adalah [DUL97]:
1. tentukan lokasi pusat penumpukan suara;
2. tentukan fungsi jarak dari setiap pixel tepi ke pusat pemungutan suara.
Jika kurva berbentuk lingkaran, maka lokasi pusat penumpukan suara adalah titik
pusat lingkaran, sedangkan fungsi jarak dari setiap pixel tepi ke titik pusat
lingkaran adalah fungsi konstan (yaitu akar pangkat dua dari persamaan (4) ).
Sebagai contoh, pada Gambar 9.7 titik (a, b) adalah lokasi pusat penumpukan
suara. Fungsi jarak r dari setiap titik (x, y) dan nilai merupakan fungsi dari arah
vektor normal N.
Untuk setiap pixel tepi (x,y) dengan sudut arah tepi , lokasi pusat penumpukan
suara dihitung dengan rumus
N

a = x r( ) cos( ( ))
b = y r ( ) sin( ( ))

(9.15)
(9.16)

(x,y)

(a,b)
Gambar 9. 7 Pendeteksian bentuk kurva sembarang dengan
Transformasi Hough rampatan

152

Pengolahan Citra Digital

Bab 10

Pemampatan Citra

ada umumnya, representasi citra digital membutuhkan memori yang besar.


Sebagai contoh, citra Lena dalam format bitmap yang berukuran 512 512
pixel membutuhkan memori sebesar 32 KB (1 pixel = 1 byte) untuk
representasinya. Semakin besar ukuran citra tentu semakin besar pula memori
yang dibutuhkannya. Pada sisi lain, kebanyakan citra mengandung duplikasi
data. Duplikasi data pada citra dapat berarti dua hal. Pertama, besar kemungkinan
suatu pixel dengan pixel tetanggganya memiliki initensitas yang sama, sehingga
penyimpanan setiap pixel memboroskan tempat. Kedua, citra banyak
mengandung bagian (region) yang sama, sehingga bagian yang sama ini tidak
perlu dikodekan berulang kali karena mubazir atau redundan.
Saat ini, kebanyakan aplikasi menginginkan representasi citra dengan kebutuhan
memori yang sesedikit mungkin. Pemampatan citra atau kompresi citra (image
compression) bertujuan meminimalkan kebutuhan memori untuk merepresentasikan
citra digital. Prinsip umum yang digunakan pada proses pemampatan citra adalah
mengurangi duplikasi data di dalam citra sehingga memori yang dibutuhkan
untuk merepresentasikan citra menjadi lebih sedikit daripada representasi citra
semula.

10.1 Pemampatan Citra versus Pengkodean Citra


Pemampatan citra kadang-kadang disalahmengertikan dengan pengkodean citra
(image encoding), yaitu persoalan bagaimana pixel-pixel di dalam citra dikodekan
dengan representasi tertentu. Pengkodean citra tidak selalu menghasilkan
representasi memori yang minimal. Pengkodean citra yang menghasilkan
Bab 10_Pemampatan Citra

153

representasi memori yang lebih sedikit daripada representasi aslinya itulah yang
dinamakan pemampatan citra.
Ada dua proses utama dalam persoalan pemampatan citra:
1.

Pemampatan citra (image compression).


Pada proses ini, citra dalam representasi tidak mampat dikodekan dengan
representasi yang meminimumkan kebutuhan memori. Citra dengan format
bitmap pada umumnya tidak dalam bentuk mampat. Citra yang sudah
dimampatkan disimpan ke dalam arsip dengan format tertentu. Kita mengenal
format JPG dan GIF sebagai format citra yang sudah dimampatkan.

2.

Penirmampatkan citra (image decompression).


Pada proses ini, citra yang sudah dimampatkan harus dapat dikembalikan
lagi (decoding) menjadi representasi yang tidak mampat. Proses ini
diperlukan jika citra tersebut ditampilkan ke layar atau disimpan ke dalam
arsip dengan format tidak mampat. Dengan kata lain, penirmampatan citra
mengembalikan citra yang termampatkan menjadi data bitmap.

10.2 Aplikasi Pemampatan Citra


Pemampatan citra memberikan sumbangsih manfaat yang besar dalam industri
multimedia saat ini. Pemampatan citra bermanfaat untuk aplikasi yang
melakukan:
1. Pengiriman data (data transmission) pada saluran komunikasi data
Citra yang telah dimampatkan membutuhkan waktu pengiriman yang lebih
singkat dibandingkan dengan citra yang tidak dimampatkan. Contohnya
aplikasi pengiriman gambar lewat fax, videoconferencing, pengiriman data
medis, pengiriman gambar dari satelit luar angkasa, pengiriman gambar via
telepon genggam. download gambar dari internet, dan sebagainya.
2. Penyimpanan data (data storing) di dalam media sekunder (storage)
Citra yang telah dimampatkan membutuhkan ruang memori di dalam media
storage yang lebih sedikit dibandingkan dengan citra yang tidak
dimampatkan. Contoh aplikasi nya antara lain aplikasi basisdata gambar,
office automation, video storage (seperti Video Compact Disc), dll.

10.3 Kriteria Pemampatan Citra


Saat ini sudah banyak ditemukan metode-metode pemampatan citra. Kriteria
yang digunakan dalam mengukur metode pemampatan citra adalah [LOW91]:

154

Pengolahan Citra Digital

1. Waktu pemampatan dan penirmampatan (decompression).


Waktu pemampatan citra dan penirmampatannya sebaiknya cepat. Ada
metode pemampatan yang waktu pemampatannya lama, namun waktu
penirmampatannya cepat. Ada pula metode yang waktu pemampatannya
cepat tetapi waktu penirmampatannya lambat. Tetapi ada pula metode yang
waktu pemampatan dan penirmampatannya cepat atau keduanya lambat.
2. Kebutuhan memori.
Memori yang dibutuhkan untuk merepresentasikan citra seharusnya berkurang
secara berarti. Ada metode yang berhasil memampatkan dengan persentase
yang besar, ada pula yang kecil. Pada beberapa metode, ukuran memori hasil
pemampatan bergantung pada citra itu sendiri. Cira yang mengandung
banyak elemen duplikasi (misalnya citra langit cerah tanpa awan, citra lantai
keramik) umumnya berhasil dimampatkan dengan memori yang lebih sedikit
dibandingkan dengan memampatkan citra yang mengandung banyak objek
(misalnya citra pemandangan alam).
3. Kualitas pemampatan (fidelity)
Informasi yang hilang akibat pemampatan seharusnya seminimal mungkin
sehingga kualitas hasil pemampatan tetap dipertahankan. Kualitas pemampatan
dengan kebutuhan memori biasanya berbanding terbalik. Kualitas pemampatan
yang bagus umumnya dicapai pada proses pemampatan yang menghasilkan
pengurangan memori yang tidak begitu besar, demikian pula sebaiknya.
Dengan kata lain, ada timbal balik (trade off) antara kualitas citra dengan
ukuran hasil pemampatan.
Kualitas sebuah citra bersifat subyektif dan relatif, bergantung pada
pengamatan orang yang menilainya. Seseorang dapat saja mengatakan
kualitas suatu citra bagus, tetapi orang lain mungkin mengatakan kurang
bagus, jelek, dan sebagainya.
Kita dapat membuat ukuran kualitas hasil pemampatan citra menjadi ukuran
kuantitatif dengan menggunakan besaran PSNR (peak signal-to-noise ratio).
PSNR dihitung untuk mengukur perbedaan antara citra semula dengan citra
hasil pemampatan (tentu saja citra hasil pemampatan harus dinirmampatkan
terlebih dahulu) dengan citra semula, dengan rumus:

b
PSNR = 20 log10

rms

(10.1)

dengan b adalah nilai sinyal terbesar (pada citra hitam-putih, b = 255) dan
rms adalah akar pangkat dua dari selisih antara citra semula dengan citra hasil
pemampatan. Nila rms dihitung dengan rumus:

Bab 10_Pemampatan Citra

155

rms =

1
Lebar Tinggi

( f

ij

f 'ij ) 2

(10.2)

i =1 j =1

yang dalam hal ini, f dan f ' masing-masing menyatakan nilai pixel citra
semula dan nilai pixel citra hasil pemampatan. PSNR memiliki satuan decibel
(dB). Persamaan (10.2) menyatakan bahwa PSNR hanya dapa dihitung
setelah proses pernirmapatan citra. Dari persamaan (10.2) terlihat abhwa
PSNR berbanding terbalik dengan rms. Nilai rms yang rendah yang
menyiratkan bahwa citra hasil pemampatan tidak jauh berbeda dengan citra
semula akan menghasilkan PSNR yang tinggi, yang berarti kualitas
pemampatannya bagus. Semakin besar nilai PSNR, semakin bagus kualitas
pemampatannya. Seberapa besar nilai PSNR yang bagus tidak dapat
dinyatakan secara eksplisit, bergantung pada citra yang dimampatkan. Namun
kita dapat mengetahui hal ini jika kita melakukan pengujian dengan mencoba
berbagai kombinasi parameter pemampatan yang digunakan. Jika nilai PSNR
semakin membesar, itu berarti parameter pemampatan yang digunakan sudah
menuju nilai yang baik. Parameter pemampatan citra bergantung pada metode
pemamapatan yang digunakan.
4. Format keluaran
Format citra hasil pemampatan sebaiknya cocok untuk pengiriman dan
penyimpanan data. Pembacaan citra bergantung pada bagaimana citra
tersebut direpresentasikan (atau disimpan).
Pemilihan kriteria yang tepat bergantung pada pengguna dan aplikasi. Misalnya,
apakah pengguna menginginkan pemampatan yang menghasilkan kualitas yang
bagus, namun pengurangan memori yang dibutuhkan tidak terlalu besar, atau
sebaliknya. Atau jika waktu pemampatan dapat diabaikan dari pertimbangan
(dengan asumsi bahwa pemampatan hanya sekali saja dilakukan, namun
pernirmampatan dapat berkali-kali), maka metode yang menghasilkan waktu
penirmampatan yang cepat yang perlu dipertimbangkan.

10.4 Jenis Pemampatan Citra


Ada empat pendekatan yang digunakan dalam pemampatan citra [LOW91]:
1. Pendekatan statistik.
Pemampatan citra didasarkan pada frekuensi kemunculan derajat keabuan
pixel di dalam seluruh bagian gambar.
Contoh metode: Huffman Coding.

156

Pengolahan Citra Digital

2. Pendekatan ruang
Pemampatan citra didasarkan pada hubungan spasial antara pixel-pixel di
dalam suatu kelompok yang memiliki derajat keabuan yang sama di dalam
suatu daerah di dalam gambar.
Contoh metode: Run-Length Encoding.
3. Pendekatan kuantisasi
Pemampatan citra dilakukan dengan mengurangi jumlah derajat keabuan
yang tersedia.
Contoh metode: metode pemampatan kuantisasi.
4. Pendekatan fraktal
Pemampatan citra didasarkan pada kenyataan bahwa kemiripan bagianbagian di dalam citra dapat dieksploitasi dengan suatu matriks transformasi.
Contoh metode: Fractal Image Compression.

10.5 Klasifikasi Metode Pemampatan


Metode pemampatan citra dapat diklasifiksikan ke dalam dua kelompok besar:
1. Metode lossless
Metode lossless selalu menghasilkan citra hasil penirmampatan yang tepat
sama dengan citra semula, pixel per pixel. Tidak ada informasi yang hilang
akibat pemampatan. Sayangnya nisbah (ratio) pemampatan citra metode
lossless sangat rendah.
Contoh metode lossless adalah metode Huffman.
Nisbah pemampatan citra dihitung dengan rumus
Nisbah = 100% (

ukuran citra hasil pempatatan


100%)
ukuran citra semula

(10.3)

Metode lossless cocok untuk memampatkan citra yang mengandung


informasi penting yang tidak boleh rusak akibat pemampatan. Misalnya
memampatkan gambar hasil diagnosa medis.
2. Metode lossy
Metode lossy menghasilkan citra hasil pemampatan yang hampir sama
dengan citra semula. Ada informasi yang hilang akibat pemampatan, tetapi
dapat ditolerir oleh persepsi mata. Mata tidak dapat membedakan perubahan
kecil pada gambar. Metode pemampatan lossy menghasilkan nisbah
pemampatan yang tinggi daripada metode lossless. Gambar 10.1 adalah citra
sebelum dimampatkan, dan Gambar 10.2 adalah hasil pemampatan citra
kapal dengan metode lossy.
Contoh metode lossy adalah metode JPEG dan metode fraktal.
Bab 10_Pemampatan Citra

157

Gambar 10.1 Citra kapal sebelum dimampatkan

Gambar 10.2 Citra kapal setelah dimampatkan dengan sebuah metode lossy

158

Pengolahan Citra Digital

10.6 Metode Pemampatan Huffman


Metode pemampatan Huffman menggunakan prinsip bahwa nilai (atau derajat)
keabuan yang sering muncul di dalam citra akan dikodekan dengan jumlah bit
yang lebih sedikit sedangkan nilai keabuan yang frekuensi kemunculannya
sedikit dikodekan dengan jumlah bit yang lebih panjang.
Algoritma metode Huffman:
1. Urutkan secara menaik (ascending order) nilai-nilai keabuan berdasarkan
frekuensi kemunculannya (atau berdasarkan peluang kemunculan, pk, yaitu
frekuensi kemunculan (nk) dibagi dengan jumlah pixel di dalam gambar (n)).
Setiap nilai keabuan dinyatakan sebagai pohon bersimpul tunggal. Setiap
simpul di-assign dengan frekuensi kemunculan nilai keabuan tersebut.
2. Gabung dua buah pohon yang mempunyai frekuensi kemunculan paling kecil
pada sebuah akar. Akar mempunyai frekuensi yang merupakan jumlah dari
frekuensi dua buah pohon penyusunnya.
3. Ulangi langkah 2 sampai tersisa hanya satu buah pohon biner.
Agar pemilihan dua pohon yang akan digabungkan berlangsung cepat, maka
semua pohon yang ada selalu terurut menaik berdasarkan frekuensi.
4. Beri label setiap sisi pada pohon biner. Sisi kiri dilabeli dengan 0 dan sisi
kanan dilabeli dengan 1.
Simpul-simpul daun pada pohon biner menyatakan nilai keabuan yang terdapat di
dalam citra semula. Untuk mengkodekan setiap pixel di dalam di dalam citra,
lakukan langkah kelima berikut:
5. Telusuri pohon biner dari akar ke daun. Barisan label-label sisi dari akar ke
daun menyatakan kode Huffman untuk derajat keabuan yang bersesuaian.
Setiap kode Huffman merupakan kode prefiks, yang artinya tidak ada kode biner
suatu nilai keabuan yang merupakan awalan bagi kode biner derajat keabuan
yang lain. Dengan cara ini, tidak ada ambiguitas pada proses penirmampatan
citra.

Bab 10_Pemampatan Citra

159

Contoh 10.1. Misalkan terdapat citra yang berukuran 64 64 dengan 8 derajat


keabuan (k) dan jumlah seluruh pixel (n) = 64 64 = 4096
k

nk

p(k) = nk/n

0
1
2
3
4
5
6
7

790
1023
850
656
329
245
122
81

0.19
0.25
0.21
0.16
0.08
0.06
0.03
0.02

Proses pembentukan pohon Huffman yang terbentuk dapat dilihat pada Gambar
10.3. Setiap simpul di dalam pohon berisi pasangan nilai a:b, yang dalam hal ini
a menyatakan nilai keabuan dan b menyatakan peluang kemunculan nilai
keabuan tersebut di dalam citra. Dari pohon Huffman tersebut kita memperoleh
kode untuk setiap derajat keabuan sebagai berikut:
0 = 00
2 = 01
4 = 1110
6 = 111101
1 = 10
3 = 110
5 = 11111
7 = 111100
Ukuran citra sebelum pemampatan (1 derajat keabuan = 3 bit) adalah 4096 3 bit
= 12288 bit, sedangkan Ukuran citra setelah pemampatan:
(790 2 bit) + (1023 2 bit) + (850 2 bit) +
(656 3 bit) + (329 4 bit) + (245 5 bit) +
(122 6 bit) + (81 6 bit) = 11053 bit
Jadi, kebutuhan memori telah dikurangi dari 12288 bit menjadi 11053 bit. Jelas
ini tidak banyak menghemat, tetapi jika 256 nilai keabuan yang digunakan
(dibanding dengan 8 derajat keabuan deperti pada contoh di atas) , penghematan
memori dapat bertambah besar.
11053
Nisbah pemampatan = (100%
100%) = 10% , yang artinya 10% dari
12288
citra semula telah dimampatkan.

160

Pengolahan Citra Digital

1.

7:0.02

2.

6:0.03

5:0.06

76:0.05

7:0.02

3.

5:0.06

4:0.08

4:0.08

765:0.11

7:0.02

4.

0:0.19

2:0.21

1:0.25

3:0.16

0:0.19

2:0.21

1:0.25

3:0.16

0:0.19

2:0.21

1:0.25

3:0.16

0:0.19

2:0.21

1:0.25

5:0.06
6:0.03

4765:0.19

4:0.08

765:0.11

5:0.06

76:0.05

7:0.02

0:0.19

3:0.16

6:0.03

76:0.05

5.

4:0.08

2:0.21

6:0.03

1:0.25

34765:0.35

3:0.16

4765:0.19

4:0.08

765:0.11

5:0.06

76:0.05

7:0.02

6:0.03

Gambar 10.3 Tahapan pembentukan pohon Huffman untuk Contoh 10.1 di atas

Bab 10_Pemampatan Citra

161

1:0.25

6.

34765:0.35

3:0.16

02:0.40

0:0.19

4765:0.19

4:0.08

765:0.11

5:0.06

76:0.05

7:0.02
7.

02:0.40

0:0.19

2:0.21

6:0.03
134765:0.60

2:0.21

1:0.25

34765:0.35

3:0.16

4765:0.19

4:0.08

765:0.11

5:0.06

76:0.05

7:0.02

6:0.03

02134765:
1.00

8.

02:0.40

0:0.19

134765:0.60

2:0.21

1:0.25

34765:0.35

3:0.16

4765:0.19

4:0.08

765:0.11

5:0.06

76:0.05

7:0.02

6:0.03

Gambar 10.3 (lanjutan)

162

Pengolahan Citra Digital

10.7 Metode Pemampatan Run-Length Encoding


(RLE)
Metode RLE cocok digunakan untuk memampatkan citra yang memiliki
kelompok-kelompok pixel berderajat keabuan sama. Pemampatan citra dengan
metode RLE dilakukan dengan membuat rangkaian pasangan nilai (p, q) untuk
setiap baris pixel, nilai pertama (p) menyatakan derajat keabuan, sedangkan nilai
kedua (q) menyatakan jumlah pixel berurutan yang memiliki derajat keabuan
tersebut (dinamakan run length).
Contoh 10.2. [LOW91] Tinjau citra 10 10 pixel dengan 8 derajat keabuan yang
dinyatakan sebagai matriks derajat keabuan sebagai berikut

0
0
1
4
3
2
3
0
1
3

0
0
1
4
3
2
3
0
1
3

0
0
1
4
3
6
4
0
1
3

0
1
1
4
5
0
4
0
1
2

0
1
1
3
5
0
3
0
0
2

2
1
1
3
7
0
2
0
0
2

2
1
1
3
7
0
2
0
0
1

2
2
1
3
7
1
2
0
2
1

2
2
1
2
7
1
1
1
2
1

2
2
1
2
6
0
1
1
2
1

semuanya ada 100 buah nilai.


Pasangan nilai untuk setiap baris run yang dihasilkan dengan metode pemampatan
RLE:
(0, 5), (2, 5)
(0, 3), (1, 4), (2, 3)
(1, 10)
(4, 4), (3, 4), (2 2)
(3, 3), (5, 2), (7, 4), (6, 1)
(2, 2), (6, 1), (0, 4), (1, 2), (0, 1)
(3, 2), (4, 2), (3, 1), (2, 2), (1, 2)
(0, 8), (1, 2)
(1, 4), (0, 3), (2, 3)
(3, 3), (2, 3), (1, 4)
semuanya ada 31 pasangan nilai atau 31 2 = 62 nilai.
Ukuran citra sebelum pemampatan (1 derajat keabuan = 3 bit) adalah 100 3 bit
= 300 bit, sedangkan ukuran citra setelah pemampatan (derajatk keabuan = 3 bit,
run length = = 4 bit):
(31 3) + (31 4) bit = 217 bit
Bab 10_Pemampatan Citra

163

217
100%) = 27.67% , yang artinya 27.67%
300
dari citra semula telah dimampatkan.

Nisbah pemampatan = (100%

Versi lain dari metode RLE adalah dengan menyatakan seluruh baris citra
menjadi sebuah baris run, lalu menghitung run-length untuk setiap derajat
keabuan yang berurutan. Sebagai contoh, tinjau sebuah citra sebagai berikut:
1
1
1
1

2
3
1
1

1
4
3
1

1
4
3
1

1
4
3
3

1
4
5
3

Nyatakan sebagai barisan nilai derajat keabuan:


1 2 1 1 1 1 1 3 4 4 4 4 1 1 3 3 3 5 1 1 1 1 3 3
semuanya ada 24 nilai.
Pasangan nilai dari run yang dihasilkan dengan metode pemampatan RLE:
(1, 1) (2, 1) (1, 5) (3, 1) (4, 4) (1, 2) (3, 3) (5, 1) (1, 4) (3, 2)
Hasil pengkodean:
1 1 2 1

1 5 3 1

1 2 3 3 5 1 1 4 3 2

semuanya ada 20 nilai. Jadi, kita sudah menghemat 4 buah nilai.


Metode RLE dapat dikombinasikan dengan metode Huffman untuk mengkodekan
nilai-nilai hasil pemampatan RLE guna meningkatkan nisbah pemampatan. Mulamula lakukan pemampatan RLE, lalu hasilnya dimampatkan lagi dengan metode
Huffman.

10.8 Metode Pemampatan Kuantisasi (Quantizing


Compression)
Metode ini mengurangi jumlah derajat keabuan, misalnya dari 256 menjadi 16,
yang tentu saja mengurangi jumlah bit yang dibutuhkan untuk merepresentasikan citra.
Misalkan P adalah jumlah pixel di dalam citra semula, akan dimampatkan
menjadi n derajat keabuan. Algoritmanya adalah sebagai berikut:
Algoritma metode kuantisasi:
1. Buat histogram citra semula (citra yang akan dimampatkan).
2. Identifikasi n buah kelompok di dalam histogram sedemikian sehingga setiap
kelompok mempunyai kira-kira P/n buah pixel.
164

Pengolahan Citra Digital

3. Nyatakan setiap kelompok dengan derajat keabuan 0 sampai n 1. Setiap


pixel di dalam kelompok dikodekan kembali dengan nilai derajat keabuan
yang baru.
Contoh 10.3. [LOW91] Tinjau citra yang berukuran 5 13 pixel:

2
3
3
3
2

9
8
8
9
0

6
5
4
4
4

4
4
7
7
3

8
7
4
2
8

2
6
9
7
9

6
3
2
6
5

3
8
3
2
4

8
2
8
1
7

5
8
2
6
1

9
4
7
5
2

3
7
4
3
8

7
3
9
0
3

yang akan dimampatkan menjadi citra dengan 4 derajat keabuan (0 s/d 3), jadi
setiap derajat keabuan direpresentasikan dengan 2 bit.
Histogram citra semula:
0
1
2
3
4
5
6
7
8
9

**
**
*********
***********
*********
****
*****
********
*********
******

Ada 65 pixel, dikelompokkan menjadi 4 kelompok derajat keabuan. Tiap


kelompok ada sebanyak rata-rata 65/4 = 16.25 pixel per kelompok:
-----------------------------------------------------0 **
13
1 **
0
2 *********
-----------------------------------------------------20
3 ***********
4 *********
1
----------------------------------------------------5 ****
17
6 *****
2
7 ********
----------------------------------------------------15
8 *********
3
9 ******
-----------------------------------------------------

Bab 10_Pemampatan Citra

165

Citra setelah dimampatkan menjadi:


0
1
1
1
0

3
3
3
3
0

2
2
1
1
1

1
1
2
2
1

3
2
1
0
3

0
2
3
2
3

2
1
0
2
2

1
3
1
0
1

3
0
3
0
2

2
3
0
2
0

3
1
2
2
0

1
2
1
1
3

2
1
3
0
0

Ukuran citra sebelum pemampatan (1 derajat keabuan = 4 bit):


65 4 bit = 260 bit
Ukuran citra setelah pemampatan (1 derajat keabuan = 2 bit):
65 2 bit = 130 bit
Nisbah pemampatan = (100%
semula telah dimampatkan.

130
100%) = 50% , yang artinya 50% dari citra
260

Kelemahan metode pemampatan kuantisasi adalah banyaknya informasi yang


hilang, tapi kehilangan informasi ini dapat diminimalkan dengan menjamin
bahwa tiap kelompok mempunyai jumlah pixel yang hampir sama.

10.9 Metode Pemampatan Fraktal


Metode pemampatan fraktal adalah metode yang relatif baru. Prinsipnya adalah
mencari bagian di dalam citra yang memiliki kemiripan dengan bagian lainya
namun ukurannya lebih besar (self similarity). Kemudian dicari matriks yang
mentransformasikan bagian yang lebih besar tersebut dengan bagian yang lebih
kecil. Kita cukup hanya menyimpan elemen-elemen dari sekumpulan matriks
transformasi tersebut (yang disebut matriks transformasi affine). Pada proses
penirmampatan, matriks ransformasi affine di-iterasi sejumlah kali terhadap
sembarang citra awal. Hasil iterasi akan konvergen ke citra semula. Metode ini
menghasilkan nisbah pemampatan yang tinggi namun waktu pemampatannya
relatif lama, sedangkan waktu penirmamoatannya berlangsung cepat. Metode
pemampatan fraktal akan dijelaskan secara panjang lebar di dalam Bab tersendiri
(Bab 14).

166

Pengolahan Citra Digital

Bab 11

Citra Biner

itra biner (binary image) adalah citra yang hanya mempunyai dua nilai
derajat keabuan: hitam dan putih. Meskipun saat ini citra berwarna lebih
disukai karena memberi kesan yang lebih kaya daripada citra biner, namun
tidak membuat citra biner mati. Pada beberapa aplikasi citra biner masih tetap
dibutuhkan, misalnya citra logo instansi (yang hanya terdiri atas warna hitam dan
putih), citra kode batang (bar code) yang tertera pada label barang, citra hasil
pemindaian dokumen teks, dan sebagainya. Bab 10 ini akan memaparkan beberapa
konsep dan teknik pengolahan citra biner.

11.1 Pendahuluan
Seperti yang sudah disebutkan di awal Bab, citra biner hanya mempunyai dua
nilai derajat keabuan: hitam dan putih. Pixel-pixel objek bernilai 1 dan pixel-pixel
latar belakang bernilai 0. Pada waktu menampilkan gambar, 0 adalah putih dan 1
adalah hitam. Jadi, pada citra biner, latar belakang berwarna putih sedangkan
objek berwarna hitam. Gambar 11.1 memperlihatkan beberapa contoh citra biner,
sedangkan Gambar 11.2 adalah contoh pengkodean citra biner.

(a) Citra logo

Bab 11_Citra Biner

(b) Citra lukisan mobil

167

23942

(c) Citra teks (hasil pemindaian


dokumen)

41480

(d) Citra kode batang (bar code)

Gambar 11.1 Beberapa contoh citra biner

Gambar 11.2 Huruf B dan representasi biner dari derajat keabuannya.

Meskipun komputer saat ini dapat memproses citra hitam-putih (greyscale)


maupun citra berwarna, namun citra biner masih tetap dipertahankan
keberadaannya. Alasan penggunaan citra biner adalah karena ia memiliki
sejumlah keuntungan sebagai berikut:
1. Kebutuhan memori kecil karena nilai derajat keabuan hanya membutuhkan
representasi 1 bit. Kebutuhan memori untuk citra biner masih dapat
berkurang secara berarti dengan metode pemampatan run-length encoding
(RLE). Metode RLE akan dijelaskan kemudian.
2. Waktu pemrosesan lebih cepat dibandingkan dengan citra hitam-putih karena
banyak operasi pada citra biner yang dilakukan sebagai operasi logika (AND,
OR, NOT, dll) ketimbang operasi aritmetika bilangan bulat.

168

Pengolahan Citra Digital

Aplikasi yang menggunakan citra biner sebagai masukan untuk pemrosesan


pengenalan objek, misalnya pengenalan karakter secara optik, analisis kromosom,
pengenalan sparepart komponen industri, dan sebagainya.

11.2 Konversi Citra hitam-putih ke Citra Biner


Pengkonversian citra hitam-putih (greyscale) menjadi citra biner dilakukan untuk
alasan-alasan sebagai berikut:
1. Untuk mengidentifikasi keberadaan objek, yang direpresentasikan sebagai
daerah (region) di dalam citra. Misalnya kita ingin memisahkan (segmentasi)
objek dari gambar latar belakangnya. Pixel-pixel objek dinyatakan dengan
nilai 1 sedangkan pixel lainnya dengan 0. Objek ditampilkan seperti gambar
siluet. Untuk memperoleh siluet yang bagus, objek harus dapat dipisahkan
dengan mudah dari gambar latar belakangnya.
2. Untuk lebih memfokuskan pada analisis bentuk morfologi, yang dalam hal
ini intensitas pixel tidak terlalu penting dibandingkan bentuknya. Setelah
objek dipisahkan dari latar belakangnya, properti geometri dan morfologi/
topologi objek dapat dihitung dari citra biner. Hal ini berguna untuk pengambilan
keputusan.
3. Untuk menampilkan citra pada piranti keluaran yang hanya mempunyai
resolusi intensitas satu bit, yaitu piranti penampil dua-aras atau biner seperti
pencetak (printer).
4. Mengkonversi citra yang telah ditingkatkan kualitas tepinya (edge enhancement)
ke penggambaran garis-garis tepi. Ini perlu untuk membedakan tepi yang
kuat yang berkoresponden dengan batas-batas objek dengan tepi lemah yang
berkoresponden dengan perubahan illumination, bayangan, dll.
Pengambangan
Konversi dari citra hitam-putih ke citra biner dilakukan dengan operasi
pengambangan (thresholding). Operasi pengambangan mengelompokkan nilai
derajat keabuan setiap pixel ke dalam 2 kelas, hitam dan putih.
Dua pendekatan yang digunakan dalam operasi pengambangan adalah pengambangan
secara global dan pengambangan secara lokal.
a. Pengambangan secara global (global image thresholding)
Setiap pixel di dalam citra dipetakan ke dua nilai, 1 atau 0 dengan fungsi
pengambangan:

1,
f B (i , j ) =
0,

Bab 11_Citra Biner

f g (i , j ) T
lainnya

(11.1)

169

yang dalam hal ini, fg(i, j) adalah citra hitam-putih, fB(i, j) adalah citra biner, dan
T adalah nilai ambang yang dispesifikasikan. Dengan operasi pengambangan
tersebut, objek dibuat berwarna gelap (1 atau hitam) sedangkan latar belakang
berwarna terang (0 atau putih).
Nilai ambang T dipilih sedemikian sehingga galat yang diperoleh sekecil mungkin.
Cara yang umum menentukan nilai T adalah dengan membuat histogram citra.
Jika citra mengandung satu buah objek dan latar belakang mempunyai nilai
intensitas yang homogen, maka citra tersebut umumnya mempunyai histogram
bimodal (mempunyai dua puncak atau dua buah maksimum lokal) seperti yang
ditunjukkan pada Gambar 11.3. Nilai T dipilih pada nilai minimum lokal yang
terdapat di antara dua puncak. Dengan cara seperti ini, kita tidak hanya mengkonversi
citra hitam-putih ke citra biner, tetapi sekaligus melakukan segmentasi objek dari
latar belakangnya.
Gambar 11.4 memperlihatkan segmentasi objek (botol dan apel) dari latar
belakangnya dengan cara mengkonversikan citra hitam-putihnya menjadi citra
biner dengan menggunakan nilai ambang T = 90 dan T = 100. Gambar 11.5
memperlihatkan konversi citra Lena menjadi citra biner dengan T = 128 dan T = 150.
P(r)

kelas 0

kelas 1

r
Gambar 11.3 Penentuan nilai ambang T

(a)
170

(b)
Pengolahan Citra Digital

(c)

(d)

Gambar 11.4 (a) Citra botol, (b) histogram, (c) T = 90, dan (d) T = 100

(a) Citra Lena

(c) T = 128

(b) Histogram citra Lena

(d) T = 150

Gambar 11.5 Operasi pengambangan pada citra Lena

Bab 11_Citra Biner

171

Jika nilai intensitas objek diketahui dalam selang [T1, T2], maka kita dapat
menggunakan fungsi pengambangan:
1, T1 f g (i, j ) T2
f B (i , j ) =
lainnya
0,

(11.2)

b. Pengambangan secara lokal adaptif (locally adaptive image thresholding)


Pengambangan secara global tidak selalu tepat untuk seluruh macam gambar.
Beberapa informasi penting di dalam gambar mungkin hilang karena pengambangan
global ini. Lagipula, tidak ada harga nilai ambang yang berlaku secara global
untuk seluruh daerah citra (misalnya pada citra kedokteran, citra pemandangan
alam, dsb).

Pengambangan secara lokal dilakukan terhadap daerah-daerah di dalam citra.


Dalam hal ini citra dipecah menjadi bagian-bagian kecil, kemudian proses
pengambangan dilakukan secara lokal. Nilai ambang untuk setiap bagian belum
tentu sama dengan bagian lain. Sebagai contoh, pengambangan dilakukan
terhadap daerah citra yang berukuran 3 3 atau 5 5 pixel. Nilai ambangnya
ditentukan sebagai fungsi rata-rata derajat keabuan di dalam dearah citra tersebut.
Intensitas pixel yang berbeda secara signifikan dari nilai rata-rata tersebut
dianggap mengandung informasi kontras dan ini harus dipertahankan di dalam
citra biner.
Dengan pengambangan secara lokal adaptif, secara subjektif citra biner yang
dihasilkan terlihat lebih menyenangkan dan sedikit informasi yang hilang.

11.3 Penapis Luas


Proses pengambangan menghasilkan citra biner. Seringkali citra biner yang
dihasilkan mengandung beberapa daerah yang dianggap sebagai gangguan.
Biasanya daerah gangguan itu berukuran kecil. Penapis luas dapat digunakan
untuk menghilangan daerah gangguan tersebut [JAI95]. Misalkan objek yang
dianalisis diketahui mempunyai luas yang lebih besar dari T. Maka, pixel-pixel
dari daerah yang luasnya di bawah T dinyatakan dengan 0. Dengan cara ini,
daerah yang berupa gangguan dapat dihilangkan (Gambar 11.6 dan 11.7).

172

Pengolahan Citra Digital

Gambar 11.6 Kiri: gangguan pada citra biner yang mengandung huruf i; Kanan: citra yang
dihasilkan setelah dilakukan penapisan (T = 10) [JAI95].

Gambar 11.7 Kesalahan yang diperoleh dari pengambilan nilai T0 yang tidak tepat (T = 25).
Perhatikan bahwa titik di atas huruf i hilang karena luasnya, sehingga huruf i terlihat seperti
angka 1 [JAI95].

11.4 Pengkodean Citra Biner


Citra biner umumnya dikodekan dengan metode run-length encoding (RLE).
Metode pengkodean ini menghasilkan representasi citra yang mampat.
Dua pendekatan yang digunakan dalam penerapan RLE pada citra biner:
a. Posisi awal kelompok nilai 1 dan panjangnya (length of runs)
b. Panjang run, dimulai dengan panjang run 1.

Bab 11_Citra Biner

173

Contoh 11.1. Misalkan citra binernya adalah sebagai berikut


1 1 1 0 0 0 1 1 0 0 0 1 1 1 1 0 1 1 0 1 1 1
0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1

Hasil pengkodean dengan metode RLE:


(i) pendekatan pertama:
(1, 3) (7, 2) (12, 4) (17, 2) (20, 3)
(5, 13) (19, 4)
(1, 3) (17, 6)
(ii) pendekatan kedua
3, 3, 2, 3, 4, 1, 2, 1, 3
0, 4, 13, 1, 4
3, 13, 6

11.5 Segmentasi Citra Biner


Proses awal yang dilakukan dalam menganalisis objek di dalam citra biner adalah
segmentasi objek. Proses segmentasi bertujuan mengelompokkan pixel-pixel
objek menjadi wilayah (region) yang merepresentasikan objek.
Ada dua pendekatan yang digunakan dalam segmentasi objek:
1. Segmentasi berdasarkan batas wilayah (tepi dari objek).
Pixel-pixel tepi ditelusuri sehingga rangkaian pixel yang menjadi batas
(boundary) antara objek dengan latar belakang dapat diketahui secara
keseluruhan (algoritma boundary following).
2. Segmentasi ke bentuk-bentuk dasar (misalnya segmentasi huruf menjadi
garis-garis vertikal dan horizontal, segmentasi objek menjadi bentuk lingkaran,
elips, dan sebagainya).
Kita hanya akan membahas pendekatan pertama.

174

Pengolahan Citra Digital

Segmentasi berdasarkan batas wilayah.


Pada citra biner, batas antara objek dengan latar belakang terlihat jelas. Pixel
objek berwarna hitam sedangkan pixel latar belakang berwarna putih. Pertemuan
antara pixel hitam dan putih dimodelkan sebagai segmen garis. Penelusuran batas
wilayah dianggap sebagai pembuatan rangkaian keputusan untuk bergerak lurus,
belok kiri, atau belok kanan seperti yang diperlihatkan pada Gambar 11.8.

Gambar 11.8 Proses penelusuran batas wilayah dalam citra biner [DUL97].

Pixel yang bertanda menyatakan pixel yang sedang ditelaah. Penelusur harus
menentukan arah pixel tepi berikutnya bergantung pada pixel-pixel sekitarnya.
Algoritma menentukan arah berikutnya:
if DepanTidakSama(arah,x,y) then
Belok kanan (arah,x,y)
else
if SilangSama(arah,x,y) then
Belok kiri (arah,x,y)
else
Lurus (arah,x,y)
endif
endif

Metode pendeteksian batas wilayah yang lain adalah pendeteksian secara


topologi. Pada metode topologi, setiap kelompok 4-pixel bertetangga diperiksa,
dan bila kelompok tersebut sama dengan salah satu bentuk pada Gambar 11.9,
maka pada titik tengah dari kelompok pixel tersebut terdapat tepi.

Bab 11_Citra Biner

175

Gambar 11.9 Bentuk-bentuk yang menghasilkan titik tepi [MEN89].

Titik tepi yang dideteksi selanjutnya dihubungkan oleh garis-garis penghubung.


Arah garis penghubung dikodekan dengan kode rantai (chain code).

11.6 Representasi Wilayah


Wilayah (region) di dalam citra biner dapat direpresentasikan dalam beberapa
cara. Salah satu cara yang populer adalah representasi wilayah dengan pohonempatan (quadtree). Setiap simpul di dalam pohon-empatan merupakan salah
satu dari tiga ketagori: putih, hitam, dan abu-abu. Pohon-empatan diperoleh
dengan membagi citra secara rekursif. Wilayah di dalam citra dibagi menjadi
empat buah upa-wilayah yang berukuran sama. Untuk setiap upa-wilayah, bila
pixel-pixel di dalam wilayah tersebut semuanya hitam atau semuanya putih, maka
proses pembagian dihentikan. Sebaliknya, bila pixel-pixel di dalam upa-wilayah
mengandung baik pixel hitam mapupun pixel putih (kategori abu-abu), maka upawilayah tersebut dibagi lagi mejadi empat bagian. Demikian seterusnya sampai
diperoleh upa-wilayah yang semua pixel-nya hitam atau semua pixel-nya putih.
Proses pembagian tersebut digambarkan dengan pohon-empatan. Dinamakan
pohon-empatan karena setiap simpul mempunyai tepat empat anak, kecuali
simpul daun. Gambar 10.10 memperlihatkan contoh representasi wilayah dengan
pohon empatan.

176

Pengolahan Citra Digital

H
F
I

M
I

Kode: gwgwbbwbgwwgwwgwwbbb
Di-decode sebagai: g(wg(wbbw)bg(wwg(wwbb)b))
Keterangan: b = black, w = white, g = gray

(a) Citra biner

(b) Pohon-empatan

Gambar 11.10 Representasi wilayah dengan pohon-empatan

11.7 Properti Geometri


Setelah proses segmentasi objek selesai dilakukan, maka proses berikutnya adalah
menganalisis objek untuk mengenali objek tersebut. Analisis objek didasarkan
pada ciri khas (feature) geometri pada objek tersebut. Kita asumsikan di dalam
citra biner hanya terdapat 1 buah objek.
Ada dua kelompok ciri khas pada objek [JAI95]:
a. Global feature, yaitu ciri khas keseluruhan objek.
b. Local feature, yaitu ciri khas bagian tertentu dari objek.
Besaran yang termasuk global feature:
(i) Luas atau ukuran objek (A)
A=

f (i, j )

(11.3)

i =1 j = 1

Catatan: f(i, j) = 1 jika (i, j) adalah pixel objek

Bab 11_Citra Biner

177

(ii) Pusat massa


Berguna untuk menentukan posisi objek.
n

x=

j. f (i, j )
i =1 j =1

y=

(11.4)

A
m

i. f (i, j )
i =1 j = 1

(11.5)

(iii) Momen inersia (M)


n

Mx =

i =1 j =1

A
n

My =

j . f (i, j )
m

(11.6)

i . f (i, j )
2

i =1 j =1

(11.7)

(iv) Keliling objek (K)


Menghitung panjang batas wilayah. Pixel dalam batas wilayah horizontal atau
vertikal dianggap satu satuan panjang, sedangkan pixel pada arah diagonal
panjangnya 2 satuan.
(v) Tinggi (T)
Dihitung dari jarak vertikal dari pixel tertinggi dan terendah dari objek. Jarak
antara pixel (i1, j1) dan pixel (i2, j2) dapat dihitung dengan bermacam-macam
rumus:
- Euclidean
d Euclidean = (i1 i2 ) 2 + ( j1 j2 ) 2
-

City-block

d city = i1 i2 + j1 j2

178

(11.8)

(11.9)

Pengolahan Citra Digital

Chessboard
d chess = max ( i1 i2 , j1 j2 )

(11.10)

(vi) Lebar (L)


Dihitung dari jarak horizontal dari pixel tertinggi dan terendah dari objek.
(vii) Diameter
Dihitung dari jarak paling jauh dari dua titik pada objek.
(viii) Kompleksitas bentuk
Menyatakan seberapa rumitnya suatu bentuk. Didefinisikan sebagai K2/A,
yang dalam hal ini K = keliling, A = luas.
(ix) Proyeksi
Menyatakan bentuk yang diperoleh dari hasil proyeksi objek terhadap garis
sumbu.
Proyeksi citra biner terhadap garis horizontal dan garis vertikal dihitung
dengan rumus:

H (i ) =

f (i , j )

(11.11)

j =1

V (i ) =

f (i , j )

(11.12)

i =1

Sedangkan besaran yang termasuk local feature antara lain:


(i) Arah dan panjang segmen garis lurus
Arah garis dinyatakan dengan kode Freeman, sedangkan panjang garis
dihitung sebagai jarak antara ujung-ujung garis.
(ii) Sudut antar garis
Menyatakan besar sudut antara dua garis lurus yang berpotongan.
(iii) Jarak relatif
Dihitung sebagai jarak antara dua titik.
(iv) Object signature
Menyatakan jarak dari pusat massa ke tepi suatu objek pada arah 0 sampai
360 derajat.

Bab 11_Citra Biner

179

11.8 Penipisan Pola


Pada aplikasi pencocokan pola, banyak bentuk terutama bentuk yang
mengulur/memanjang yang dapat dinyatakan dalam versi yang lebih tipis. Bentuk
yang lebih tipis terdiri dari garis-garis terhubung yang disebut rangka (skeleton)
atau tulang atau garis inti. Idealnya, rangka tersebut membentang sepanjang garis
sumbu objek.
Penipisan (thinning) adalah operasi pemrosesan citra biner yang dalam hal ini
objek (region) direduksi menjadi rangka yang menghampiri garis sumbu objek.
Tujuan penipisan adalah mengurangi bagian yang tidak perlu (redundant)
sehingga hanya dihasilkan informasi yang esensial saja. Pola hasil penipisan
harus tetap mempunyai bentuk yang menyerupai pola asalnya. Sebagai contoh,
Gambar 11.11 adalah huruf R dan hasil penipisan polanya menjadi rangka R.

(a) Huruf R

(b) Hasil penipisan huruf R

Gambar 11.11 Penpisan pola huruf R

Penipisan pola merupakan proses yang iteratif yang menghilangkan pixel-pixel


hitam (mengubahnya menjadi pixel putih) pada tepi-tepi pola. Jadi, algoritma
penipisan mengelupas pixel-pixel pinggir objek, yaitu pixel-pixel yang terdapat
pada peralihan 01. Algoritma penipisan pola harus memenuhi persyaratan
sebagai berikut [PIT93]:
1. Mempertahankan keterhubungan pixel-pixel objek pada setiap lelaran. Dengan
kata lain, tidak menyebabkan bentuk objek menjadi terputus (Gambar
11.12(a)).
2. Tidak memperpendek ujung lengan dari bentuk yang ditipiskan (Gambar
11.12(b)).

180

Pengolahan Citra Digital

(a)

(b)

p8

p1

p2

p7

p0

p3

p6

p5

p4

(c)

Gambar 11.12 (a) Penghapusan pixel pinggir menyebabkan ketidakterhubungan,


(b) penghapusan pixel pinggir memperpendek lengan objek,
(c) notasi pixel yang digunakan untuk memeriksa keterhubungan.

Algoritma penipisan yang umum adalah memeriksa pixel-pixel di dalam jendela


yang berukuran 3 3 pixel dan mengelupas satu pixel pada pinggiran (batas)
objek pada setiap lelaran, sampai objek berkurang menjadi garis tipis. Notasi
pixel di dalam jendela 3 3 diperlihatkan pada Gambar 11.12(c). Algoritma
bekerja secara iteratif, pada setiap lelaran dilakukan premrosesan pada jendela
yang berukuran 3 3 pixel.
Algoritmanya adalah sebagai berikut [PIT93]:
1. Mula-mula diperiksa jumlah pixel objek (yang bernilai 1), N, di dalam
jendela 3 3 pixel.
2. Jika N kurang atau sama dengan 2, tidak ada aksi yang dilakukan karena di
dalam jendela terdapat ujung lengan objek.
3. Jika N lebih besar dari 7, tidak ada aksi yang dilakukan karena dapat
menyebabkan pengikisan (erosion) objek.
4. Jika N lebih besar dari 2, periksa apakah penghilangan pixel tengah
menyebabkan objek tidak terhubung. Ini dilakukan dengan membentuk
barisan p1p2p3p8p1. Jika jumlah peralihan 0 1 di dalam barisan tersebut
sama dengan 1, berarti hanya terdapat satu komponen terhubung di dalam
jendela 3 3. Pada kasus ini, dibolehkan menghapus pixel tengah yang
bernilai 1 karena penghapusan tersebut tidak mempengaruhi keterhubungan.
Algoritma penipisan pola dalam bahasa C diperlihatkan pada Algoritma 11.1.
void penipisan(citra f, int N1, int M1, int N2, int M2)
/* Prosedur yang mengimplementasikan penipisan pola
Masukan :
f
: citra biner
N1, M1 : koordinat awal (sudut kiri atas)
N2, M2 : koordinat akhir (sudut kanan bawah)
Keluaran: citra bienrf
*/
{
int k, l, i, j, count=0, y[9], trans=0, m, OK=1

Bab 11_Citra Biner

181

do
{
OK=1;
for(k=N1+1;k<N2-1;k++)
for(l=M1+1;l<M2-1;l++)
if (f[k][l]==1)
{/* hitung jumlah 1 di dalam jendela 3 3 */
count=0;
for(i=-1;i<=1;i++)
for(j=-1;j<=1;j++)
if(f[k+i][j+l]==1) count++;
if((count>2)&&(count<8))
{ /* hitung jumlah peralihan 0->1 */
y[0]=f[k-1][l-11]; y[1]=f[k-1][l];y[2]=f[k-1][l+1];
y[3]=f[k][l+1];
y[4]=f[k+1]l+1];y[5]=f[k+1][l];
y[6]=f[k+1][l-1]; y[7]=f[k][l-1];y[8]=f[k-1][l-1];
trans=0;
for(m=0;m<=7;m++)
if (y[m]==0 && y[m+1]==1) trans++;
/* jika jumlah peralihan sama dengan 1, hapus pixel
yang sedang diacu (current) */
if (trans==1) {f[k][l]=0; OK=0;}
}
}
} while (OK=0);
}

Algoritma 11.1 Penipisan pola.

182

Pengolahan Citra Digital

Bab 12

Warna

ersepsi visual citra berwarna (color images) umumnya lebih kaya


dibandingkan dengan citra hitam putih (greyscale), karena itu citra
berwarna lebih disenangi daripada citra hitam putih. Citra berwarna
menampilkan warna objek seperti warna aslinya (meskipun tidak selalu tepat
demikian). Bab ini akan menguraikan konsep warna, model warna, dan
transformasi warna dari satu model ke model lainnya.

12.1 Dasar-dasar Warna


Warna yang diterima oleh mata dari sebuah objek ditentukan oleh warna sinar
yang dipantulkan oleh objek tersebut. Sebagai contoh, suatu objek berwarna hijau
karena objek tersebut memantulkan sinar biru dengan panjang gelombang 450
sampai 490 nanometer (nm).
Warna sinar yang direspon oleh mata adalah sinar tampak (visible spectrum)
dengan panjang gelombang berkisar dari 400 (biru) sampai 700 nm (merah).
Lihat Gambar 12.1.

10-5

10-1

Bab 12_Warna

10

400

700

2500 nm

1000 m
183

sinar sinar sinar


kosmik gamma X

ultra
violet

ultra violet

Infra
merah

micro TV radio
wave wave wave

sinar tampak

400 nm

electr.
power

infra merah

700 nm

Gambar 12.1 Spektrum cahaya

Warna-warna yang diterima oleh mata manusia merupakan hasil kombinasi


cahaya dengan panjang gelombang berbeda. Penelitian memperlihatkan bahwa
kombinasi warna yang memberikan rentang warna yang paling lebar adalah red
(R), green (G), dan blue (B). Ketiga warna tersebut dinamakan warna pokok
(primaries), dan sering disingkat sebagai warna dasar RGB. Warna-warna lain
dapat diperoleh dengan mencampurkan ketiga warna pokok tersebut dengan
perbandingan tertentu (meskipun tidak sepenuhnya benar, karena tidak semua
kemungkinan warna dapat dihasilkan dengan kombinasi RGB saja), sesuai
dengan teori Young (1802) yang menyatakan bahwa sembarang warna dapat
dihasilkan dari percampuran warna-warna pokok C1, C2, dan C3 dengan
persentase tertentu [PIT93]:
C = a C1 + b C2 + c C3

(12.1)

Bila citra warna didigitasi, maka tiga buah filter digunakan untuk mengekstraksi
intensitas warna merah, hijau, dan biru, dan bila ketiganya dikombinasikan kita
memperoleh persepsi warna.

12.2 Atribut Warna


Selain RGB, warna juga dapat dimodelkan berdasarkan atribut warnanya. Setiap
warna memiliki 3 buah atribut, yaitu intensity (I), hue (H), dan saturation (S).
a. Intensity/brigthness/luminance
Atribut yang menyatakan banyaknya cahaya yang diterima oleh mata tanpa
mempedulikan warna. Kisaran nilainya adalah antara gelap (hitam) dan
terang (putih).

184

Pengolahan Citra Digital

b. Hue
Menyatakan warna sebenarnya, seperti merah, violet, dan kuning. Hue
digunakan untuk membedakan warna-warna dan menentukan kemerahan
(redness), kehijauan (greenness), dsb, dari cahaya. Hue berasosiasi dengan
panjang gelombang cahaya, dan bila kita menyebut warna merah, violet, atau
kuning, kita sebenarnya menspesifikasikan hue-nya.
c. Saturation
Menyatakan tingkat kemurnian warna cahaya, yaitu mengindikasikan
seberapa banyak warna putih diberikan pada warna. Sebagai contoh, warna
merah adalah 100% warna jenuh (saturated color), sedangkan warna pink
adalah warna merah dengan tingkat kejenuhan sangat rendah (karena ada
warna putih di dalamnya). Jadi, jika hue menyatakan warna sebenarnya,
maka saturation menyatakan seberapa dalam warna tersebut.
Dalam praktek, hue dikuantisasi dengan nilai dari 0 sampai 255; 0 menyatakan
merah, lalu memutar nilai-nilai spektrum tersebut kembali lagi ke 0 untuk
menyatakan merah lagi. Ini dapat dipandang sebagai sudut dari 0 sampai 360.
Jika suatu warna mempunyai saturation = 0, maka warna tersebut tanpa hue,
yaitu dibuat dari warna putih saja. Jika saturation = 255, maka tidak ada warna
putih yang ditambahkan pada warna tersebut. Saturation dapat digambarkan
sebagai panjang garis dari titik pusat lingkaran ke titik warna.
Intensity nilainya dari gelap sampai terang (dalam praktek, gelap = 0, terang =
255). Intensity dapat digambarkan sebagai garis vertikal yang menembus pusat
lingkaran.
Ketiga atribut warna (I, H, dan S) digambarkan dalam model IHS (ada juga yang
menyebutnya model HSV, dengan V = Value = I) yang diperlihatkan pada
Gambar 12.2.
Terang
Biru

Titik warna
n
ratio
Satu

= hue

S
H
Merah

Hijau

Gelap
Gambar 12.2 Model IHS

Bab 12_Warna

185

12.3 Sistem Koordinat Warna


CIE (Commission International de lEclairage) atau International Lighting
Committee adalah lembaga yang membakukan warna pada tahun 1931. CIE
mula-mula menstandarkan panjang gelombang warna-warna pokok sebagai
berikut [MEN89]:
R
G
B

: 700 nm
: 546.1 nm
: 435.8 nm

Warna-warna lain dapat dihasilkan dengan mengkombinasikan ketiga warna


pokok tersebut. Model warna yang digunakan sebagai acuan dinamakan model
RGB.
RGB bukan satu-satunya warna pokok yang dapat digunakan untuk menghasilkan
kombinasi warna. Warna lain dapat juga digunakan sebagai warna pokok
(misalnya C = Cyan, M = Magenta, dan Y = Yellow).
Karena itu CIE mendefinisikan model warna dengan menggunakan warna-warna
fiktif (yaitu, warna yang secara fisik tidak dapat direalisasikan), yang
dilambangkan dengan X, Y, dan Z. Model warna tersebut dinamakan model XYZ.
Warna-warna dispesifikasikan dengan jumlah relatif warna pokok fiktif.
Keuntungan utama dari model ini adalah luminance atau brigntness sinyal
disediakan langsung oleh Y. Jadi, nilai Y memberikan citra greyscale dari citra
berwarnanya.
Kromatisitas (chromaticity of color) masing-masing warna pokok, menunjukkan
persentase relatif suatu warna pokok di antara warna pokok lainnya pada warna
yang diberikan, yang definisikan sebagai

x=

X
X +Y + Z

(12.2)

y=

Y
X +Y + Z

(12.3)

z=

Z
X +Y + Z

(12.4)

Warna putih acuan dinyatakan dengan X = Y = Z = 1. Jumlah seluruh nilai


kromatisitas warna adalah satu:
x+y+z=1

186

(12.5)

Pengolahan Citra Digital

atau
z = 1 (x + y)

(12.6)

Jelas hanya dua nilai x dan y yang dibutuhkan untuk menspesifikasikan kromatisitas
warna, karena jika x dan y diketahui, z dapat dihitung dengan persamaan 12.6.
Warna lebih tepat dinyatakan dengan kromatisitas x dan y dan luminansi Y.
Koordinat kromatisitas (12.2 dan 12.3) digunakan untuk menggambarkan diagram
kromatisitas pada Gambar 12.3.
Titik yang ditandai green pada diagram Gambar 12.3 memiliki kira-kira 62%
green dan 25% red. Ini sesuai dengan persamaan 12.6 bahwa kompisisi blue kirakira 13%. Posisi bermacam-macam spektrum warna, dari violet 380 nm sampai
red 780 nm dinyatakan pada sisi (boundary) diagram yang berbentuk setengah
elips. Ini adalah warna-warna pure. Titik yang tidak terletak pada sisi tetapi
masih di dalam diagram menyatakan campuran spektrum warna. Titik energi
setara (equal energy) berkoresponden dengan nilai fraksi yang sama dari ketiga
warna pokok X, Y, Z. Titik energi setara menyatakan bakuan CIE untuk cahaya
putih. Sembarang titik yang terletak pada sisi diagram dikatakan jenuh
(saturated). Semakin jauh titik-titik itu meninggalkan sisi dan mendekati titik
energi setara, itu berarti semakin banyak cahaya putih ditambahkan pada warna
dan ia menjadi kurang jenuh (less saturated). Kejenuhan titik energi setara adalah
nol.
Garis lurus yang menghubungkan dua titik di dalam diagram mendefinisikan
semua variasi warna berbeda yang dapat diperoleh dengan mengkombinasikan
dua warna ini. Sebagai contoh, garis lurus dari red ke green. Jika lebih banyak
cahaya red daripada green, maka titik warna baru terletak pada segmen garis,
tetapi ia akan lebih dekat ke red daripada ke green.

Bab 12_Warna

187

y
520

Spectral energy locus


(wavelength in nanometers)

0.9
540

0.8
510

0.7

green

560

0.6
gold
500

0.5

warm white

600

cool white

0.4

pink
daylight

0.3

620
red
780

490
deep blue

0.2
480

0.1

blue
Point of
equal energy

470
380

x
0.0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

Gambar 12.3 Diagram kromatisitas CIE

Hue dari warna tertentu diperoleh dengan menarik garis dari putih ke sisi elips
melalui warna tersebut. Misalkan digambar garis dari posisi W (putih) melalui
warna tertentu, P, ke sisi elips pada posisi H. Nilai hue adalah H, dan saturation
adalah panjang WP relatif terhadap WH. Warna P dapat dipandang sebagai
campuran warna putih dan hue:
P = SH + (1 S) W

(12.7)

yang dalam hal ini S mengendalikan perbandingan relatif warna putih dan hue.

188

Pengolahan Citra Digital

12.4 Transformasi Sistem Koordinat Warna


Transformasi warna dari basis CIE RGB ke CIE XYZ dapat dilakukan sebagai
berikut: Diberikan triplet RGB (Ri, Gi, Bi) untuk pixel i, maka triplet XYZ (Xi, Yi,
Zi) dihitung dengan

X i 0 .490 0 .310 0.200


Y = 0.177 0.813 0.011
i

Z i 0 .000 0 .010 0.99

Ri
G
i
Bi

(12.8)

Transformasi sebaliknya dari CIE XYZ ke CIE RGB dapat dilakukan dengan
persamaan

Ri 2.365 0.3896 0.468


G = 0.515 1 .425
0.088
i
Bi 0.005
0.014
1.009

Xi
Y
i
Z i

(12.9)

Algoritma transformasi citra dari model warna CIE RGB ke model warna CIE
XYZ diperlihatkan pada Algoritma 12.1, sedangkan algoritma transformasi
balikan dari model warna CIE XYZ ke model warna CIE RGB diperlihatkan pada
Algoritma 12.2 [PIT93]. Kedua algoritma tersebut mengasumsikan bahwa
komponen RGB disimpan masing-masing di dalam matriks r, g, dan b. Hasil
transformasi masing-masing disimpan di dalam matriks x, y, dan z. Ukuran citra
adalah N M.
int cieRGB_toXYZ(citra r, citra g, citra b,
citra x, citra y, citra z, int N, int M)
/* Transformasi citra dari model warna CIE RGB ke model CIE XYZ
Masukan: citra dengan kompoenen RGB masing-masing disimpan di dalam
matriks r, g, dan b. Ketga mtariks ini berukuran N M.
Keluaran: citra dengan komponen XYZ masing-masing disimpan di dalam
matriks x, y, dan z.
*/
{
int i, j; double R, G, B; double X, Y, Z;
for (i=0; i<=N-1; i++)
for (j=0; j<=M-1; j++)
{
R = (double)r[i][j]; G=(double)g[i][j]; B=(double)b[i][j];
X = 0.490*R+0.310*G+0.200*B;
Y = 0.177*R+0.813*G+0.011*B;
Z = 0.010*G+0.990*B;
if (X > 255.0) x[i][j]=255; else x[i][j]=(unsigned char)X;
if (Y > 255.0) y[i][j]=255; else y[i][j]=(unsigned char)Y;
if (Z > 255.0) z[i][j]=255; else z[i][j]=(unsigned char)ZX;
}
}
Algoritma 12.1 Transformasi citra dari model warna CIE RGB ke model CIE XYZ

Bab 12_Warna

189

int XYZ_to_cieRGB(citra x, citra y, citra z,


citra r, citra g, citra b, int N, int M)
/* Transformasi citra dari model warna CIE XYZ ke model CIE RGB
Masukan: citra dengan komponen XYZ masing-masing disimpan di dalam
matriks x, y, dan z. Ketga mtariks ini berukuran N M.
Keluaran: citra dengan komponen RGB masing-masing disimpan di dalam
matriks r, g, dan b.
*/
{
int i, j; double R, G, B; double X, Y, Z;
for (i=0; i<=N-1; i++)
for (j=0; j<=M-1; j++)
{ X = (double)x[i][j]; Y =(double)y[i][j]; Z =(double)z[i][j];
R = 2.365*X-0.896*Y-0.468*Z;
G = -0.515*X+1.425*Y+0.088*Z;
B = 0.005*X-0.014*Y+1.009*Z;
if (R > 255.0) r[i][j]=255;
else if (R<0.0) r[i][j]=0;
else r[i][j]=(unsigned char)R;
if (G > 255.0) g[i][j]=255;
else if (G<0.0) g[i][j]=0;
else g[i][j]=(unsigned char)G;
if (B > 255.0) b[i][j]=255;
else if (B<0.0) b[i][j]=0;
else b[i][j]=(unsigned char)B;
}

Algoritma 12.2 Transformasi citra dari model warna CIE XYZ ke model CIE RGB

Model warna RGB dan XYZ yang dikemukakan di atas adalah bakuan dari CIE.
Ada juga model warna yang diusulkan untuk platform perangkat keras tertentu
untuk menampilkan gambar. Misalnya National Television Systems Committee
(NTSC) menggunakan model warna RGB khusus untuk menampilkan citra
berwarna pada layar CRT. Format NTSC digunakan pada televisi di Amerika
Serikat. Salah satu keuntungan utama dari format ini adalah data greyscale
dipisahkan dari data warnanya, sehingga sinyal yang sama dapat digunakan baik
untuk layar berwarna maupun layar hitam putih.
Pada format NTSC, data citra terdiri atas tiga komponen, yaitu luminance (Y), hue
(I), dan saturation (Q). Komponen pertama, yaitu Y menyatakan data greyscale,
sedangkan dua komponen terakhir membentuk chrominance. Jika dib erikan
triplet NTSC RGB (Ri, Gi, Bi) untuk pixel i, maka nilai YIQ untuk pixel yang
bersangkutan dihitung dengan

0 .114
Yi 0.299 0.857
I = 0.596 0.274 0.322
i

Qi 0.211 0.523 0 .312

190

Ri
G
i
Bi

(12.10)

Pengolahan Citra Digital

Nilai NTSC RGB semula dapat dihitung dengan menggunakan transformasi


balikan:

0.621
Ri 1.000 0 .956
G = 1.000 0 .273 0.647
i

Bi 1.000 1 .104 1.701

Yi
I
i
Qi

(12.11)

Transformasi dari NTSC RGB ke CIE RGB dihitung dengan persamaan:

Ri 1.167 0.146 0 .151


G = 0.114
0.753
0.159
i
1.128
Bi 0.001 0.059

R _ NTSCi
G _ NTSC
i

B _ NTSCi

(12.12)

Sistem NTSC RGB dapat ditransformasikan ke sistem CIE XYZ dengan persamaan:

X i 0 .607 0.174 0.201


Y = 0 .299 0.587 0.114
i

Z i 0.000 0.066 1.117

R _ NTSCi
G _ NTSC
i

B _ NTSCi

(12.13)

sedangkan transformasi dari CIE XYZ ke NTSC RGB dihitung dengan persamaan:

R _ NTSCi 1 .910 0.533 0.288


G _ NTSC = 0.985 2.000 0.028
i

B _ NTSCi 0.058 0.118 0.896

X i
Y
i
Z i

(12.14)

12.5 Model Warna CMY dan CMYK


Warna cyan (C) , magenta (M), dan yellow (Y) adalah warna komplementer
terhadap red, green, dan blue. Dua buah warna disebut komplementer jika
dicampur dengan perbandingan yang tepat menghasilkan warna putih. Misalnya,
magenta jika dicampur dengan perbandingan yang tepat dengan green
menghasilkan putih, karena itu magenta adalah komplemen dari dari green.
Model CMY dapat diperoleh dari model RGB dengan perhitungan berikut:
C=1R
M=1G
Y=1B

(12.15)
(12.16)
(12.17)

Model CMY dapat digunakan untuk mencetak citra berwarna, tetapi karena
ketidaksempurnaan tinta, model CMY tidak dapat menghasilkan warna hitam

Bab 12_Warna

191

dengan baik. Karena itu, model CMY disempurnakan menjadi model CMYK, yang
dalam hal ini K menyatakan warna keempat, dengan perhitungan sebagai berikut
[PIT93]:
K = min(C, M, Y)
C=CK
M=MK
Y=YK

(12.18)
(12.19)
(12.20)
(12.21)

Algoritma transformasi citra dari model RGB ke model CMYK ditunjukkan pada
Algoritma 12.3, sedangkan algoritma transformasi balikan dari model CMYK ke
model RGB ditunjukkan pada Algoritma 12.4 [PIT93]. Kedua algoritma tersebut
mengasumsikan komponen RGB disimpan masing-masing di dalam matriks r, g,
dan b. Hasil transformasi masing-masing disimpan di dalam matriks c, m, y dan
k. Ukuran citra adalah N M.
int RGB_toCMYK(citra r, citra g, citra b,
citra c, citra m, citra y, citra k,
int N, int M)
/* Transformasi citra dari model warna RGB ke model CMYK.
Masukan: citra dengan komponen RGB masing-masing disimpan di dalam
matriks r, g, dan b. Ketga mtariks ini berukuran N M.
Keluaran: citra dengan komponen CMYK masing-masing disimpan di dalam
matriks c, y, m, dan k.
*/
{
int i, j;
for (i=0; i<=N-1; i++)
for (j=0; j<=M-1; j++)
{
c[i][j]=(unsigned char)255 r[i][j];
m[i][j]=(unsigned char)255 g[i][j];
y[i][j]=(unsigned char)255 b[i][j];
k[i][j]=c[i][j];
if (m[i][j]<k[i][j]) k[i][j]=m[i][j];
if (y[i][j]<k[i][j]) k[i][j]=y[i][j];
c[i][j]=c[i][j]-k[i][j];
m[i][j]=m[i][j]-k[i][j];
y[i][j]=y[i][j]-k[i][j];
}
}

Algoritma 12.3 Transformasi citra dari model warna RGB ke model CMYK.

192

Pengolahan Citra Digital

int CMYKtoRGB(citra c, citra y, citra m, citra k,


citra r, citra g, citra b,
int N, int M)
/* Transformasi citra dari model warna CMYK ke model RGB.
Masukan: citra dengan komponen CMYK masing-masing disimpan di dalam
matriks c, y, m, dan k. Ketga mtariks ini berukuran N M.
Keluaran: citra dengan komponen RGB masing-masing disimpan di dalam
matriks r, g, dan b.
*/
{
int i, j;
for (i=0; i<=N-1; i++)
for (j=0; j<=M-1; j++)
{ c[i][j]=c[i][j]+k[i][j];
m[i][j]=m[i][j]+k[i][j];
y[i][j]=y[i][j]+k[i][j];
k[i][j]=c[i][j];
r[i][j]=(unsigned char)255 c[i][j];
g[i][j]=(unsigned char)255 m[i][j];
b[i][j]=(unsigned char)255 y[i][j];
}
}

Algoritma 12.4 Transformasi citra dari model warna CMYK ke model RGB

17.6 Transformasi Warna RGB ke IHS


Meskipun basis RGB bagus untuk menampilkan informasi warna, tetapi ia tidak
cocok untuk beberapa aplikasi pemrosesan citra. Pada aplikasi pengenalan objek,
lebih mudah mengidentifikasi objek dengan perbedaan hue-nya dengan cara
memberikan nilai ambang pada rentang nilai-nilai hue (panjang helombang
spektrum) yang melingkupi objek. Masalahnya, bagaimana melakukan pengambangan
pada ruang warna RGB dan apa rumus untuk mengaplikasikannya? Masalah ini
lebih mudah dipecahkan bila nilai RGB dikonversi ke nilai intensity (I), hue (H),
dan saturation (S).
Aplikasi yang lain misalnya dalam pemampatan citra. Melakukan pemampatan
secara terpisah pada setiap nilai R, G, dan B tidak disarankan, karena data yang
dimampatkan 3 kali lebih banyak dan waktu pemampatannya 3 kali lebih lama
daripada waktu pemampatan citra skala-abunya. Pemampatan citra berwarna
lebih relevan bila warna RGB-nya dikonversikan ke IHS karena algoritma
pemampatan pada citra skala-abu dilakukan pada komponen I, sedangkan nilai H
dan S dikodekan dengan cara yang lain dengan sedikit atau sama sekali tidak ada
degradasi.

Bab 12_Warna

193

Model warna IHS merepresentasikan warna dalam terminologi intensity, hue, dan
saturation. Dari diagram kromatisitas, buatlah segitiga yang menghubungkan tiga
warna pokok red, green, blue (Gambar 12.4). Titik-titik pada segitiga menyatakan
warna yang dihasilkan dari pencampuran warna titik sudut, sedangkan titik-titik
di dalam segitiga menyatakan warna yang dapat dihasilkan dengan
mengkombinasikan tiga warna titik sudut. Titik tengah segitiga menyatakan
warna putih, yaitu pencampuran warna pokok dengan fraksi yang sama.

H
S
R

G
Gambar 12.4 Segitiga HIS

Komponen RGB dari citra berwarna dapat dikonversikan ke model warna IHS.
Dengan mengasumsikan komponen RGB telah dinormalisasikan ke 1, maka I
dihitung dengan rumus:

1
I = (R + G + B)
3

(12.22)

Persamaan 12.22 di atas sering digunakan untuk mengubah citra berwarna


menjadi citra skala -abu.
H dihitung dengan rumus:

H = cos 1

194

2R G B
2 ( R G ) 2 + ( R B )(G B )

(12.23)

Pengolahan Citra Digital

Nilai S dihitung dengan rumus:

S = 1

3
min( R, G , B )
R+G+ B

(12.24)

Alternatif lain mengubah model RGB ke model IHS adalah sebagai berikut.
Konversi dari model RGB ke model IHS dilakukan dalam dua tahap. Tahap
pertama adalah merotasikan koordinat RGB ke sistem koordinat (I, V1, V2) dengan
transformasi:

3 /3
I 3/3
V = 0
1/ 2
1

V2 2 / 6 1 / 6

3 /3

1/ 2
1 / 6

R
G

B

(12.25)

Langkah kedua adalah menghitung H dan S dari koordinat (V1, V2):


H = tan-1(V2/V1)

(12.26)

S = (V12 + V22)1/2

(12.27)

Nilai H adalah dalam selang [0,2] atau setara dengan [0, 360].
Transformasi dari model IHS ke model RGB dapat dilakukan dengan prosedur
balikan:
V1 = S cos(H)

(12.28)

V2 = S sin(H)

(12.29)

0
R 3 / 3
G =
3 / 3 1/ 2
B 3 / 3 1 / 2

2/ 6 I

1 / 6 V1
1 / 6 V2

(12.30)

Dengan transformasi RGB ke IHS, maka algoritma pemrosesan citra yang semula
untuk citra skala-abu dapat diterapkan pada komponen intensity, sedangkan
algoritma segmentasi citra dapat dilakukan pada komponen H.

Bab 12_Warna

195

Transformasi citra dari basis RGB ke basis IHS dilakukan sebelum pemrosesan
citra. Citra yang sudah diproses dapat dikonversikan kembali ke basis RGB untuk
tujuan display.
National Television Systems Committee (NTSC) menggunakan model YIQ untuk
mentransformasikan model RGB ke IHS, yang dalam hal ini Y menyatakan
intensity, I menyatakan hue, dan Q menyatakan saturation [PIT93].

196

Pengolahan Citra Digital

Bab 13

Steganografi dan Watermarking pada


Citra Digital

teganografi (steganography) adalah teknik menyembunyikan data rahasia di


dalam wadah (media) digital sehingga keberadaan data rahasia tersebut tidak
diketahui oleh orang. Steganografi membutuhkan dua properti: wadah
penampung dan data rahasia yang akan disembunyikan. Steganografi digital
menggunakan media digital sebagai wadah penampung, misalnya citra, suara
(audio), teks, dan video. Data rahasia yang disembunyikan juga dapat berupa
citra, suara, teks, atau video.
Penggunaan steganografi antara lain bertujuan untuk menyamarkan eksistensi
(keberadaan) data rahasia sehingga sulit dideteksi, dan melindungi hak cipta suatu
produk. Steganografi dapat dipandang sebagai kelanjutan kriptografi. Jika pada
kriptografi, data yang telah disandikan (ciphertext) tetap tersedia, maka dengan
steganografi cipherteks dapat disembunyikan sehingga pihak ketiga tidak mengetahui
keberadaannya. Data rahasia yang disembunyikan dapat diekstraksi kembali persis
sama seperti keadaan aslinya.
Bab ini akan memaparkan steganografi dan watermarking pada citra digital.
Watermarking adalah aplikasi dari steganografi, di mana citra digital diberi suatu
penanda yang menunjukkan label kepemilikan citra tersebut. Sebagian besar dari
materi bab ini dikutip dari [POL98].

Bab 13_Steganografi dan Watermarking pada Citra Digital

197

13.1 Sejarah Steganografi


Steganografi sudah dikenal oleh bangsa Yunani. Penguasa Yunani dalam
mengirimkan pesan rahasia menggunakan kepala budak atau prajurit sebagai
media. Dalam hal ini, rambut budak dibotaki, lalu pesan rahasia ditulis pada kulit
kepala budak. Ketika rambut budak tumbuh, budak tersebut diutus untuk
membawa pesan rahasia di kepalanya.
Bangsa Romawi mengenal steganografi dengan menggunakan tinta tak-tampak
(invisible ink) untuk menuliskan pesan. Tinta tersebut dibuat dari campuran sari
buah, susu, dan cuka. Jika tinta digunakan untuk menulis maka tulisannya tidak
tampak. Tulisan di atas kertas dapat dibaca dengan cara memanaskan kertas
tersebut.
Sebagai contoh ilustrasi, Gambar 13.1.a adalah citra lada (peppers.bmp) yang
akan digunakan untuk menyembunyikan sebuah dokumen teks (Gambar 13.1.b)
yang berukuran 20 KB). Perhatikanlah citra lada sebelum penyembuan data
(13.1.a) dan citra setelah disisipi data teks (13.1.c). Citra lada tetap kelihatan
mulus, seolah-olah tidak pernah disisipi data sebelumnya. Sebenarnya tidaklah
demikian, gambar lada tersebut mengalami sedikit perubahan akibat steganografi,
namun mata manusia mempunyai sifat kurang peka terhadap perubahan kecil ini,
sehingga manusia sukar membedakan mana gambar yang asli dan mana gambar
yang sudah disisipi data.

198

Pengolahan Citra Digital

LETTER OF RECOMMENDATION
To Whom It May Concern,
Herewith I highly recommend Mr. R. Hendro
Wicaksono continue his postgraduate study at
your university. My recommendation is based
on my experience as his lecturer in several
courses for the past four years.
He has shown me his excellent attitude and
personality. He is a hard working person and he
has a lot of creative ideas. He is also a very
intelligent student and he cooperates very well
with his peers whenever they had to work
together.
During his study, he showed diligence and
eagerness to achieve his goal. He sets very high
standard for himself and organizes himself very
well to achieve the standard. I am confident that
if he can maintain his goal work, he should be
able to complete the postgraduate program well
within the stipulated time.

(a) Citra peppers asli

I am sure that his abilities and his personal


qualities along with his academic capabilities
will help his to obtain his Masters degree at
your university, which will be very useful for
our country.
Bandung, November 15, 2002
Yours Sincerely,
Ir. Rinaldi Munir, M.Sc.
Senior Lecturer
Informatics Engineering Department,
Institute Technology of Bandung (ITB)
Jl. Ganesha No. 10, Bandung 40132
Email : rinaldi@informatika.org
Phone +62-22-2508135
Indonesia

(b) Dokumen hendro.doc yang akan


disembunyikan ke daalm citra lada

(c) Citra peppers setelah diisi dengan data teks hendro.doc


Gambar 13.1 Contoh penyembunyian data di dalam citra digital

Bab 13_Steganografi dan Watermarking pada Citra Digital

199

13.2 Kriteria Steganografi yang Bagus


Seperti sudah disebutkan pada bagian awal bab, data yang disembunyikan tidak
hanya berupa teks, tetapi juga berupa citra, audio, atau video. Selain citra digita,
media penampung data rahasia juga bisa berupa teks, audio, atau video. Namun di
sini kita membatasi media penampung hanya citra digital saja.
Penyembunyian data rahasia ke dalam citra digital akan mengubah kualitas citra
tersebut. Kriteria yang harus diperhatikan dalam penyembunyian data adalah:
1. Fidelity. Mutu citra penampung tidak jauh berubah. Setelah penambahan data
rahasia, citra hasil steganografi masih terlihat dengan baik. Pengamat tidak
mengetahui kalau di dalam citra tersebut terdapat data rahasia.
2. Robustness. Data yang disembunyikan harus tahan (robust) terhadap berbagai
operasi manipulasi yang dilakukan pada citra penampung, seperti pengubahan
kontras, penajaman, pemampatan, rotasi, perbesaran gambar, pemotongan
(cropping), enkripsi, dan sebagainya. Bila pada citra penampung dilakukan
operasi-operasi pengolahan citra tersebut, maka data yang disembunyikan
seharusnya tidak rusak (tetap valid jika diekstraksi kembali)
3. Recovery. Data yang disembunyikan harus dapat diungkapkan kembali
(reveal). Karena tujuan steganografi adalah data hiding, maka sewaktu-waktu
data rahasia di dalam citra penampung harus dapat diambil kembali untuk
digunakan lebih lanjut.

13.3 Teknik Penyembunyian Data


Penyembunyian data dilakukan dengan mengganti bit-bit data di dalam segmen
citra dengan bit-bit data rahasia. Hingga saat ini sudah banyak dikemukakan oleh
para ilmuwan metode-metode penyembunyian data. Metode yang paling
sederhana adalah metode modifikasi LSB (Least Significant Bit Modification).
Pada susunan bit di dalam sebuah byte (1 byte = 8 bit), ada bit yang paling berarti
(most significant bit atau MSB) dan bit yang paling kurang berarti (least
significant bit atau LSB). Sebagai ilustrasi, di bawah ini dijelaskan metode
modifikasi LSB untuk menyisipkan watermark pada citra (gambar) digital.
Misalnya pada byte 11010010, bit 1 yang pertama (digarisbawahi) adalah bit
MSB dan bit 0 yang terakhir (digarisbawahi) adalah bit LSB. Bit yang cocok
untuk diganti adalah bit LSB, sebab penggantian hanya mengubah nilai byte
tersebut satu lebih tinggi atau satu lebih rendah dari nilai sebelumnya. Misalkan
byte tersebut di dalam gambar menyatakan warna tertentu, maka perubahan satu
bit LSB tidak mengubah warna tersebut secara berarti. Lagi pula, dan ini
keuntungan yang dimanfaatkan, mata manusia tidak dapat membedakan perubahan
yang kecil.
200

Pengolahan Citra Digital

Misalkan segmen pixel-pixel citra sebelum penambahan bit-bit watermark adalah


00110011

10100010

11100010

01101111

Misalkan data rahasia (yang telah dikonversi ke sistem biner) adalah 0111. Setiap
bit dari watermark menggantikan posisi LSB dari segmen data citra menjadi:
00110010

10100011

11100011

01101111

Untuk memperkuat penyembunyian data, bit-bit data tidak digunakan untuk


mengganti byte-byte yang berurutan, namun dipilih susunan byte secara acak.
Misalnya jika terdapat 50 byte dan 6 bit data yang akan disembunyikan, maka
byte yang diganti bit LSB-nya dipilih secara acak, misalkan byte nomor 36, 5, 21,
10, 18, 49.
Bilangan acak dibangkitkan dengan pseudo-random-number-generator (PRNG).
PRNG menggunakan kunci rahasia untuk membangkitkan posisi pixel yang akan
digunakan untuk menyembunyikan bit-bit. PRNG dibagun dalams ejumlah cara,
salah satunya dengan menggunakan algoritma kriptografi DES (Data Encryption
Standard), algoritma hash MD5, dan mode kriptografi CFB (Chiper-Feedback
Mode). Tujuan dari enkripsi adalah menghasilkan sekumpulan bilangan acak
yang sama untuk setiap kunci enkripsi yang sama. Bilangan acak dihasilkan
dengan cara memilih bit-bit dari sebuah blok data hasil enkripsi.
Teknik penyembunyian data untuk citra 8-bit berbeda dengan citra 24-bit. Seperti
sudah dijelaskan di dalam Bab 3, berkas citra bitmap terdiri atas bagian header,
palet RGB, dan data bitmap.
Pada citra 8-bit, setiap elemen data bitmap menyatakan indeks dari peta warnanya
di palet RGB. Pada citra 24-bit, tidak terdapat palet RGB, karena nilai RGB
langsung diuraikan dalam data bitmap. Setiap elemen data bitmap panjangnya 3
byte, masing-masing byte menyatakan komponen R, G, dan B.

Teknik Penggantian Bit pada Citra bukan 24-bit.


Sebelum melakukan penggantian bit LSB, semua data citra yang bukan tipe 24-bit
diubah menjadi format 24-bit. Jadi, setiap data pixel sudah mengandung
komponen RGB. Setiap byte di dalam data bitmap diganti satu bit LSB-nya
dengan bit data yang akan disembunyikan. Jika byte tersebut merupakan
komponen hijau (G), maka penggantian 1 bit LSB-nya hanya mengubah sedikit
kadar warna hijau, dan perubahan ini tidak terdeteksi oleh mata manusia.

Bab 13_Steganografi dan Watermarking pada Citra Digital

201

Teknik Penggantian Bit pada Citra 24-bit.


Karena data bitmap pada citra 24-bit sudah tersusun atas komponen RGB, maka
tidak perlu dilakukan perubahan format. Setiap byte di dalam data bitmap diganti
satu bit LSB-nya dengan bit data yang akan disembunyikan.
Perubahan Jumlah Warna
Pada citra 8-bit, jumlah warna terbatas, hanya 256 warna. Pengubahan format
citra 8-bit menjadi 24-bit akan menghasilkan warna baru (yang semula tidak
terdapat di dalam palet RGB). Setiap elemen RGB pada tabel palet berpotensi
menjadi 8 warna berbeda setekah proses penggantian bit LSB. Hal ini karena
setiap data bitmap terdiri atas 3 byte, maka tersedia 3 bit LSB untuk penggantian.
Penggantian 3 bit LSB menghasilkan 23 = 8 kombinasi warna. Dengan demikian,
steganografi pada citra 256 warna berpotensi menghasilkan 256 8 = 2048
warna.
Untuk menghindari kelebihan warna dari 256, maka sebelum proses
penyembunyian data, warna citra 8-bit diturunkan terlebih dahulu menjadi 32
warna (jika jumlah warnanya kurang dari 32, tidak perlu dilakukan penurunan
warna). Dengan demikian, jika setiap warna menghasilkan 8 warna baru, jumlah
warna seluruhnya maksimum 32 8 = 256 warna.
Penurunan jumlah warna dilakukan dengan cara kuantisasi warna (color
quantization). Penurunan jumlah warna harus tetap menghasilkan citra yang
tampak persis seperti citra semula. Algoritma kuantisasi warna ada beberapa
buah, antara lain algoritma diversity. Prinsip algoritma diversity adalah
memaksimumkan perbedaan warna.
Algoritma Diversity:
1. Buat histogram citra. Warna yang frekuensi kemunculannya 0 dibuang karena
tidak akan digunakan.
2. Pilih warna dengan frekuensi kemunculan tertinggi sebagai warna patokan.
Masukkan warna ini ke dalam senarai warna terpilih.
3. Cari warna yang mempunyai perbedaan terjauh dengan warna patokan.
Masukkan warna tersebut ke dalam senarai warna terpilih. Perbedaan dua
buah warna dihitung dengan rumus jarak Euclidean:
d = { (r1 r2)2 + (g1 g2)2 + (b1 b2)2 }1/2
yang dalam hal ini, r1, g1, dan b1 adalah komponen RGB dari warna pertama,
dan r2, g2, dan b2 adalah komponen RGB dari warna kedua.
4. Untuk setiap warna yang tersisa di dalam list, hitung jaraknya dari masingmasing warna di dalam senarai warna terpilih. Ambil warna yang paling jauh
berbeda dengan warna yang sudah dipilih. Lakukan langkah 4 ini berulang
kali sampai k warna sudah terpilih.
202

Pengolahan Citra Digital

13.4 Ukuran Data Yang Disembunyikan


Ukuran data yang akan disembunyikan bergantung pada ukuran citra penampung.
Pada citra 8-bit yang berukuran 256 256 pixel terdapat 65536 pixel, setiap pixel
berukuran 1 byte. Setelah diubah menajdi citra 24-bit, ukuran data bitmap
menjadi 65536 3 = 196608 byte. Karena setiap byte hanya bisa
menyembunyikan satu bit di LSB-nya, maka ukuran data yang akan
disembunyikan di dalam citra maksimum 196608/8 = 24576 byte. Ukuran data ini
harus dikurangi dengan panjang nama berkas, karena penyembunyian data
rahasia tidak hanya menyembunyikan isi data tersebut, tetapi juga nama
berkasnya.
Semakin besar data disembunyikan di dalam citra, semakin besar pula
kemungkinan data tersebut rusak akibat manipulasi pada citra penampung.

13.5 Teknik Pengungkapan Data


Data yang disembunyikan di dalam citra dapat dibaca kembali dengan cara
pengungkapan (reveal atau extraction). Posisi byte yang menyimpan bit data
dapat diketahui dari bilangan acak yang dibangkitkan oleh PRNG. Karena
algoritma kriptografi yang digunakan menggunakan kunci pada proses enkripsi,
maka kunci yang sama digunakan untuk membangkitkan bilangan acak. Bilangan
acak yang dihasilkan sama dengan bilangan acak yang dipakai pada waktu
penyembunyian data. Dengan demikian, bit-bit data rahasia yang bertaburan di
dalam citra dapat dikumpulkan kembali.
Di bawah ini ditampilkan contoh steganografi yang diambil dari program Tugas
Akhir Lazarus Poli [POL98] yang diberi nama DATAhide. Untuk setiap contoh,
digunakan kunci yang sama: informatika. Tampilan awal program diperlihatkan
pada Gambar 13.2. Upa-menu yang ada pada menu Operasi adalah Penyembunyian
data dan Pengungkapan data.

Bab 13_Steganografi dan Watermarking pada Citra Digital

203

Gambar 13.2 Tampilan awal program DATAhide [POL98].

Contoh-contoh Hasil Steganografi


1. Citra penampung: citra 24 bit (berwarna)
Data yang disembunyikan: citra berwarna
(a) Penampung: citra peppers.bmp
(512 512 pixel, 769 KB)

204

(b) Data yang disembunyikan: citra


handshak.bmp (44 KB)

Pengolahan Citra Digital

(c) Hasil penyembunyian data


(peppers.bmp + handshak.bmp):

(d) Berkas handshak-stega.bmp (44


KB) hasil pengungkapan:

Gambar 13.4 Penyembunyian citra handshaking ke dalam citra berwarna 24 bit (peppers.bmp)

2. Citra penampung: citra 24 bit (berwarna)


Data yang disembunyikan: teks
(a) Penampung: citra peppers.bmp (512
512 pixel, 769 KB)

(b) Data yang disembunyikan:


hendro.doc (20 KB)
LETTER OF RECOMMENDATION
To Whom It May Concern,
Herewith I highly recommend Mr. R. Hendro
Wicaksono continue his postgraduate study at
your university. My recommendation is based
on my experience as his lecturer in several
courses for the past four years.
He has shown me his excellent attitude and
personality. He is a hard working person and he
has a lot of creative ideas. He is also a very
intelligent student and he cooperates very well
with his peers whenever they had to work
together.
During his study, he showed diligence and
eagerness to achieve his goal. He sets very high
standard for himself and organizes himself very
well to achieve the standard. I am confident
that if he can maintain his goal work, he should
be able to complete the postgraduate program
well within the stipulated time.
I am sure that his abilities and his personal
qualities along with his academic capabilities
will help his to obtain his Masters degree at
your university, which will be very useful for
our country.

Bab 13_Steganografi dan Watermarking pada Citra Digital

205

Bandung, November 15, 2002


Yours Sincerely,
Ir. Rinaldi Munir, M.Sc.
Senior Lecturer
Informatics Engineering Department,
Institute Technology of Bandung (ITB)
Jl. Ganesha No. 10, Bandung 40132
Email : rinaldi@informatika.org
Phone +62-22-2508135
Indonesia

(c) Hasil penyembunyian data


(peppers.bmp + hendro.doc):

(d) Hasil pengungkapan data


(hendro-stega.doc, 20 KB):
LETTER OF RECOMMENDATION
To Whom It May Concern,
Herewith I highly recommend Mr. R. Hendro
Wicaksono continue his postgraduate study at
your university. My recommendation is based
on my experience as his lecturer in several
courses for the past four years.
He has shown me his excellent attitude and
personality. He is a hard working person and he
has a lot of creative ideas. He is also a very
intelligent student and he cooperates very well
with his peers whenever they had to work
together.
During his study, he showed diligence and
eagerness to achieve his goal. He sets very high
standard for himself and organizes himself very
well to achieve the standard. I am confident
that if he can maintain his goal work, he should
be able to complete the postgraduate program
well within the stipulated time.
I am sure that his abilities and his personal
qualities along with his academic capabilities
will help his to obtain his Masters degree at
your university, which will be very useful for
our country.
Bandung, November 15, 2002
Yours Sincerely,
Ir. Rinaldi Munir, M.Sc.
Senior Lecturer
Informatics Engineering Department,
Institute Technology of Bandung (ITB)
Jl. Ganesha No. 10, Bandung 40132
Email : rinaldi@informatika.org
Phone +62-22-2508135
Indonesia

Gambar 13.5 Penyembunyian dokumen teks ke dalam citra berwarna 24 bit (peppers.bmp)

206

Pengolahan Citra Digital

2. Citra penampung: citra 8 bit (greyscale)


Data yang disembunyikan: audio
(a) Penampung: citra barbara.bmp (512 512
pixel, 258 KB)

(b) Data yang


disembunyikan: chord.wav
(95 KB), yaitu berkas
musik dari Windows.

(dimainkan dengan media


player)

(c) Hasil penyembunyian data (barbara.bmp +


chord.wav)

(d) Berkas chord-stega.wav


(95 KB) hasil
pengungkapan:

(dimainkan dengan media


player)

Pada kasus ini, terjadi penurunan kualitas gambar karena


pengaruh penurunan jumlah warna (color quantization)!

Gambar 13.6 Penyembunyian data audio ke dalam citra greyscale 8-bit

Bab 13_Steganografi dan Watermarking pada Citra Digital

207

13.6 Watermarking
Salah satu karya intelektual yang dilindungi adalah barang dalam bentuk digital,
seperti software dan produk multimedia seperti teks, musik (dalam format MP3
atau WAV), gambar/citra (image), dan video digital (VCD). Selama ini
penggandaan atas produk digital tersebut dilakukan secara bebas dan leluasa.
Hasil penggandaan persis sama dengan aslinya. Pemegang hak cipta atas produk
digital tersebut tentu dirugikan karena ia tidak mendapat royalti dari usaha
penggandaan tersebut.
Sebenarnya masalah penyalahgunaan hak cipta pada bidang multimedia tidak
hanya mengenai penggandaan dan pendistribusiannya saja, tetapi juga mengenai
label kepemilikan. Kebanyakan produk digital tersebut tidak mencantumkan siapa
pemegang hak ciptanya. Kalaupun bukti kepemilikan itu ada, biasanya informasi
kepemilikan disertakan pada sampul pembungkus yang menerangkan bahwa
produk multimedia tersebut adalah milik pembuatnya. Masalahnya, distribusi
produk multimedia saat ini tidak hanya secara offline, tetapi juga dapat dilakukan
lewat internet. Jika anda masuk ke situs-situs web di internet, anda dapat
menemukan informasi berupa teks, gambar, suara, dan video. Semua produk
digital tersebut dapat anda download dengan mudah. Anda pun juga dapat
mempertukarkan data digital dengan layanan internet seperti e-mail.
Masalahnya, hampir semua data digital yang bertebaran di dunia internet tidak
mencantumkan informasi pemiliknya. Seseorang yang telah mendapatkan produk
digital dapat mengklaim bahwa produk tersebut adalah hasil karyanya. Berhubung
tidak ada bukti kepemilikan sebelumnya, maka klaim tersebut mungkin saja
dipercaya.
Salah satu cara untuk melindungi hak cipta multimedia adalah dengan menyisipkan
informasi ke dalam data multimedia tersebut dengan teknik watermarking.
Informasi yang disisipkan ke dalam data multimedia disebut watermark, dan
watermark dapat dianggap sebagai sidik digital (digital signature) dari pemilik
yang sah atas produk multimedia tersebut. Dengan kata lain, watermark yang
disisipkan menjadi label hak cipta dari pemiliknya. Pemberian signature dengan
teknik watermarking ini dilakukan sedemikian sehingga informasi yang
disisipkan tidak merusak data digital yang dilindungi. Sehingga, seseorang yang
membuka produk multimedia yang sudah disisipi watermark tidak menyadari
kalau di dalam data multimedia tersebut terkandung label kepemilikan pembuatnya.
Jika ada orang lain yang mengklaim bahwa produk multimedia yang
didapatkannya adalah miliknya, maka pemegang hak cipta atas karya multimedia
tersebut dapat membantahnya dengan mengekstraksi watermark dari dalam data
multimedia yang disengketakan. Watermark yang diekstraksi dibandingkan dengan
watermark pemegang hak cipta. Jika sama, berarti memang dialah pemegang hak
cipta produk multimedia tersebut.

208

Pengolahan Citra Digital

Pada dasarnya, teknik watermarking adalah proses menambahkan kode identifikasi


secara permanen ke dalam data digital. Kode identifikasi tersebut dapat berupa
teks, gambar, suara, atau video. Selain tidak merusak data digital produk yang
akan dilindungi, kode yang disisipkan seharusnya memiliki ketahanan (robustness)
dari berbagai pemrosesan lanjutan seperti pengubahan, transformasi geometri,
kompresi, enkripsi, dan sebagainya. Sifat robustness berarti data watermark tidak
terhapus akibat pemrosesan lanjutan tersebut.

Sejarah Watermarking
Watermarking sudah ada sejak 700 tahun yang lalu. Pada akhir abad 13, pabrik
kertas di Fabriano, Italia, membuat kertas yang diberi watermark atau tanda-air
dengan cara menekan bentuk cetakan gambar atau tulisan pada kertas yang baru
setengah jadi. Ketika kertas dikeringkan terbentuklah suatu kertas yang berwatermark. Kertas ini biasanya digunakan oleh seniman atau sastrawan untuk
menulis karya mereka. Kertas yang sudah dibubuhi tanda-air tersebut sekalius
dijadikan identifikasi bahwa karya seni di atasnya adalah milik mereka [HEN03].
Ide watermarking pada data digital (sehingga disebut digital watermarking)
dikembangkan di Jepang tahun 1990 dan di Swiss tahun 1993. Digital watermarking
semakin berkembang seiring dengan semakin meluasnya penggunaan internet,
objek digital seperti video, citra, dan suara yang dapat dengan mudah digandakan
dan disebarluaskan.

Perbedaan Steganografi dengan Watermarking


Watermarking merupakan aplikasi dari steganografi, namun ada perbedaan antara
keduanya. Jika pada steganografi informasi rahasia disembunyikan di dalam
media digital dimana media penampung tidak berarti apa-apa, maka pada
watermarking justru media digital tersebut yang akan dilindungi kepemilikannya
dengan pemberian label hak cipta (watermark).
Meskipun steganografi dan watermarking tidak sama, namun secara prinsip
proses penyisipan informasi ke dalam data digital tidak jauh berbeda. Beberapa
metode yang sudah ditemukan untuk penyisipan watermark adalah metdoe LSB
(seperti pada penjelasan steganografi di atas), metode adaptif, metode spread
spectrum, dan sebagainya.

Bab 13_Steganografi dan Watermarking pada Citra Digital

209

Data watermark yang lazim disisipkan ke dalam data digital adalah teks, citra,
atau suara. Watermark berupa teks mengandung kelemahan karena kesalahan satu
bit akan menghasilkan hasil teks yang berbeda pada waktu verifikasi (ektraksi).
Watermark berupa suara atau citra lebih disukai karena kesalahan pada beberapa
bit watermark tidak menghasilkan perubahan yang berarti pada waktu verifikasi.
Hasil ekstraksi watermark yang mengandung kesalahan tersebut masih dapat
dipersepsi secara visual (atau secara pendengaran jika watermark-nya berupa
suara). Citra yang sering digunakan sebagai watermark biasanya logo atau lambang.
Penyisipan Watermark
Di sini kita hanya meninjau watermarking pada citra digital. Proses penyisipan
watermark ke dalam citra disebut encoding dan ditunjukkan Gambar 13.7.
Encoding dapat disertai dengan pemasukan kunci atau tidak memerlukan kunci.
Kunci diperlukan agar watermark hanya dapat diekstraksi oleh pihak yang sah.
Kunci juga dimaksudkan untuk mencegah watermark dihapus oleh pihak yang
tidak berhak.
kunci

Citra

Encoding

Citra berwatermark

Watermark
Gambar 13.7 Proses penyisipan watermark pada citra digital

Gambar 13.8 memperlihatkan sebuah gambar (image) paprika yang disisipi


dengan watermark berupa gambar hitam putih yang menyatakan identifikasi
pemiliknya (Shanty) [HEN03]. Perhatikanlah bahwa setelah disisipi watermark,
gambar paprika tetap kelihatan mulus, seolah-olah tidak pernah disisipi
watermark sebelumnya. Sebenarnya tidaklah demikian, gambar paprika tersebut
mengalami sedikit perubahan akibat watermarking, namun mata manusia
mempunyai sifat kurang peka terhadap perubahan kecil ini, sehingga manusia
sukar membedakan mana gambar yang asli dan mana gambar yang sudah disisipi
watermark.

210

Pengolahan Citra Digital

Watermark

Citra asli

Citra ter-watermark
Gambar 13.8 Memberi watermark pada citra peppers

Verifikasi Watermark
Verifikasi watermark dilakukan untuk membuktikan status kepemilikan citra
digital yang disengketakan. Verifikasi watermark terdiri atas dua sub-proses,
yaitu ekstraksi watermark dan pembandingan. Sub-proses ekstraksi watermark
disebut juga decoding, bertujuan mengungkap watermark dari dalam citra.
Decoding dapat mengikutsertakan citra asal (yang belum diberi watermark) atau
tidak sama sekali, karena beberapa skema watermarking memang menggunakan
citra asal dalam proses decoding untuk meningkatkan unjuk kerja yang lebih baik
[HEN03]. Sub-proses pembandingan bertujuan membandingkan watermark yang
diungkap dengan watermark asli dan memberi keputusan tentang watermark
tersebut. Proses verifikasi watermark ditunjukkan pada Gambar 13.9.
kunci

Citra yang
diuji

Citra asal

Decoding

watermark
yang
terekstraksi

Pembandingan

keputusan

watermark
asli
Gambar 13.9 Proses verifikasi watermark pada citra digital

Bab 13_Steganografi dan Watermarking pada Citra Digital

211

Selain untuk tujuan pelabelan hak cipta (copyright labelling), watermarking juga
dimanfaatkan untuk tujuan-tujuan lain sebagai berikut [SUP00]:
1. Tamper-proofing. Watermarking digunakan sebagai alat untuk mengidentifikasi
atau menunjukkan bahwa data digital telah mengalami perubahan dari aslinya.
2. Feature location. Watermarking digunakan untuk mengidentifikasi isi dari
data digital pada lokai-lokasi tertentu.
3. Annotation/caption. Watermarking digunakan hanya sebagai keterangan tentang
data digital itu sendiri.

212

Pengolahan Citra Digital

Bab 15

Pengenalan Pola

eskipun materi pengenalan pola (pattern recognition) tidak termasuk ke


dalam pokok bahasan buku ini, namun sebagai bab penutup Penulis akan
menjelaskan secara singkat mengenai pengenalan pola.

15.1 Pengertian Pola dan Ciri


Pola adalah entitas yang terdefinisi dan dapat diidentifikasi melalui ciri-cirinya
(features) [HEN95]. Ciri-ciri tersebut digunakan untuk membedakan suatu pola
dengan pola lainnya. Ciri yang bagus adalah ciri yang memiliki daya pembeda
yang tinggi, sehingga pengelompokan pola berdasarkan ciri yang dimiliki dapat
dilakukan dengan keakuratan yang tinggi.
Sebagai contoh,
Pola

Ciri

huruf

tinggi, tebal, titik sudut,


lengkungan garis, dll

suara

amplitudo, frekuensi, nada,


intonasi, warna, dll

tanda tangan

panjang, kerumitan, tekanan, dll

sidik jari

lengkungan, jumlah garis, dll

Bab 15_Pengenalan Pola

229

Ciri pada suatu pola diperoleh dari hasil pengukuran terhadap objek uji. Khusus
pada pola yang terdapat di dalam citra, ciri-ciri yang dapat diperoleh berasal dari
informasi:
a. Spasial: intensitas pixel, histogram,
b. Tepi: arah, kekuatan,
c. Kontur: garis, elips, lingkaran,
d. Wilayah/bentuk: keliling, luas, pusat massa,
e. Hasil transformasi Fourier: frekuensi,

15.2 Sistem Pengenalan Pola


Pengenalan pola bertujuan menentukan kelompok atau kategori pola berdasarkan
ciri-ciri yang dimiliki oleh pola tersebut. Dengan kata lain, pengenalan pola
membedakan suatu objek dengan objek lain. Terdapat dua pendekatan yang
dilakukan dalam pengenalan pola: pendekatan secara statistik dan pendekatan
secara sintaktik atau struktural [HEN95].
(a) Pengenalan Pola secara Statistik
Pendekatan ini menggunakan teori-teori ilmu peluang dan statistik. Ciri-ciri yang
dimiliki oleh suatu pola ditentukan distribusi statistiknya. Pola yang berbeda
memiliki distribusi yang berbeda pula. Dengan menggunakan teori keputusan di
dalam statistik, kita menggunakan distribusi ciri untuk mengklasifikasikan pola.
Contoh teori keputusan:
Misalkan ada N pola yang dikenali, yaitu w1, w2, , wN dan fungsi peluang atau
kerapatan dari ciri-ciri pada pola diketahui. Jika x merupakan hasil pengukuran
ciri-ciri, maka

p( x wi )

, i = 1, 2, , N

dapat dihitung.
Sebagai contoh, misalkan diketahui fungsi kerapatan dari diameter buah jeruk dan
apel yang diperlihatkan pada Gambar 15.1.

230

Pengolahan Citra Digital

peluang
1
p(diameter | jeruk)
p(diameter | apel)

diameter

Gambar 15.1. Grafik fungsi kerapatan dari ciri diameter jeruk dan apel.

Jika sebuah objek diukur dan diperoleh diameternya adalah a cm, maka kita
mengklasifikasikan objek tersebut sebagai jeruk, karena
p(a | jeruk) > p(a | apel)
dan jika hasil pengukuran diameter adalah b cm, kita mengklasifikasikan objek
tersebut sebagai apel, karena
p(b | jeruk) < p(b | apel)
Sistem pengenalan pola dengan pendekatan statistik ditunjukkkan oleh diagram
pada Gambar 15.2.
Pola

Preprocessing

Feature
Extraction

Classification

Feature
Selection

Learning

Pengenalan (recognition)
Pelatihan (training)
Pola terokan

Gambar 15.2. Sistem pengenalan pola dengan pendekatan statistik.

Bab 15_Pengenalan Pola

231

Ada dua fase dalam sistem pengenalan pola: (i) fase pelatihan dan (ii) fase
pengenalan. Pada fase pelatihan, beberapa contoh citra dipelajari untuk menentukan
ciri yang akan digunakan dalam proses pengenalan serta prosedur klasifikasinya.
Pada fase pengenalan, citra diambil cirinya kemudian ditentukan kelas kelompoknya.
Preprocessing
Proses awal yang dilakukan untuk memperbaiki kualitas citra (edge enhancement)
dengan menggunakan teknik-teknik pengolahan citra yang sudah diejelaskan
pada bab-bab sebelum ini.

Feature Extraction
Proses mengambil ciri-ciri yang terdapat pada objek di dalam citra. Pada proses
ini objek di dalam citra mungkin perlu dideteksi seluruh tepinya, lalu menghitung
properti-properti objek yang berkaitan sebagai ciri. Beberapa proses ekstraksi ciri
mungkin perlu mengubah citra masukan sebagai citra biner, melakukan penipisan
pola, dan sebagainya.

Classification
Proses mengelompokkan objek ke dalam kelas yang sesuai.

Feature Selection
Proses memilih ciri pada suatu objek agar diperoleh ciri yang optimum, yaitu ciri
yang dapat digunakan untuk membedakan suatu objek dengan objek lainnya.

Learning
Proses belajar membuat aturan klasifikasi sehingga jumlah kelas yang tumpang
tindih dibuat sekecil mungkin.

Kumpulan ciri dari suatu pola dinyatakan sebagai vektor ciri dalam ruang
bahumatra (multi dimensi). Jadi, setiap pola dinyatakan sebagai sebuah titik
dalam ruang bahumatra. Ruang bahumatra dibagi menjadi sejumlah uparuang
(sub-ruang). Tiap uparuang dibentuk berdasarkan pola-pola yang sudah dikenali
kategori dan ciri-cirinya (melalui fase pelatihan). Lihat Gambar 15.3.

232

Pengolahan Citra Digital

3 kelas

2 kelas yang beririsan

ciri 2

ciri 2

batas kelas
batas keputusan
ciri 1

ciri 1

Gambar 15.3. Contoh pembagian kelas pola

(b) Pengenalan Pola secara Sintaktik


Pendekatan ini menggunakan teori bahasa formal. Ciri-ciri yang terdapat pada
suatu pola ditentukan primitif dan hubungan struktural antara primitif kemudian
menyusun tata bahasanya. Dari aturan produksi pada tata bahasa tersebut kita
dapat menentukan kelompok pola. Gambar 15.4 memperlihatkan sistem
pengenalan pola dengan pendekatan sintaktik.

Pengenalan pola secara sintaktik lebih dekat ke strategi pengenalan pola yang
dilakukan manusia, namun secara praktek penerapannya relatif sulit dibandingkan
pengenalan pola secara statistik.

Pola

Preprocessing

Primitive
Extraction

Classification

Primitive
Selection

Learning

Pengenalan (recognition)
Pelatihan (training)
Pola terokan

Gambar 15.4. Sistem pengenalan pola dengan pendekatan sintaktik.

Bab 15_Pengenalan Pola

233

Pendekatan yang digunakan dalam membentuk tata bahasa untuk mengenali pola
adalah mengikuti kontur (tepi batas) objek dengan sejumlah segmen garis
terhubung satu sama lain, lalu mengkodekan setiap garis tersebut (misalnya
dengan kode rantai). Setiap segmen garis merepresentasikan primitif pembentuk
objek.

Contoh 15.1. [GON77] Pembentukan tata bahasa (grammar) untuk mengenali


kromosom (lihat Gambar 15.5) yang diusulkan oleh Ledley (1964, 1965). Tata
bahasa untuk mengenali kromosom adalah G = (N, , P, S), yang dalam hal ini
= {a, b, c, d, e}
N = {S, T, A, B, C, D, E, F}
S = { S, T}

dan himpunan aturan produksi P:


1)
2)
3)
4)
5)
6)
7)
8)
9)

234

S CC
T AC
C BC
C CB
C FD
C EF
E Fc
D cF
A bA

10) A Ab
11) A e
12) B bB
13) B Bb
14) B b
15) B d
16) F bF
17) F Fb
18) F a

Pengolahan Citra Digital

(a)
a
b

a
b

b
b

c
d

b
a

b
b

c
b

ebabcbab

a
abcbabdbabcbabdb
(b)
Gambar 15.5 (a) Primitif grammar kromosom, (b) pengkodean kromosom.

Contoh 15.2. [GON77] Pembentukan grammar dengan Picture Description


Language (PDL) yang diusulkan oleh Shaw (1970). Lihat Gambar 15.6. Tata
bahasa untuk mengenali bentuk rumah adalah G = (N, , P, S), yang dalam hal
ini

={a

,b

,c

,d

N = {S, A1, A2, A3, A4, A5}


S = { S}
dan himpunan aturan produksi P:
S d + A1
A1 c + A2
A2 ~d*A2
A3 a + A4
A4 b*A5
A5 c
Bab 15_Pengenalan Pola

235

h
d

c + (~d)

d + (c+(~d))

(a)

(b)

(c)

a+d

(a + b) *c

(d + (c + (~d)))*((a+b)*c)

(d)

(e)

(f)

Gambar 15.6 Langkah-langkah pembentukan struktur PDL

236

Pengolahan Citra Digital

Anda mungkin juga menyukai