Mengetahui RULE Hasil Training ANFIS.

Berbeda dengan JST yang hasil trainingnya mirip “black box” yang tidak diketahui logikanya, pada Adaptive Neuro-Fuzzy Inference System (ANFIS) hasil trainingnya memiliki logika. Logika ini dikenal dengan istilah RULE. Postingan ini bermaksud menunjukan bagaimana melihat RULE hasil training. Masukan data training, misalnya data yang mirip Logika XoR.

Buka ANFIS editor dengan mengetik “anfisedit” pada command window. Masukan data latih tersebut. Gunakan “From: worksp”.

Rancang FIS yang akan dilatih dengan menekan “Generate FIS” di editor ANFIS.

Di sini di isian “Number of MFs” berisi “3 3” yang artinya tiga kelas input1 dan input2, misal “baik”, “cukup”, “kurang”, bisa juga diganti “2 2” jika hanya dua kategori, misal “baik” dan “buruk” saja. Tentu saja makin banyak kategori biasanya hasil lebih baik, apalagi jika datanya sedikit seperti kasus di contoh ini. Lanjutkan dengan menekan “Train Now”. Jika sudah perhatikan RULE yang terbentuk dengan menekan “Edit” – “Rule”.

In1mf1, dan seterusnya bisa diedit dengan bahasa yang kita mengerti, dengan cara masuk ke menu “edit” – “FIS Proerties”. Mirip caranya dengan mengedit fuzzy inference system (FIS). Berbeda dengan Jaringan Syaraf Tiruan (JST), ANFIS memiliki keunggulan dimana hasil training memiliki logika tertentu. Selanjutnya, uji dengan data sesungguhnya yaitu Logika XoR. Sebelumnya simpan ke “Workspace” misalnya dengan nama “xor”.

Testing dengan data sesungguhnya, yaitu logika XoR.

Jalankan dengan fungsi “evalfis” untuk menguji data “xorlogic” tersebut (kolom 1 dan 2) apakah sama dengan targetnya (kolom 3), yaitu beruturut-turut 0, 1, 1, 0.

Perhatikan “result” dengan jawaban logika xor yang asli, jika result dibulatkan (ketik “round(ans)”) akan menghasilkan jawaban sesungguhnya, alias akurat 100%. Selamat mencoba.

 

 

Optimalisasi Multiobjektif

Biasanya dalam optimalisasi, fungsi yang akan dicari nilai optimalnya hanya berjumlah satu. Fungsi tersebut dikenal dengan nama fungsi objektif (objective function) atau beberapa peneliti lebih senang dengan istilah fungsi kriteria (criteria function). Tetapi di lapangan kebanyakan fungsi objektif lebih dari satu, sehingga perlu penanganan untuk mengoptimalkan fungsi-fungsi tersebut, yang dikenal dengan istilah optimalisasi multiobjective (multiobjective optimization).

Salah satu teknik yang sering dan mudah digunakan adalah dengan pembobotan, atau dikenal dengan istilah aggregating function. Besar bobot di tiap-tiap fungsi objektif perlu diriset terlebih dahulu, atau dengan menanyakan kepada para pakar di bidangnya. MIsalnya kita memiliki dua fungsi:

Coba gunakan Matlab untuk melihat grafik dua fungsi objektif tersebut. Tampak adanya kontradiksi. Di sinilah peran penanganan multiobjektif.

  • >> x=-10:0.1:10;
  • >> y1=x.^2+6;
  • >> plot(x,y1,’r’)
  • >> grid on
  • >> hold
  • Current plot held
  • >> y2=-(x.^2)+12;
  • >> plot(x,y2,’b’)

Tampak kedua fungsi bertolak belakang. Di sini misalnya kita sudah memiliki bobot masing-masing untuk fungsi 1 dan 2 berturut-turut 0.7 dan 0.3. Maka untuk optimalisasi kita butuh satu fungsi baru, yang nantinya digunakan sebagai fungsi objektif pada algoritma optimasi yang dipilih. Tambahkan 2 kode baru lanjutan dari yang di atas.

  • >> yobj=0.7*y1+0.3*y2;
  • >> plot(x,yobj,’k’)

Nah kita tinggal mengoptimalkan fobj yang berwarna hitam tersebut dengan metode yang Anda sukai, misalnya algoritma genetika. Ketik optimtool(‘ga’). Nah, di sini perlu membuat m-file yang berisi fungsi objektif. Ketik sembarang nama, misalnya “fungsi” di command window isi coding berikut:

Masukan nama fungsi tersebut diawali dengan @ di bagian “fitness function”. Di bagian “Plot Function” ceklis pada best fitness dan best individualnya agar lebih interaktif ketika Matlab memprosesnya. Tekan “Start” jika dirasa sudah siap. Oiya, jangan lupa “Number of Variables” diisi, tentu saja satu variabel yang terlibat “x”.

Perhatikan di bagian hasil, diperoleh titik 0.001 sebagai titik optimal dengan fitness 7.8. Sekian, semoga bisa menginspirasi.

 

 

 

 

Competitive Network dan Contoh Implementasinya

Tipe network ini menghasilkan keluaran yang terbesar sebagai pemenang. Misal ada tiga input sebesar 1,2, dan 3, maka pemenangnya adalah input ketiga (sebesar 3). Berikut notasi standar competitive network.

Fungsi competitive network pada matlab adalah “compet”. Buka command window pada Matlab dan coba fungsi “compet”. Untuk lebih jelasnya silahkan buka help dengan mengetik “help compet” di command window.

  • a=[1;2;3];
  • compet(a)
  • ans =
  • 0
  • 0
  • 1
  • compet(-a)
  • ans =
  • 1
  • 0
  • 0

Perhatikan kode di atas. Jika ingin menemukan nilai tertinggi gunakan fungsi compet(a) sementara jika ingin mencari terendah, gunakan compet(-a). Biasanya mencari nilai terendah digunakan dalam menentukan mana yang paling mirip (similar) antara beberapa hasil output. Tentu saja ada sedikit modifikasi kode untuk memberitahu hasil minimum suatu inputan.

Misal kita beri nama tiga input tersebut berturut-turut “nilai A”, “nilai B” dan “nilai C”. Maka sistem diminta menampilkan nilai mana yang terkecil? Lanjutkan dengan kode berikut ini.

  • input1=[“nilai A”;”nilai B”;”nilai C”];
  • hasil=compet(-a);
  • [ind,result]=find(hasil);
  • minimum=input1(ind)
  • minimum =
  • “nilai A”

Lebih simple dibandingkan dengan menggunakan “if-else” berikut ini yang jauh lebih panjang jumlah baris programnya, apalagi yang akan dibandingkan sangat banyak.

  • if (a(1)<a(2)) && (a(1)<a(3))
  • minimum=’Nilai A’
  • else
  • if a(2)<a(3)
  • minimum=’Nilai B’
  • else
  • minimum=’Nilai C’
  • end
  • end
  • minimum =
  • ‘Nilai A’

Membuat Mask (Bingkai) Pada Citra & Manfaatnya

Postingan ini bermaksud menginformasikan problem ketika pencocokan pola citra kurang berhasil akibat pola yang tidak memiliki bingkai. Ketika dengan Autoassociative Memory diminta memprediksi angka satu berikut (lihat yang berwarna putih).

Prediksi di sebelah kanan memang tepat angka satu, tetapi terpotong di bagian atas dan bawahnya. Kita coba untuk menambahkan bingkai pada citra yang akan dilatih dan diterka.

Menambahkan Nol di Sekitar Matriks

Misal angka nol di bawah akan dibuatkan bingkainya. Langkah pertama adalah mengetahui ukuran matriks angka nol tersebut.

Gunakan fungsi size di Matlab. Setelah itu dengan fungsi “zeros” buat matriks berukuran dua digit lebih banyak dari ukuran sebelumnya. Misalnya matriks di atas memiliki ukuran baris x kolom sebesar 5 x 3 maka buatlah matriks nol dengan ukuran 7 x 5.

  • imshow(nol,’InitialMagnification’,’fit’)
  • nolmask=zeros(7,5);
  • nolmask(2:6,2:4)=nol;
  • imshow(nolmask,’InitialMagnification’,’fit’)

Perhatikan angka nol (yang berwarna putih) telah memiliki bingkai (warna hitam di sekelilingnya). Berikutnya kita coba melatih jaringan syaraf tiruan (JST) yang sebelumnya tanpa bingkai. Diuji dengan angka satu udah ok: hasil: “satu” (sebelah kiri) dan yang sebelah kanan nol dengan sedikit error berhasil mendeteksi (hasil deteksi: “nol”).

Mengkonversi Polygon Peta Pada ArcGIS ke Matriks di Matlab

