Wednesday, October 29, 2014

Saturday, October 25, 2014

Cara Terbaik Membangun aplikasi di Matlab



[www.softscient.web.id - Cara terbaikmembangun aplikasi di matlab]. Banyak kasus riset yang penulis tangani membutuhkan banyak sekali proses kerja, untungnya matlab telah menyediakan banyak sekali function built in terutama yang menyangkut operasi matrix, walaupun begitu tetap saja membutuhkan kerangka kerja dengan baik agar function code yang telah kita buat tertata rapi dan mudah untuk ‘dirawat’ jikalau terjadi bug dikemudian hari. Cara terbaikmembangun aplikasi di matlab yaitu memisahkan dalam bentuk ‘logika bisnis’, yup istilah yang penulis buat sendiri. Maksud nya adalah membuat bagian tertentu secara terpisah dan bisa terhubung kembali. Setiap kali ada order riset yangmenggunakan matlab, penulis akan membuat dalam 1 folder, misalkan

Folder = ‘Aplikasi Voice Recognition – 12 oktober 2014’
Didalam folder tersebut dibuat folder yaitu
Folder = ’daftar_pustaka’ berisi *.m dari implementasi function
Folder = ’daftar_data’ berisi *.mat, *.txt, *.csv
#merapikan code dan logika bisnis
Contoh dalam membuat function yaitu
Disimpan di daftar_pustaka/hitungkarakter.m


function [frekuensi]= hitungkarakter(kalimat,karakter)
%untuk menghitung jumlah karakter yang ada didalam kalimat
%revisi : 20 oktober 2014
%www.softscients.web.id
frekuensi = 0;
for i=1:size(kalimat,2)
    if strcmp(kalimat(i),karakter)==1
        frekuensi = frekuensi + 1;
    end
end      
 


Kemudian untuk memanggil function yaitu disimpan di folder utama/program.m

clc;clear all;close all;
addpath('daftar_pustaka'); %%untuk memanggil semua function
data_kalimat = 'www.softscients.web.id';
jumlah = hitungkarakter(data_kalimat,'t')    
 




Anda bisa memperhatikan semuanya rapi dan mudah untuk dirawat,
Penulisan
[1]. nama function menggunakan huruf kecil dan diletakan di folder ‘daftar_pustaka’
[2]. nama variabel menggunakan huruf kecil dan disipisah dengan karakter _
[3]. Namm folder pun seperti point [2]

sehingga proses developing menjadi rapi dan fokus, bahkan dokumentasi nya singkat mengenai sebuah function menjadi lebih baik



Friday, October 17, 2014

Penentuan Rotasi Citra Sidik jari



Ideal adalah kata yang selalu diinginkan untuk segala penerapan algoritma, mulai dari ideal bentuk nya, resolusi nya, letak nya. Misalka berikut adalah citra sidik jari yang sangat ideal yaitu jelas minuteae, letak center, tidak terjadi rotasi!

Tapi bandingkan dengan yang ini!
 




Blur, tergradasi dan yang paling menjengkelkan adalah mengapa miring??
Anda saja mereka tahu bahwa operasi finger recognition yang lumayan penting adalah core point dan sebaik nya tidak terjadi kemiringan, tapi ya sudahlah, rupanya kita butuh teknik ehancement dan teknik rotasi citra untuk membuat menjadi ideal. Penulis telah membahas sebelum nya mengenai teknik enhancement menggunakan teknik normalisasi, sedangkan pada kasus ini yaitu teknik mererotasi kembali agar tidak terjadi kemiringan. Berikut contoh penerapan dari operasi tersebut


Teknik Enhancement Normalisasi Sidik Jari

Hal pertama yang harus dilakukan dalam teknik finger code recognition adalah perbaikancitra sidik jarifinger enhancement yaitu memperbaiki kualitas citra. Seringkali mungkin kadangkalanya, kita akan mengolah suatu citra yang tidak bagus kualitasnya, entah karena ada noise, blur seperti berikut

Saturday, October 11, 2014

Menghitung Gradient Citra - Operator Sobel



Penentuan gradient citra dapat menggunakan operator sobel, Untuk lebih jelas nya ke




