Friday, December 21, 2007

Image Protection di Web

Menjelaskan sesuatu dengan tulisan akan terasa kurang lengkap tanpa adanya visualisasi gambar. Tetapi bagaimana halnya jika gambar tersebut harus diupload ke web yang nantinya akan diakses banyak orang. Tentunya akan ada kekhawatiran jangan-jangan gambar tersebut nantinya akan didownload untuk kemudian diselewengkan penggunaannya. Image Protection di web bertujuan agar gambar-gambar yang disertakan dalam suatu situs web tidak dapat/sulit diambil oleh orang lain. Ada banyak metode yang bisa digunakan untuk tujuan ini. Diantaranya adalah: watermarking, proteksi direktori yang menyimpan gambar dan enkripsi.
Watermark hanya akan memberi "tanda air' pada gambar yang tujuannya agar tanda tersebut selalu muncul pada saat gambar digunakan oleh orang lain. Metode enkripsi.....yang dienkripsi sebenarnya hanya nama file gambarnya saja.
Ada juga yang berusaha menonaktifkan klik kanan pada mouse (yang biasa dilakukan jika ingin mendownload gambar), dengan menggunakan baris-baris instruksi yang dibuat dengan javascript. Tetapi ini sangat tergantung pada browser yang digunakan. Bisa saja script jalan dengan baik di IE tapi ternyata nggak mempan di Firefox. Belum lagi kalo yang digunakan browser dengan platform operaing system lain selain Windows. Bisa dibayangkan berapa banyaknya script yang ditulis untuk itu.
Maka dari itu hati-hati mengupload gambar.....(padahal aku juga seneng upload gambar).

Monday, November 5, 2007

Kompresi Citra RGB

Setelah kemaren bikin kompresi citra grayscale, berikutnya aku coba bikin kompresi buat yang RGB. Kalau citra grayscale hanya terdiri dari satu matrik dua dimensi yang berisi nilai derajat keabuan, maka citra RGB terdiri dari satu matrik tiga dimensi. Misal matriknya kita sebut M[baris,kolom,RGB]. Baris dan kolom menunjukkan resolusi citra (baris x kolom piksel). Sedangkan RGB bernilai 3, sehingga matrik M[baris,kolom,1] menunjukkan nilai derajat R(Red) dari citra, M[baris,kolom,2] menunjukkan nilai derajat G(Green) dan M[baris,kolom,3] menunjukkan nilai derajat B(Blue).
Kompresi dilakukan dengan metode kuantisasi(soalnya yang
paling gampang yang ini...ni...), yakni dengan mengurangi derajat R, G dan B. Pada percobaan digunakan citra RGB 256 bit dan dikompresi menjadi citra RGB 128 bit. Citra hasil kompresi terlihat lebih redup dibanding citra asal. Ini dapat dilihat dari histogram citra, yang semula 256 bit menjadi 128 bit. Ya....yang namanya dikompres, resiko kualitas citra menjadi tak seindah warna aslinya memang sering terjadi. Kalo udah gitu mau apa lagi...... Sekarang tinggal pilih yang mana...Ukuran citra besar dan tampilan visualnya bagus (cerah), atau ukuran citra kecil tapi tampilan visualnya jelek (redup). Pinginnya sih ukuran citra kecil dan tampilannya tetep bagus.... Namanya juga manusia...pinginnya semua yang terbaik. Tapi gak usah kuatir, untuk yang ini nanti akan coba aku buat lagi dengan algoritma lainnya.
Hasil visualisasi citra sebelum dan sesudah kompresi dapat dilihat dibawah.
Bagian atas adalah citra sebelum kompresi dan histogram citra sebelum kompresi, sedangkan yang dibawah adalah citra setelah kompresi dan histogram citra setelah kompresi. Silakan dinikmati.

Friday, October 5, 2007

Keamanan dengan Sistem Biometrik

