Tuesday, September 30, 2014

Parsing String di java

Ada kasus kecil yaitu
melakukan parsing dari sebuah teks sms center.
Program akan menerima inputan dala format seperti ini
REG#NAMALENGKAP#ALAMAT#NOTELP
Semisal
REG#Eka Dian Ismawati#JL CEMPAKA 4 MALANG#081765334221


      
import java.util.ArrayList;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author www.softscients.web.id
 */
public class Parsing {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        String pesan = "REG#Eka Dian Ismawati#JL CEMPAKA 4 MALANG#081765334221";
        ArrayList  data  = new  ArrayList();
        int awal = 0;
        int akhir = 0;
        //menentukan jumlah #
        for(int i=0;i<pesan.length();i++)
        {
            if(pesan.charAt(i)=='#')
            {
                akhir = i;
                //System.out.println(awal+" -  "+akhir);
                System.out.println(pesan.substring(awal,akhir));
                awal = akhir+1;                
                
            }
            if(i==pesan.length()-1)
            {
                System.out.println(pesan.substring(akhir+1,pesan.length()-1));
            }
        }
    }
}
 




REG
Eka Dian Ismawati
JL CEMPAKA 4 MALANG
08176533422      
 

Mari belajar Dasar – dasar Sinyal


Sebuah sinyal dapat dibaca dari gambar berikut




Mempunyai

Amplitudo = 5

Frekuensi = 2 Hz dibaca dalam 1 detik terdapat 2 gelombang/getaran

Waktu = 0.5 detik dibaca 1 gelombang/getaran membutuhkan waktu 1 detik

Sunday, September 28, 2014

Realtime Segmentasi Citra Digital dengan Kohonen


Menyambung tulisan sebelumnya. Penulis terapkan pada live webcam, terlihat bahwa segmentasi berjalan dengan baik, dibandingkan dengan metode otsu, maka adaptive segmentasi berbasis kohonen lebih baik



Adaptif Segmentasi Citra dengan Kohonen


Penulis dibuat pusing oleh kasus ini yaitu dengan permasalahan yang sangat sederhana sekali yaitu melakukan segmentasi Black White. Nah operasi untuk mengubah dari format color – grayscal ke format BW paling banyak digunakan adalah metode otsu. Berikut adalah salah satu contoh data gambar yang akan diubah ke BW



Penulis menggunakan matlab yaitu function im2bw menghasilkan berikut




ternyata kurang sempurna yaitu masih banyak noise dikarenakan kurang sempurna. Penulis ingin menggunakan metode adaptif yang lainnya yaitu metode kohonen untuk segmentasi. Berikut contoh implementasi darikohonen, penulis menggunakan java untuk implementasi nya.

 

Friday, September 26, 2014

Menampilkan Histogram Citra

Informasi yang dapat ditampilkan suatu gambar dapat berupa histogram yaitu memuat informasi mengenai frekuensi dari nilai pixel, Biasa nya gambar berwarna terdiri dari nilai RGB dengan tingkat kedalam warna sebanyak 256 bit. Berikut contoh aplikasi yang menyajikan informasi histogram menggunakan pustaka JFreeChart





Download
https://www.dropbox.com/s/5xrd7yetjeyxe5k/aplikasi%20viewer%20histogram%20-%206%20oktober%202014%20-%20java.rar?dl=0

Aplikasi Black White dengan metode Otsu

Mengubah gambar berwarna – grayscale ke gambar hitam putih dapat dilakukan menggunakan metode otsu. Metode otsu mengkalkulasikan histogram gray untuk menghasilkan nilai Threshold. 

Bagaimana teknik Otsu Bekerja?
Thresholding (pengambangan) mencari nilai T (ambang batas) yang digunakan untuk melakukan proses konversi citra true color dalam format black white. Ada banyak metode untuk mendapatkan nilai ambang batas sebagai acuan untuk mengkategorikan nilai suatu pixel termasuk warna hitam atau putih jika dalam format biner maka (1 dan 0) dan format grayscale (0 dan 255) salah satu yang paling banyak dikenal luas dan digunakan sebagai standar yaitu metode Otsu.
Metode Otsu mencari nilai ambang batas (T) dengan melakukan analisis diskriminan pada suatu variabel yang dapat membedakan antara dua atau lebih kelompok yang muncul secara alami.  Misalkan nilai ambang batas yang akan dicari k. Nilai k berkisar 1 sampai dengan L, dengan L = 255
Jika
p(i)         = nilai histogram   
sumT         = jumlah total pixel
wB         = bobot background
wF         = bobot foreground
N         = luas matrix
sumB         = jumlah total pixel ke i
mB         = rata-rata background
mF         = rata - rata foreground




















Berikut adalah contoh dari oeprasi BW





Kemudian dilakukan operasi BW dengan metode Otsu

Thursday, September 25, 2014

Aplikasi operasi deskewing



Hal yang utama dalam pre proses optical character recognition adalah Skew, perhatikan contoh kasus berikut, dimana terjadi pergeseran rotasi pada sebuah hasil scanner. Maka butuh operasi deskewing yaitu dengan menggunakan operasi deteksi garis (hough line)



Download
https://www.dropbox.com/s/pg9eiuwv88cdx5r/release%20aplikasi%20deskewing%20-%2025%20september%202014.rar?dl=0

Pustaka Optical Character Recognition


Penulis mencoba untuk menggunakan tesseract sebagai pustaka Optical Character Recognition, walaupun masih banyak kurang tingkat ketelitian nya, tapi setidak nya pustaka tesseract layak dicoba. Berikut demo dari hasil penggunaan pustaka tesseract sebagai Character Recognition



Wednesday, September 24, 2014

Buku Tips dan Trik Pemrograman Java-Menyimpan Object Class dengan Serialisasi

