Jelajahi eBook
Kategori
Jelajahi Buku audio
Kategori
Jelajahi Majalah
Kategori
Jelajahi Dokumen
Kategori
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.
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
(a)
(b)
Gambar 1.2. (a) Citra burung nuri yang agak gelap, (b) Citra burung yang telah diperbaiki kontrasnya
sehingga terlihat jelas dan tajam
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
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
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)
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.
(a)
(b)
Gambar 1.4. (a) Citra Lena yang mengandung derau, (b) hasil dari operasi penapisan derau.
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.
Gambar 1.5. Citra karakter A yang digunakan sebagai masukan untuk pengenalan huruf.
(1.1)
Contoh Algoritma
noise removal
contrast enhancement
edge detection
texture detection
intermediate-level feature
identification
connectivity
pattern matching
boundary coding
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].
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
(a)
(b)
Gambar 1.7 Kiri: Citra Lena yang kabur (blur), kanan: citra Lena setelah deblurring
(a)
(b)
Gambar 1.8. (a) Citra boat.bmp (258 KB) sebelum dimampatkan, (b) citra boat.jpg (49 KB)
sesudah dimampatkan.
10
(a)
(b)
Gambar 1.9. (a) Citra camera, (b) citra hasil pendeteksian seluruh tepi
11
12
13
14
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.
15
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
sehingga
0 f(x, y) <
sumber
cahaya
i(x,y)
permukaan
normal
f(x,y)
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)).
0 x M
f(x, y) 0 y N
0 f L
18
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.
19
Penerok
Citra kontinu
Citra digital
Gambar 2.3. Penerokan secara spasial
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]
i=x
,0iN1
j = (M y)
,0jM1
x = Dx/N increment
y = Dy/M increment
20
10 inchi
putih
0
0
0
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
10 inchi
(a)
(b)
Gambar 2.5 (a) Gambar yang diterok, (b) matriks yang merepresentasikan gambar [GAL90]
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
(c) 64 64 pixel
(d) 32 32 pixel
Gambar 2.6. Ukuran penerokan yang berbeda-beda menghasilkan kualitas citra yang berbeda
pula Kuantisasi
22
G = 2m
yang dalam hal ini,
G = derajat keabuan
m = bilangan bulat positif
Skala 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.
23
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
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].
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.
26
Media
Penyimpanan
Citra
Digitizer
Komputer
Digital
Piranti
Tampilan
Operasi dari sistem pemrosesan citra tersebut dapat dibagi menjadi empat
kategori prinsip: digitalisasi, pemrosesan, penayangan, dan penyimpanan.
27
28
Bab 3
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];
30
**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]
Dengan demikian, deklarasi matriks dinamis untuk citra f adalah sebagai berikut
ini:
unsigned char **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;
}
Bab 3_Struktur Data untuk Citra Digital dan Format Citra Bitmap
31
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.
kita tidak perlu menulis tiga prosedur yang berbeda untuk mengalokasikan
matriks yang bertipe berbeda pula.
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
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);
}
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
34
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
2 byte
2 byte
...
...
M byte
M byte
...
...
...
...
M byte
N kali
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
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);
38
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
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
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
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
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
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
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>
Bab 3_Struktur Data untuk Citra Digital dan Format Citra Bitmap
43
/* 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;
/*
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
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
2.
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);
}
3.
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 */
/* 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);
}
}
4.
48
5.
palet,
i, j;
N x M ke layar */
/*
/*
/*
/*
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);
}
}
}
6.
50
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
Bab 4
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.
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)}
(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)}
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)
a ,
f(x, y) = 1
a 2 ,
f ( x, y ) < T
(4.3)
f ( x, y ) T
0,
f(x, y) =
1,
42
f ( x, y ) < 128
f ( x, y ) 128
(4.4)
(a)
(b)
Gambar 4.2. (a) Citra biner Lena, (b) citra negatif Lena
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)
(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.
Algoritma 4.2. Membuat citra negatif dari sebuah citra dengan 256 derajat keabuan
f(x, y) = f ( x, y ), 0 f ( x, y ) 255
0,
f ( x, y ) < 0
(4.7)
44
(4.8)
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);
(4.9)
46
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.
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)}
(4.10)
47
Oglobal{f(x, y)}
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?
48
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:
(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;
}
}
(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;
}
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:
(4.13)
50
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.0 32 0 20 255
0.1 42 3 10 255
Matriks koreksi B
Matriks keluaran C
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.
51
(4.15)
(4.16)
)
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
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)
54
(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
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
56
k=M-1;
for (i=0; i<=N-1; i++)
{
for (j=0; j<=M-1; j++)
{
B[j][k]=A[i][j];
}
k--;
}
c. Penskalaan Citra
Penskalaan citra, disebut juga image zooming, yaitu pengubahan ukuran citra
(membesar/zoom out atau mengecil/zoom in).
(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)
57
(a)
(b)
Gambar 4.11. (a) Zoom out dengan faktor skala = 2, (b) Zoom in dengan faktor skala = 1/2
58
(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
(4.25)
59
(4.26)
(4.27)
60
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)
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)
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 )
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)
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 < +
fd(nT)
f(t)
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,
(t nT ) =
f (t ) (t nT )
(5.10)
f(t)
s(t)
f(t)s(t)
h( x, y ) = f ( x, y ) * g ( x, y ) =
f (a, b) g ( x a, y b)dadb
(5.11)
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
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)
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
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)
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(x, y)
11
{ f ( x )} = F (u ) =
f ( x )e
i 2ux
du
(5.13)
1{F (u )} = f ( x ) =
F (u )e
i 2ux
du
(5.14)
12
Untuk f(x) real, F(u) adalah fungsi kompleks dan dapat dituliskan sebagai:
(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)
(u ) = tan 1[
I (u )
]
R (u )
(5.17)
(5.18)
F (u ) =
f ( x )e
i 2ux
dx =
f ( x) =
(5.19)
F (u )e i 2ux du =
(5.20)
F (u, v ) =
f ( x, y )e i 2 ( ux +uy ) dudv
(5.21)
f ( x, y ) =
(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
I (u, v )
]
R ( u, v )
(5.24)
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 )
f (t ) g (t )dt
*
F (u)G (u)du
*
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
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;
}
}
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;
}
}
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.
ni
n
, i = 0, 1, , L 1
(6.1)
83
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
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
85
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].
86
Gambar 6.3. Citra berwarna pepper dan histogram masing-masing kanal warnanya
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
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
(a) Kiri: citra Lena yang terlalu gelap; kanan: histogramnya (by Photoshop)
89
90
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)
(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.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.
Gambar 7.1. Citra Zelda; Atas: sebelum operasi penambahan kecerahan terlihat agak gelap;
Bawah: Zelda setelah operasi penambahan kecerahan dengan b = 80.
Histogram
Histogram
Histogram
Gambar 7.2. Tiga buah citra Lena dengan tiga macam kontras.
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
Pr ( rk ) =
nk
n
(7.5)
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.
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)
s
1
sk = T(rk)
rk
s = T ( r ) = Pr ( w)dw
,0r1
(7.8)
nj
n P (r )
=
j =0
(7.9)
j =0
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
0.30
Pr(rk)
0.25
0.20
0.15
0.10
0.05
0 1/7
3/7
5/7
rk
P (r ) = P (r ) = 0.19
r
j =0
s1 = T ( r1 ) =
j =0
s2 = T ( r2 ) =
j =0
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
Ps(sk)
0.30
0.25
0.20
0.15
0.10
0.05
0 1/7
3/7
5/7
sk
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
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
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)
(7.11)
(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
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
nj
n = P (z )
z
j =0
j =0
13
T(r)
Pr(r)
G-1 (s)
Histogram Seragam
Pz(z)
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
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
3/7
5/7
zk
nj
n P (r )
=
j =0
j =0
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
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),
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
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] .
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]];
18
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)
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
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)
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
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
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.
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
(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.
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
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
f(x,y)
8
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
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
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
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)
(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
121
jarak
perubahan intensitas
= arah tepi
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
derajat keabuan
4 4 4
4 4 4
4 4 4
4 4 4
4 4 4
(e) citra
curam
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
122
f
G x
f = fx =
G y
y
(8.1)
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)
Gx =
(8.4)
(8.5)
123
(x,y)
(x-1,y)
(x+ 1,y)
(x-1,y-1) (x,y-1)
(x+ 1,y-1)
x
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
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
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.
125
Gambar 8.4 Deteksi semua tepi citra Lena, camera, dan botol
126
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)
D2 ( x ) = [ 1 0 1]
dan
1
D2 ( y ) = 0
1
a1
a2
( x, y ) a3
a5
a 4
s x2 + s 2y
s x = ( a2 + ca3 + a4 ) ( a0 + ca7 + a6 )
(8.11)
(8.12)
1 0 1
dan
2
1
1
Sy = 0
0
0
1 2 1
127
(x,y) = tan-1
(8.13)
3
2
4
2
4
1
5
2
5
2
6
7
5
1
5
4
1
7
3
1
2
1
2
* * * * *
* 18
s x2 + s 2y = 112 + ( 7) 2 S x + S y = 11 + 7 = 18
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 *
* * * * * * * * *
*
*
*
* * * * * * * * *
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 *
* * * * * * * * *
1 0 1
dan
1
1
1
Py = 0
0
0
1 1 1
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
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)
3
2
4
2
4 2 5 1
1 6 4 2
5 7 1 3
2 5 7 1
5 1 3 2
4
5
1
*
3 3 6 *
7 8 2 *
5 4 4 *
1 8 7 *
* * * *
Nilai 4 pada pojok kiri atas pada citra hasil konvolusi diperoleh dengan perhitungan
sebagai berikut:
f [0,0] = 3 1 + 4 2 = 4
130
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
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)
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
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
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.
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
+4
-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 |.
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
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 *
* * * * * * *
*
134
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.
(8.22)
h ( x, y ) = f ( x, y ) * G ( x, y )
(8.23)
dan
(8.24)
k ( x, y ) = f ( x, y ) * 2G ( x, y )
(8.25)
Jadi,
(x2 + y2 )
2 2
(8.26)
135
2.
1 2 16 2 1
0 1 2 1 0
0
0 1 0
0
(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)
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:
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
Tepi vertikal
139
Tepi horizontal
Gambar 8.10 (lanjutan).
140
Bab 9
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.
(a)
(b)
Gambar 9.1 (a) kontur tertutup, (b) kontur terbuka
141
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
Titik awal
A
1
0
2
4
4
6
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.
143
L=
u1
dx dy
+ du
du du
(9.1)
(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
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.
(9.4)
Dengan kata lain, tambahkan satu suara pada ruang parameter m-c.
145
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
146
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]++;
}
}
}
}
147
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
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)
(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.
(a,b)
(x i,yi)
150
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.
(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)
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)
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
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.
2.
154
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:
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.
156
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.3)
157
Gambar 10.2 Citra kapal setelah dimampatkan dengan sebuah metode lossy
158
159
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
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
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
162
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
163
217
100%) = 27.67% , yang artinya 27.67%
300
dari citra semula telah dimampatkan.
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
1 5 3 1
1 2 3 3 5 1 1 4 3 2
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
**
**
*********
***********
*********
****
*****
********
*********
******
165
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
130
100%) = 50% , yang artinya 50% dari citra
260
166
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.
167
23942
41480
168
1,
f B (i , j ) =
0,
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
(c) T = 128
(d) T = 150
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)
172
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].
173
174
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
175
176
H
F
I
M
I
Kode: gwgwbbwbgwwgwwgwwbbb
Di-decode sebagai: g(wg(wbbw)bg(wwg(wwbb)b))
Keterangan: b = black, w = white, g = gray
(b) Pohon-empatan
f (i, j )
(11.3)
i =1 j = 1
177
x=
j. f (i, j )
i =1 j =1
y=
(11.4)
A
m
i. f (i, j )
i =1 j = 1
(11.5)
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)
City-block
d city = i1 i2 + j1 j2
178
(11.8)
(11.9)
Chessboard
d chess = max ( i1 i2 , j1 j2 )
(11.10)
H (i ) =
f (i , j )
(11.11)
j =1
V (i ) =
f (i , j )
(11.12)
i =1
179
(a) Huruf R
180
(a)
(b)
p8
p1
p2
p7
p0
p3
p6
p5
p4
(c)
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);
}
182
Bab 12
Warna
10-5
10-1
Bab 12_Warna
10
400
700
2500 nm
1000 m
183
ultra
violet
ultra violet
Infra
merah
micro TV radio
wave wave wave
sinar tampak
400 nm
electr.
power
infra merah
700 nm
(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.
184
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
: 700 nm
: 546.1 nm
: 435.8 nm
x=
X
X +Y + Z
(12.2)
y=
Y
X +Y + Z
(12.3)
z=
Z
X +Y + Z
(12.4)
186
(12.5)
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
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
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
Ri
G
i
Bi
(12.8)
Transformasi sebaliknya dari CIE XYZ ke CIE RGB dapat dilakukan dengan
persamaan
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
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
190
Ri
G
i
Bi
(12.10)
0.621
Ri 1.000 0 .956
G = 1.000 0 .273 0.647
i
Yi
I
i
Qi
(12.11)
R _ NTSCi
G _ NTSC
i
B _ NTSCi
(12.12)
Sistem NTSC RGB dapat ditransformasikan ke sistem CIE XYZ dengan persamaan:
R _ NTSCi
G _ NTSC
i
B _ NTSCi
(12.13)
sedangkan transformasi dari CIE XYZ ke NTSC RGB dihitung dengan persamaan:
X i
Y
i
Z i
(12.14)
(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
Algoritma 12.4 Transformasi citra dari model warna CMYK ke model RGB
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)
H = cos 1
194
2R G B
2 ( R G ) 2 + ( R B )(G B )
(12.23)
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)
(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
Bab 13
197
198
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.
199
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
201
203
204
Gambar 13.4 Penyembunyian citra handshaking ke dalam citra berwarna 24 bit (peppers.bmp)
205
Gambar 13.5 Penyembunyian dokumen teks ke dalam citra berwarna 24 bit (peppers.bmp)
206
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
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.
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
210
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
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
Bab 15
Pengenalan Pola
Ciri
huruf
suara
tanda tangan
sidik jari
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,
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
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
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
3 kelas
ciri 2
ciri 2
batas kelas
batas keputusan
ciri 1
ciri 1
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
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.
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
(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.
={a
,b
,c
,d
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)
236