Sistem pengamanan yang banyak berlaku sekarang ini menggunakan user id dan password. Bisa dibayangkan seandainya kita diharuskan mengingat banyak user id dan password.... Tentunya memerlukan resource yang besar untuk itu. Ada account emai (kebanyakan lebih dari satu)l, perangkat komputer, ATM dan banyak lagi. Gimana ya caranya biar tetep aman tapi nggak harus menghafal user id dan password yang berbagai macam tersebut? Ada satu sistem keamanan yang dirasa cukup memadai yang dikenal dengan nama sistem biometrik. Keamanan dengan sistem biometrik bekerja atas dasar ciri-ciri fisik pelaku (orangnya). Beberapa yang sudah dikembangkan diantaranya adalah dengan sidik jari, telapak tangan, wajah , retina dan suara.
Pengamanan sidik jari bekerja dengan mencocokkan pola sidik jari seseorang dengan yang sudah tersimpan di database. Kalo dengan sidik jari pasti sudah banyak sistem yang menggunakannya. Contohnya aplikasi presensi. Perangkat komputer (notebook) juga banyak yang menggunakan metode pengamanan ini. Sedangkan sistem pengamanan telapak tangan bekerja dengan memanfaatkan keunikan pola pembuluh darah seseorang. Seperti halnya pengamanan dengan sidik jari, kita sudah punya database yang menyimpan pola pembuluh darah orang yang sudah terdaftar. Prinsip pengamanan dengan pengenalan wajah, retina dan suara mirip seperti yang ada pada sidik jari dan telapak tangan. Intinya dalam keamanan biometrik digunakan ciri fisik seseorang yang berbeda dengan lainnya (unik).

Monday, September 24, 2007

Transformasi dengan Image Processing Toolbox pada MatLab.

Berikut imerupakan transformasi dengan Toolbox pada MatLab. Output memberikan diberikan gambar asli dan enam gambar hasil transformasi dengan enam metode yang berbeda yakni transformasi linear conformal, transformasi affine, transformasi proyeksi, transformasi polinomial, transformasi piecewise linear, transformasi barel, transformasi sinusoid dan transformasi pin cushio




Tuesday, August 28, 2007

Interpolasi Lagrange dengan Matlab

Formula yang digunakan untuk interpolasi Lagrange adalah sebagai berikut:
Sehingga dapat dibuat algoritmanya sebagai berikut:
  1. Tetapkan jumlah titik yang diketahui. Untuk menginputkan titik yang diketahui dapat meenggunakan dua array x dan y dengan jumlah data = jumlah titiknya. Dengan dua array akan lebih mudah mengatur perilaku data didalam program. Bisa juga menggunakan banyak array sejumlah titik yang diketahui, sehingga masing-masing pasang data disimpan dalam satu array. Cara ini terlihat lebih sederhana, tetapi lebih sulit dalam mengatur perilaku data. Dalam implementasi ini nantinya akan dipilih cara yang pertama, yakni menggunakan dua array x dan y.
  2. Mencari Li(x) dan P(x). Li(x) didapat sejumlah titik yang diketahui, sehingga diperlukan perulangan sebanyak titik yang diketahui. Demikian pula P(x) merupakan jumlahan dari perkalian yi dan Li(x), sehingga memerlukan perulangan yang jumlahnya sana dengan proses pencarian Li(x). Untuk mencari Li(x) diperlukan Qi(x) dan Qi(xi). Karena Qi(x) merupakan hasil perkalian (x-xi) sejumlah titik yang diketahui, maka diperlukan perulangan lagi untuk mencarinya. Tetapi yang harus diingat disini adalah bahwa, untuk (x-xi) tersebut tidak ikut dalam hasil perkalian. Sehingga proses hanya akan dilakukan untuk nilai selain (x-xi). Untuk Qi(xi) dapat dicari setelah Qi(x) diketahui dengan cara mensubstitusi nilai xi ke dalam Qi(x). Setelah Qi(x) dan Qi(xi) diketahui dapat dicari Li(x). Dan untuk selanjutnya mencari P(x).
Misalnya banyaknya titik yang diketahui adalah b, maka algoritma diatas dapat diperhalus menjadi sebagai berikut:
  1. Inputkan b.
  2. Dari i = 1 s.d b : Inputkan titik ke i
  3. Dari i = 1 s.d b: Cari Qi(x), Cari Qi(xi), Cari Li(x)
  4. Cari P(x)
Implementasinya sebagai berikut:
Output program sebagai berikut:


Thursday, July 26, 2007

Embedded teks ke dalam citra

