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)) {
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";
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++) {
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 };
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 };
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 };
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++) {
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++) {
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) {
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);
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 };
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 };
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");
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++) {
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; }
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()); } } } }
}
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)) {
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;
}
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 ア");
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; }
}
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) {
xcvii
break; }
}
string karakterHasil = daftarKarakter[indexKarakter]; namaKarakterKeluaranLabel.Text = karakterHasil; }
else {
MessageBox.Show("File Bobot Total tidak ditemukan !!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
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.
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
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:
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.
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
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
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.
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
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
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
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
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
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
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
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.
<