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

Operasi Labelling Citra

Operasi labelling sangat powerfull untuk melakukan pemisahan bagian bagian citra sehingga memudahkan dalam operasi selanjut nya. Operasi ini bekerja dengan nilai ketetanggaan yaitu 4 dan 8.






Berikut contoh implementasi dari operasi labelling, misalkan kita mempunyai sebuah citra biner yaitu
Kemudian akan dilanjut dengan operasi labelling
4 nilai ketetanggaan


Menghasilkan



8 nilai ketetanggan



Penulis menggunakan java sebagai tools nya untuk melakukan operasi labelling, agar memudahkan kan, maka operasi coloring pun digunakan sehingga operasi labelling pun menjadi lebih mudah dilihat. Berikut adalah tampilan nya 


Download

https://www.dropbox.com/s/oocy7y7ujrtpz2w/Aplikasi%20Operasi%20Labelling%20-%206%20oktober%202014-java.rar?dl=0

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

Menyimpan Object Class dengan Serialisasi


Agak sulit membayangkan sebuah 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 mengimplementasikanserialisasi, 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;
    }
    
}


       
 


Sunday, September 21, 2014

Tutorial Drag and Drop di java



Sudah sangat umum fitur drag and drop disematkan kedalam sebuah aplikasi sehingga menyingkat suatu proses, pada java fitur drag and drop (DnD) juga bisa diterapkan, seperti berikut yaitu menampilkan gambar pada Jbutton dengan melakukan DnD sebuah file gambar






Mekanisme nya adalah komponen disematkan method setDrop(new DropTarget())
Letakan code berikut pada constructor Jframe





        button1.setDropTarget(new DropTarget() {
            @Override
            public void drop(DropTargetDropEvent dtde) {
                button1DnD(dtde);
            }
        });


       
 



Kemudian kita membuat method yang akan didaftarkan ke method drop


    private void button1DnD(DropTargetDropEvent dtde)
    {
            try {
                    Transferable transfer = dtde.getTransferable();
                    if(transfer.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
                        dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
                        List objects = (List)transfer.getTransferData(DataFlavor.javaFileListFlavor);
                        for(Object object : objects) {
                            if(object instanceof File) {
                                File source = (File)object;
                                File dest = new File(System.getProperty("user.home")+File.separator+source.getName());
                                Files.copy(Paths.get(source.getAbsolutePath()), Paths.get(dest.getAbsolutePath()), StandardCopyOption.REPLACE_EXISTING);
                                //System.out.println("File copied from "+source.getAbsolutePath()+" to "+dest.getAbsolutePath());
                                button1.setText("");
                                button1.setIcon(new ImageIcon(ImageIO.read(new File(dest.getAbsolutePath()))));
                                int tinggi = ImageIO.read(new File(dest.getAbsolutePath())).getHeight();
                                int lebar = ImageIO.read(new File(dest.getAbsolutePath())).getWidth();
                                jLabel1.setText("Tinggi :"+tinggi+" Lebar :"+lebar+" Tipe : "+ImageIO.read(new File(dest.getAbsolutePath())).getType());
                            }else
                            {
                                button1.setText(pesan);
                            }
                        }
                    } else if(transfer.isDataFlavorSupported(DataFlavor.stringFlavor)) {
                        dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
                        String type = (String)transfer.getTransferData(DataFlavor.stringFlavor);
                        //System.err.println("Data flavor not supported: "+type);
                    } else {
                       // System.err.println("Data flavor not supported.");
                    }
                } catch(UnsupportedFlavorException ex) {
                    //System.err.println(ex.getMessage());
                } catch(IOException ex) {
                   // System.err.println(ex.getMessage());
                } catch(Exception ex) {
                    //System.err.println(ex.getMessage());
                } finally {
                    dtde.dropComplete(true);
                }
    }


       
 

Download
https://www.dropbox.com/s/964k3nyel6qxzbt/Release%20Aplikasi%20Viewer%20Drag%20and%20drop.rar?dl=0