LAPORAN TUGAS MATA KULIAH PENGOLAHAN CITRA DIGITAL Aplikasi Filter pada Domain Spasial Disusun oleh: Iyan Hanafi Van Tony NIM: 11/316832/PA/13958 JURUSAN ILMU KOMPUTER DAN ELEKTRONIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS GADJAH MADA 2015
Dasar Teori Spasial Filtering adalah filtering dalam domain spasial. Dimana filtering sendiri merupakan proses melewatkan ataupun menghambat suatu frekuensi dari komponen, dalam hal ini komponen spasial. Istilah filter disini sebenarnya mengacu kepada proses domain frekuensi, yaitu meloloskan (menerima) komponen frekuensi tertentu dan menghilangkan (menolak) komponen frekuensi yang lain. Sebagai contoh, filter lolos rendah (Low Pass Filter) berarti meloloskan komponen frekuensi yang rendah. Pemfilteran domain spasial adalah proses manipulasi kumpulan piksel dari sebuah citra untuk menghasilkan citra baru. Pemfilteran domain spesial merupakan salah satu alat yang digunakan dalam banyak bidang untuk berbagai aplikasi, khususnya pada bagian ini untuk peningkatan kualitas citra dan perbaikan citra. Di sini di asumsikan bahwa m = 2a+1 dan n = 2b+1, dengan a dan b adalah integer nonnegatif. Untuk mendapatkan citra hasil filtering yang lengkap maka persamaan 3-17 harus dihitung untuk x = 0,1,..., M-1 dan y = 0,1,..., N-1. Korelasi dan Konvolusi Korelasi adalah perkalian antara dua buah fungsi f(x,y) dan g(x,y). Untuk fungsi diksrit korelasi didefinisikan. Dimana x, y, k, dan l adalah variabel bebas yang memiliki nilai diskrit yang berupa posisi titik di dalam citra. M dan N adalah batas titik tetangga yang masih memberikan pengaruh ke titik yang sedang ditinjau untuk arah vertikal dan horizontal. Dalam hal ini h(x,y) disebut hasil korelasi dari citra f(x,y) dengan filterg(x,y). Konvolusi adalah suatu proses yang cara kerjanya sama dengan proses korelasi, hanya saja nilai-nilai filternya dibalik 180⁰. Merancang Filter Rata-rata Filter ini biasa disebut sebagai filter penghalus (smoothing filters) dan juga ada yang menyebut sebagai lowpass filters. Cara kerja filter rata-rata adalah seperti konvolusi. Filter ini biasa digunakan untuk mengaburkan (blurring) citra dan untuk mereduksi noise. blurring biasanya digunakan untuk menghilangkan detail kecil dari suatu citra sebelum dilakukan ekstraksi objek dan untuk menghubungkan celah kecil yang memisahkan garis atau kurva dan juga bisa digunakan untuk mereduksi noise.
FILTER SPASIAL NONLINIER Filter spasial nonlinier atau disebut juga sebagai Order-statistics filtersadalah filter spasial nonlinier yang responsnya didasarkan pada pengurutan dari intensitas piksel-piksel tetangga yang dilingkupi oleh filter tersebut. Beberapa Order-statistics filters yang biasa digunakan adalah filter maksimum (memilih nilai terbesar), yang berguna untuk memilih intensitas paling terang, filter minimum (memilih nilai terkecil) yang berguna untuk memilih intensitas paling gelap, filter rata-rata untuk memilih rata-rata dari piksel-piksel yang dilingkupi oleh filter dan filter median yang berguna untuk memilih nilai tengah. Filter median biasa digunakan untuk menghilangkan noise impulse atau disebut juga noise salt-and-pepper, yaitu noise yang menyerupai taburan garam sehingga titik-titik hitam dan putih tampak pada citra. Diagram Alir Program Mulai Input citra sebagai Matriks Konversi citra ke grayscale Lakukan perkalian matriks citra dengan matriks filter yang sudah ditentukan Tampilkan citra awal dan citra hasil olahan Berhenti
Menerapkan Algoritma pada Program A. High Pass Filter 3x3 dan 5x5 import matplotlib.pyplot as plt import numpy as np from scipy import ndimage from scipy.misc.pilutil import Image def plot(data, title): plot.i += 1 plt.subplot(2,2,plot.i) plt.imshow(data) plt.gray() plt.title(title) plot.i = 0 im = Image.open("E:\ini\saya.jpg").convert('L') data = np.array(im, dtype=int) plot(data, 'Gambar Asli') kernel = np.array([[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]]) highpass_3x3 = ndimage.convolve(data, kernel) plot(highpass_3x3, 'High Pass 3x3') kernel = np.array([[-1, -1, -1, -1, -1], [-1, 1, 2, 1, -1], [-1, 2, 4, 2, -1], [-1, 1, 2, 1, -1], [-1, -1, -1, -1, -1]]) highpass_5x5 = ndimage.convolve(data, kernel) plot(highpass_5x5, 'High Pass 5x5')
plt.show() B. Gradient Filter Menggunakan Operator Sobel import matplotlib.pyplot as plt import numpy as np from scipy import ndimage from scipy.misc.pilutil import Image def plot(data, title): plot.i += 1 plt.subplot(2,2,plot.i) plt.imshow(data) plt.gray() plt.title(title) plot.i = 0 im = Image.open("E:\ini\susi.jpg").convert('L') data = np.array(im, dtype=float) plot(data, 'Citra Masukan') kernel = np.array([[-1, -2, -1], [0, 0, 0], [1, 2, 1]]) hsobel_3x3 = ndimage.convolve(data, kernel) plot(hsobel_3x3, 'Horizontal Sobel 3x3') kernel = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]]) vsobel_3x3 = ndimage.convolve(data, kernel) plot(vsobel_3x3, 'Vertical Sobel 3x3') plt.show() C. Gradien Filter Menggunakan Operator Robert import matplotlib.pyplot as plt import numpy as np
from scipy import ndimage from scipy.misc.pilutil import Image def plot(data, title): plot.i += 1 plt.subplot(2,2,plot.i) plt.imshow(data) plt.gray() plt.title(title) plot.i = 0 im = Image.open("E:\ini\susi.jpg").convert('L') data = np.array(im, dtype=float) plot(data, 'Citra Masukan') kernel = np.array([[-1, 0], [0, -1]]) hsobel_3x3 = ndimage.convolve(data, kernel) plot(hsobel_3x3, 'Robert Cross 2x2') kernel = np.array([[0, -1], [1, 0]]) vsobel_3x3 = ndimage.convolve(data, kernel) plot(vsobel_3x3, 'Robert Cross 2x2') plt.show() Hasil Eksperimen A. Hasil Operasi Citra Menggunakan Filter High Pass Hasil Operasi High Pass
B. Hasil Operasi Menggunakan Gradient Filter Operator Sobel Hasil Operasi Sobel Operator
A. Hasil Operasi Citra Menggunakan Robert Cross Gradient Filter Hasil Operasi Robert Cross
Pembahasan A. Algoritma Program Program ini bekerja dengan cara menerima masukan citra. Untuk kemudian dari citra tersebut diolah menjadi matris dari citra tersebut. Kemudian dengan memanfaatkan persamaan model dari filter spasial yaitu: I J g(m, n) = w(i, j)f(m i, n j) i= I j= J Dimana g(m, n) adalah citra baru hasil olahan yang didapatkan dari jumlahan perkalian antara matriks filter secara horizontal dan secara vertikal dengan matriks citra secara horizontal dan vertikal kemudian melalui proses konvolusi didapatkan bahwa filter akan menyaring pada matriks citra masukan untuk memeperoleh citra baru yang diinginkan. Setelah proses filterisasi dan konvolusi selesai maka hasil citra olahan beserta citra asli akan ditampilkan. B. Listing Program Progam ini ditulis menggunakan bahala pemrograman Python versi 3.4 serta menggunakan beberapa library, library yang penulis gunakan beserta fungsinya adalah : 1. Matplotlib : digunakan untuk menampilkan citra hasil olahan
2. Numpy : digunakan untuk melakukan operasi numerik 3. Scipy : untuk memuat citra dalam lingkungan python dan menampilkannya sebagai array. Sedangkan untuk pembahasan listing yang penulis gunakan adalah sebagai berikut : 1. import matplotlib.pyplot as plt untuk menampilkan citra hasil olahan 2. import numpy as np untuk melakukan operasi numerik dimana penulis memuat numpy dengan keyword np dalam program ini. 3. from scipy import ndimage untuk memuat citra sebagai matriks 4. from scipy.misc.pilutil import Image fungsi Image didapatkan dalam folder /...installasipython../lib/scipy/misc/pilutil yang berfugsi untuk memuat citra dalam lingkungan python. 5. def plot(data, title): plot.i += 1 plt.subplot(2,2,plot.i) plt.imshow(data) plt.gray() plt.title(title) plot.i = 0 adalah pembuatan fungsi yang bernama plot dungan deklarasi pada python menggunakan perintah def. Kemudian plt.i +=1 adalah melakukan proses increment pada variabel i, plt.subplot(2,2,plot.i) adalah untuk melakukan subplotting atau melakukan plotting citra lain. Plt.imshow(data) adalaah menampilkan citra asli yang dituliskan dengan variabel data, plt.gray() adalah perintah untuk menapiilkan citra dalam grayscale, plt.titl.(title) adalah perintah untuk menampilkan title citra masing maling olahan dan plt.i=0 adalah nilai i untuk inisialisasi adalah 0. 6. im = Image.open("E:\ini\saya.jpg").convert('L') perintah ini digunakan untuk membuka citra bernama saya.jpg yang berada dalam direktori "E:\ini\ kemudian mengonvertnya menjadi citra keabuan dengan perintah.convert( L ) kemudian menyimpannya dalam variabel im. 7. data = np.array(im, dtype=int) perintah ini digunakan untuk menjadikan citra yang sebelumnya disimpan dalam variabe im menjadi berbentuk nilai matriksnya dengan menggunakan tipe data int kemudian matriks tersebut disimpan dalam variabel data. 8. plot(data, 'Citra Masukan')
perintah ini untuk memplotkan matrik 2 dimensi dari variabel data dengan title citra masukan. 9. kernel = np.array([[-1, -2, -1], [0, 0, 0], [1, 2, 1]]) perintah ini adalah untuk membuat filter yang dituliskan berformat matrix atau array 2 dimensi yang disimpan dalam variabel kernel. Filter yang penulis gunakan adalah : 1 1 1 a. Highpass 3x3 dan matriksnya adalah: 1 8 1 dalam python 1 1 1 matriks tersebut dapat dituliskan menjadi [[ 1, 1, 1], [ 1, 8, 1], [ 1, 1,1]]. b. Highpass 5x5 dan matriksnya adalah [ 1, 1, 1, 1, 1], [ 1, 1,2,1, 1], [ 1,1,4,1, 1], [ 1,1,2,1, 1] [ 1, 1, 1, 1, 1]] c. Untuk horizontal sobel 3x3 adalah: 1 2 1 0 0 0 1 2 1 d. Untuk vertikal sobel 3x3 adalah: 1 0 1 2 0 2 1 0 1 e. Untuk Robert Cross 2x2 adalah: 0 1 1 0 dan 1 0 0 1 10. hsobel_3x3 = ndimage.convolve(data, kernel) ndimage.convolve adalah melakukan operasi konvolusi terhadap citra asli yang dituliskan dengan variabel data dengan filter yang ditulskan dengan variabel kernel kemudian hasil tersebut disimpan dalam variabel hsobel_3x3, untuk variabel lain penulis menggunakan variabel vsobel3x3, High_pass_3x3, high_pass_5x5, serta Robert_cross_2x2. 11. plot(hsobel_3x3, 'Horizontal Sobel 3x3') perintah tersebut adalah untuk memplot isi dari variabel hsobel_3x3 dengan caption Horizontal Sobel 3x3, untuk variabel lain penulis
menggunakan variabel vsobel3x3, High_pass_3x3, high_pass_5x5, serta Robert_cross_2x2. 12. plt.show() adalah perintah untuk menampilkan hasil olahan secara kelesuruhan menggunakan fungsi plt yang telah didefinisikan sebelumnya. Kesimpulan 1. Progam ini bekerja dengan baik setelah pengujian dilakukan menggunakan 6 operator dan 3 citra masukan. 2. Proses konvolusi yang dituliskan di progam dapat digantikan dengan menggunakan perintah for maupun while yang berguna untuk melaakukan looping namun hal itu akan memperlama proses. 3. Pada Eksperimen penulis mencoba memasukkan citra berukuran 4320 x 3240 dan hasil pengolahan citra membutuhkan waktu yang lama. Daftar Pustaka Wilhelm Burger, Mark J. Burge. Principles of Digital Image Processing.2009.London: Springer Mark Lutz. Learning Python 4 th edition. 2009. California: O Reily Gonzalez C., Rafael. Digital Image Processing 3th Editions. 2008. New York: Academic Press Bernd Jähne. Digital Image Processing. 2005. New York: Springer