Terkadang untuk melakukan manipulasi dengan Matlab membutuhkan konversi dari data berupa peta menjadi matriks. Jika sudah dalam bentuk matriks maka beragam metode dapat diterapkan untuk memanipulasi matriks peta tersebut seperti pengklusteran, klasifikasi, dan lain-lain. Postingan ini bermaksud mengkonversi citra polygon menjadi matriks di Matlab.

Mempersiapkan Poligon

Terlebih dahulu persiapkan peta poligon, misalnya lokasi sekolah di bekasi selatan. Karena fungsi polygon to raster di ArcGIS tidak berlaku untuk titik maka diperlukan proses “buffering” agar dihasilkan region sebuah titik. Cari fungsi “buffering” tersebut di kolom “search” pada ArcGIS anda.

Di sini dibuat lingkaran dengan jarak 50 meter dari pusat titik di tiap-tiap lokasi. Secara default tipenya adalah lingkaran. Jika sudah tekan “OK” di bagian bawah. Pastikan peta baru yang berisi lingkaran dengan jari-jari 50 meter yang berada di sekitar titik lokasi.

Konversi ke Raster

Untuk menjadikan poligon menjadi matriks diperlukan proses konversi dari poligon ke raster dengan fungsi “Polygon to Raster”.

Tekan “OK” dan tunggu sesaat hingga ArcGIS membuat rasternya seperti gambar berikut ini. Perhatikan yang tadinya lingkaran (round) sedikit berubah menjadi kotak-kotak.

Membentuk Matriks di Matlab

Terakhir kita menarik data yang telah dibuat oleh ArcGIS ke Matlab. Pertama-tama data perlu di- “Export” terlebih dahulu. Bentuknya terdiri dari beberapa layer dengan komponen utamanya berekstensi TIF yang mirip dengan JPG atau PNG.

Pastikan di folder target terdapat salah satu citra yang akan dibaca matriksnya lewat Matlab. Arahkan “Current Directory” pada lokasi yang sesuai agar bisa dibaca Matlab. Jalankan perintah ini untuk melihat “image”nya.

  • imshow(‘sekolah_PolygonToRaster11.tif’)

Jika kita lihat ukurannya masih sangat besar.

  • I=imread(‘sekolah_PolygonToRaster11.tif’);
  • size(I)
  • ans =
  • 474 248

Ada baiknya resolusi sedikit diturunkan agar diperoleh matriks yang mudah dimanipulasi. Gunakan fungsi “imresize” dengan sebelumnya mengkonversi gray menjadi biner.

  • I2=imresize(I,0.25);
  • size(I2)
  • ans =
  • 119 62

Tampak resolusinya berkurang seperempatnya. Konversi menjadi biner agar dihasilkan image yang tidak pecah-pecah seperti di atas. Untuk membahas masalah tersebut perlu postingan lain tentang pengolahan citra. Semoga bisa menginspirasi.

Red, Green, dan Blue (RGB) Pada Matlab

Representasi warna yang dikenal antara lain: i) Red, Green, Blue (RGB), ii) Cyan, Magenta, Yellow, Black (CMYK), iii) Hue, Saturation, Brightness (HSB), dan iv) CIE-XYZ. Di sini yang paling mudah dan terkenal adalah RGB. Postingan ini bermaksud menjelaskan secara mudah model warna RGB ini.

Sejarah

Kita mengenal TV berwarna yang mengkombinasikan tiap piksel dengan gabungan komposisi warna Red, Green, dan Blue. Jika seluruh warna R, G, dan B nol atau padam, maka dihasilkan warna hitam. Sebaliknya jika seluruhnya menyala maksimal, diperoleh warna putih.

Membuat Warna

Perhatikan warna Turqoise di bawah ini. Warna ini merupakan kombinasi warna Red, Green, dan Blue berturut-turut 64, 224, dan 208. Bagaimana merepresentasikannya dalam Matlab?

Baik, kita mulai saja dengan membuka Matlab versi 2008 ke atas (mungkin sebelumnya bisa, asalkan ada fungsi “imshow” dan “cat” pada matriks).

Format RGB pada Matlab

Matlab menggunakan format matriks tiga dimensi, berbeda dengan gray atau biner yang menggunakan satu matriks saja. Oke, misalnya kita buat piksel yang membentuk huruf ‘c’.

  • c=[1 1 1;1 0 0;1 1 1];
  • imshow(c,’InitialMagnification’,’fit’)