Penulis tidak akan menerangkan lagi dalam bentuk artikel dalam postingan disini, tapi berusaha untuk mengimplementasikan dalam bentuk code yang siap pakai dan menggunakan function dasar yang ada di matlab. Berikut menggunakan operator sobel



Kemudian penulis mengimplementasikannya akan menghasilkan citra berikut



 
code nya berikut

Matlab-Filtering imfilter dan conv2



Ada suatu pertanyaan dari kawan yaitu mengenai cara membuat filter gaussian dan mengimplementasikan kedalam suatu citra
Yaitu ada 2 cara 


menggunakan function imfilter atau conv2


clc;clear all;close all;
%% www.softscients.web.id
I = imread('D:/bird.bmp');
%% menggunakan function buil-in yaitu fspecial
myfilter = fspecial('gaussian',[5 5],2); %%membuat filter 
%% menggunakan function imfilter
Ig(:,:,1) = imfilter(double(I(:,:,1)),myfilter,'same');
Ig(:,:,2) = imfilter(double(I(:,:,2)),myfilter,'same');
Ig(:,:,3) = imfilter(double(I(:,:,3)),myfilter,'same');
figure,imshow(uint8(Ig)),title('imfilter -- www.softscients.web.id');
 
%% menggunakan function yang dibuat sendiri yaitu gaussian2d
myfilter2 = gaussian2d(5,2); %%membuat filter
%% menggunakan teknik convolution yaitu function conv2
Ig2(:,:,1) = conv2(double(I(:,:,1)),myfilter2,'same');
Ig2(:,:,2) = conv2(double(I(:,:,2)),myfilter2,'same');
Ig2(:,:,3) = conv2(double(I(:,:,3)),myfilter2,'same');
figure,imshow(uint8(Ig2)),title('convolution -- www.softscients.web.id');     



Jika kita ingin membuat filter gaussian bisa menggunakan berikut

function f=gaussian2d(N,sigma)
%% http://stackoverflow.com/questions/13193248/how-to-make-a-gaussian-filter-in-matlab
N = N - 1;
[x y] = meshgrid(round(-N/2):round(N/2), round(-N/2):round(N/2));
f = exp(-x.^2/(2*sigma^2)-y.^2/(2*sigma^2));
f = f./sum(f(:));       

citra asli


citra yang diberi filter gaussian - blur

Thursday, October 9, 2014

perbaikan citra digital dengan teknik FFT



Berbicara mengenai teknik perbaikan citra digital sangatlah luas sekali, pada kasus kali ini, penulis kedapatan suatu masalah untuk perbaikan kualitas citra digitalsidik jari yaitu untuk memunculkan kembali sidik pada hasil citra scan untuk dianalisis lebih lanjut. Teknik yang agak rumit pun dipakai yaitu teknik ForierTransform untuk mengubah citra domain ke ruang frekuensi. Teknik yang lebih cepat yaitu menggunakan FFT (fast forier transform) dengan menggunakan pilihan ukuran berupa  8, 16, dan 32.

Teknik ini bekerja dengan non overlapping block yaitu membagi block kecil berukuran 8,16,atau 32 kemudian tiap block dilakukan operasi berikut
misalkan ada data berikut






Maka kita membuat block, sebagai misal block biru dengan ukuran 8*8
matrix_block yaitu matrix berukuran sesuai dengan diatas

fft_ matrix_block  = fft(matrix_block); %%operasi fft

ifft_data = ifft((fft_ matrix_block).*abs(fft_ matrix_block.^k)); %%operasi dot matrix perkalian

dengan k adalah faktor yang bernilai antar 0.01- 0.2

kemudian hasil tersebut di assign kembali, dengan persamaan berikut

matrix_block = ifft_data

misalkan saja citra mempunyai ukuran 300*300 maka perlu di crop menjadi
288*288 saja dari persamaan
Ukuran = floor(300/32) = 9
Ukuran_crop = ukuran*32 = 288

Sehingga jika kita melakukan operasi non overlapping block dengan masing-masing block berukuran 8, maka ada 288/8 = 36 block baris* 36 block kolom dengan masing masing – masing block berukuran 8*8. 

