Algorithma Sederhana Pengenalan Pattern Kotak

Ilustrasi Kuisioner (Sumber: Pixabay/TeroVesalainen)

Baru-baru ini, ketika tulisan ini ditulis, penulis mencoba mengimplementasikan algorithma pengenalan pattern.

Konon, pengenalan pattern ini telah banyak digunakan dalam kontek Machine Learning, seperti dalam pengenalan wajah, bentuk, mobil, handwriting recognition dan lain sebagainya.

Dan banyak juga library pihak ketiga yang dapat digunakan dan gratis, jika ingin membuatnya menjadi sebuah software.

Meskipun banyak orang menyarankan penggunaan library pihak ketiga tersebut, namun karena memang penulis semenjak dulu tidak berkeinginan untuk menggunakan aplikasi pihak ketiga apapun di software milik penulis, penulis sebisa mungkin membuatnya sendiri.

Alasan kenapa penulis anti dengan library atau aplikasi pihak ketiga, kecuali terpaksa, dapat dilihat pada posting penulis yang berjudul "Anti Library Pihak Ketiga".

Sebagai permulaan untuk belajar pengenalan pattern, pattern yang coba penulis kenali adalah pattern kotak.

Tentu karena penulis rasa bentuk tersebut adalah mudah.

Selain itu, object yang dicocokkan sebagai percobaan adalah berupa kuisioner, dengan pola pilihan jawaban kotak.

Berikut ini adalah cuplikan kode Java, yang menunjukkan implementasi pencoccokan per pixel antara gambar sumber (source) dengan gambar pattern:

BufferedImage source = new BufferedImage(image.getWidth(null),image.getHeight(null), BufferedImage.TYPE_INT_ARGB); 
Graphics2D bGr = source.createGraphics(); 
bGr.drawImage(image, 0, 0, null); 
 
BufferedImage  pattern= new BufferedImage(pattern_image.getWidth(null),pattern_image.getHeight(null), BufferedImage.TYPE_INT_ARGB); 
Graphics2D bGr2 = pattern.createGraphics(); 
bGr2.drawImage(pattern_image, 0, 0, null); 

int nextj=0,num=0; 
for(int j=0;j<source.getHeight();j++){ 
 for(int i=0;i<source.getWidth();i++){ 
  int sama=0,semua=0,val=0; 
  for(int io=0;io<pattern.getWidth();io++){ 
   for(int jo=0;jo<pattern.getHeight();jo++){ 
    int xo=i+io; 
    int yo=j+jo; 
    if(xo>=0 && yo>=0 && xo<source.getWidth() && yo<source.getHeight()){ 
     Color c = new Color(source.getRGB(xo,yo),true); 
     Color c2 = new Color(pattern.getRGB(io,jo),true); 
     if(c.getAlpha()>0){ 
      int r=c.getRed(); 
      int g=c.getGreen(); 
      int b=c.getBlue(); 
      r=(int)(1.0*(r+b+g)/3); 
      if(r<0)r=0; 
      if(r>255)r=255; 
      if(r<BTSPIXEL){ 
       val++; 
      } 

      if(c2.getAlpha()>0){ 
       int r2=c2.getRed(); 
       int g2=c2.getGreen(); 
       int b2=c2.getBlue(); 
       r2=(int)(1.0*(r2+b2+g2)/3); 
       if(r2<0)r2=0; 
       if(r2>255)r2=255; 
 
       if(r<BTSPIXEL && r2<BTSPIXEL){ 
        sama++; 
       } 
       semua++; 
      } 
     } 
    } 
   } 
  } 
  if(semua>0 && (1.0*sama/semua)>0.8){ 
   //tambahkan fungsi jika kecocokan pattren 80% 
   i+=pattern.getWidth(); 
  } 
  num++; 
 } 
 if(j<nextj)j=nextj; 
} 
bGr.dispose(); 
bGr2.dispose(); 

Kode ini adalah kode yang penulis implementasikan pada software My Scanner 2.0 penulis.

Komentar



Postingan populer dari blog ini

Kumpulan Source Code Greenfoot

Algorithma Coretan Abstrak dengan HTML5 Canvas

Game TicTacToe dengan Greenfoot

Honeycomb Style Wallpaper dengan HTML5 Canvas

Cara Membuat Halaman HTML Sederhana

Kode Greenfoot Game Snake Sederhana

Melihat Alamat Berbentuk QR Code di Undangan Pernikahan

Algoritma Tombol Putar dengan Greenfoot

Tips Agar Website Anda Segera di Terima oleh Google Adsense dan di-Monetize

Selamatan Latar Glundengan Bubuk Banyuwangi