Disini “InitialMagnification” artinya memperbesar huruf c tersebut agar bisa dilihat jelas. Coba saja tanpa fungsi itu, pasti hanya berupa titik kecil saja.

Nah, di sini kita diminta merubah huruf c format biner tersebut menjadi warna turquoise pada gambar di atas sebelumnya. Caranya adalah dengan merubah satu matriks ‘c’ tersebut menjadi komposisi tiga matriks R, G, dan B berupa perbandingan dari 0 hingga 255.

Warna Red, Green, Blue

Di sini warna merah adalah 64 dari 255. Tuliskan di command window instruksi berikut.

  • r=c*64/255
  • r =
  • 0.2510 0.2510 0.2510
  • 0.2510 0 0
  • 0.2510 0.2510 0.2510

Dengan cara yang sama buat juga Green dan Blue.

  • g=c*224/255;
  • b=c*224/208;

Jika komposisi R, G, dan B sudah dibuat, berikutnya adalah meng-concatenate tiga matriks tersebut (r, g, dan b) menjadi satu.

  • image=cat(3,r,g,b);
  • imshow(image,’InitialMagnification’,’fit’)

Pastikan diperoleh huruf ‘c’ dengan warna turquoise seperti di bawah. Jika Anda bisa memanipulasi satu piksel maka Anda pasti bisa memanipulasi beragam citra menjadi warna-warna tertentu. Sekian, semoga bermanfaat.

Instal Matlab Mobile (Android)

Matlab pertama kali diciptakan untuk memanipulasi matriks dengan cepat dan praktis. Oleh karena itu diberi nama “Matlab” singkatan dari Matrix Laboratory. Kemampuan yang sesederhana kalkulator diimbangi dengan pemrograman yang berat membuat aplikasi ini banyak disukai oleh peneliti-peneliti yang bermain dengan komputasi. Tidak lengkap sepertinya saat ini jika ada aplikasi yang tidak ada versi androidnya. Matlab pun menyediakan aplikasi versi android yang dapat digunakan oleh peneliti dan mahasiswa dimanapun berada. Postingan ini sekedar membagikan info bagaimana instal aplikasi Matlab via android ini.

1. Mengunduh Aplikasi

Berhubung smartphone saya menggunakan sistem operasi android maka mau tidak mau menggunakan playstore untuk mengunduhnya.

Tekan tombol Install untuk memulai instal aplikasi Matlab android ini. Sepertinya tidak perlu dijelaskan lebih jauh, butuh beberapa menit untuk menginstalnya. Pastikan Matlab siap digunakan.

2. Sign Up

Langkah berikutnya adalah mendaftar akun di www.mathworks.com. Tahap ini didahului oleh instal upgrade aplikasi. Sangat dianjurkan jika Anda punya lisensi Matlab, tetapi jika tidak tentu saja tidak perlu upgrade.

Satu hal penting untuk dapat mendaftar akun di Matlab adalah email resmi, bukan gmail, yahoo, dan sejenisnya. Setelah memasuki regional, lanjutkan dengan aktivasi dengan cara mengklik link yang dikirimkan via email resmi tersebut.

3. Testing

Selamat, Anda telah berhasil menginstal Matlab mobile. Berikut ini saya coba memanipulasi matriks, menampilkan citra dan menjalankan salah satu fungsi, yaitu normalisasi Euclidean. Beberapa juga sudah saya coba membuat plot/grafik, dapat dilaksanakan juga. Selamat mencoba, semoga bermanfaat.

Membangkitkan Bilangan Random Berinterval Pada Matlab

Terkadang kita diminta membangkitkan bilangan random, misalnya pecahan dari nol sampai 10 dengan interval 0.5. Fungsi bawaan matlab yang tersedia adalah rand(), sehingga jika maksimal angka 10 maka cukup dengan mengalikan rand()*10 akan diperoleh angka sembarang dari nol hingga 10.

  • rand()*10
  • ans =
  • 2.6297

Jika ingin berinterval tiap 0.5 maka secara logika harusnya 2.5 karena lebih dekat ke 2.5 dibanding 2.0 atau 3.0. Langkah termudah adalah dengan menggunakan bantuan if-else. Jalankan instruksi berikut di command window maka akan diperoleh 2.5.

  • angka=2.6297;
  • steps=0.5;
  • baseangka=floor(angka);
  • pecahan=angka-floor(angka);
  • upper=abs(steps-pecahan);
  • buttom=abs(0-pecahan);
  • if upper<buttom
  • newangka=baseangka+steps
  • else
  • newangka=baseangka
  • end

