LAMPIRAN A : DATA SAMPEL
1.
Data latihan
Pola
Citra
Pola
Citra
Pola
Citra
Pola
Citra
0
1
2
3
A1
A2
A3
A4
4
5
6
7
A5
A6
Ha
Ha2
8
9
10
11
Ha3
Ha4
Ha5
Ha6
12
13
14
15
Ma
Ma2
Ma3
Ma4
16
17
18
19
Ma5
Ma6
Na
Na2
20
21
22
23
24
25
26
27
Ra
Ra2
Ra3
Ra4
28
29
30
31
Ra5
Ra6
Ta
Ta2
32
33
34
35
Ta3
Ta4
Ta5
Ta6
36
37
38
39
Sa
Sa2
Sa3
Sa4
40
41
42
43
Sa5
Sa6
Da
Da2
44
45
46
47
Da3
Da4
Da5
Da6
48
49
50
51
52
53
54
55
Ga5
Ga6
Ja
Ja2
56
57
58
59
Ja3
Ja4
Ja5
Ja6
60
61
62
63
Ba
Ba2
Ba3
Ba4
64
65
66
67
Ba5
Ba6
Nga
Nga2
68
69
70
71
Nga3
Nga4
Nga5
Nga6
72
73
74
75
76
77
78
79
La5
La6
Pa
Pa2
80
81
82
83
Pa3
Pa4
Pa5
Pa6
84
85
86
87
Nya
Nya2
Nya3
Nya4
88
89
90
91
Nya5
Nya6
wa
Wa2
92
93
94
95
Wa3
Wa4
Wa5
Wa6
96
97
98
99
100
101
102
103
Ya5
Ya6
I
I2
104
105
104
105
I3
I4
I5
I6
108
109
110
111
U
U2
U3
U4
112
113
2.
Data uji
Pola
Citra
Pola
Citra
Pola
Citra
Pola
Citra
0
1
2
3
A7
A8
A9
A10
4
5
6
7
H7
Ha8
Ha9
Ha10
8
9
10
11
Ma7
Ma8
Ma9
Ma10
12
13
14
15
Na7
Na8
Na9
Na10
16
17
18
19
Ra7
Ra8
Ra9
Ra10
20
21
22
23
24
25
26
27
Sa7
Sa8
Sa9
Sa10
28
29
30
31
Da7
Da8
Da9
Da10
32
33
34
35
Ga7
Ga8
Ga9
Ga10
36
37
38
39
Ja7
Ja8
Ja9
Ja10
40
41
42
43
Ba7
Ba8
Ba9
Ba10
44
45
46
47
48
49
50
51
La7
La8
La9
La10
52
53
54
55
Pa7
Pa8
Pa9
Pa10
56
57
58
59
Nya7
Nya8
Nya9
Nya10
60
61
62
63
Wa7
Wa8
Wa9
Wa10
64
65
66
67
Ya7
Ya8
Ya9
Ya10
68
69
70
71
I7
I8
I9
I10
72
73
74
75
LAMPIRAN B
PROGRAM
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.util.Scanner;
public class tulisan{
private static final int IMG_WIDTH = 60;
private static final int IMG_HEIGHT = 90;
static double input_jst[][] = new double[60][90];
private static double mse;
private static String namagambar = "";
private static BufferedImage original, grayscale, binarized, uji,uji2;
private static double epoch = 0.5;
private static double jum2;
private static String filegambar, tipegambar;
private static double matriks2 [][] = new double[60][90];
private static double nilai = 2;
public static void main (String[] args) throws IOException{
System.out.println("masukkan nama file gambar :");
Scanner input = new Scanner(System.in);
//Scanner input2 = new Scanner(System.in);
filegambar = input.nextLine();
// mengambil source gambar
original = ImageIO.read(tulisan.class.getResource("pictures/"+filegambar+".bmp"));
int width_original = original.getWidth();
int height_original = original.getHeight();
if((width_original != 60 ) || (height_original != 90)){
System.out.println("ukuran gambar yang anda masukkan tidak sesuai, apakah ingin mencocokkan gambar?");
System.out.println("y / t");
String kepastian = input.nextLine();
if(kepastian.equals("y")){
//BufferedImage originalImage = ImageIO.read(new File(filegambar+".bmp"));
int type = original.getType() == 0? BufferedImage.TYPE_INT_ARGB : original.getType();
BufferedImage resizeImagebmp = ImageProcessing.resizeImage(original, type);
.write(resizeImagebmp, "bmp", new File("pictures/"+filegambar+".bmp"));
original = ImageIO.read(tulisan.class.getResource("pictures/"+filegambar+".bmp"));}}
width_original = original.getWidth();
height_original = original.getHeight();
if((width_original == 60) && (height_original == 90)){
grayscale = fungsi_tulisan2.toGray(original);
binarized = fungsi_tulisan2.binarize(grayscale);
// mengatur besar skala width dengan height
int jum =0;
int width = binarized.getWidth();
int height = binarized.getHeight();
// System.out.println(" " +width +" " + height);
int [][] matriks = new int [width][height];
int [][] matriksbanding = new int [width][height];
int [][] matriksbanding2 = new int [width][height];
//int [][] zoning2 = new int [width][height];
for (int i = 0; i < width; i++) {
for (int j = 0; j <height; j++) {
int gambar = binarized.getRGB(i,j);
matriks[i][j] = gambar;
// System.out.println(gambar);
if(matriks[i][j] == -16777216){
matriks[i][j] = 1 ;}
if(matriks[i][j] == -1){
matriks [i][j] = 0;}}}
matriks = fungsi_tulisan.doHilditchsThinning(matriks);
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
if(matriks[i][j] == 0 ){
matriks[i][j] = -16777216 ; //-1;
// untuk citra thinning berwarna hitam buat nilainya sama dengan -1}
if(matriks[i][j] == 1){
matriks [i][j] = -1 ; //-16777216;}
binarized.setRGB(i,j,matriks[i][j]); }}
fungsi_tulisan2.writeImage2(binarized);
uji = ImageIO.read(tulisan.class.getResource("gambarmatriks.bmp"));
matriksbanding = matriksmatriks.matriks_banding1(uji);
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
if(matriksbanding[i][j] == -1 ){
matriksbanding[i][j] = 0; //-1;
// untuk citra thinning berwarna hitam buat nilainya sama dengan -1}
if(matriksbanding[i][j] == -16777216){
}
}
}
// tampilkan gambar matriks
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
matriks2[i][j] = (double) matriksbanding[i][j];
// System.out.print(matriks2[i][j]);}
// System.out.println();}
// pengulangan diagonal based
int ZONA_L = 6;
int ZONA_T = 9;
int ZONA_U = 10;
int indeks = 0;
int pola = 0;
//Inisialisasi array input_jst
for(int i=0; i<15; i++) {
for(int j=0; j<70; j++){
input_jst[i][j] = 0;
// System.out.print(input_jst[i][j]); }
// System.out.println(); }
// Zoning
double piksel_zona[][] = new double [ZONA_T][ZONA_L];
double piksel_zona_max=0.0;
// Inisialisasi piksel_ona
for(int i=0; i<ZONA_T; i++){
for(int j=0; j<ZONA_L; j++) {
piksel_zona[i][j] = 0.0; } }
for(int i=0; i<matriksbanding.length; i+=ZONA_U){
for(int j=0; j<matriksbanding.length; j+=ZONA_U){
//Hitung jumlah piksel hitam setiap zona
for(int k=i; k<i+ZONA_U; k++) {
for(int l=j; l<j+ZONA_U; l++){
if(matriksbanding2[l][k] == 1)
piksel_zona[i/ZONA_U][j/ZONA_U]++; }}
//cout << piksel_zona[i/10][j/10] << " ";
if(piksel_zona[i/ZONA_U][j/ZONA_U] > piksel_zona_max)
piksel_zona_max = piksel_zona[i/ZONA_U][j/ZONA_U]; }
//cout << endl;}
//cout << "max :" << piksel_zona_max << endl;
//cout << endl;
// Hitung nilai setiap zona
for(int i=0; i<ZONA_T; i++){
for(int j=0; j<ZONA_L; j++){
piksel_zona[i][j] /= piksel_zona_max;
//cout << piksel_zona[i][j] << " ";
input_jst[pola][j] = piksel_zona[i][j]; }
//cout << endl; }
for(int n = 0 ; n < 10 ; n++ ){
for(int m = 0 ; m< 1 ; m++){
int jml_piksel_zona=0; //variabel untuk setiap zona
double jml_hor=0.0, jml_ver=0.0; //variabel untuk menyimpan jumlah nilai dari setiap zona secara horizontal dan vertikal
double rata_rata_zona[][]= new double[ZONA_T][ZONA_L];
double rata_rata_hor[] = new double[ZONA_T];
double rata_rata_ver[] = new double[ZONA_L]; //array untuk menyimpan nilai semua rata-rata (zona, horizontal dan vertikal)
//Inisialisasi array
for(int j=0; j<ZONA_L; j++) {
rata_rata_zona[i][j] = 0; //array rata_rata_zona
rata_rata_ver[j] = 0; //array rata_rata_ver }
// System.out.println();
rata_rata_hor[i] = 0; //array rata_rata_hor
//System.out.print(rata_rata_hor[i]);}
//Pengulangan untuk pembagian zona 10x10 pixel
for(int i=0; i<matriks2.length; i+=10) {
for(int j=0; j<matriks2.length; j+=10){
//Hitung jumlah piksel hitam setiap zona
jml_piksel_zona = 0;
for(int k=i; k<i+10; k++) {
for(int l=j; l<j+10; l++){
if(matriks2[k][l] == 0)
jml_piksel_zona++; } }
//Hitung rata-rata setiap zona => rata_zona = jml_piksel_zona/(panjang + tinggi - 1)
rata_rata_zona[i/10][j/10] = (double)jml_piksel_zona/(ZONA_U*2-1);
//cout << "[" <<i/10<< "][" <<j/10<< "] = " << jml_piksel_zona << " / 19 = " << rata_rata_zona[i/10][j/10]
<< endl;
//Masukkan rata_rata_zona ke array input_jst
input_jst[pola][indeks++] = rata_rata_zona[i/10][j/10];}
//cout << endl;
}
//Hitung rata-rata zona horizontal
for(int i=0; i<ZONA_T; i++){
for(int j=0; j<ZONA_L; j++) {
jml_hor += rata_rata_zona[i][j];}
rata_rata_hor[i] = jml_hor/ZONA_L;
//cout << "Hor[" <<i<< "] = " << jml_hor << " / " << ZONA_L << " = " << rata_rata_hor[i] << endl;
jml_hor = 0.0;
//Masukkan rata_rata_zona ke array input_jst
input_jst[pola][indeks++] = rata_rata_hor[i];
}
//Hitung rata-rata zona vertikal
for(int i=0; i<ZONA_L; i++){
for(int j=0; j<ZONA_T; j++){
jml_ver += rata_rata_zona[j][i]; }
rata_rata_ver[i] = jml_ver/ZONA_T;
//cout << "Ver[" <<i<< "] = " << jml_ver << " / " << ZONA_T << " = " << rata_rata_ver[i] << endl;
// System.out.println(rata_rata_ver[i]);
jml_ver = 0.0;
// Masukkan rata_rata_zona ke array input_jst
input_jst[pola][indeks++] = rata_rata_ver[i];}
indeks = 0; //Reset indeks menjadi 0 untuk image selanjutnya
pola += 1; //Lanjut ke pola selanjutnya}}
//System.out.println("ini adalah pola:" + pola);}
// akhir dari if pertama
double targetY[][] =
{{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0},
{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0},
{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0},
{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0},
{0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0},
{0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0},
{0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
{0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
{0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
//mse = matriksmatriks.init(input_jst, targetY);
double matriksbanding3 [][] = new double [width_original][height_original];
String namatulisan ="";
if(true){
uji2 = ImageIO.read(tulisan.class.getResource("jst/ha10.bmp"));
matriksbanding3 = matriksmatriks.matriks_banding2(uji2);
jum2 = matriksmatriks.perbandingan(matriks2 , matriksbanding3, width_original, height_original);
namatulisan = "ha";
if(jum2>0){
uji2 = ImageIO.read(tulisan.class.getResource("jst/ya.bmp"));
= matriksmatriks.matriks_banding2(uji2);
jum2 = matriksmatriks.perbandingan(matriks2 , matriksbanding3, width_original, height_original);
namatulisan = "ya";}
double jum3;
System.out.println();}
mse = matriksmatriks.init(input_jst, targetY);
double jum3;
System.out.println();
if(jum2 == 0.0){
jum3 = jum2 + (mse * 50 + nilai) + 50;
System.out.println("Tingkat Kecocokannya adalah: " + jum3);
System.out.println("mse : " + (100 - jum3)); }
else{
//jum2 = jum2 * 100 ;
System.out.println("Tingkat Kecocokannya adalah: " + jum2);
jum3 = 100- jum2;
System.out.println("mse: " + jum3); }
System.out.println();
System.out.println("Find Solution : " + namatulisan);}
else{
System.out.println();
System.out.println("not Find Solution");}
// hasil dari nilai zoning dan diagonal based
//System.out.println("Hasil nilai zoning dan diagonal based");
for(int i = 0 ;i<15; i++){
for(int j = 0; j<70; j++){
//System.out.println("ini adalah:");
//System.out.print(input_jst[i][j]);}
//System.out.println();
}
}