• Tidak ada hasil yang ditemukan

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

N/A
N/A
Protected

Academic year: 2017

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

Copied!
100
0
0

Teks penuh

(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";

(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++) {

(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++) {

(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++) {

(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) {

(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);

(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++) {

(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()); } } } }

(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)) {

(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;

}

(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 ア");

(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) {

(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.

(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

(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:

(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.

(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

(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)
[image:30.595.119.515.81.569.2]

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

(31)
[image:31.595.122.513.83.481.2]

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

(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

[image:32.595.127.492.243.514.2]

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

(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

(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

[image:34.595.121.506.81.676.2]

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

(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.

<

Gambar

Gambar 3.3 Activity Diagram Pelatihan
Gambar 3.4 Activity Diagram Pengujian
Gambar 3.5 Sequence Diagram Sistem
Gambar 3.6 Flowchart Proses Pelatihan dan Pengujian
+7

Referensi

Dokumen terkait

Dokumentasi ini dilakukan untuk mendapatkan data tentang keadaan di SMP N 2 Rembang dan SMP N 1 Lasem seperti jumlah siswa, jumlah guru, keadaan siswa maupun guru.

Sikap kecermatan dan ketelitian siswa dalam menggali informasi dari teks bacaan dan penjelasan guru, sikap kemandirian siswa dalam membuat gambar diagram, dan rasa ingin tahu

Metode proyek berusaha membantu anak meningkatkan aktivitas belajar, meningkatkan kemampuan memecahkan masalah dari orientasi tanggung jawab yang penekanannya pada

Abstrak: Penelitian ini bertujuan untuk mengetahui Pengaruh Latihan Power Otot Tungkai (Tuck Jump With Knees Up) terhadap Peningkatan Tendangan Jarak Jauh dalam

Namun belum sesuai dengan mekanisme pembagian kerja dengan proses dan prinsip-prinsip pengorganisasian mutu (4) Pelaksanaan Manajemen Mutu Terpadu dalam pembinaan kompetensi

Biaya dan pengeluaran yang dikeluarkan oleh masing-masing Pihak , jika ada , yang timbul karena atau berhubungan dengan lingkup atau kegiatan kerja sama dimaksud

Bouwplank dibuat dari kayu kelas III yang lurus dan rata atau dari bambu dengan terlebih dahulu disetujui oleh direksi, untuk mendapatkan /menyetel profil atau

Sehingga dapat disimpulkan bahwa H 0 ditolak, yang artinya secara simultan perubahan laba bersih, perubahan arus kas operasi, perubahan arus kas investasi, perubahan