OPERASI mempunyai koordinat (b, k) dengan b baris dan k kolom, hubungan piksel tetangga terhadap P se- ■ 4-ketetanggaan Pada Pada 8-ketetanggaan Aplikasi Ketetanggaan Piksel pada Filter ■ Sebagai filter atau tapis, operasi ketetanggaan piksel berfu ngsi untuk menyaring atau paling tidak mengurangi gangg uan atau penyimpangan pada citra ■ Ada tiga jenis filter yang menggunakan operasi ketetangga an piksel yang akan dibahas sebagai pengantar pada bab i ni. Ketiga filter tersebut adalah filter batas, filter pererataa n, dan filter median Filter Batas ■ Filter batas adalah filter yang dikemukakan dalam D avies (1990). Idenya adalah mencegah piksel yang i ntensitasnya di luar intensitas piksel-piksel tetangga ALGORITMA 4.1 – Menghitung piksel dengan filter batas Masukan: f(y, x) : Piksel pada posisi (y, x) Keluaran: g(y, x) : Nilai intensitas untuk piksel pada citra g pada posisi (y, x) 1. Carilah nilai intensitas terkecil pada tetangga f(y, x) dengan menggunakan 8-ketetanggan dan simpan pada minInt. 2. Carilah nilai intensitas terbesar pada tetangga f(y, x) dengan menggunakan 8-ketetanggan dan simpan pada maksInt. 3. IF f(y, x) < minInt g(y, x) minInt ELSE IF f(y. x) > maksInt g(y, x) maksInt ELSE g(y, x) f(y, x) END-IF END-IF Contoh piksel dan tetangga Berdasarkan keadaan tersebut, • minInt = minimum(5, 7, 7, 5, 4, 6, 7, 8) = 4; • maksInt = maksimum(5, 7, 7, 5, 4, 6, 7, 8) = 8; • mengingat f(y, x) bernilai 9 dan lebih besar daripada 8 (maksInt) maka g(y, x) bernilai 8; • seandainya f(y, x) pada keadaan di atas bernilai 2 (bukan 9), g(y,x) akan bernilai 4. Program : filbatas.m % FILBATAS Melakukan operasi ketetanggan piksel % menggunakan filter batas F = imread('c:\Image\mobil.tif'); Ukuran = size(F); tinggi = Ukuran(1); lebar = Ukuran(2); G = F; for baris=2 : tinggi-1 for kolom=2 : lebar-1 minPiksel = min([F(baris-1, kolom-1) F(baris-1, kolom) F(baris, kolom+1) F(baris, kolom-1) ... ... ... F(baris, kolom+1) F(baris+1, kolom-1) ... F(baris+1, kolom) F(baris+1, kolom+1)]); maksPiksel = min([F(baris-1, kolom-1) ... F(baris-1, kolom) F(baris, kolom+1) ... F(baris, kolom-1) ... F(baris, kolom+1) F(baris+1, kolom-1) ... F(baris+1, kolom) F(baris+1, kolom+1)]); if F(baris, kolom) < minPiksel G(baris, kolom) = minPiksel; else if F(baris, kolom) > maksPiksel G(baris, kolom) = maksPiksel; else G(baris, kolom) = F(baris, kolom); end end end end figure(1); imshow(G); clear; ■ Perlu diketahui, pemrosesan hanya dilakukan selain baris p ertama, baris terakhir, kolom pertama, dan kolom terakhir. Keempat area tersebut tidak diproses karena tidak mempu nyai tetangga yang lengkap (sebanyak 8). Efek filter batas terhadap citra yang mengadung derau ■ Filter Pererataan ■ Filter pererataan (Costa dan Cesar, 2001) dilakukan dengan menggunakan rumus: Pada contoh di atas, yang diarsir (yaitu yang bernilai 68) merupakan nilai pada f(y, x). Nilai rerata pengganti untuk g(y, x) dihitung dengan cara seperti berikut: g(y, x) = 1/9 x (65+50+55+76+68+60+60+60+62) = 61,7778 Jadi, nilai 68 pada f(y, x) diubah menjadi 62 pada g(y, x). Program : pemerataan.m % PEMERATAAN Melakukan operasi dengan filter pererataan F = imread('C:\Image\mobil.tif'); [tinggi, lebar] = size(F); F2 = double(F); for baris=2 : tinggi-1 for kolom=2 : lebar-1 jum = F2(baris-1, kolom-1)+ ... F2(baris-1, kolom) + F2(baris-1, kolom-1) + F2(baris, kolom-1) + ... F2(baris, kolom) + F2(baris, kolom+1) + F2(baris+1, kolom-1) + ... F2(baris+1, kolom) + F2(baris+1, kolom+1); G(baris, kolom) = uint8(1/9 * jum); end end figure(1); imshow(G); clear; ■ Pada program di atas baris dan kolom yang terletak di pinggir citra tidak ikut diproses. ■ Dibandingkan dengan filter batas, hasil pemrosesan filter pererataan tidak menghilangkan bintik-bintik putih pada citra mobil, tetapi hanya agak menyama rkan. Pada citra boneka2.png, derau lebih dihaluska n Filter Median ■ ■ Filter median sangat populer dalam pengolahan citr a. Filter ini dapat dipakai untuk menghilangkan derau bintik-bintik. Nilai yang lebih baik digunakan untuk s uatu piksel ditentukan oleh nilai median dari setiap p iksel dan kedelapan piksel tetangga pada 8-ketetang gaan. Secara matematis, filter dapat dinotasikan sep erti berikut: Gambaran operasi penggunaa n filter median Pada contoh di atas terlihat bahwa untuk mendapatka n median, diperlukan pengurutan (sorting) terlebih dul u Program : filmedian.m % FILMEDIAN Melakukan operasi dengan filter median F = imread('C:\Image\mobil.tif'); [tinggi, lebar] = size(F); for baris=2 : tinggi-1 for kolom=2 : lebar-1 data = [F(baris-1, kolom-1) F(baris-1, kolom) ... F(baris-1, kolom+1) F(baris, kolom-1) ... F(baris, kolom) F(baris, kolom+1) ... F(baris+1, kolom-1) F(baris+1, kolom) ... F(baris+1, kolom+1)]; % Urutkan for i=1 : 8 for j=i+1 : 9 if data(i) > data(j) tmp = data(i); data(i) = data(j); data(j) = tmp; end end end % Ambil nilai median G(baris, kolom) = data(5); end end figure(1); imshow(G); clear; Hasilnya terlihat bahwa derau dapat dihilangkan, tetapi detail pada citra tetap dipertahankan. Namun, hal ini tentu saja didapat dengan tambahan beban komputasi “pengurutan”. Pengertian Konvolusi ■ Konvolusi pada citra sering disebut sebagai konvolusi dua-dimensi (konvolusi 2D). ■ Konvolusi 2D didefinisikan sebagai proses untuk mem peroleh suatu piksel didasarkan pada nilai piksel itu s endiri dan tetangganya, dengan melibatkan suatu ma triks yang disebut kernel yang merepresentasikan pe mbobotan. Wujud kernel umumnya bujur sangkar, tet api dapat pula berbentuk persegi panjang Contoh kernel untuk konvolusi berukura n 3 x 3 dan m x n ■ Operasi ini dilakukan dengan menumpangkan suatu jendela (kernel) yang berisi angka-angka pengali pa da setiap piksel yang ditimpali. Kemudian, nilai rerat a diambil dari hasil-hasil kali tersebut. Khusus bila a ngka-angka pengali tersebut semua adalah 1, hasil yang didapat sama saja dengan filter pererataan. ■ Pada pelaksanaan konvolusi, kernel digeser sepanja ng baris dan kolom dalam citra (lihat Gambar ) sehin gga diperoleh nilai yang baru pada citra keluaran Konvolusi dilakukan dengan melakukan proses di sepanjang kolom dan baris pada citra Bagaimana konvolusi dilakukan? Prosesnya dirumuskan sebagai berikut: ■ Dalam hal ini, ■ m2 adalah separuh dari tinggi kernel (m2 = floor(m/2)), ■ n2 adalah separuh dari lebar kernel (n2 = floor(n/2)), ■ floor menyatakan pembulatan ke bawah, dan ■ h menyatakan kernel, dengan indeks dimulai dari 1. Ilustrasi konvolusi dijelaskan melalui contoh misalkan citra f(x,y) yang berukuran 5 x 5 dan sebuah kernel atau mask yang berukuran 3 x 3 masing-masing adalah sebagai berikut : ■ Operasi konvulasi antara citra f(x,y) dengan kernel g(x,y), f(x,y) * g(x,y) da pat diilustrasikan sebagai berikut : ■ 1. Tempatkan kernel pada sudut kiri atas, kemudian hitung nilai pixel pada posisi (0,0) dari kernel : Hasil konvulasi = 3. Nilai ini dihitung dengan cara berikut : (0 x 4) + (-1 x 4) + (0 x 3) + (-1 x 6) + (4 x 6) + (-1 x 5) + (0 x 5) + (-1 x 6) + (0 x 6) = 3 ■ 2. Geser kernel satu pixel ke kanan, kemudian hitung nilai pixel pada posis i (0,0) dari kernel. Hasil konvulasi = 0. nilai ini dihitung dengan cara beriku t: (0 x 4) + (-1 x 3) + (0 x 5) + (-1 x 6) + (4 x 5) + (-1 x 5) + (0 x 6) + (-1 x 6) + (0 x 6) = 0 3. Geser kernel satu pixel ke kanan, kemudian hitung nilai p ixel pada posisi (0,0) dari kernel. Hasil konvulasi = 2. nilai ini dihitung dengan cara b erikut : (0 x 3) + (-1 x 5) + (0 x 4) + (-1 x 5) + (4 x 5) + (-1 x 2) + (0 x 6) + (-1 x 6) + (0 x 2) = 2 ■ Selanjutnya geser kernel satu pixel ke bawah, lalu mulai lagi melakukan konvolusi dari sisi kiri citra. Setiap kali ko nvolusi, geser kernel satu pixel ke kanan. ■ Dengan cara yang sama seperti tadi, maka pixel-pixel p ada baris ketiga dikonvolusi sehingga menghasilkan : Hasil Konvolusi 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 ALGORITMA 4.2 – Konvolusi pada citra dengan mengabaikan bagian tepi Masukan: f : Citra yang akan dikonvolusi h : kernel konvolusi Keluaran: g : Citra hasil konvolusi 1. m2 floor(jumlah_baris_kernel h) 2. 3. n2 floor(jumlah_lebar_kernel h) FOR y m2+1 TO tinggi_citra_f – m2 FOR x n2+1 TO lebar_citra_f – n2 // Lakukan konvolusi jum 0; FOR p -m2 TO m2 FOR q -n2 TO n2 jum jum * h(p+m2+1, q+n2+1) * f(y-p, x-p) END-FOR END-FOR g2(y, x) jum END-FOR END-FOR 4. // Salin posisi g2 ke g dengan membuang yang tidak dikonvolusi 5. FOR y m2+1 TO tinggi_citra_f – m2 FOR x n2+1 TO lebar_citra_f – n2 g(y-m2, x-n2) g2(y, x) END-FOR END-FOR ■ Berdasarkan algoritma di atas, maka citra hasil akan kehilangan sebesar: ■ 2 * m2 baris atau sama dengan jumlah baris kernel dikurangi 1 ■ 2 * n2 kolom atau sama dengan jumlah kolom kerne l dikurangi 1 ■ Baris dan kolom yang dihilangkan adalah yang bera da di tepi citra Program : konvolusi.m function [G] = konvolusi(F, H) % KONVOLUSI Melakukan konvolusi kernel H dengan citra F % H harus mempunyai tinggi dan lebar ganjil % Hasil: citra G [tinggi_f, lebar_f] = size(F); [tinggi_h, lebar_h] = size(H); m2 = floor(tinggi_h/2); n2 = floor(lebar_h/2); F2=double(F); for y=m2+1 : tinggi_f-m2 for x=n2+1 : lebar_f-n2 % Pelaksanaan konvolusi F(baris, kolom) jum = 0; for p=-m2 : m2 for q=-n2 : n2 jum = jum + H(p+m2+1,q+n2+1) * ... F2(y-p, x-q); end end G(y-m2, x-n2) = jum; ■ Contoh pemakaian fungsi konvolusi ditunjukkan berikut ini. ■ ■ >> H = [-1 0 -1; 0 4 0; -1 0 -1]; ■ >> F = imread(‘C:\Image\gedung.tif’); ■ >> K = konvolusi (F, H); ■ ■ Pertama-tama, kernel H ditentukan melalui ■ ■ H=[-1 0 -1; 0 4 0; -1 0 -1]; ■ ■ Kernel di atas dinamakan “Quick Mask” (Phillips, 2000) dan berguna untuk deteksi tepi. ■ Selanjutnya, citra gedung.tif dibaca dan diletakkan di F. Lalu, konvolusi dila ksanakan dengan memanggil fungsi konvolusi. Dengan cara seperti itu, K b erisi hasil konvolusi citra F dan kernel H. Nilai K dapat dilihat secara sekilas dengan mengetikkan ■ ■ >> K ■ Nilai yang dihasilkan dengan konvolusi dapat bernilai negat if dan bahkan dapat melebihi nilai 255. Oleh karena itu, pe mrosesan konvolusi harus dilaksanakan dengan mengguna kan presisi ganda (bukan bilangan bulat). Lalu, setelah sem ua citra diproses dengan konvolusi, perlu dilakukan pengat uran nilai piksel agar berada pada jangkauan [0, 255]. Nilai yang kurang dari 0 diubah menjadi 0 dan yang melebihi 25 5 diubah menjadi 255. Fungsi uint8 dapat digunakan untuk kepentingan tersebut Contoh: ■ ■ >> K2 = uint8(K); ■ ■ Dengan cara seperti itu, nilai pada K2 berada pada jangkau an [0, 255]. Citra K2 dapat ditampilkan dengan menggunak an imshow Untuk memperlihatkan hasil deteksi tepi objek, nilai-nilai piksel hasil perlu dinaikkan yaitu ditambah 127 Problem pada Konvolusi ■ Pada Algoritma 4.2, terlihat bahwa tidak semua piksel diken ai konvolusi, yaitu baris dan kolom yang terletak di tepi citr a. Hal ini disebabkan piksel yang berada pada tepi tidak me miliki tetangga yang lengkap sehingga tentu saja rumus ko nvolusi tidak berlaku pada piksel seperti itu. Gambar beriku t menjelaskan contoh tentang hal ini. Sebagai contoh, konv olusi tidak mungkin dilakukan pada posisi A dan B. Ada bagian dari kernel yang tidak punya pasangan dengan piksel Untuk mengatasi keadaan seperti itu, terdapat beberapa solusi. ■ Abaikan piksel pada bagian tepi. Cara ini yang dilakukan pada Algoritma 4.2. Karena pada bagian tepi citra, teta ngga tidak lengkap maka piksel pada posisi tersebut tidak dikenai konvolusi. Se bagai konsekuensinya, citra yang tidak mengalami konvolusi maka diisi dengan nol atau diisi sesuai nilai pada citra asal. Alternatif lain (seperti pada contoh pr ogram konvolusi.m), bagian yang tidak diproses tidak diikutkan dalam citra hasi l. Akibatnya, ukuran citra hasil mengecil. ■ Buat baris tambahan pada bagian tepi. Baris dan kolom ditambahkan pada bagian tepi sehingga proses konvolusi dapa t dilaksanakan. Dalam hal ini, baris dan kolom baru diisi dengan nilai 0. ■ Ambil bagian yang tidak punya pasangan dengan bagian lain dari citr a. Ada beberapa pendekatan yang dapat dilakukan. Dua diantara cara-cara yang dapat digunakan dijelaskan dalam Gambar sebelumnya. Indeks melingkar dilak sanakan dengan mengambil data pada posisi di seberang citra, sedangkan inde ks tercermin diambilkan dari baris/kolom yang ada di dekatnya. Dua cara yang l ain yang diilustrasikan pada Gambar berikut(Cara menangani bagian tepi ci tra): – mengisi dengan citra pada bagian tepi (baik baris tepi ( maupun kolom te pi); – melakukan penggulungan secara periodis. Penentuan indeks untuk mengambil data untuk posisi kernel di luar area citra Cara menangani bagian tepi citra ALGORITMA 4.3 – Konvolusi pada citra memakai indeks tercermin Masukan: f : Citra yang akan dikonvolusi h : kernel konvolusi Keluaran: g(y, x) : Citra hasil konvolusi 1. m2 floor(jumlah baris kernel h) 2. n2 floor(jumlah lebar_kernel h) 3. FOR y 1 TO tinggi_citra_f FOR x 1 TO lebar_citra_f // Lakukan konvolusi jum 0 FOR p -m2 TO m2 FOR q -n2 TO n2 // Penanganan pada x x2 x-p IF x2 < 1 x2 -x2 + 1 ELSE IF x2 > lebar_citra_f x2 2 lebar_citra_f – x2 + 1 END-IF END-IF // Penanganan pada y y2 y-p IF y2 < 1 y2 -y2 + 1 ELSE IF y2 > tinggi_citra_f x2 2 tinggi_citra_f – x2 + 1 END-IF END-IF jum jum * h(p+m2+1, q+n2+1) * f(y2, x2) END-FOR END-FOR g(y, x) jum END-FOR END-FOR Program : konvolusi2.m function [G] = konvolusi2(F, H) % KONVOLUSI2 Melakukan konvolusi kernel H dengan citra F % (Versi Algoritma 4.3) % H harus mempunyai tinggi dan lebar ganjil % Hasil: citra G [tinggi_f, lebar_f] = size(F); [tinggi_h, lebar_h] = size(H); m2 = floor(tinggi_h/2); n2 = floor(lebar_h/2); F2=double(F); for y=1 : tinggi_f for x=1 : lebar_f % Pelaksanaan konvolusi F(baris, kolom) jum = 0; for p=-m2 : m2 for q=-n2 : n2 % Penanganan x x2 = x-q; if x2 < 1 x2 = -x2 + 1; else if x2 > lebar_f x2 = 2 * lebar_f - x2 + 1; end end % Penanganan y y2 = y-p; if y2 < 1 y2 = -y2 + 1; else if y2 > tinggi_f y2 = 2 * tinggi_f - y2 + 1; end end jum = jum + H(p+m2+1,q+m2+1) * ... F2(y2, x2); end end G(y, x) = jum; end end Pengertian Frekuensi ■ Pada citra, istilah frekuensi tidak berhubungan dengan wak tu, melainkan berkaitan dengan keruangan atau spasial. Ol eh karena itu, citra dikatakan memiliki frekuensi spasial. De finisi di Wikipedia menyatakan bahwa frekuensi spasial adal ah karakteristik sebarang struktur yang bersifat periodis se panjang posisi dalam ruang. Frekuensi spasial adalah ukura n seberapa sering struktur muncul berulang dalam satu sat uan jarak. ■ Frekuensi spasial pada citra menunjukkan seberapa sering suatu perubahan aras keabuan terjadi dari suatu posisi ke p osisi berikutnya ■ Gambar berikut menunjukkan secara visual perbedaan ant ara frekuensi rendah dan frekuensi tinggi. Pada citra berfre kuensi tinggi, perubahan aras sering terjadi seiring dengan pergeseran jarak Perbedaan frekuensi rendah dan frekuensi tinggi pada citra Pada Gambar (a), perubahan aras keabuan terjadi sekali saja, sedangkan pada Gambar (b) terlihat bahwa perubahan aras keabuan sering terjadi. Itulah sebabnya, Gambar (c) menyatakan contoh frekuensi rendah dan Gambar (d) menunjukkan contoh frekuensi tinggi Filter Lolos-Rendah ■ Filter lolos-bawah (low-pass filter) adalah filter yang memp unyai sifat dapat meloloskan yang berfrekuensi rendah dan menghilangkan yang berfrekuensi tinggi. Efek filter ini me mbuat perubahan aras keabuan menjadi lebih lembut ■ Filter ini berguna untuk menghaluskan derau atau untuk ke pentingan interpolasi tepi objek dalam citra. Contoh kernel untuk filter lolos-ba wah Apa pengaruhnya secara visual pada citra? Melalui filter lolos-rendah, hal-hal yang menyatakan frekuensi tinggi akan diredupkan, sedangkan bagian berfrekuensi rendah hampir tidak berubah Program : tapis.m function [G] = tapis(berkas, H) % TAPIS Menerapkan filter H dengan citra F % H harus mempunyai tinggi dan lebar ganjil % Hasil: citra G F = imread(berkas); K = konvolusi(F, H); G = uint8(K); figure(1); imshow(F); figure(2); imshow(G); ■ Contoh penguji program di atas: >> H = [1 1 1; 1 1 1; 1 1 1] / 9; >> tapis('C:\Image\mobil.tif', H); Contoh penerapan konvolusi menggunakan kernel #2 Efek pemakaian tiga macam filter lolos-rendah pada b oneka Filter Lolos-Tinggi Filter lolos-tinggi adalah filter yang ditujukan untuk melewatka n frekuensi tinggi dan menghalangi yang berfrekuensi rendah. Hal ini biasa dipakai untuk mendapatkan tepi objek dalam citr a atau menajamkan citra Contoh tiga kernel filter lolos-tinggi Filter lolos-tinggi mempunyai sifat yaitu jumlah seluru h koefisien adalah nol. Selain itu terdapat sifat sebagai berikut (Efford, 2000). ■ Apabila dikenakan pada area dengan perubahan ar as keabuan yang lambat (frekuensi rendah), hasil b erupa nol atau nilai yang sangat kecil. ■ Apabila dikenakan pada area yang perubahan aras keabuannya cepat (frekuensi tinggi), hasil konvolusi bernilai sangat besar. ■ Jika kernel seperti berikut Hasil pemrosesan dengan filter lolos-tinggi pada citra boneka Hasil pemrosesan dengan filter lolos-tinggi pada citra bulat Filter High-Boost ■ Filter “high boost” (Efford, 2000) dapat digunakan untuk m enajamkan citra melalui konvolusi. Kernel yang dapat dipak ai adalah kernel filter lolos-tinggi dengan nilai di pusat diisi dengan nilai yang lebih besar daripada nilai pada posisi ter sebut untuk filter lolos-tinggi filter high boost Gambar berikut menunjukkan efek saat c diisi dengan 9, 10, dan 11 Efek Emboss ■ Gambar berikut menunjukkan contoh hasil embossing. Terli hat ada penebalan garis pada arah tertentu Kernel yang digunakan seperti berikut Nilai negatif dan positif yang berpasangan menentukan perubahan kecerahan yang berefek pada penggambaran garis gelap atau terang Nilai negatif pada kernel emboss menentukan arah penebalan garis. B eberapa contoh yang dapat dicoba ditunjukkan pada gambar berikut ■ Latihan 1. Apa maksud 4-ketetanggan dan 8-ketetanggan? 2. Menurut pengamatan Anda, apa yang membedakan pemr osesan berikut kalau dilihat hasilnya secara visual? 1. Filter batas 2. Filter pererataan 3. Filter median 3. Terdapat kernel seperti berikut ■ Jika dikenakan pada citra yang berisi data seperti berikut, berapa hasil pada posisi yang diarsir abu-abu? |