Thursday, 27 October 2016

Pengolahan Citra 7: Filter Spasial Linear

Pembahasan Pertemuan 7

Halo, apa kabar para pembaca setia blog ini? Maaf sudah lama tidak update, dikarenakan kesibukan rutinitas kerjaan dan tugas-tugas kuliah lain yang semakin menumpuk. Ya, sekarang akan saya post pembahasan-pembahasan lanjutan dari pengolahan citra yang telah lama tertunda. Silahkan menikmati:

Pada pembahasan pertemuan 7 ini akan dibahas mengenai bagaimana cara melakukan filter dengan area lokal. Proses filter yang dilakukan pada pembahasan praktikum ini adalah Filter Spasial Linear. Jika pada pertemuan 6 kita mempelajari mengenai filter spasial non linear yang terdiri dari filter mean, max, dan min, maka pertemuan ini akan membahas mengenai filter spasial linear. Pada pembuatan program filter spasial linear ini, belum diwajibkan untuk menggunakan jenis filter yang mana.
Filter Spasial Linear bisa dilakukan dengan teknik konvolusi atau korelasi. Pada pertemuan ini belum diwajibkan harus menggunakan konvolusi atau korelasi. Pada pembuatan program kali ini digunakan dua teknik yang dapat dibedakan dari cara menuliskan program. Untuk hasil, nantinya akan menghasilkan hasil yang sama. Berikut ini adalah penjelasan singkat mengenai proses konvolusi dan korelasi yang sudah pernah dijelaskan juga pada pertemuan 6 yang lalu:

Filter
Filter merupakan proses/kegiatan meloloskan/menerima komponen dengan frekuensi tertentu dan menghilangkan/menolak komponen dengan frekuensi yang lain. Berdasarkan jenisnya, filter dibedakan menjadi dua jenis yaitu:
·         Filter Spasial Linear
·         Filter Spasial Non Linear

Filter Spasial Linear:
Pada filter spasial linear ini, proses bekerja dengan cara korelasi atau konvolusi antara area lokal suatu sel bitmap dengan kernel. Contohnya adalah filter rata-rata dan filter gaussian. Berikut ini adalah contoh analogi proses melakukan filter rata-rata dengan konvolusi dan korelasi:

Korelasi:
Korelasi merupakan perkalian antara dua fungsi f(x,y) dan g(x,y). berikut ini adalah fungsi secara matematis untuk korelasi:



Keterangan dari rumus matematis di atas adalah sebagai berikut:
         x, y, k, l à variabel bebas yang memiliki nilai diskrit, dimana x dan y adalah koordinat piksel yang sedang diolah, k dan l adalah koordinat dari piksel dalam suatu area lokal yang memperngaruhi hasil h(x,y)
         h(x,y) hasil pada koordinat x,y
         f(x,y) à fungsi f yang mengolah piksel x,y berikut tetangganya
         g(x,y) à fungsi filter untuk mengolah piksel x,y
         M, N à batas titik tetangga yang mempengaruhi titik yang sedang diolah

Berikut ini adalah contoh penulisan korelasi dalam pemrograman:


Dari rumus di atas bitmap hasil merupakan bitmap yang akan menampung piksel yang telah dikalikan dengan kernel 3x3. Sedangkan bitmap asal merupakan bitmap yang akan diproses / difilter. Berikut ini adalah gambaran proses korelasi:


Konvolusi:
Perkalian antara dua fungsi f(x,y) dan g(x,y). Dimana fungsi g(x,y) konvolusi berkebalikan dengan g(x,y) pada korelasi. Berikut ini adalah penulisan perkalian konvolusi pada proses pemrograman:


Dari rumus di atas bitmap hasil merupakan bitmap yang akan menampung piksel yang telah dikalikan dengan kernel 3x3. Sedangkan bitmap asal merupakan bitmap yang akan diproses / difilter. Berikut ini adalah gambaran proses konvolusi yitu dengan mengalikan kernel yang posisinya berbalik:


Berikut adalah listing program untuk filter spasial linear:






Dari listing program di atas, ada bagian yang dapat kita amati yaitu proses konvolusi dan korelasi. Berikut lebih jelasnya potongan program untuk proses korelasi:


Dan berikut ini adalah potongan program untuk proses konvolusi:


Dari kedua potongan program tersebut kita melakukan filter rata-rata. Perbedaan dengan Filter Spasial Non Linear adalah bahwa pada filter mean non linear, pengerjaan prosesnya adalah dikalikan, dijumlahkan lalu dibagi 9. Jika pada filter spasial linear hanya dikalikan dan dijumlahkan tanpa harus dibagi 9 karena di awal pada bagian program isi kernel sudah diisi dengan nilai 1/9.

Berikut ini proses compile:



Hasil tampilan:


Dari hasil tampilan tersebut, dapat kita lihat mean filtering denga teknik Filter Spasial Linear Konvolusi dan Korelasi menghaislkan hasil yang sama. Naik filter spasial non linear dan filter spasial linear yang membedakan hanya cara perhitungannya. Pada spasial non linear harus dibagi 9, pada spasial linear ini tidak perlu lagi dibagi 9 hanya perlu dikalikan dan dijumlahkan.

Sekian pembahasan dari pertemuan 7 mengenai Filter Spasial Linear. 










Friday, 29 April 2016

Pengolahan Citra 6: Filter Spasial Non Linear

Pada pembahasan pertemuan 6 ini akan dibahas mengenai bagaimana cara melakukan filter dengan area lokal. Proses filter yang dilakukan pada pembahasan praktikum ini adalah Filter Mean (Rata-rata), Filter Maximum, dan Filter Minimum. Sebelum membahas proses pembuatan programnya, ada baiknya kita membahas teori perhitungan filter yang kita gunakan yang nantinya akan kita terapkan pada saat pembuatan program filtering.

Filter

Filter merupakan proses/kegiatan meloloskan/menerima komponen dengan frekuensi tertentu dan menghilangkan/menolak komponen dengan frekuensi yang lain. Berdasarkan jenisnya, filter dibedakan menjadi dua jenis yaitu:

  • Filter Spasial Linear
  • Filter Spasial Non Linear
Filter Spasial Linear:

Pada filter spasial linear ini, proses bekerja dengan cara korelasi atau konvolusi antara area lokal suatu sel bitmap dengan kernel. Contohnya adalah filter rata-rata dan filter gaussian. Berikut ini adalah contoh analogi proses melakukan filter rata-rata dengan konvolusi dan korelasi:

Korelasi: 


Korelasi merupakan perkalian antara dua fungsi f(x,y) dan g(x,y). berikut ini adalah fungsi secara matematis untuk korelasi:



Keterangan dari rumus matematis di atas adalah sebagai berikut:
  • x, y, k, l à variabel bebas yang memiliki nilai diskrit, dimana x dan y adalah koordinat piksel yang sedang diolah, k dan l adalah koordinat dari piksel dalam suatu area lokal yang memperngaruhi hasil h(x,y)
  • h(x,y) hasil pada koordinat x,y
  • f(x,y) à fungsi f yang mengolah piksel x,y berikut tetangganya
  • g(x,y) à fungsi filter untuk mengolah piksel x,y
  • M, N à batas titik tetangga yang mempengaruhi titik yang sedang diolah

Berikut ini adalah contoh penulisan korelasi dalam pemrograman:




Dari rumus di atas bitmap hasil merupakan bitmap yang akan menampung piksel yang telah dikalikan dengan kernel 3x3. Sedangkan bitmap asal merupakan bitmap yang akan diproses / difilter. Berikut ini adalah gambaran proses korelasi:


Konvolusi:

Perkalian antara dua fungsi f(x,y) dan g(x,y). Dimana fungsi g(x,y) konvolusi berkebalikan dengan g(x,y) pada korelasi. Berikut ini adalah penulisan perkalian konvolusi pada proses pemrograman:



Dari rumus di atas bitmap hasil merupakan bitmap yang akan menampung piksel yang telah dikalikan dengan kernel 3x3. Sedangkan bitmap asal merupakan bitmap yang akan diproses / difilter. Berikut ini adalah gambaran proses konvolusi yitu dengan mengalikan kernel yang posisinya berbalik:


Filter Spasial Non Linear