Salah satu media yang sering dipakai untuk menyisipkan pesan/data adalah file image. Dalam contoh yang saya buat ini sengaja digunakan citra grayscale yang memiliki bentuk digital lebih sederhana jika dibandingkan dengan citra RGB. Pada citra grayscale, akan didapat sebuah matrik yang menunjukkan tingkat derajat keabuan dari masing-masing piksel. Sedangkan untuk citra RGB, akan didapat tiga buah matrik yakni matrik R, matrik G dan matrik B, tingkat R, G dan B dari citra. Metode penyisipan pesan yang dipakai adalah Least Significant Bit (LSB). Metode ini bekerja dengan cara mengganti bit terakhir dari masing-masing piksel dengan pesan yang akan disisipkan. LSB mempunyai kelebihan yakni ukuran gambar tidak akan berubah. Sedangkan kekurangannya adalah pesan/data yang akan disisipkan terbatas, sesuai dengan ukuran citra.
Citra sebelum disisipi pesan

Citra setelah disisipi pesan

Jika diperhatikan, penggantian bit terakhir tersebut tidak terlalu berpengaruh terhadap derajat keabuan citra. Maka dua gambar diatas gak beda kan..... Tapi kalo gambar yang bawah diekstrak, maka akan didapat pesan yang berbunyi : Rajin-rajinlah belajar# Tanda # digunakan buat mengakhiri pesan. Ada tiga kemungkinan yang terjadi setelah penggantian bit terakhir, yakni:
  1. Nilainya derajat keabuan tetap
  2. Nilai derajat keabuan berkurang 1
  3. Nilai derajat keabuan bertambah 1
Perubahan yang sedemikian kecil tersebut tidak mungkin akan dirasakan secara kasat mata, sehingga citra sebelum dan setelah disisipi pesan tidak akan nampak terjadi perubahan. Untuk sourcenya ditulis dengan MatLab tapi gak sempet upload.... habisnya ngeditnya lamaaaaa...... Tapi sementara baru aku buat untuk format BMP.

Thursday, June 7, 2007

Histogram Modelling dengan MatLab

Histogram citra menyatakan frekuensi kemunculan berbagai derajat keabuan dalam citra. Teknik pemodelan histogram mengubah citra hingga memiliki histogram sesuai keinginan. Teknik pemodelan yang sering dipakai adalah ekualisasi histogram. Ekualisasi histogram bertujuan untuk mendapatkan histogram citra dengan distribusi seragam.
Langkah-langkah melakukan ekualisasi histogram:
  1. Baca image dan dapatkan nilai tingkat keabuan dari setiap pixel penyusunnya, dan simpan dalam array. Gunakan fungsi imread().
  2. Cari nilai maksimum tingkat keabuan citra tersebut. Nilai ini nantinya akan dipakai untuk menentukan histogram ekualisasinya. Gunakan fungsi max()
  3. Buat histogram citra asal. Simpan frekuensi kemunculan derajat keabuan tersebut dalam array(vector). Mula-mula kita siapkan array(vector) kosong yang ukurannya mengacu kepada nilai maksimum derajat keabuan citra dibulatkan ke 2n. Untuk selajutnya hitung frekuensi kemunculan derajat keabuan pada masing-masing posisi vector.
  4. Buat histogram ekualisasinya. Histogram ekualisasi dicari dengan menghitung prosentase kemunculan derajat keabuan yang ada dikalikan dengan derajat keabuan maksimum dari citra asal.
  5. Cari nilai tingkat keabuan dari citra bari hasil ekualisasi dengan menggunakan histogram ekualisasinya.
  6. Untuk memetakan histogram ekualisasi menjadi citra baru, kita siapkan array (matrik) kosong yang ukurannya sama dengan citra asal. Selanjutnya masing-masing nilai matrik baru dihitung dari nilai histogram ekualisasi bedasarkan nilai matrik gambar lama.
  7. Petakan ke citra baru.
Dengan menggunakan MatLab algoritma tersebut dapat diimplementasikan sebagai berikut:























Atau juga dapat dituliskan sebagai berikut:











Berikut ini adalah perbandingan image sebelum dan setelah
dilakukan ekualisasi.






Update (4 Desember 2008)
Ternyata tulisan ini ada juga disini lho....

Pustaka

Departmen Teknik Elektro, Modul Praktikum Pengolahan Citra dan Pengenalan Pola, Institut Teknologi Bandung.

Paul Wintz, 2000, Digital Image Processing, Prentice-Hall.

MatLab 6 Help.

William J Palm, 2004, Introduction to MatLab 6 for Engineers, The McGraw-Hill Companies, Inc.

www.iprg.ee.itb.ac.id/lectures.html

www.datacompression.info/Quantization.shtml