Penulis menggunakan java untuk melakukan implementasi tersebut yaitu



Wednesday, October 8, 2014

Convolution dan Filtering Citra Digital



Jika anda pernah menggunakan software pengolah gambar seperti photoshop, GIMP dan yang lainnya mungkin akan mengenal dengan nama nya filter!
Filter tersebut bekerja menggunakan teknik convolusi mulai dari filter blur, sharpening, edge detection, curl, warp dan yang lain nya

Daripada penulis membuat tutorial, sebaik nya anda bisa merujuk ke
http://fourier.eng.hmc.edu/e161/lectures/convolution/index.html




 

Sunday, October 5, 2014

Library format json di java



Membuat pertukaran data yang efektif, kita dapat menggunakan JSON (dilafalkan "Jason"), singkatan dari JavaScript Object Notation (bahasa Indonesia: notasi objek JavaScript), adalah suatu format ringkas pertukaran data komputer. Formatnya berbasis teks dan terbaca-manusia serta digunakan untuk merepresentasikan struktur data sederhana dan larik asosiatif (disebut objek).

Misalkan ada transaksi berikut





Data tersebut bisa saja kita menggunakan konsep POJO di java yaitu Plain Old Java Object yaitu class yang berisi set() dan get(), akan tetapi jika menggunakan 2 bahasa yang berbeda untuk membangun sebuah aplikasi, maka konsep POJO akan sulit karena tidak fleksible, oleh karena itu data transaksi diatas dapat diubah kedalam format yang terstruktur seperti XML, tapi kali ini kita akan mengubah nya kedalam format JSON, silahkan ke http://www.jsoneditoronline.org/ untuk mencoba secara online. 

Friday, October 3, 2014

Mengenal sample rate audio



Suara yang kita dengar sehari-hari adalah merupakan gelombang analog. Bagaimana caranya suara analog ini dapat dimanipulasi oleh peralatan elektronik yang ada? Alat yang diperlukan untuk melakukan ini adalah transducer. Dalam hal ini, transducer adalah istilah untuk menyebut sebuah peralatan yang dapat mengubah tekanan udara (yang kita dengar sebagai suara) ke dalam tegangan elektrik yang dapat dimengerti oleh perangkat elektronik, serta sebaliknya. Contoh transducer adalah mikrofon dan speaker. Mikrofon dapat mengubah tekanan udara menjadi tegangan elektrik, sementara speaker melakukan pekerjaan sebaliknya. Proses pengubahan sinyal analog menjadi digital harus memenuhi sebuah kriteria, yaitu kriteria Nyquist. Kriteria ini mengatakan bahwa untuk mencuplik sebuah sinyal yang memiliki frekuensi X Hertz, maka harus mencupliknya minimal dua kali lebih rapat, atau 2X Hertz. Jika tidak, sinyal tidak akan dapat dikembalikan ke dalam bentuk semula. 

Ketika sound card mengubah audio menjadi data digital, sound card akan memecah suara tadi menurut nilai menjadi potongan-potongan sinyal dengan nilai tertentu. Proses sinyal ini bisa terjadi ribuan kali dalam satuan waktu. Banyak pemotongan dalam satu satuan waktu ini dinamakan sampling rate (laju pencuplikan). Satuan sampling rate yang biasa digunakan adalah KHz (kilo Hertz)

Kerapatan laju pencuplikan ini menentukan kualitas sinyal analog yang akan diubah menjadi data digital. Makin rapat laju pencuplikan ini, kualitas suara yang dihasilkan akan makin mendekati suara aslinya. Sebagai contoh, lagu yang disimpan dalam Compact Disc Audio (CDA) memiliki sampling rate 44.1 KHz, yang berarti lagu ini dicuplik sebanyak 44100 kali dalam satu detik untuk memastikan kualitas suara yang hampir sama persis dengan aslinya

Sedikit mengenai sampling rate ini, sampling rate secara lebih detail adalah berapa banyak titik yang diambil dari satuan waktu yang nantinya digunakan untuk membuat discrete signal. Ribet ya? Kalau kita lihat gambarnya dibawah ini.


Dibawah ini
Frekuensi asli = 2 Hz
Lihat garis warna merah