Filter spasial non linear merupakan proses filtering dengan meloloskan suatu nilai yang didapatkan dari proses no linear. Beberapa contoh yang didapat dari operasi statistik:
  • Mean Filtering à mengganti nilai sel bitmap dengan nilai rata-rata dari area lokal.
  • Minimum Filtering à mengganti nilai sel bitmap dengan nilai terkecil dari area lokal.
  • Maximum Filtering à mengganti nilai sel bitmap dengan nilai terbesar dari area lokal.
  • Mid-Point Filtering à mengganti nilai sel bitmap dengan nilai tengah diantara nilai terkecil dan terbesar dari area lokal.
  • Median Filtering à mengganti nilai sel bitmap dengan nilai median dari area lokal yang sudah disort.

Pada praktikum ini akan difokuskan pada filter spasial mean, minimum, dan maksimum. Berikut ini akan diberikan gambaran analogi proses filter mean, minimum, dan maksimum yang nantinya akan dibuat programnya:

Filter Mean:

Filter Minimum:


Filter Maximum:


Setelah membahas teori-teori yang mendukung pembuatan program, di bawah ini akan dibahas langkah pembuatan program:

Source Code:










Penjelasan program:

Pada source code program di atas, kita menyediakan banyak variabel penampung untuk bitmap hasil. Hal itu disediakan untuk mengantisipasi adanya nilai yang sama yang dimasukkan ke dalam sebuah variabel yang harusnya variabel itu dieksekusi dua kali dengan nilai yang berbeda. Hal itu akan menghasilkan kesalahan saat compile.

Pada line 78 sampai 81, kita menyediakan array dengan nilai lebar+2 dan tinggi+2 dengan pemikiran bahwa saat kita menambahkan nilai tepi di sisi paling atas, paling kiri, paling bawah, dan paling kanan, maka tempat untuk mengisi piksel tidak akan cukup. Misalnya jika piksel yang kita butuhkan berbentuk matriks atau table 5x5, maka setelah ditambahkan nilai tepinya, akan berubah menjadi 7x7. Masing-masing sisi bertambah 1 deret. Untuk itu pada saat deklarasi, batas array kita tambahkan 2 untuk batas nilai lebar dan batas nilai tinggi.

Pada line 125 sampai line ke 154, adalah proses pengisian nilai tepi. Kita gunakan dua kali proses untuk mengisi nilai tepi. Yang pertama kita mengisi nilai tepi untuk bagian vertikal paling kiri dan paling kanan. Sedangkan proses looping for kedua adalah untuk mengisi nilai tepi pada bagian horizontal paling atas dan paling bawah. Selanjutya, proses filter mean dilakukan pada line ke 157 sampai dengan line ke 196. Seperti pada teori yang telah dibahas, bahwa pada filter mean, akan dijumlahkan 1 buah piksel dengan tetangganya yang ada pada satu posisi lalu hasil penjumlahan itu dibagi 9.

Pada line 205 sampai dengan line ke 226, adalah proses untuk melakukan filter max. Pada tahap ini yang dilakukan adalah melakukan konversi dari array 2 dimensi menjadi array 1 dimensi. Setelah dikonversi menjadi array 1 dimensi, baru dilakukan pembandingan dengan algoritma maximum. Sama halnya dengan proses filter minimum.

Berikut ini adalah source code tampilan web untuk menampilkan hasil yang telah kita buat dari source code di atas.

Tampilan Web (html):


Proses Compile:


Memanggil AppletViewer:



Hasil Tampilannya adalah sebagai berikut:


Sekian pembahasan mengenai filter spasial non linear pada pertemuan 6 ini.









Friday, 20 November 2015

Pengolahan Citra 5: Kontras & Histogram

Pada pembahasan pertemuan 5 ini akan dibahas mengenai bagaimana cara melakukan kontras dan histogram. Pembahasan mengenai kontras dan histogram akan dibahas satu per satu.

Kontras:
Kontras merupakan tingkat penyebaran piksel-piksel ke dalam intensitas warna. Kontras yang rendah dikarenakan kurangnya pencahayaan mengakibatkan intensitas warna berkumpul di tengah skala intensitas. Sedangkan kontras tinggi dikarenakan terlalu banyak pencahayaan mengakibatkan intensitas warna berkumpul di awal dan akhir skala intensitas, sedangkan di tengah sangat kecil frekuensinya.