Kebetulan basis angkanya integer dimana untuk contoh di atas angka 2. Bagaimana jika intervalnya tiap 0.05? Jika angka 2.6297 maka tentu saja basisnya menjadi 2.6 (bukan angka 2 lagi). Logika sederhananya adalah dengan metode di atas, hanya saja basis angka dikalikan 10 (agar koma bergeser ke satu digit di kanan koma), tetapi jangan lupa untuk membagi lagi dengan 10 di akhir prosesnya.

  • angka=2.6297;
  • angka=angka*10;
  • steps=0.5;
  • baseangka=floor(angka);
  • pecahan=angka-floor(angka);
  • upper=abs(steps-pecahan);
  • buttom=abs(0-pecahan);
  • if upper<buttom
  • newangka=(baseangka+steps)/10
  • else
  • newangka=baseangka/10
  • end

Hasilnya:

  • newangka =
  • 2.6500

Kombinasikan dengan fungsi rand(), misalnya membangkitkan 5 bilangan random berinterval 0.05:

  • initial=[];
  • for i=1:5
  • angka=rand()*10;
  • angka=angka*10;
  • steps=0.5;
  • baseangka=floor(angka);
  • pecahan=angka-floor(angka);
  • upper=abs(steps-pecahan);
  • buttom=abs(0-pecahan);
  • if upper<buttom
  • newangka=(baseangka+steps)/10;
  • else
  • newangka=baseangka/10;
  • end
  • angka=[initial;newangka];
  • initial=angka;
  • end

Hasilnya adalah rentetan bilangan random sebanyak lima buah dengan interval 0.05 di bawah ini (hasil berubah-ubah karena random). Semoga bermanfaat.

  • angka =
  • 5.2500
  • 4.1500
  • 6.5500
  • 6.2500
  • 2.9000

Normalisasi dengan Mapping Standard Deviation (mapstd)

Selain dengan membentuk matriks ortogonal yang disukai backpropagation, ada banyak metode normalisasi. Dengan teknik minmax dapat dihasilkan bentuk yang cocok untuk range sempit (lihat post sebelumnya). Apakah ini yang terbaik? Tentu saja tergantung kasusnya. Untuk proyeksi (peramalan) metode normalisasi yang terkenal adalah yang berbasis statistik yaitu dengan mapping dengan standard deviation. Pertama-tama adalah menemukan rata-rata sebaran data tersebut:

Variabel Y adalah data dengan n adalah jumlah datanya. Berikutnya adalah menentukan standar deviasi atau dalam bahasa kita simpangan baku. Varians dikenal dengan rumus berikut:

Standar deviasi merupakan akar dari varians di atas. Jadi tiap data yang akan dinormalkan dengan cara ini dihitung berdasarkan nilai rata-rata dan standar deviasi di atas.

Untuk mempermudah, Matlab telah menyediakan fungsi mapstd. Silahkan buka Matlab (2008 ke atas). Ketik “help mapstd”, ikuti saja langkah-langkah di help yang dicontohkan Matlab.

Jika ingin melihat implementasinya, dapat dilihat skripsi mahasiswa UNY berikut ini untuk kasus peramalan saham (syariah):

Menyamakan Ukuran Citra

[peng.citra|t.komputer|lab.hardware|pert.10]

Untuk membandingkan dua citra baik dengan JST atau metode yang lain, hal mutlak yang harus dilakukan adalah menyamakan ukuran dari citra. Menyamakan ukuran berarti menyamakan dimensi matriks antara satu gambar dengan gambar yang akan diuji kemiripannya. Gambar GUI di bawah ini adalah contoh ilustrasi proses pembandingan.

Perhatikan gambar di atas dimana gambar 1 yang merupakan master akan diuji dengan gambar 2 yang memiliki ukuran berbeda (kolom atau tinggi segiempatnya) dimana angka tiga 371, sementara angka 2 742. Proses callback “Resize Gbr 2” berisi kode berikut:

  • image=handles.image;
  • b=handles.b;
  • c=handles.c;
  • % ukuran gbr2
  • [b2,c2]=size(image)
  • save testing
  • image=imresize(image,[b c])
  • axes(handles.axes2)
  • imshow(image)
  • set(handles.edit5,’String’,b)
  • set(handles.edit6,’String’,c)

