Pengenalan Pola Karakter Dan Penerjemahan Aksara Katakana Menggunakan Implementasi Algoritma Associative Memory Tipe Hetero-Associative

(1)

LISTING PROGRAM

1. Form1.cs

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing.Imaging; using System.IO; namespace program {

public partial class AksaraForm : Form { int[,] totalBobotKarakter; public AksaraForm() { InitializeComponent(); }

public static byte[] ImageToByte(Image img) {

ImageConverter converter = new ImageConverter();

return (byte[])converter.ConvertTo(img, typeof(byte[])); }

public static Image ScaleImage(Image image, int maxWidth, int maxHeight)

{

var newImage = new Bitmap(maxWidth, maxHeight); using (var graphics = Graphics.FromImage(newImage)) graphics.DrawImage(image, 0, 0, maxWidth, maxHeight); return newImage;

}

private void ubahUkuran_Click(object sender, EventArgs e) {

using (var newImage = ScaleImage(pictureBox1.Image, 100, 100)) {

Bitmap gambar = new Bitmap(newImage); pictureBox1.Image = gambar;

}

using (var newImage = ScaleImage(pictureBox2.Image, 100, 100)) {

Bitmap gambar = new Bitmap(newImage); pictureBox2.Image = gambar;

}

using (var newImage = ScaleImage(pictureBox3.Image, 100, 100)) {

Bitmap gambar = new Bitmap(newImage); pictureBox3.Image = gambar;

}

using (var newImage = ScaleImage(pictureBox4.Image, 100, 100)) {

Bitmap gambar = new Bitmap(newImage); pictureBox4.Image = gambar;

}

using (var newImage = ScaleImage(pictureBox5.Image, 100, 100)) {


(2)

lxxvii

pictureBox5.Image = gambar; }

}

private void btnopnimg_Click(object sender, EventArgs e) {

string testFile = @inputDirektori.Text + "\\" + inputNamaKarakter.Text + "1.jpg";

if (File.Exists(testFile)) {

pictureBox1.Image = Image.FromFile(@inputDirektori.Text + "\\" + inputNamaKarakter.Text + "1.jpg");

} else {

MessageBox.Show("File " + testFile + " tidak ditemukan !!", "File sampel", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

testFile = @inputDirektori.Text + "\\" + inputNamaKarakter.Text + "2.jpg";

if (File.Exists(testFile)) {

pictureBox2.Image = Image.FromFile(@inputDirektori.Text + "\\" + inputNamaKarakter.Text + "2.jpg");

} else {

MessageBox.Show("File " + testFile + " tidak ditemukan !!", "File sampel", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

testFile = @inputDirektori.Text + "\\" + inputNamaKarakter.Text + "3.jpg";

if (File.Exists(testFile)) {

pictureBox3.Image = Image.FromFile(@inputDirektori.Text + "\\" + inputNamaKarakter.Text + "3.jpg");

} else {

MessageBox.Show("File " + testFile + " tidak ditemukan !!", "File sampel", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

testFile = @inputDirektori.Text + "\\" + inputNamaKarakter.Text + "4.jpg";

if (File.Exists(testFile)) {

pictureBox4.Image = Image.FromFile(@inputDirektori.Text + "\\" + inputNamaKarakter.Text + "4.jpg");

} else {

MessageBox.Show("File " + testFile + " tidak ditemukan !!", "File sampel", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

testFile = @inputDirektori.Text + "\\" + inputNamaKarakter.Text + "5.jpg";

if (File.Exists(testFile)) {


(3)

pictureBox5.Image = Image.FromFile(@inputDirektori.Text + "\\" + inputNamaKarakter.Text + "5.jpg");

} else {

MessageBox.Show("File " + testFile + " tidak ditemukan !!", "File sampel", MessageBoxButtons.OK, MessageBoxIcon.Error);

} }

private void Normalisasi_Click(object sender, EventArgs e) {

List<Bitmap> kotakgbr = new List<Bitmap>(); Bitmap bp1 = (Bitmap)pictureBox1.Image; Bitmap bp2 = (Bitmap)pictureBox2.Image; Bitmap bp3 = (Bitmap)pictureBox3.Image; Bitmap bp4 = (Bitmap)pictureBox4.Image; Bitmap bp5 = (Bitmap)pictureBox5.Image; kotakgbr.Add(bp1);

kotakgbr.Add(bp2); kotakgbr.Add(bp3); kotakgbr.Add(bp4); kotakgbr.Add(bp5);

for (int i = 1; i <= 5; i++) {

Bitmap gambar = new Bitmap(kotakgbr[i - 1]); byte red, green, blue, grayscale;

for (int y = 0; y < gambar.Height; y++) {

for (int x = 0; x < gambar.Width; x++) {

red = gambar.GetPixel(x, y).R; green = gambar.GetPixel(x, y).G; blue = gambar.GetPixel(x, y).B;

grayscale = Convert.ToByte((red + green + blue) / 3); gambar.SetPixel(x, y, Color.FromArgb(grayscale, grayscale, grayscale));

} }

byte max = 0, min = 255, pixel, t; byte result;

for (int y1 = 0; y1 < gambar.Height; y1++) {

for (int x1 = 0; x1 < gambar.Width; x1++) {

pixel = gambar.GetPixel(x1, y1).R; if (pixel > max)

{

max = pixel; }

if (pixel < min) {

min = pixel; }

} }

t = 220;

for (int y2 = 0; y2 < gambar.Height; y2++) {

for (int x2 = 0; x2 < gambar.Width; x2++) {

pixel = gambar.GetPixel(x2, y2).R; if (pixel > t)


(4)

lxxix

{

result = 255; }

else {

result = 0; }

gambar.SetPixel(x2, y2, Color.FromArgb(result, result, result));

} }

if (i == 1) {

pictureBox1.Image = gambar; }

else if (i == 2) {

pictureBox2.Image = gambar; }

else if (i == 3) {

pictureBox3.Image = gambar; }

else if (i == 4) {

pictureBox4.Image = gambar; }

else if (i == 5) {

pictureBox5.Image = gambar; }

} }

private void hitungbobot_Click(object sender, EventArgs e) {

Dictionary<string, int[]> vektorKeluaran = new Dictionary<string, int[]>();

int[] vektorA = new int[] { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1 };

vektorKeluaran.Add("a", vektorA);

int[] vektorKa = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1 };

vektorKeluaran.Add("ka", vektorKa);

int[] vektorSa = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1 };

vektorKeluaran.Add("sa", vektorSa);

int[] vektorTa = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1 };

vektorKeluaran.Add("ta", vektorTa);

int[] vektorNa = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1 };

vektorKeluaran.Add("na", vektorNa);

int[] vektorHa = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1 };


(5)

int[] vektorMa = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("ma", vektorMa);

int[] vektorYa = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("ya", vektorYa);

int[] vektorRa = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("ra", vektorRa);

int[] vektorWa = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("wa", vektorWa);

int[] vektorI = new int[] { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("i", vektorI);

int[] vektorKi = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("ki", vektorKi);

int[] vektorShi = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("shi", vektorShi);

int[] vektorChi = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("chi", vektorChi);

int[] vektorNi = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("ni", vektorNi);

int[] vektorHi = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("hi", vektorHi);

int[] vektorMi = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("mi", vektorMi);

int[] vektorRi = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("ri", vektorRi);

int[] vektorU = new int[] { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("u", vektorU);

int[] vektorKu = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("ku", vektorKu);

int[] vektorSu = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };


(6)

lxxxi

int[] vektorTsu = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("tsu", vektorTsu);

int[] vektorNu = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("nu", vektorNu);

int[] vektorFu = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("fu", vektorFu);

int[] vektorMu = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("mu", vektorMu);

int[] vektorYu = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("yu", vektorYu);

int[] vektorRu = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("ru", vektorRu);

int[] vektorE = new int[] { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("e", vektorE);

int[] vektorKe = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("ke", vektorKe);

int[] vektorSe = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("se", vektorSe);

int[] vektorTe = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("te", vektorTe);

int[] vektorNe = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("ne", vektorNe);

int[] vektorHe = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("he", vektorHe);

int[] vektorMe = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("me", vektorMe);

int[] vektorRe = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("re", vektorRe);

int[] vektorO = new int[] { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };


(7)

int[] vektorKo = new int[] { -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("ko", vektorKo);

int[] vektorSo = new int[] { -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("so", vektorSo);

int[] vektorTo = new int[] { -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("to", vektorTo);

int[] vektorNo = new int[] { -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("no", vektorNo);

int[] vektorHo = new int[] { -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("ho", vektorHo);

int[] vektorMo = new int[] { -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("mo", vektorMo);

int[] vektorYo = new int[] { -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("yo", vektorYo);

int[] vektorRo = new int[] { -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("ro", vektorRo);

int[] vektorWo = new int[] { -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("wo", vektorWo);

int[] vektorN = new int[] { 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("n", vektorN);

Bitmap gambar1 = (Bitmap)pictureBox1.Image; Bitmap gambar2 = (Bitmap)pictureBox2.Image; Bitmap gambar3 = (Bitmap)pictureBox3.Image; Bitmap gambar4 = (Bitmap)pictureBox4.Image; Bitmap gambar5 = (Bitmap)pictureBox5.Image; List<Bitmap> listGambar = new List<Bitmap>(); List<int[]> listBiner = new List<int[]>(); listGambar.Add(gambar1);

listGambar.Add(gambar2); listGambar.Add(gambar3); listGambar.Add(gambar4); listGambar.Add(gambar5);

int[] vk = vektorKeluaran[inputNamaKarakter.Text]; for (int i = 0; i < 46; i++)

{

InputVektorKeluaran.AppendText(vk[i].ToString()); }

for (int i = 0; i < 5; i++) {

Bitmap gambar = listGambar[i]; int[] binerGambar = new int[10000];


(8)

lxxxiii

byte warna = 0; int counter = 0;

for (int y = 0; y < gambar.Height; y++) {

for (int x = 0; x < gambar.Width; x++) {

warna = gambar.GetPixel(x, y).R; if (warna > 0)

{

binerGambar[counter] = 1; }

else {

binerGambar[counter] = -1; }

counter += 1; }

}

listBiner.Add(binerGambar); }

List<int[,]> listBobotGambar = new List<int[,]>(); for (int iGambar = 0; iGambar < 5; iGambar++) {

int[,] bobotGambar = new int[10000, 46]; int[] vektorGambarKeluaran =

vektorKeluaran[inputNamaKarakter.Text];

int[] binerGambar = listBiner[iGambar]; for (int baris = 0; baris < 10000; baris++) {

for (int kolom = 0; kolom < 46; kolom++) {

bobotGambar[baris, kolom] = binerGambar[baris] * vektorGambarKeluaran[kolom];

} }

listBobotGambar.Add(bobotGambar); }

totalBobotKarakter = new int[10000, 46]; for (int baris = 0; baris < 10000; baris++) {

for (int kolom = 0; kolom < 46; kolom++) {

int totalCell = 0;

for (int iGambar = 0; iGambar < 5; iGambar++) {

totalCell = totalCell + listBobotGambar[iGambar][baris, kolom];

}

totalBobotKarakter[baris, kolom] = totalCell; }

}

if (tampilkanInformasi.Checked) {

informasi.ResetText();

informasi.AppendText("Total Bobot karakter "); informasi.AppendText(inputNamaKarakter.Text);

informasi.AppendText("\n\nYang ditampilkan hanya 1000 baris dari matriks total bobot !! \n\n");

for (int i = 0; i < 1000; i++) {

for (int j = 0; j < 46; j++) {


(9)

if (totalBobotKarakter[i, j] > 0) { informasi.AppendText(" "); informasi.AppendText(totalBobotKarakter[i, j].ToString()); } else { informasi.AppendText(totalBobotKarakter[i, j].ToString()); } } informasi.AppendText("\n"); } }

MessageBox.Show("Penghitungan bobot Selesai", "Pengitungan Bobot", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

}

private void simpanBobotKarakter_Click(object sender, EventArgs e) {

string path = inputDirektori.Text + "\\" + inputNamaKarakter.Text + ".txt";

using (System.IO.StreamWriter file = new System.IO.StreamWriter(@path))

{

for (int baris = 0; baris < 10000; baris++) {

for (int kolom = 0; kolom < 46; kolom++) {

if (kolom < 45) {

file.Write(totalBobotKarakter[baris, kolom].ToString() + ",");

} else { file.WriteLine(totalBobotKarakter[baris, kolom].ToString()); } } } }

MessageBox.Show("Bobot Karakter telah disimpan ke " +

inputDirektori.Text + "\\" + inputNamaKarakter.Text + ".txt", "Simpan bobot", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

private void hitungBobotMassal_Click(object sender, EventArgs e) {

List<string> daftarKarakter = new List<string>(); daftarKarakter.Add("a"); daftarKarakter.Add("ka"); daftarKarakter.Add("sa"); daftarKarakter.Add("ta"); daftarKarakter.Add("na"); daftarKarakter.Add("ha"); daftarKarakter.Add("ma"); daftarKarakter.Add("ya"); daftarKarakter.Add("ra"); daftarKarakter.Add("wa"); daftarKarakter.Add("i"); daftarKarakter.Add("ki"); daftarKarakter.Add("shi");


(10)

lxxxv

daftarKarakter.Add("chi"); daftarKarakter.Add("ni"); daftarKarakter.Add("hi"); daftarKarakter.Add("mi"); daftarKarakter.Add("ri"); daftarKarakter.Add("u"); daftarKarakter.Add("ku"); daftarKarakter.Add("su"); daftarKarakter.Add("tsu"); daftarKarakter.Add("nu"); daftarKarakter.Add("fu"); daftarKarakter.Add("mu"); daftarKarakter.Add("yu"); daftarKarakter.Add("ru"); daftarKarakter.Add("e"); daftarKarakter.Add("ke"); daftarKarakter.Add("se"); daftarKarakter.Add("te"); daftarKarakter.Add("ne"); daftarKarakter.Add("he"); daftarKarakter.Add("me"); daftarKarakter.Add("re"); daftarKarakter.Add("o"); daftarKarakter.Add("ko"); daftarKarakter.Add("so"); daftarKarakter.Add("to"); daftarKarakter.Add("no"); daftarKarakter.Add("ho"); daftarKarakter.Add("mo"); daftarKarakter.Add("yo"); daftarKarakter.Add("ro"); daftarKarakter.Add("wo"); daftarKarakter.Add("n");

Dictionary<string, int[]> vektorKeluaran = new Dictionary<string, int[]>();

int[] vektorA = new int[] { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1 };

vektorKeluaran.Add("a", vektorA);

int[] vektorKa = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1 };

vektorKeluaran.Add("ka", vektorKa);

int[] vektorSa = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1 };

vektorKeluaran.Add("sa", vektorSa);

int[] vektorTa = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1 };

vektorKeluaran.Add("ta", vektorTa);

int[] vektorNa = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1 };

vektorKeluaran.Add("na", vektorNa);

int[] vektorHa = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("ha", vektorHa);

int[] vektorMa = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1 };


(11)

vektorKeluaran.Add("ma", vektorMa);

int[] vektorYa = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("ya", vektorYa);

int[] vektorRa = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("ra", vektorRa);

int[] vektorWa = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("wa", vektorWa);

int[] vektorI = new int[] { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("i", vektorI);

int[] vektorKi = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("ki", vektorKi);

int[] vektorShi = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("shi", vektorShi);

int[] vektorChi = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("chi", vektorChi);

int[] vektorNi = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("ni", vektorNi);

int[] vektorHi = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("hi", vektorHi);

int[] vektorMi = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("mi", vektorMi);

int[] vektorRi = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("ri", vektorRi);

int[] vektorU = new int[] { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("u", vektorU);

int[] vektorKu = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("ku", vektorKu);

int[] vektorSu = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("su", vektorSu);

int[] vektorTsu = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };


(12)

lxxxvii

int[] vektorNu = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("nu", vektorNu);

int[] vektorFu = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("fu", vektorFu);

int[] vektorMu = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("mu", vektorMu);

int[] vektorYu = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("yu", vektorYu);

int[] vektorRu = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("ru", vektorRu);

int[] vektorE = new int[] { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("e", vektorE);

int[] vektorKe = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("ke", vektorKe);

int[] vektorSe = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("se", vektorSe);

int[] vektorTe = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("te", vektorTe);

int[] vektorNe = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("ne", vektorNe);

int[] vektorHe = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("he", vektorHe);

int[] vektorMe = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("me", vektorMe);

int[] vektorRe = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, --1, -1 };

vektorKeluaran.Add("re", vektorRe);

int[] vektorO = new int[] { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("o", vektorO);

int[] vektorKo = new int[] { -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };


(13)

int[] vektorSo = new int[] { -1, -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("so", vektorSo);

int[] vektorTo = new int[] { -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("to", vektorTo);

int[] vektorNo = new int[] { -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("no", vektorNo);

int[] vektorHo = new int[] { -1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("ho", vektorHo);

int[] vektorMo = new int[] { -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("mo", vektorMo);

int[] vektorYo = new int[] { -1, -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("yo", vektorYo);

int[] vektorRo = new int[] { -1, -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("ro", vektorRo);

int[] vektorWo = new int[] { -1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("wo", vektorWo);

int[] vektorN = new int[] { 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };

vektorKeluaran.Add("n", vektorN); informasi.ResetText();

for (int i = 0; i < 46; i++) {

string karakter = daftarKarakter[i];

informasi.AppendText("Proses karakter " + karakter + " .... "); Bitmap sampel1 = (Bitmap)Image.FromFile(@inputDirektori.Text +

"\\" + karakter + "1.jpg");

Bitmap sampel2 = (Bitmap)Image.FromFile(@inputDirektori.Text + "\\" + karakter + "2.jpg");

Bitmap sampel3 = (Bitmap)Image.FromFile(@inputDirektori.Text + "\\" + karakter + "3.jpg");

Bitmap sampel4 = (Bitmap)Image.FromFile(@inputDirektori.Text + "\\" + karakter + "4.jpg");

Bitmap sampel5 = (Bitmap)Image.FromFile(@inputDirektori.Text + "\\" + karakter + "5.jpg");

Bitmap sampel6 = (Bitmap)Image.FromFile(@inputDirektori.Text + "\\" + karakter + "6.jpg");

Bitmap sampel7 = (Bitmap)Image.FromFile(@inputDirektori.Text + "\\" + karakter + "7.jpg");

Bitmap sampel8 = (Bitmap)Image.FromFile(@inputDirektori.Text + "\\" + karakter + "8.jpg");

Bitmap sampel9 = (Bitmap)Image.FromFile(@inputDirektori.Text + "\\" + karakter + "9.jpg");

Bitmap sampel10 = (Bitmap)Image.FromFile(@inputDirektori.Text + "\\" + karakter + "10.jpg");


(14)

lxxxix

using (var newImage = ScaleImage(sampel1, 100, 100)) {

Bitmap gambar = new Bitmap(newImage); listSampel.Add(gambar);

}

using (var newImage = ScaleImage(sampel2, 100, 100)) {

Bitmap gambar = new Bitmap(newImage); listSampel.Add(gambar);

}

using (var newImage = ScaleImage(sampel3, 100, 100)) {

Bitmap gambar = new Bitmap(newImage); listSampel.Add(gambar);

}

using (var newImage = ScaleImage(sampel4, 100, 100)) {

Bitmap gambar = new Bitmap(newImage); listSampel.Add(gambar);

}

using (var newImage = ScaleImage(sampel5, 100, 100)) {

Bitmap gambar = new Bitmap(newImage); listSampel.Add(gambar);

}

using (var newImage = ScaleImage(sampel6, 100, 100)) {

Bitmap gambar = new Bitmap(newImage); listSampel.Add(gambar);

}

using (var newImage = ScaleImage(sampel7, 100, 100)) {

Bitmap gambar = new Bitmap(newImage); listSampel.Add(gambar);

}

using (var newImage = ScaleImage(sampel8, 100, 100)) {

Bitmap gambar = new Bitmap(newImage); listSampel.Add(gambar);

}

using (var newImage = ScaleImage(sampel9, 100, 100)) {

Bitmap gambar = new Bitmap(newImage); listSampel.Add(gambar);

}

using (var newImage = ScaleImage(sampel10, 100, 100)) {

Bitmap gambar = new Bitmap(newImage); listSampel.Add(gambar);

}

List<Bitmap> listSampelHitamPutih = new List<Bitmap>(); for (int iList = 0; iList < 10; iList++)

{

Bitmap gambarHitamPutih = new Bitmap(listSampel[iList]); byte red, green, blue, grayscale;

for (int y = 0; y < gambarHitamPutih.Height; y++) {

for (int x = 0; x < gambarHitamPutih.Width; x++) {

red = gambarHitamPutih.GetPixel(x, y).R; green = gambarHitamPutih.GetPixel(x, y).G; blue = gambarHitamPutih.GetPixel(x, y).B;


(15)

grayscale = Convert.ToByte((red + green + blue) / 3);

gambarHitamPutih.SetPixel(x, y, Color.FromArgb(grayscale, grayscale, grayscale));

} }

byte max = 0, min = 255, pixel, t; byte result;

for (int y1 = 0; y1 < gambarHitamPutih.Height; y1++) {

for (int x1 = 0; x1 < gambarHitamPutih.Width; x1++) {

pixel = gambarHitamPutih.GetPixel(x1, y1).R; if (pixel > max)

{

max = pixel; }

if (pixel < min) {

min = pixel; }

} }

t = 220;

for (int y2 = 0; y2 < gambarHitamPutih.Height; y2++) {

for (int x2 = 0; x2 < gambarHitamPutih.Width; x2++) {

pixel = gambarHitamPutih.GetPixel(x2, y2).R; if (pixel > t)

{

result = 255; }

else {

result = 0; }

gambarHitamPutih.SetPixel(x2, y2, Color.FromArgb(result, result, result));

} }

listSampelHitamPutih.Add(gambarHitamPutih); }

List<int[]> listSampleBiner = new List<int[]>();

for (int iHitamPutih = 0; iHitamPutih < 10; iHitamPutih++) {

Bitmap sampleHitamPutih = listSampelHitamPutih[iHitamPutih];

int[] binerGambar = new int[10000]; byte warna = 0;

int counter = 0;

for (int y = 0; y < sampleHitamPutih.Height; y++) {

for (int x = 0; x < sampleHitamPutih.Width; x++) {

warna = sampleHitamPutih.GetPixel(x, y).R; if (warna > 0)

{

binerGambar[counter] = 1; }


(16)

xci

{

binerGambar[counter] = -1; }

counter += 1; }

}

listSampleBiner.Add(binerGambar); }

List<int[,]> listBobotGambar = new List<int[,]>(); for (int iGambar = 0; iGambar < 10; iGambar++) {

int[,] bobotGambar = new int[10000, 46];

int[] vektorGambarKeluaran = vektorKeluaran[karakter]; int[] binerGambar = listSampleBiner[iGambar];

for (int baris = 0; baris < 10000; baris++) {

for (int kolom = 0; kolom < 46; kolom++) {

bobotGambar[baris, kolom] = binerGambar[baris] * vektorGambarKeluaran[kolom];

} }

listBobotGambar.Add(bobotGambar); }

int[,] totalBobotSampelKarakter = new int[10000, 46]; for (int baris = 0; baris < 10000; baris++)

{

for (int kolom = 0; kolom < 46; kolom++) {

int totalCell = 0;

for (int iGambar = 0; iGambar < 10; iGambar++) {

totalCell = totalCell + listBobotGambar[iGambar][baris, kolom];

}

totalBobotSampelKarakter[baris, kolom] = totalCell; }

}

string path = inputDirektori.Text + "\\" + karakter + ".txt"; using (System.IO.StreamWriter file = new

System.IO.StreamWriter(@path)) {

for (int baris = 0; baris < 10000; baris++) {

for (int kolom = 0; kolom < 46; kolom++) {

if (kolom < 45) {

file.Write(totalBobotSampelKarakter[baris, kolom].ToString() + ",");

} else { file.WriteLine(totalBobotSampelKarakter[baris, kolom].ToString()); } } } }

informasi.AppendText("Karakter " + karakter + " selesai di proses !!\n");


(17)

}

MessageBox.Show("Proses bobot semua karakter telah selesai", "Proses banyak karakter", MessageBoxButtons.OK, MessageBoxIcon.Information); }

private void hitungTotalBobotMassal_Click(object sender, EventArgs e) {

List<string> daftarKarakter = new List<string>(); daftarKarakter.Add("a"); daftarKarakter.Add("ka"); daftarKarakter.Add("sa"); daftarKarakter.Add("ta"); daftarKarakter.Add("na"); daftarKarakter.Add("ha"); daftarKarakter.Add("ma"); daftarKarakter.Add("ya"); daftarKarakter.Add("ra"); daftarKarakter.Add("wa"); daftarKarakter.Add("i"); daftarKarakter.Add("ki"); daftarKarakter.Add("shi"); daftarKarakter.Add("chi"); daftarKarakter.Add("ni"); daftarKarakter.Add("hi"); daftarKarakter.Add("mi"); daftarKarakter.Add("ri"); daftarKarakter.Add("u"); daftarKarakter.Add("ku"); daftarKarakter.Add("su"); daftarKarakter.Add("tsu"); daftarKarakter.Add("nu"); daftarKarakter.Add("fu"); daftarKarakter.Add("mu"); daftarKarakter.Add("yu"); daftarKarakter.Add("ru"); daftarKarakter.Add("e"); daftarKarakter.Add("ke"); daftarKarakter.Add("se"); daftarKarakter.Add("te"); daftarKarakter.Add("ne"); daftarKarakter.Add("he"); daftarKarakter.Add("me"); daftarKarakter.Add("re"); daftarKarakter.Add("o"); daftarKarakter.Add("ko"); daftarKarakter.Add("so"); daftarKarakter.Add("to"); daftarKarakter.Add("no"); daftarKarakter.Add("ho"); daftarKarakter.Add("mo"); daftarKarakter.Add("yo"); daftarKarakter.Add("ro"); daftarKarakter.Add("wo"); daftarKarakter.Add("n");

int[,] bobotAkhir = new int[10000, 46]; for (int i = 0; i < 46; i++)

{

string fileBobotKarakter = inputDirektori.Text + "\\" + daftarKarakter[i] + ".txt";

if (!File.Exists(@fileBobotKarakter)) {

MessageBox.Show("File Bobot Karakter belum lengkap, hitung dahulu bobot karakter", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);


(18)

xciii

break; }

else {

System.IO.StreamReader file = new System.IO.StreamReader(@fileBobotKarakter);

for (int baris = 0; baris < 10000; baris++) {

string line = file.ReadLine(); string[] isiFile = line.Split(','); for (int kolom = 0; kolom < 46; kolom++) {

bobotAkhir[baris, kolom] = bobotAkhir[baris, kolom] + Convert.ToInt16(isiFile[kolom]);

} }

}

}

string path = inputDirektori.Text + "\\bobot_total.txt"; using (System.IO.StreamWriter file = new

System.IO.StreamWriter(@path)) {

for (int baris = 0; baris < 10000; baris++) {

for (int kolom = 0; kolom < 46; kolom++) {

if (kolom < 45) {

file.Write(bobotAkhir[baris, kolom].ToString() + ","); } else { file.WriteLine(bobotAkhir[baris, kolom].ToString()); } } } }

MessageBox.Show("Proses penghitungan bobot total telah selesai\n " + path, "Proses banyak karakter", MessageBoxButtons.OK,

MessageBoxIcon.Information); }

private void bukaFile_Click(object sender, EventArgs e) {

filePengujianDialog.ShowDialog();

string fileName = filePengujianDialog.FileName; pathFileLabel.Text = fileName;

pbAsli.Image = Image.FromFile(@fileName);

using (var newImage = ScaleImage(pbAsli.Image, 100, 100)) {

Bitmap gbr = new Bitmap(newImage); pbAsli.Image = gbr;

}

pbNormal.Image = Image.FromFile(@fileName);

using (var newImage = ScaleImage(pbNormal.Image, 100, 100)) {

Bitmap gbrN = new Bitmap(newImage); pbNormal.Image = gbrN;

}

Bitmap gambar = (Bitmap)pbNormal.Image; byte red, green, blue, grayscale;


(19)

for (int y = 0; y < gambar.Height; y++) {

for (int x = 0; x < gambar.Width; x++) {

red = gambar.GetPixel(x, y).R; green = gambar.GetPixel(x, y).G; blue = gambar.GetPixel(x, y).B;

grayscale = Convert.ToByte((red + green + blue) / 3); gambar.SetPixel(x, y, Color.FromArgb(grayscale, grayscale, grayscale));

} }

byte max = 0, min = 255, pixel, t; byte result;

for (int y1 = 0; y1 < gambar.Height; y1++) {

for (int x1 = 0; x1 < gambar.Width; x1++) {

pixel = gambar.GetPixel(x1, y1).R; if (pixel > max)

{

max = pixel; }

if (pixel < min) {

min = pixel; }

} }

t = 220;

for (int y2 = 0; y2 < gambar.Height; y2++) {

for (int x2 = 0; x2 < gambar.Width; x2++) {

pixel = gambar.GetPixel(x2, y2).R; if (pixel > t)

{

result = 255; }

else {

result = 0; }

gambar.SetPixel(x2, y2, Color.FromArgb(result, result, result));

} }

pbNormal.Image = gambar; }

private void lakukanPengujian_Click(object sender, EventArgs e) {

List<string> daftarKarakter = new List<string>(); daftarKarakter.Add("a ア");

daftarKarakter.Add("ka "); daftarKarakter.Add("sa サ"); daftarKarakter.Add("ta タ"); daftarKarakter.Add("na "); daftarKarakter.Add("ha "); daftarKarakter.Add("ma "); daftarKarakter.Add("ya ヤ"); daftarKarakter.Add("ra ");


(20)

xcv

daftarKarakter.Add("wa ワ"); daftarKarakter.Add("i イ"); daftarKarakter.Add("ki キ"); daftarKarakter.Add("shi シ"); daftarKarakter.Add("chi チ"); daftarKarakter.Add("ni "); daftarKarakter.Add("hi ヒ"); daftarKarakter.Add("mi "); daftarKarakter.Add("ri "); daftarKarakter.Add("u ウ"); daftarKarakter.Add("ku ク"); daftarKarakter.Add("su ス"); daftarKarakter.Add("tsu ツ"); daftarKarakter.Add("nu "); daftarKarakter.Add("fu フ"); daftarKarakter.Add("mu "); daftarKarakter.Add("yu ユ"); daftarKarakter.Add("ru "); daftarKarakter.Add("e エ"); daftarKarakter.Add("ke ケ"); daftarKarakter.Add("se セ"); daftarKarakter.Add("te テ"); daftarKarakter.Add("ne "); daftarKarakter.Add("he ヘ"); daftarKarakter.Add("me "); daftarKarakter.Add("re "); daftarKarakter.Add("o "); daftarKarakter.Add("ko コ"); daftarKarakter.Add("so ソ"); daftarKarakter.Add("to ト"); daftarKarakter.Add("no "); daftarKarakter.Add("ho ホ"); daftarKarakter.Add("mo "); daftarKarakter.Add("yo "); daftarKarakter.Add("ro "); daftarKarakter.Add("wo "); daftarKarakter.Add("n ");

int[] binerGambarUji = new int[10000]; Bitmap gambar = (Bitmap)pbNormal.Image; byte warna = 0;

int counter = 0;

for (int y = 0; y < gambar.Height; y++) {

for (int x = 0; x < gambar.Width; x++) {

warna = gambar.GetPixel(x, y).R; if (warna > 0)

{

binerGambarUji[counter] = 1; }

else {

binerGambarUji[counter] = -1; }

counter += 1; }

}


(21)

string pathBobotTotal = inputDirektori.Text + "\\bobot_total.txt"; if (File.Exists(pathBobotTotal))

{

System.IO.StreamReader file = new System.IO.StreamReader(pathBobotTotal);

for (int baris = 0; baris < 10000; baris++) {

string line = file.ReadLine(); string[] isiFile = line.Split(','); for (int kolom = 0; kolom < 46; kolom++) {

bobotTotal[baris, kolom] = Convert.ToInt16(isiFile[kolom]);

} }

int[] hasilKali = new int[46];

for (int kolom = 0; kolom < 46; kolom++) {

int isiHasilkali = 0;

for (int baris = 0; baris <10000; baris ++) {

isiHasilkali += bobotTotal[baris, kolom] * binerGambarUji[baris];

}

hasilKali[kolom] = isiHasilkali; }

int max = hasilKali[0];

informasiUji.AppendText("Hasil Perkalian vektor\n\n"); for (int x = 0; x < 46; x++)

{

if (hasilKali[x] > max) {

max = hasilKali[x]; }

informasiUji.AppendText(hasilKali[x].ToString() + " "); }

informasiUji.AppendText("\n\n"); int[] hasilAktivasi = new int[46];

string vk = "";

for (int y = 0; y < 46; y++) {

if (hasilKali[y] == max) {

hasilAktivasi[y] = 1; }

else {

hasilAktivasi[y] = -1; }

vk = vk + " " + hasilAktivasi[y].ToString(); }

vektorKeluarLabel.Text = vk; int indexKarakter = 0; for (int z = 0; z < 46; z++) {

if (hasilAktivasi[z] == 1) {

indexKarakter = z - 45; if (indexKarakter < 0) {

indexKarakter = indexKarakter * -1; }


(22)

xcvii

break; }

}

string karakterHasil = daftarKarakter[indexKarakter]; namaKarakterKeluaranLabel.Text = karakterHasil; }

else {

MessageBox.Show("File Bobot Total tidak ditemukan !!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

} } } }


(23)

DAFTAR PUSTAKA

Ahmad, Usman. 2005. Pengolahan Citra Digital dan Teknik Pemrogramannya.

Yokyakarta : Graha Ilmu.

Bishop, Christopher M. 1999. Pattern Recognition and Feed-forward Network.

Cambridge, U.K. : Microsoft Research.

Bishop, Christopher M. 1996. Neural Networks: A Pattern Recognition Perspective.

Birmingham, U.K. : Aston University.

Bishop, Christopher M. 1995. Neural Networks for Pattern Recognition. Oxford:

Clarendon Press.

Ginting, Jakup. 2014. Implementasi Jaringan Saraf Tiruan Untuk Pengenalan Pola

dan Penerjemahan Aksara Karo Dengan Metode Associative Memory Tipe

Hetero-Association. Skripsi. Medan, Indonesia : Universitas Sumatera

Utara.

Hermawan, Arief. 2006 . Jaringan Saraf Tiruan Teori dan Aplikasi. Yogyakarta :

Andi Offset.

Kosko, Bart. 1987. Adaptive Bidirectional Associative Memory. Applied Optics

Journal Vol 26 Issue 23: 4947-4960.

Kurniati, Yayang. 2015. Implementasi Metode Bidirectional Associative Memory

Pada Absensi Berbasis Identifikasi Wajah. Skripsi. Medan, Indonesia :

Universitas Sumatera Utara.

Puspitaningrum, D. 2006. Pengantar Jaringan Saraf Tiruan. Yokyakarta : Penerbit

Andi.

Rao, Valluru B. 1995. C++ Neural Networks and Fuzzy Logic. MTBooks, IDG Books

Worldwide, Inc.

Rojas, Raul. 1996. Neural Networks A Systematic Introduction. Berlin :

Springer-Verlag.

Romauli, Tika Siregar. 2015. Implementasi Jaringan Syaraf Metode Bidirectional

Associative Memory. Skripsi. Medan, Indonesia : Universitas Sumatera

Utara.


(24)

xxxiii

BAB III

ANALISIS DAN PERANCANGAN SISTEM

3.1

Analisis Sistem

Tahap ini bertujuan memberikan gambaran yang jelas terhadap sistem yang akan

dibangun. Tahap ini menjabarkan kebutuhan-kebutuhan yang berguna untuk

perancangan sistem agar sistem yang dibangun sesuai dengan masalah yang akan

diselesaikan.

3.1.1

Analisis Masalah

Permasalahan yang akan diselesaikan dengan menggunakan sistem ini adalah

pengenalan pola citra aksara Katakana. Citra aksara Katakana didapatkan melalui

proses scanning tulisan tangan aksara Katakana dan dikonversi ke dalam citra digital.

Sebelum diolah, citra digital harus melalui beberapa tahap pengolahan citra

seperti proses pengubahan ukuran serta proses pengubahan warna citra. Melalui

proses ini akan diperoleh nilai dari citra yang selanjutnya akan digunakan untuk

pengenalan pola dengan jaringan saraf tiruan.

Sistem ini menggunakan metode jaringan saraf tiruan associative memory tipe

hetero-associative. Metode ini akan mengasosiasikan input dengan output yang telah

disediakan sebelumnya. Dalam metode ini akan dilakukan proses pelatihan untuk

melatih sistem agar dapat mengenali masukan citra aksara Katakana serta proses

pengujian untuk menguji apakah sistem mampu mengenali pola citra aksara Katakana

baik itu dalam kondisi baik ataupun cacat (noisy).

Banyaknya data pelatihan adalah 460 (masing-masing 10 data dari 46 pola

karakter), terdiri dari 46 huruf.

Analisis permasalahan lebih lanjut dijelaskan melalui Diagram Ishikawa yang

dapat dilihat pada Gambar 3.1.


(25)

Pengenalan pola Metode

Material

Metode pengenalan pola yang digunakan masih manual

Memerlukan contoh sampel aksara untuk diproses Membutuhkan aksara yang asli

untuk dicocokkan

Aksara Katakana

Bentuk aksara yang unik mempersulit penerjemahan

Gambar 3.1 Diagram Ishikawa

3.1.2

Analisis Persyaratan (Requirement Analysis)

Analisis persyaratan dilakukan untuk mengidentifikasikan dan menyatakan

persyaratan. Analisis persyaratan terdiri atas dua bagian yaitu analisis persyaratan

fungsional (functional requirement) dan analisis persyaratan nonfungsional

(nonfunctional requirement). Persyaratan fungsional adalah deskripsi mengenai

aktivitas dan layanan yang harus diberikan / disediakan oleh sebuah sistem, dan

persyaratan nonfungsional merupakan deskripsi mengenai fitur, karakteristik, dan

batasan lainnya yang menentukan apakah sistem memuaskan atau tidak. Kedua

analisis ini merupakan hal penting untuk menentukan hal-hal yang harus dimiliki

sistem.

3.1.2.1

Analisis Persyaratan Fungsional

Analisis fungsional dibutuhkan untuk mengetahui hal-hal yang bisa dikerjakan oleh

sistem. Dalam pengenalan pola karakter aksara Katakana dengan metode associative

memory tipe hetero-associative ini, persyaratan fungsional yang harus dipenuhi,

antara lain:

1.

File citra aksara Katakana yang akan diproses adalah file citra yang berformat

*.jpg.

3.1.2.2

Analisis Persyaratan Nonfungsional

Analisis persyaratan nonfungsional berhubungan dengan hal-hal berikut ini:

1.

Performa


(26)

xxxv

Perangkat lunak yang akan dibangun dapat menunjukkan hasil dari proses

pelatihan dan pengenalan pola aksara Katakana yang dilakukan oleh sistem.

2.

Mudah dipelajari dan digunakan

Perangkat lunak yang akan dibangun harus sederhana agar mudah dipelajari oleh

pengguna (user).

3.

Hemat biaya

Perangkat lunak yang dibangun tidak memerlukan perangkat tambahan ataupun

perangkat pendukung dalam proses eksekusinya.

4.

Dokumentasi

Perangkat lunak yang akan dibangun dapat menyimpan nilai citra saat proses

pengolahan citra serta nilai bobot yang dihasilkan saat citra dilatih. Persen akurasi

yang diperoleh saat proses pengujian akan disimpan pada perangkat lunak ini.

5.

Manajemen kualitas

Perangkat lunak yang akan dibangun akan memiliki kualitas yang baik yaitu

proses pengolahan citra, pelatihan, dan pengujian yang relatif cepat.

6.

Kontrol

Perangkat lunak yang dibangun akan menampilkan message error (pesan

kesalahan) jika pengguna tidak lengkap memasukkan masukan ataupun jika

masukan yang dimasukkan salah.

3.2

Pemodelan Sistem

Secara umum, sistem pengenalan pola karakter aksara Katakana ini terdiri dari 2

proses, yaitu proses pelatihan dan proses pengujian. Pemodelan system pada

penelitian ini menggunakan UML (Unified Modeling Language) yang mencakup use

case diagram, activity diagram, dan sequence diagram. UML merupakan satu

kumpulan konvensi pemodelan yang digunakan untuk menentukan atau

menggambarkan sebuah sistem software yang terkait dengan objek.

3.2.1 Use Case Diagram

Use Case Diagram menggambarkan fungsionalitas yang diharapkan dari sistem,

kebutuhan sistem dari sudut pandang user, dan interaksi antara sistem dan pengguna.

Use Case merupakan alat bantu terbaik untuk menjelaskan kepada pengguna cara


(27)

kerja sebuah sistem. Use Case diawali oleh pengguna yang disebut Actor yang

menginisiasi kegiatan sistem yaitu sebuah use case. Diagram use case menunjukkan 3

aspek dari sistem yaitu: actor, use case, dan system/sub system boundary.

Gambaran use case diagram untuk sistem yang akan dibangun dapat dilihat pada

Gambar 3.2.

Pelatihan

Pengujian

User

<<uses>>

<<uses>>

Sistem

Gambar 3.2 Use Case Diagram Sistem

User memiliki control untuk melakukan beberapa fungsi yang diinginkan,

yaitu pelatihan dan pengujian. Pada pelatihan terjadi beberapa fungsi yaitu

pengolahan citra dimana citra RGB dirubah ke citra biner, kemudian diambil nilainya.

Nilai tersebut kemudian diasosiasikan dengan aksaranya sehingga didapatkan bobot.

Pada pengujian fungsi yang terjadi yaitu pengolahan citra, hasil pengolahan citra

dikalikan dengan bobot yang didapat dari proses pengujian kemudian dimasukkan

fungsi aktivasinya.

Dokumentasi naratif use case pelatihan dan pengujian dapat dilihat pada Tabel 3.1

dan Tabel 3.2.


(28)

xxxvii

Tabel 3.1 Dokumentasi Naratif Use Case Pelatihan Sistem

Nama Use Case

Pelatihan Sistem

Aktor

Programmer dan user

Deskripsi

Use case ini mendeskripsikan proses pelatihan sistem

Prakondisi

Sudah masuk dalam tampilan antarmuka Pelatihan

Bidang khas

Kegiatan user

Respon system

1.

Atur alamat direktori

gambar sampel

2.

Tekan tombol buka citra

3.

Tekan tombol ubah

ukuran

4.

Tekan tombol

normalisasi warna

5.

Tekan tombol hitung

bobot

6.

Tekan tombol simpan

bobot karakter

7.

Tekan tombol hitung

total bobot semua

karakter

1.

Sistem

menyimpan

alamat direktori gambar

sampel

2.

Sistem membuka citra

dan menampilkannya

3.

Sistem mengubah ukuran

citra yang ditampilkan

4.

Sistem mengubah citra

aksara ke citra biner

5.

Sistem melatih citra

6.

Sistem menyimpan nilai

bobot

7.

Sistem menghitung nilai

keseluruhan bobot

karakter

Bidang alternatif

1. Tekan tab proses

pengujian

1. Sistem menampilkan

form proses pengujian

Post-kondisi

Sistem telah menyimpan hasil proses pelatihan

Tabel 3.2 Dokumentasi Naratif Use Case Pengujian Sistem

Nama Use Case

Pengujian Sistem

Aktor

User

Deskripsi

Use case ini mendeskripsikan proses pengujian sistem

Prakondisi

Sudah masuk dalam tampilan antarmuka pengujian

Bidang khas

Kegiatan user

Respon system

1.

Tekan tombol buka file

2.

Tekan tombol lakukan

pengujian

1.

Sistem menampilkan

antarmuka pengambilan

gambar dan menampilkan

citra aksara yang dipilih

2.

Sistem melakukan proses

pengujian dan pengenalan

serta memberikan hasil

citra


(29)

pelatihan

form proses pelatihan

Post-kondisi

Sistem menampilkan hasil dari citra aksara yang diuji

3.2.2 Activity Diagram (Diagram Aktivitas)

Activity Diagram adalah bentuk visual dari jalur kerja yang berisi tindakan dan

aktivitas yang juga dapat berisi pilihan atau pengulangan. Dengan kata lain, diagram

ini menggambarkan alur aktivitas dari sebuah sistem secara garis besar. Activity

Diagram digunakan untuk menganalisa proses dari sebuah sistem. Pada sistem ini

terdapat dua proses utama yaitu proses pelatihan citra dan proses pengujian.


(30)

xxxix

Gambar 3.3 Activity Diagram Pelatihan

Pada Gambar 3.3 dapat dilihat bahwa user membuka citra yang akan dilatih,

kemudian dilakukan pra pengolahan citra. Setelah citra diolah diambil nilai binernya

dalam bentuk vektor, kemudian ditranspose dan dikalikan dengan vektor abjad. Hasil

akumulasi perkalian keseluruhannya menjadi bobot. Bila keseluruhan proses berhasil,

maka sistem menampilkan dialog menyatakan proses pelatihan berhasil.

Activity Diagram dari proses pengujian dapat dilihat pada Gambar 3.4

User menentukan alamat direktori gambar sampel

User Sistem

Sistem menyimpan alamat direktori gambar sampel

User menekan tombol buka citra

Membuka dan menampilkan citra pada aplikasi

User menekan tombol ubah ukuran

Sistem melakukan proses pengubahan ukuran citra

User menekan tombol normalisasi warna

Sistem mengkonversi citra RGB ke citra biner

Sistem mengubah nilai fitur citra ke dalam vektor User menekan tombol hitung bobot

Sistem melakukan perkalian transpose antara vektor citra dan vektor abjad

Sistem mengakumulasikan semua hasil perkalian dari sampel sehingga menjadi bobot

Sistem menyimpan hasil bobot

Sistem menampilkan keterangan berhasil User menekan tombol simpan bobot karakter


(31)

Gambar 3.4 Activity Diagram Pengujian

Pada Gambar 3.4 dapat dilihat bahwa user tetap memilih serta melakukan

proses pra pengolahan citra pada citra aksara. Setelah citra diproses dan didapat nilai

vektornya, kemudian user menekan tombol uji untuk memulai proses perkalian antara

vektor citra dengan bobot yang kita dapat dari proses pelatihan. Jika proses ini

berhasil maka sistem akan menampilkan dialog menyakan proses pengujian berhasil

dan akan menampilkan abjad sesuai dengan nilai yang diperoleh dari hasil pengujian.

3.2.3 Sequence Diagram

User

User menekan tombol buka file opendialog untuk memilih citra

Sistem

User memilih citra yang akan diuji

Sistem melakukan proses mengubah ukuran citra

Sistem mengubah citra RGB ke citra biner

Sistem mengubah nilai citra ke vektor User menekan tombol lakukan pengujian

Sistem melakukan proses perkalian antara vektor citra dengan vektor bobot

Sistem menampilkan abjad Sistem memasukkan fungsi aktivasi


(32)

xli

Sequence Diagram menjelaskan interaksi antar objek yang terdapat dalam suatu

sistem dan terjadi komunikasi berupa pesan yang disusun berdasarkan urutan waktu.

Sederhananya sequence diagram adalah gambaran tahap demi tahap, termasuk

kronologi (urutan) perubahan secara logis dari sistem. Objek-objek tersebut diurutkan

dari kiri ke kanan, actor yang menginisiasi interaksi biasanya ditaruh di paling kiri

dari diagram.

Sequence Diagram dari sistem dapat dilihat pada Gambar 3.5

User

Pelatihan Pengujian

Pra Pengolahan Citra Aksara

Binerisasi Nilai Biner Aksara

Latih Bobot dan Error

Pra Pengolahan Nilai Aksara dalam Vektor

Uji Abjad

Gambar 3.5 Sequence Diagram Sistem

Pada Gambar 3.5 menunjukkan bahwa pertama sistem akan melakukan proses

pelatihan. Pada proses pelatihan terdapat beberapa proses yaitu pra pengolahan dan

binerisasi yang akan menghasilkan nilai bobot. Setelah proses pelatihan selesai

dilanjutkan ke proses pengujian dimana terjadi proses pra pengolahan citra dan proses

pengujian yang akan menghasilkan abjad aksara.

3.3

Flowchart Sistem

Flowchart adalah penyajian yang sistematis tentang proses dan logika dari kegiatan

penanganan informasi atau penggambaran secara grafik dari langkah-langkah dan


(33)

urut-urutan prosedur dari suatu program. Flowchart menolong analisis dan

programmer untuk memecahkan masalah ke dalam segmen-segmen yang lebih kecil

dan menolong dalam menganalisis alternative-alternatif lain dalam pengoperasian.

Flowchart berisi gambar atau bagan yang memperlihatkan urutan dan hubungan antar

proses beserta pernyataannya. Setiap simbol pada flowchart menggambarkan proses

tertentu, dan antara proses digambarkan dengan garis penghubung.

Aplikasi yang akan dibangun ini mempunyai skema yang bisa digambarkan

dengan flowchart. Pada flowchart dapat kita lihat ada 2 proses utama yaitu proses

pelatihan pada sebelah kiri dan proses pengujian pada sebelah kanan. Pada proses

pelatihan, semua sampel dalam bentuk citra jpeg akan diolah untuk memperoleh citra

biner. Citra biner akan diasosiasikan dengan abjad aksaranya sehingga memperoleh

bobot yang akan diakumulasikan.

Pada proses pengujian, bobot yang telah diakumulasi sehingga menjadi bobot

total akan dikalikan dengan citra biner aksara yang akan diuji. Dan dari proses itu

akan diketahui apakah pola dikenali atau tidak dan hasil pengujiannya akan

ditampilkan oleh program. Proses sistem mulai dari proses pelatihan sampai proses

pengujian dapat dilihat pada Gambar 3.6.


(34)

xliii

Mulai

For i=1:460 Masukkan aksara katakana

dalam bentuk citra jpeg

Pra pengolahan citra jpeg

Citra diolah untuk memperoleh citra

biner

Asosiasikan nilai citra biner aksara katakana dengan nilai pasangannya

(abjad)

Hasil akumulasi

bobot

Pengujian berhasil dan

ditampilkan abjad dari citra

aksara katakana

Selesai

Apakah i=460? Tidak

Apakah Pola Dikenali?

Ya

Tidak

Ya Citra biner

For i:1:460 Citra diuji dengan

melakukan perkalian antara citra biner aksara

dan bobot total

Gambar 3.6 Flowchart

Proses Pelatihan dan Pengujian


(35)

Pseudocode adalah deskripsi dari algoritma yang menggunakan struktur sederhana

dari bahasa pemrograman yang ditujukan agar dapat dipahami oleh manusia. Tujuan

penggunaannya adalah untuk memudahkan dalam memahami prinsip kerja dari suatu

algoritma.

3.4.1 Pseudocode Proses Pelatihan JST

SCALING DAN BINERISASI

citra_aksara ← imread(nama_file)

citra_aksara ← imresize(citra_aksara,[100 100]); Gray ← rgb2gray(citra_aksara);

thresh ← graythresh(gray);

citra_biner ← im2bw(gray,thresh); PELATIHAN

total_bobot ←0 for m=1:46 for n=1:10

for b=1:168

if ekstraksi_aksara(1,b)==0 ekstraksi_aksara(1,b)=-1; end

end

bobot(m)(n) ← ekstraksi_aksara(m)(n)T

.nilai_abjad(m) total_bobot = total_bobot + bobot(m)(n)

end end

3.4.2 Pseudocode Proses Pengujian JST

SCALING DAN BINERISASI

citra_aksara ← imread(nama_file)

citra_aksara ← imresize(citra_aksara,[100 100]); Gray ← rgb2gray(citra_aksara);

thresh ← graythresh(gray);

citra_biner ← im2bw(gray,thresh); PENGUJIAN


(36)

xlv

for n=1:10

for b=1:168

if ekstraksi_aksara(1,b)==0 ekstraksi_aksara(1,b)=-1; end

end

hasil_uji(m)(n) ← ekstraksi_aksara(m)(n).total_bobot if hasil_uji(m)(n) == nilai_abjad

disp(Abjad) else

disp(“Gagal”) end

end

3.5

Perancangan Antarmuka (Interface) Sistem

Merupakan mekanisme komunikasi antara pengguna (user) dengan sistem.

Antarmuka pemakai dapat menerima informasi dari pengguna dan memberikan

informasi kepada pengguna untuk membantu mengarahkan alur penelusuran masalah


(37)

sampai ditemukan suatu solusi. Antarmuka sistem yang akan dibangun menggunakan

Bahasa Pemograman Microsoft Visual Studio 2010 (C#).

Untuk perancangan antarmuka pemakai akan dirancang kedalam form. Ada 2

form utama yang dimiliki sistem yaitu form pelatihan dan form pengujian. Pada

penjelasan masing-masing form akan dibahas secara detail sebagai berikut.

3.5.1 Form Pelatihan

Form inilah yang ditampilkan jika user ingin melakukan pelatihan citra. Tampilan

rancangan form pelatihan dapat dilihat pada Gambar 3.7.

Form Pelatihan

Buka Citra Ubah Ukuran

Latih

Reset Bobot

Binerisasi Ekstraksi Fitur Citra

Informasi 1

2

3 4

5

6

7 8

9

Gambar 3.7 Form Pelatihan

Komponen yang digunakan pada form pelatihan berdasarkan Gambar 3.7 terdiri dari :

1.

PictureBox (Citra)

Berfungsi untuk menampilkan citra yang ingin diolah dan hasil olahannya.

2.

TextBox

Berfungsi untuk menentukan citra yang akan ditampilkan dan diolah.

3.

Button (Buka Citra)


(38)

xlvii

4.

Button (Ubah Ukuran)

Berfungsi untuk mengubah ukuran citra yang akan diolah.

5.

Button (Latih)

Berfungsi untuk melatih citra yang telah diekstraksi fiturnya.

6.

Button (Reset Bobot)

Berfungsi untuk mereset nilai bobot menjadi nol.

7.

Button (Binerisasi)

Berfungsi untuk mengubah citra RGB ke citra biner.

8.

Button (Ekstraksi Fitur)

Berfungsi untuk mengekstraksi fitur citra yang telah dibinerisasi.

9.

TextBox (Informasi)

Berfungsi untuk menampilkan keterangan tentang proses pengolahan dan

pelatihan citra.

3.5.2 Form Pengujian

Pada form ini, citra akan diuji apakah dapat dikenali atau tidak dikenali oleh sistem.

Tampilan rancangan form pengujian dapat dilihat pada Gambar 3.8.

Form Pengujian

Buka Citra Uji Uji Banyak

Citra Uji Hasil Uji

1

2 3 4

5

6

7 Jumlah Karakter yang Berhasil Dikenali

Persentase Akurasi

Gambar 3.8 Form Pengujian


(39)

1.

PictureBox (Citra)

Berfungsi untuk menampilkan citra yang akan diolah dan diuji.

2.

Button (Buka Citra)

Berfungsi untuk membuka file citra yang akan diolah dan diuji.

3.

Button (Uji)

Berfungsi untuk menguji citra apakah dapat dikenali atau tidak.

4.

Button (Uji Banyak)

Berfungsi untuk menguji keseluruhan citra yang terdapat di penyimpanan data

apakah dapat dikenali atau tidak.

5.

Label (Abjad Citra)

Berfungsi untuk menampilkan abjad dari citra yang telah diolah dan diuji.

6.

TextBox (Jumlah Karakter yang Berhasil Dikenali)

Berfungsi untuk menampilkan jumlah karakter yang berhasil dikenali.

7.

TextBox (Persentase Akurasi)


(40)

xlix

BAB IV

IMPLEMENTASI DAN PENGUJIAN SISTEM

4.1

Implementasi Sistem

Implementasi sistem merupakan kelanjutan dari tahap perancangan. Implementasi

merupakan suatu tahap penerapan algoritma kedalam suatu program yang telah

dirancang. Sedangkan pengujian merupakan suatu proses uji coba suatu program yang

telah diimplementasikan dengan algoritma untuk mendapatkan hasil yang sesuai

dengan yang diharapkan oleh pengguna. Implementasi dilakukan berdasarkan

perancangan yang dilakukan sebelumnya. Perancanagn sistem yang baik akan

memudahkan pengembangan sistem dalam tahap implementasi.

Komponen yang dibutuhkan dalam pengimplementasian sistem ini adalah

sebagai berikut :

1.

Hardware (Perangkat Keras)

Hardware (Perangkat Keras) adalah komponen-komponen peralatan yang membentuk

suatu sistem komputer sehingga dapat melaksanakan tugasnya. Adapun hardware

yang digunakan untuk menjalankan aplikasi ini adalah :

a.

Processor Intel Core i5

b.

Memory (RAM) 2 GB

c.

Hardisk 500 GB

d.

Mouse dan Keyboard

2.

Software (Perangkat Lunak)

Software (Perangkat Lunak) adalah sekumpulan intruksi yang telah diprogram terlebih

dahulu secara rinci, untuk mengendalikan dan mengkoordinasikan kerja

elemen-elemen perangkat keras komputer di dalam sebuah sistem informasi. Software yang

diperlukan untuk menjalankan aplikasi ini adalah :

a.

Sistem Operasi Windows 7

b.

Software Microsoft Visual Studio 2010 (C#)


(1)

vi

CHARACTER PATTERN RECOGNITION AND TRANSLATION AKSARA KATAKANA USING IMPLEMENTATION OF ALGORITHM ASSOCIATIVE

MEMORY HETERO-ASSOCIATIVE TYPE ABSTRACT

Studying Japanese Katakana characters relatively difficult, especially the characters are used different from the Latin alphabet that we usually use. The unique shape of character requires special attention and a lot more time in studying writing. Neural networks and pattern recognition can help ease learning character. In this research, artificial neural network algorithm used is Associative Memory Hetero-Associative type. There are two processes in this research that is process of training and testing. The training process begins from Katakana characters handwriting is converted into digital image then processed to obtain the value of the binary image. The value of each pixel of the image is associated and used as input to the neural network. The end of this process produces the weight matrix values that will serve as the basis for testing Katakana character patterns. In the testing process tested characters will be processed with the value obtained in the training process. Results from the research showed that the method of associative memory hetero-associative type can recognize patterns of 74.7826% from the pattern that has been trained and 63.0435% of the samples testing patterns (not trained).

Keywords: Neural Network, Associative Memory Hetero-association type, Pattern Recognition, Aksara Katakana.


(2)

vii

DAFTAR ISI

Persetujuan i

Pernyataan ii

Ucapan Terima Kasih iii

Abstrak v

Abstract vi

Daftar Isi vii

Daftar Tabel ix

Daftar Gambar x

Daftar Lampiran xi

Bab 1 Pendahuluan

1.1Latar Belakang Masalah 1

1.2Perumusan Masalah 2

1.3Batasan Masalah 2

1.4Tujuan Penelitian 2

1.5Manfaat Penelitian 3

1.6Metodologi Peneltian 3

1.7Sistematika penulisan 4

Bab 2 Landasan Teori

2.1 Jaringan Syaraf Tiruan 5

2.2 Pelatihan Terbimbing (Supervised Training) dan Tak Terbimbing

(Unsupervised Training) 8

2.3 Arsitektur JST 8

2.4 Metode JST 11

2.5 Associative Memory 14

2.6 Bagian-bagian dalam Associative memory 15

2.6.1 Auto-associative memory 15

2.6.2 Hetero-associative memory 15

2.7 Pemgenalan Pola 17

2.8 Citra Digital 18

2.8.1 Format Citra JPEG 20

2.9 Aksara Katakana 20

2.1 Penelitian Terdahulu 21

Bab 3 Analisis dan Perancangan Sistem

3.1 Analisis Sistem 23

3.1.1 Analisis Masalah 23

3.1.2 Analisis Persyaratan (Requirement Analysis) 24 3.1.2.1 Analisis Persyaratan Fungsional 24 3.1.2.2 Analisis Persyaratan Non Fungsional 25

3.2 Pemodelan Sistem 25

3.2.1 Use Case Diagram 26

3.2.2 Activity Diagram (Diagram Aktivitas) 28

3.2.3 Sequence Diagram 31


(3)

viii

3.4 Pseudocode 34

3.4.1 Pseudocode Proses Pelatihan JST 34

3.4.2 Pseudocode Proses Pengujian JST 34

3.5 Perancangan Antarmuka (Interface) Sistem 36

3.5.1 Form Pelatihan 36

3.5.2 Form Pengujian 37

Bab 4 Implementasi dan Pengujian Sistem

4.1 Implementasi Sistem 39

4.1.1 Implementasi Algoritma Associative Memory tipe Hetero-

Association 40

4.2 Tampilan Interface Sistem 44

4.2.1 Form Proses Pelatihan 44

4.2.2 Form Proses Pengujian 45

4.3 Pengujian Sistem 46

4.3.1 Proses Pelatihan 47

4.3.2 Proses Pengujian 51

4.4 Hasil Pengujian 54

4.4.1 Pengujian Pada Citra Yang Telah Dilatih 54 4.4.2 Pengujian Pada Citra Testing (Belum Dilatih) 60 4.5 Analisis Penyebab Kegagalan Dalam Pengenalan Karakter 62 Bab 5 Kesimpulan dan Saran

5.1 Kesimpulan 63

5.2 Saran 64


(4)

ix

DAFTAR TABEL

Hal

Tabel 2.1 Perbandingan jenis file gambar 20

Tabel 2.2 Huruf-huruf Katakana 21

Tabel 3.1 Dakumentasi Naratif Use Case Pelatihan Sistem 27 Tabel 3.2 Dakumentasi Naratif Use Case Pengujian Sistem 28

Tabel 4.1 Hasil Pengujian Citra Yang Dilatih 55

Tabel 4.2 Citra Yang Mengalami Kesalahan Pada Pengenalan 56

Tabel 4.3 Hasil Pengujian Citra Testing 60

Tabel 4.4 Citra Yang Mengalami Kesalahan Dalam Pengenalan 61 Tabel 4.5 Tabulasi Kemiripan Karakter Pada Aksara Katakana 62


(5)

x

DAFTAR GAMBAR

Hal

Gambar 2.1 Model Struktur JST 6

Gambar 2.2 Model Struktur JST 7

Gambar 2.3 Jaringan dengan lapisan tunggal 9

Gambar 2.4 Jaringan dengan lapisan banyak 10

Gambar 2.5 Jaringan dengan lapisan kompetitif 10

Gambar 2.6 Backpropagation 11

Gambar 2.7 Learning vector quantization 12

Gambar 2.8 Hebb Rule 13

Gambar 2.9 Associative Memory 15

Gambar 2.10 Representasi konseptual dari sistem pengenalan pola 18 Gambar 2.11 Sistem Koordinat pada Citra Digital 19

Gambar 3.1 Diagram Ishikawa 24

Gambar 3.2 Use Case Diagram Sistem 26

Gambar 3.3 Activity Diagram Pelatihan 29

Gambar 3.4 Activity Diagram Pengujian 30

Gambar 3.5 Sequence Diagram Sistem 31

Gambar 3.6 Flowchart Proses Pelatihan dan Pengujian 33

Gambar 3.7 Form Pelatihan 36

Gambar 3.8 Form Pengujian 38

Gambar 4.1 Form Proses Pelatihan 45

Gambar 4.2 Form Proses Pengujian 46

Gambar 4.3 Alamat Direktori Gambar 47

Gambar 4.4 Buka Citra 47

Gambar 4.5 Ubah Ukuran 48

Gambar 4.6 Listing Program Ubah Ukuran 48

Gambar 4.7 Normalisasi Warna 48

Gambar 4.8 Listing Program Normalisasi Warna 49

Gambar 4.9 Hitung Bobot 50

Gambar 4.10 Listing Program Hitung Bobot 50

Gambar 4.11 Simpan Bobat 51

Gambar 4.12 Hitung Bobot Total 51

Gambar 4.13 Pop-up Window Buka File 51

Gambar 4.14 Buka File Uji 52

Gambar 4.15 Proses Pengujian 53


(6)

xi

DAFTAR LAMPIRAN

Listing Program A-1