Suatu kontras dikatakan normal (tidak tinggi dan tidak rendah) apabila penyebaran piksel tidak terlalu ekstrem. Operasi kontras dilakukan dengan cara stretching pada histogram.


Fungsi kontras yang kita gunakan adalah sebagai berikut:


Histogram:
Proses histogram dilakukan untuk menunjukkan frekuensi kemunculan setiap gradasi warna. Pada histogram, terdapat dua buah sumbu yang perlu diperhatikan yaitu sumbu x dan sumbu y. berikut ini keterangan yang menunjukkan sumbu x dan sumbu y:

Sumbu X: Menunjukkan nilai intensitas
Sumbu Y: Frekuensi kemunculan(banyaknya piksel dengan intensitas x) pada citra atau kebalikannya tergantung kebutuhan.

Semakin besar bit pada sistem yang digunakan, semakin banyak variasi intensitasnya, semakin panjang pula sumbu yang mewakili intensitas nya. Pada citra grayscale, yang digunakan adalah derajat keabu-abuannya. Sedangkan pada citra RGB yang dipergunakan adalah intensitas masing-masing channel.

Manfaat dari histogram yang kita pelajari ini adalah sebagai berikut:
  • Indikasi visual untuk menentukan skala intensitas yang tepat, sehingga diperoleh kualitas citra yang diinginkan.
  • Pemilihan batas ambang (tresshold). Tresshold merupakan nilai piksel yang memenuhi syarat ambang batas yang dipetakan ke suatu nilai yang dikehendaki.
  • Pada computer vision dapat dimanfaatkan sebagai feature.


Sekian penjelasan singkat mengenai kontras dan histogram. Berikutnya akan dibahas mengenai penerapan konsep kontras dan histogram pada pembuatan program pengolahan citra.

Pada pembahasan kali ini akan sedikit berbeda dari pembahasn-pembahasan sebelumnya. Perbedaan yang dimaksud adalah cara mengambil citra yang biasa kita lakukan di awal penulisan program. Pada pembahasan ini akan dijelaskan bagaimana mengambil suatu citra menggunakan parameter. Bagaimana cara penerapan parameter tersebut, akan dijelaskan pada pembahasan ini. Berikut ini adalah source code program kontras dan histogram serta penjelasan mengenai pengambilan citra menggunakan parameter:

Penggunaan parameter:

<html>
<head>
<title>Contrast</title>
</head>
<body>
<applet code=Kontras.class width=1500 height=500>
<PARAM NAME = filegambar VALUE="gambar.jpg">
<PARAM NAME = parp VALUE=190>
<PARAM NAME = parg VALUE=3>
</applet>
</body>
</html>

Dari contoh format html di atas, untuk pembahasan ini digunakan tetapan untuk pembuatan program nantinya dengan nilai P=190 dan nilai G=3. Setelah kita membuat tampilan html seperti di atas, pada bagian pengambilan citra kita ganti juga cara pengambilannya menjadi seperti ini:
Untuk pengambilan parameter, gunakan methot getParameter();

img=this.getImage(this.getDocumentBase(),getParameter("filegambar"));
parG = Integer.parseInt(getParameter("parg"));
parP = Integer.parseInt(getParameter("parp"));

kita sudah mendapatkan cara membuat parameter dan cara mengambil citra dengan parameter tersebut. Berikut ini adalah keseluruhan source code program kontras dan histogram:


Tampilan web:


Proses compile:


Memanggil appletviewer:


Hasil Tampilannya adalah sebagai berikut:


Demikian pembahasan mengenai kontras dan histogram pada pembahasan ke-5 dari pengolahan citra.






Pengolahan Citra 4: Brightness, Invers, Kuantisasi Biner

Pembahasan Pertemuan 4

Pada pembahasan pertemuan 4 ini akan dibahas mengenai bagaimana cara brightness (mencerahkan dan menggelapkan citra), Invers (negasi), dan kuantisasi biner. Pembahasan dari ketiga jenis pengolahan citra tersebut akan dibahas satu per satu.