Perhatikan gambar di atas. Ukuran baru gambar dua sudah sama dengan tiga (kolom = 371). Dengan samanya ukuran gambar 1 dan gambar 2 maka proses selanjutnya (Uji Kecocokan) dapat dilakukan. Ada hal-hal tertentu yang didapat pada praktik hari ini:

  • Tidak boleh memberi nama GUI dengan nama yang dimiliki suatu fungsi pada Matlab, misalnya dengan nama “imresize”, karana ketika ada instruksi “imshow” akan menampilkan GUI tersebut bukannya gambar/citra.
  • Ketika GUI dengan Matlab 2013 dijalankan di 2008 ada pesan error dan tidak dapat dijalankan. Tetapi jika GUI dengan Matlab 2008 dapat dijalankan dengan 2013 ke atas. Semoga bermanfaat.

Fixing: “Warning: Single line Edit Controls can not have multi-line text”

[inf.retrieval|t.komputer|lab.soft|pert.8]

This problem appears when someone tries to send the result to edit text. The warning is shown in command window and the edit text in GUI is also disappeared. First we should understand that Matlab has two kinds of text format: string and cell. The cell cannot be presented, except you transpose it. But the edit text will show the text in column based. Only the string/char format can be presented in row based (see the picture below showing the string and cell).

Some text processing methods need conversion from string to cell. Therefore, the manipulation should be done in order to show the text in edit text. The algorithm are as follow:

  • Input: cell
  • Output: string in row
  • Use function char to convert cell into character
  • Transpose the characters
  • Use function sprintf to print the characters in row based

This simple method can be solve the warning above. As an impormation, some text manipulation need conversion from cell to char and vice versa, e.g. regexp (regular expression function). I hope this information is useful. This is an output when I stemmed to remove preffix (‘ber’) except when the root-word below 4 characters (e.g. “dua” from “berdua”)

Stemming Pada Matlab

[per.informasi|t.komputer|lab.soft|pert.5]

Jika pada pertemuan sebelumnya telah berhasil memisahkan kata-kata dalam suatu kalimat agar bisa menghitung jumlah katanya maka pada pertemuan kali ini akan mencoba memisahkan kata dari imbuhan (awalan dan akhiran) agar diperoleh kata dasarnya yang dikenal dengan istilah stemming/lematization. Proses ini sangat penting dalam perancangan mesin pencari (searching). Imbuhan merupakan ciri khas bahasa Indonesia yang memang berbeda sekali dengan bahasa Inggris. Coba rancang GUI berikut untuk melakukan proses stemming.

Imbuhan ada banyak misalnya me, meng, ber, per, -an, dan lain-lain. Untuk memisahkannya kita perlu memproses pencarian berdasarkan spasi dan titik (untuk akhiran). Jika tanpa spasi akan terjadi kesalahan karena sistem akan mereplace seluruh yang diduga awalan/akhiran walau terletak di tengah-tengah kata yang tentu saja salah.

  • % menghilangkan “-an”
  • y=regexprep(y,‘an+\s’,‘ ‘) % sebelum spasi
  • y=regexprep(y,‘an+\.’,‘.’) % sebelum titik
  • set(handles.edit1,‘String’,y)

Kode di atas bermaksud menghilangkan akhiran –an. Jika diinput kata “akhiran.” Akan dihasilkan kata dasarnya “akhir”. Ada dua deteksi yaitu sebelum spasi dan sebelum titik.

Logika sederhananya adalah mengganti “-an” tersebut dengan “blank”. Fungsi yang digunakan adalah regexprep yang mencari dan me-replace suatu string. Pertemuan berikutnya akan menggunakan proses perhitungan karakter tertentu, misalnya “makan”, tidak bisa jadi “mak” karena kurang dari 4 karakter. Selain itu perlu proses N-gram (dua, tiga, dst). Selamat mencoba, semoga UTS dapat dikerjakan dengan baik.

Deteksi Warna Komposit dengan Matlab

[peng.citra|t.kom|lab.hardware|pert.7]

Warna dasar RGB adalah Red, Green, dan Blue yang masing-masing menyatakan nilai maksimal komposisinya yaitu 255. Misalnya warna merah, maka matriks-nya sebesar [255 0 0], begitu juga untuk warna hijau dan biru, masing-masing [0 255 0] dan [0 0 255]. Bagaimana cara mendeteksi warna-warna komposit yang bukan merupakan warna dasar seperti kuning, jingga, dan lain-lain? Postingan kali ini sedikit menjelaskan cara mendeteksinya dengan menggunakan jarak Euclidean.

