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

Apps Script untuk Cetak Sertifikat

Kebodohan Karyawan Menyalahkan Sistem

Kode Apps Script MailApp untuk Form Mengirimkan Email

Checking Data yang Belum Dimasukkan dalam Daftar Menggunakan Query Google Sheet

Generate Karakter Acak dan Menempatkannya di Sel Google Sheets dengan Apps Script

Menyembunyikan Failed Load Images di Blogger

Algorithma Bilangan Prima dengan Javascript

Apps Script untuk Mengirimkan Notifikasi Approval

Mencoba Submit Theme di Wordpress.org

Menghapus Baris di Google Sheets yang Memiliki Sel Kosong dengan Apps Script