Sinopsis

Agak sulit kalau ada data yang mempunyai beberapa hasil keluaran berupa array 2Dimensi disimpan dalam bentuk tabel seperti layak nya database pada umum nya. Misalkan saja suatu data dihasilkan dari proses perhitungan didapatkan keluaran 2 variabel yaitu matrix variabel dengan nama bobot hidden dan bobot output. Tentu matrix tersebut tidak fleksible jika dimasukan kedalam sebuah tabel ataupun disimpan dalam bentuk format CSV. Hal tersebut dapat dipecahkan dengan teknik serialisasi, bahasa modern saat ini telah banyak mendukung serialisasi seperti java, C#. Teknik nya menggunakan konsep POJO yaitu berupa class berisi set get dengan implementasi serialisasi






Sehingga variabel bobot hidden dan bobot ouput dibungkus menggunakan class yang mengimplementasikan serialisasi, kemudian class tersebut dapat dibungkus lagi menggunakan ArrayList. Berikut contoh nya


       

import java.io.Serializable;

/**
 *
 * @author www.softscients.web.id
 */
public class DataPerhitungan implements Serializable{
    private double [][] bobotHidden;
    private double [][] bobotOutput;

    public DataPerhitungan(double [][] hidden, double [][]output)
    {
        this.bobotHidden = hidden;
        this.bobotOutput = output;
    }

    public double[][] getBobotHidden() {
        return bobotHidden;
    }


    public void setBobotHidden(double[][] bobotHidden) {
        this.setBobotHidden(bobotHidden);
    }



    public double[][] getBobotOutput() {
        return bobotOutput;
    }


    public void setBobotOutput(double[][] bobotOutput) {
        this.bobotOutput = bobotOutput;
    }
    
}


       
 

Class diatas dapat disimpan layak sebuah file, seperti contoh berikut


       
import java.io.*;
import java.util.ArrayList;

/**
 *
 * @author www.softscients.web.id
 */
public class Contoh {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        
            Contoh.simpan();
            Contoh.baca();
    }
    public static void simpan()
    {
        System.out.println("==== DATA DISIMPAN ====");
        ArrayList  data  = new ArrayList();
        data.add(new DataPerhitungan(   new double [][]{{1,2,3},{4,5,6}}, // data ke 1
                                                                new double [][]{{7,8,9},{10,11,12},{13,14,15}}
                                                        ));
        data.add(new DataPerhitungan(   new double [][]{{16,17,18},{19,20,21}}, // data ke 2
                                                                new double [][]{{22,23,24},{25,26,27},{28,29,30}}
                                                        ));
        Contoh.tampilkan(data);
        //kita akan menyimpan kedalam file 
        File file = new File("D:/data.serial");
        FileOutputStream fos = null;
        ObjectOutputStream out = null;
        try {
            fos = new FileOutputStream(file.getAbsolutePath());
            out = new ObjectOutputStream(fos);
            out.writeObject(data);
            out.close();
        } catch(IOException ex) {
            ex.printStackTrace();
        }
        
    }
    public static void baca()
    {
        System.out.println("==== DATA DIBUKA ====");
        ArrayList  model = null;
        File file = new File("D:/data.serial");
        FileInputStream fis=null;
        ObjectInputStream in=null;
        try {
            fis=new FileInputStream(file.getAbsolutePath());
            in =new ObjectInputStream(fis);
            try {
                model =  (ArrayList) in.readObject();
            } catch (ClassNotFoundException ex) {
                ex.printStackTrace();
            }
            in.close();
        }catch(IOException ex) {
            ex.printStackTrace();
        }
        Contoh.tampilkan(model);
    }
    public static void tampilkan(ArrayList  data)
    {
        for(int k = 0;k




Class dapat disimpan dalam bentuk file kemudian di load. Berikut hasil dari run diatas

       

==== DATA DISIMPAN ====
 data ke 1
Bobot Hidden
1.0 2.0 3.0 
4.0 5.0 6.0 
Bobot Output
7.0 8.0 9.0 
10.0 11.0 12.0 
13.0 14.0 15.0 
 data ke 2
Bobot Hidden
16.0 17.0 18.0 
19.0 20.0 21.0 
Bobot Output
22.0 23.0 24.0 
25.0 26.0 27.0 
28.0 29.0 30.0 
==== DATA DIBUKA ====
 data ke 1
Bobot Hidden
1.0 2.0 3.0 
4.0 5.0 6.0 
Bobot Output
7.0 8.0 9.0 
10.0 11.0 12.0 
13.0 14.0 15.0 
 data ke 2
Bobot Hidden
16.0 17.0 18.0 
19.0 20.0 21.0 
Bobot Output
22.0 23.0 24.0 
25.0 26.0 27.0 
28.0 29.0 30.0 


       
 





Dengan teknik tersebut maka hal yang sangat mudah untuk menyimpan sebuah variabel dalam 1 wadah berupa class yang dapat ditulis kedalam file biner dan dapa dibaca kembali. Kasus lain misalkan sebuah penelitian mengolah data informasi gen dari tiap pasien yang menghasilkan keluaran berupa kombinasi tiap kromosom, tentu hal itu akan sangat sulit dimasukan kedalam sebuah database seperti relational database karena masih menggunakan konsep table bukan konsep object. Penulis seringkali menggunakan teknik ini untuk menyimpan sebuah class model hasil pelatihan sebuah algoritma jaringan syarat tiruan yang terdiri dari beberapa gabungan matrix untuk 1 kali proses pelatihan.







Bisa dibayangkan bukan! Hal yang sulit bila model tersebut hanya disimpan dalam bentuk tabel seperti tabel di mysql! Karena konsep diatas semua nya berbasis konsep object