Standar Warna RGB

Standar warna RGB banyak diterapkan pada image processing. Standar ini menggunakan warna merah, hijau dan biru sebagai patokan warna-warna lainnya. Warna lainnya dapat dibuat dengan menggabungkan proporsi warna merah, hijau, dan biru tersebut. Berikut standar warna selain merah, hijau, dan biru.

Tabel di atas juga menyertakan paduan standar Cyan, Magenta, Yelow, dan Black (CMYK) dan HSV. Sebagai kelanjutan Pert 6 yang lalu, di sini kita menerapkan deteksi warna dengan jarak Euclidean.

Praktek dengan GUI

Tambahkan kode tambahan di tombol deteksi warna (Euclidean) karena bukan hanya R, G, dan B, melainkan beberapa warna lain misalnya kuning, oranye, dan hitam.

Tambahkan tiga jarak baru yaitu dY, dO, dan dK untuk jarak terhadap kuning, oranye dan hitam. Untuk memudahkan penentuan jarak terdekat gunakan fungsi min disertai dengan indeksnya. Indeks dapat diketahui dengan membuat sebuah vektor berisi warna-warna dari merah hingga hitam. Sehingga ketika nilai minimum diketahui, diketahui pula indeksnya. Warna dapat diketahui berdasarkan indeks-nya dari vektor warna.


  • dR=norm(warna-[255 0 0])
  • dH=norm(warna-[0 255 0])
  • dB=norm(warna-[0 0 255])
  • dY=norm(warna-[255 255 0])
  • dO=norm(warna-[255 127 0])
  • dK=norm(warna-[0 0 0])
  • hasil=[dR dH dB dY dO dK]
  • % mencari jarak terkecil
  • strwarna={‘merah’
    ‘hijau’
    ‘biru’
    ‘kuning’
    ‘jingga’
    ‘hitam’}

  • [minimum,indeks]=min(hasil)
  • outwarna=strwarna(indeks)
  • set(handles.edit4,‘String’,outwarna)

Coba uji dengan memasukan data sesuai warnanya, misalnya kuning, oranye dan hitam. Coba uji pula dengan warna yang tidak terlalu hitam (abu-abu), atau tidak terlalu kuning. Sistem akan mencoba mendekati dengan warna-warna standar yang ada (R,G,B, plus kuning, orange dan hitam). Semoga bermanfaat.

Deteksi Warna dengan Jarak Euclidean

[peng.citra|t.kom|lab.hardware|pert.6]

Sistem cerdas membutuhkan teknik agar peralatan dapat membedakan satu warna dengan warna lainnya. Teknik termurah dan termudah adalah dengan jarak Euclidean. Perhitungannya menggunakan rumus jarak dua titik koordinat (dua, tiga, dan dimensi-n) yang mirip garis miring Phytagoras. Sebagai kelanjutan dari pertemuan 5 yang lalu, tambahkan tombol pushbutton disertai edit text untuk melihat komposisi RGB sebuah citra.

Agar ukuran dan format sama dengan tombol-tombol yang lain, kita boleh meng-copy paste tombol dan isian lainnya. Jika sudah simpan dan tambahkan tiga buah warna yang akan diuji. Buat saja dengan menggunakan paint pada Windows. Simpan dalam format JPG agar lebih mudah karena kebanyakan citra dibuat dalam format ini.

Mencari Nilai Terbesar RGB

Salah satu teknik termudah menebah warna sebuah citra adalah dengan mencari nilai terbesar. Cara ini tentu banyak kelemahannya, khususnya untuk warna komposit (gabungan) seperti kuning, ungu, orange, dan lain-lain. Namun, teknik ini tetap digunakan ketika menggunakan jarak Euclidean, tetapi menggunakan fungsi mencari nilai terkecil (kebalikannya). Kode berikut diletakan di Callback deteksi warna.

  • fR=handles.y(:,:,1);
  • fG=handles.y(:,:,2);
  • fB=handles.y(:,:,3);
  • fr=mean(mean(fR));
  • fg=mean(mean(fG));
  • fb=mean(mean(fB));
  • % mencari terbesar
  • warna=[fr fg fb]
  • strwarna={‘merah’ ‘hijau’ ‘biru’}
  • [maks,indeks]=max(warna)
  • outwarna=strwarna(indeks)
  • set(handles.edit4,’String’,outwarna)
  • set(handles.edit5,’String’,fr)
  • set(handles.edit6,’String’,fg)
  • set(handles.edit7,’String’,fb)