www.cbloom.com/src/index_im.html

Tuesday, May 8, 2007

Noise pada Citra

Ada banyak jenis noise yang dapat mempengaruhi kualitas citra, diantaranya adalah salt and pepper, gaussian, speckle, localvar dan poisson. Efek masing-masing noise tentunya berbeda-beda. Ada yang efeknya sangat mempengaruhi tampilan citra, tapi ada juga yang tidak begitu berpengaruh terhadap citra.

Salt & Peper

Seperti namanya noise jenis ini terlihat seperti salt and pepper. Pada citra akan nampak seperti titik-titik. Untuk citra RGB titik-titik muncul dalam tiga warna yakni merah (red), hijau (green) dan biru (blue), sedangkan pada citra GRAY noise akan muncul dalam dua warna yakni hitam (black) dan putih (white). Noise ini memberikan efek ”on dan off” pada pixel. Pada MatLab kita dapat mengatur ”konstanta” noise. Konstanta berupa angka numerik non negatif dengan range 0 sampai dengan 1. Makin besar konstantanya citra akan semakin kabur, sebaliknya makin kecil konstantanya efek pada citra makin tidak terlihat. Nilai default untuk konstanta noise adalah 0.05.


Gaussian

Disebut juga Gaussian White Noise. Untuk menambahkan noise ini pada MatLab memerlukan input tambahan berupa rata-rata dan variasi. Rata-rata dan variasi merupakan suatu konstanta real. Nilainya bisa positif maupun negative. Makin besar rata-rata dan variasinya maka
citra akan semakin kabur, sebaliknya makin kecil konstantanya efek pada citra makin tidak terlihat. Nilai default adalah 0 untuk mean dan 0.01 untuk variance. Disebut white noise karena pada saat nilai rata-rata dan variasinya besar maka citra seolah-olah hanya terlihat seperti citra putih saja.

Poisson
Poisson noise bukan merupakan noise buatan. Poisson merupakan noise yang ditambahkan langsung pada citra tanpa kita menambahkan parameter apapun, sehingga efeknya pada citra pun tetap, berbeda dengan tipe noise yang sudah dijelaskan sebelumnya. Pada MatLab, jika matrik citra adalah double precision, maka nilai piksel inputnya dianggap sebagai mean dari distribusi Poisson dengan skala 10^12. Sebagai contoh jika piksel inputnya mempunyai nilai 5.5 10^-12, maka piksel output akan dibangkitkan dari distribusi Poisson dengan mean 5.5 di kembalikan lagi ke skala 10^12. Jika matrik citra adalah single precision, maka factor skalanya menggunakan 10^6. Jika matrik citra adalah uint8 atau uint16, maka nilai input piksel digunakan langsung tanpa factor skala. Sebagai contoh jika input piksel uint8 mempunyai nilai 10, maka piksel output akan dibangkitkan dari distribusi Poisson dengan mean 10.


Speckle
Speckle merupakan noise ganda. Noise ini ditambahkan pada citra menggunakan persamaan
J=I+n*I, dimana n terdistribusi random seragam dengan mean 0 dan variance V. V adalah konstanta non negative yang besarnya dapat berubah-ubah. Default nilai untuk V adalah 0.04. Makin besar nilai V maka citra akan semakiin kabur.

Localvar

Pada MatLab kita harus mengunakan dua parameter untuk menambahkan noise ini pada citra. Dua parameter tersebut berupa vector yang ukurannya sama, dan grafik kedua parameter tersebut menggambarkan relasi fungsional antara varians noise dan intensitas citra. Vektor intensitas citra harus bernilai antara 0 dan 1 (normal). Localvar merupakan Gaussian noise dengan mean 0, dengan variance noise adalah fungsi dari intensitas citra yang nilainya berada dalam matrik citra. Vektor intensitas citra tidak boleh bernilai sama karena citra akan nampak sebagai layar putih (Gaussian White Noise).

Monday, April 23, 2007

Sorting Array pake Borland C++

Udah lama aku coba implementasi algoritma sorting *Bubble Sort* pake Borland C++, untuk sorting data numerik, listingnya seperti di bawah ini:























Tapi... kalo dijalankan untuk banyaknya data >= 3 , hasil pengurutannya, untuk array[0], pasti tidak
ada. Ini gak terjadi untuk banyaknya data>=4. Ada yang bisa kasih pendapat???