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

Jasa Penjadwalan Semester, UTS dan UAS Perguruan Tinggi menggunakan Google Sheet

Menyikapi Ucapan AI Pejabat

Peringatan: Aksi Penipuan Skimming Melalui Aplikasi Android M-Pajak

Ketika Pengelola Basis Data Terabaikan

Kebodohan Karyawan Menyalahkan Sistem

Apps Script untuk Cetak Sertifikat

Checking Data yang Belum Dimasukkan dalam Daftar Menggunakan Query Google Sheet

Kumpulan Source Code Greenfoot

Game TicTacToe dengan Greenfoot

Menyembunyikan Failed Load Images di Blogger