fR, fG dan fB adalah berturut-turut matriks citra merah, hijau dan biru. Sementara fr, fg, dan fb nilai rata-rata ekstrak warna dari citra. Perhatikan bagian % mencari nilai terbesar b di atas. Di sini digunakan fungsi max. Fungsi set di akhir fungsi mengirim jawaban yang merupakan warna yang ditebak oleh sistem ke edit text4 dalam contoh ini.

Menggunakan Jarak Euclidean

Jarak Euclidean lebih “ampuh” karena mampu mendeteksi warna komposit dengan menghitung jaraknya dari warna-warna yang jadi patokan/kelas. Sebagai latihan, patokannya misal dianggap sama yaitu merah, hijau dan biru. Pada prakteknya bisa saja merah, kuning dan hijau seperti lampu lalu-lintas.

Tambahkan satu tombol pushbutton “Deteksi Warna (Euclidean)” untuk membedakan dengan tombol sebelumnya yang hanya menggunakan nilai maksimal RGB.

Sebagai ilustrasi, nilai X tentu saja dengan nilai terbesar akan ditebak masuk kategori R. Tetapi di sini kita menghitung terlebih dahulu jaraknya terhadap R, G, dan B lalu dibandingkan mana jarak terkecilnya. Rumus Euclidean adalah mirip sisi miring Phytagoras:

Silahkan menggunakan rumus di atas, atau bisa menggunakan fasilitas fungsi norm pada Matlab yang artinya “normal Euclidean”. Berbeda dengan fungsi max untuk mencari nilai maksimum, untuk mencari nilai minimum dapat menggunakan fungsi min. Ok, masukan kode ini pada tombol “Deteksi Warna (Euclidean)”.

  • warna=[fr fg fb]
  • dR=norm(warna-[255 0 0])
  • dH=norm(warna-[0 255 0])
  • dB=norm(warna-[0 0 255])
  • hasil=[dR dH dB]
  • % mencari jarak terkecil
  • strwarna={‘merah’ ‘hijau’ ‘biru’}
  • [minimum,indeks]=min(hasil)
  • outwarna=strwarna(indeks)
  • set(handles.edit4,’String’,outwarna)
  • set(handles.edit5,’String’,fr)
  • set(handles.edit6,’String’,fg)
  • set(handles.edit7,’String’,fb)

Uji dengan me-run GUI yang baru saja diisi kode-nya. Pastikan sistem bisa menebak warna. Selamat Ber-praktikum.

Deteksi Tepi dengan Matlab

[peng.citra|t.kom|lab.hardware|pert.5]

Di antara deteksi lainnya, seperti titik dan garis, deteksi tepi sangat bermanfaat untuk mengetahui suatu objek secara pasti dan terpisah dari objek lainnya, misalnya background. Pertemuan kali ini sedikit membahas metode-metode deteksi tepi yang terkenal antara lain: sobel, prewitt, dan robert. Untuk itu lanjutkan proyek sederhana pertemuan yang lalu dengan menambahkan satu panel berisi tiga pushbutton: sobel, prewitt, dan robert.

Konversi ke Gray

Deteksi tepi bermain dengan intensitas brightness. Ketika langsung mengakses gambar berwarna RGB ada pesan kesalahan. Perlu merubah terlebih dahulu citra yang diambil dari pushbutton “Ambil Citra” menjadi gray. Copas saja kode pada tombol “Konversi ke Gray” dan masukan ke “Sobel”.

  • z=rgb2gray(handles.y);
  • [g,t]=edge(z,’sobel’)
  • axes(handles.axes2)
  • imshow(g)

Silahkan lihat tatacara penggunaan fungsi edge dengan mengetik “help edge” pada command window. Untuk metode Prewitt dan Robert, caranya sama hanya saja menggunakan parameter berturut-turut ‘prewitt’ dan ‘robert’.

Perhatikan ada noise yang tertangkap. Biasanya sebelum deteksi tepi beberapa manipulasi terhadap citra original-nya diperlukan, misalnya filter dengan fungsi imfilter. Selamat mencoba, semoga bermanfaat.