Brightness:
Mendengar kata brightness, yang terlintas di dalam pikiran kita akan langsung berpikiran mengenai terang dan gelap pada suatu image / citra. Dalam operasi brightness ini, kita akan membuat citra semakin terang atau pun semakin gelap. Dalam operasi brightness, ada beberapa point yang perlu kita ingat dalam membuat program untuk pengolahan citra, antara lain:
  • Intensitas:


  • Citra Grayscale:


  • Citra True Color:


  • Nilai Kecerahan (k): Nilai maksimum dan nilai minimum dari K tergantung dari jumlah bit.

Invers (Negasi):

Tujuan dari penggunaan operasi invers ini adalah untuk membuat citra negative. Seperti apa citra negative nantinya akan kita coba pada pembuatan program. Untuk membuat citra menjadi negative dibutuhkan rumus perhitungan yang diterapkan dalam pemrograman. Berikut ini adalah rumus yang diperlukan:


Dari rumus di atas ini yang dimaksud dengan fmaksimum adalah nilai tertinggi dalam bit warna. Misalnya untuk citra grayscale 8 bit, maka fmaksimumnya adalah 255, untuk citra grayscale 7 bit fmaksimumnya adalah 127




Untuk membuat citra menjadi negative, maka kita bias menggunakan teori dan rumus di atas untuk diimplementasikan ke dalam program pengolahan citra yang akan kita buat.

Kuantisasi biner:

Kuantisasi warna dalam bitmap untuk representasi citra dapat dibagi ke dalam tiga kelompok, yaitu:
  1. Citra biner
  2. Citra grayscale
  3. Citra warna

Untuk kuantisasi citra biner, setiap pixel hanya mempunyai 2 kemungkinan warna, yaitu hitam atau putih. Hitam dikuatisasi dengan 0 dan putih dikuantisasi dengan 1. Memori yang dibutuhkan untuk menyimpan satu pixel adalah satu bit. Berikut ini contoh penggambaran proses kuantisasi citra warna 8 bit ke dalam citra 2 bit:


Citra warna yang masing-masing warna red, green, dan blue memiliki 8 bit (0-255) di kuantisasi menjadi warna 1 bit (0-1), maka akan menghasilkan hanya 2 warna yaitu hitam dan putih seperti contoh analogi di atas. Pada saat kita melakukan kuantisasi dari citra warna, maka yang kita lakukan adalah membuat citra menjadi grayscale terlebih dahulu, selanjutnya baru kita lakukan kuantisasi seperti pada contoh analogi gambaran proses di atas.

Sekarang, langsung saja kita lanjut ke pembahasan pembuatan program untuk mengolah citra dan memberi efek brightness, invers, dan kuatisasi biner. Berikut ini adalah source code dari program yang dibuat:



Dari source code di atas, terlihat bahwa untuk membuat citra warna atau grayscale menjadi cerah atau gelap, kita hanya perlu menambahkan bitmap dari citra tersebut dengan nilai kecerahan (K). Namun, ada hal yang perlu diperhatikan, kita perlu menambahkan seleksi (if-else) saat menambahkan bitmap citra dengan K. hal itu harus kita lakukan untuk menjaga agar citra yang dijumlahkan dengan K tidah melebihi 255 atau kurang dari 0 untuk setiap pixel dalam bitmap citra. Jika setelah dijumlahkan dengan K menghasilkan angka yang lebih dari 255, maka pixel tersebut kita set dengan nilai tertinggi yaitu 255. Sama halnya dengan menggelapkan citra. Jika menghasilkan angka kurang dari 0 (misalnya: -50), maka pixel tersebut kita tetapkan dengan nilai 0. Untuk membuat invers/megasi dari citra, maka kita lakukan pengurangan nilai batas tertinggi dikurangi dengan bitmap citra, misalnya: 255-50 , nilai 255 adalah batas tertinggi, sedangkan nilai 50 adalah nilai pixel yang ada. Untuk membuat kuantisasi biner, diperlukan juga statement seleksi (if-else). Untuk cara melakukan kuantisasi biner, dapat kita lihat pada source code di atas. Berikut ini adalah tampilan Brightness.html untuk menampilkan citra dalam applet:


Proses compile:


Proses menampilkan dengan appletviewer:


Tampilannya adalah sebagai berikut:


Demikian pembahasan mengenai pengolahan citra untuk Brightness, Invers/Negasi, dan Kuantisasi Biner yang telah dibahas pada pembahasan ini.