Implementasi Metode Arithmetic Mean Filter Dan Kompresi Citra Menggunakan Metode Run Length Encoding

(1)

A-1

LISTING PROGRAM

Kode Program Menu Utama:

using System;

using System.Collections.Generic; using System.Drawing;

using System.Windows.Forms; namespace myProjetct

{

/// <summary>

/// Description of MainForm. /// </summary>

public partial class MainForm : Form {

public MainForm() {

//

// The InitializeComponent() call is required for Windows Forms designer support.

//

pnitializeComponent(); //

// TODO: Add constructor code after the InitializeComponent() call.

// }

void TestingToolStripMenuptemClick(object sender, EventAr gs e)

{

Form a=new Testing(); a.ShowDialog();

}

void HelpToolStripMenuptemClick(object sender, EventArgs e) {

Form c =new Help(); c.ShowDialog(); }

void ExitToolStripMenuptemClick(object sender, EventArgs e)


(2)

DialogResult button= MessageBox.Show("Anda yakin mau keluar?", "Exit",

MessageBoxButtons.YesNo, MessageBoxIcon. Question, MessageBoxDefaultButton.Button2);

if (button==DialogResult.Yes) Application.Exit(); }

} }

Kode Program Menu Testing

using System;

using System.Drawing; using System.Linq;

using System.Windows.Forms; using System.Drawing.Imaging; using System.IO;

using System.Diagnostics;

using System.Runtime.InteropServices; namespace myProjetct

{

/// <summary>

/// Description of Testing. /// </summary>

public partial class Testing : Form {

double nilaiAsli, nilaiKompres, nilaiFilter, rasio; public Testing()

{ //

// The InitializeComponent() call is required for Windows Forms designer support.

//

pnitializeComponent(); //

// TODO: Add constructor code after the InitializeComponent() call.

// }

void ExitToolStripMenuptemClick(object sender, EventArgs e)

{

DialogResult button = MessageBox.Show("Anda yakin mau keluar?", "Exit",

MessageBoxButtons.YesNo, MessageBoxIcon. Question, MessageBoxDefaultButton.Button2);

if (button == DialogResult.Yes) Application.Exit(); }


(3)

A-3

void HomeToolStripMenuptemClick(object sender, EventArgs e)

{

Form a = new MainForm(); this.Dispose();

a.ShowDialog(); }

void HelpToolStripMenuptemClick(object sender, EventArgs e)

{

Form b = new Help(); this.Dispose(); b.ShowDialog(); }

void openClick(object sender, EventArgs e) {

try {

OpenFileDialog open = new OpenFileDialog(); open.Filter = "Image File(.*bmp)|*.bmp"; if (open.ShowDialog() == DialogResult.OK) {

Bitmap gbr = new Bitmap(open.FileName); if (gbr.Width <= 500 && gbr.Height <= 500) {

var fileinfo = new Filepnfo(open.FileName); gbrAsli.SizeMode =

PictureBoxSizeMode.StretchImage;

gbrAsli.ImageLocation = open.FileName; NmFile.Text = open.SafeFileName.ToString(); Bitmap bit = new Bitmap(open.FileName); ukuran1.Text

= ((fileinfo.Length) / 1024).ToString() + " KB"; nilaiAsli = fileinfo.Length/ 1024; height.Text = bit.Height.ToString(); width.Text = bit.Width.ToString(); gbrAsli.Image = bit;

} else

MessageBox.Show("Gambar tidak boleh melebihi 500x500 piksel", "Warning");

}

//tulis

StreamWriter tulis_r = new StreamWriter(@"D:\\Retri Scrib\\cicilan program\\Notepad\\gbr_asli_red.txt", false);


(4)

StreamWriter tulis_g = new StreamWriter(@"D:\\Retri Scrib\\cicilan program\\Notepad\\gbr_asli_green.txt", false);

StreamWriter tulis_b = new StreamWriter(@"D:\\Retri Scrib\\cicilan program\\Notepad\\gbr_asli_blue.txt", false);

Bitmap asli = (Bitmap)gbrAsli.Image; int[,] gambarasli_r

= new int[1, asli.Width * asli.Height]; int[,] gambarasli_g

= new int[1, asli.Width * asli.Height]; int[,] gambarasli_b

= new int[1, asli.Width * asli.Height];

gambarasli_r = notepad_merah(asli); gambarasli_g = notepad_hijau(asli); gambarasli_b = notepad_biru(asli); for (int i = 0; i < 1; i++)

{

for (int j = 0; j < gambarasli_r.Length; j++) {

tulis_r.Write(gambarasli_r[i, j].ToString() + "\t");

} }

tulis_r.Close();

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

for (int j = 0; j < gambarasli_g.Length; j++) {

tulis_g.Write(gambarasli_g[i, j].ToString() + "\t");

} }

tulis_g.Close();

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

for (int j = 0; j < gambarasli_b.Length; j++) {

tulis_b.Write(gambarasli_b[i, j].ToString() + "\t");

} }

tulis_b.Close(); }

catch (Exception v) {

MessageBox.Show("Batal"); }

}


(5)

A-5

{

int xi = image.Width; int yi = image.Height;

double red = 0, green = 0, blue = 0;

double jlhred = 0, jlhgreen = 0, jlhblue = 0; Bitmap finalimage = new Bitmap(xi, yi);

for (int i = 0; i < xi - 2; i++) {

for (int j = 0; j < yi - 2; j++) {

for (int k = i; k <= i + 2; k++) {

for (int l = j; l <= j + 2; l++) {

red = image.GetPixel(k, l).R; if (red == 0)

red = 255;

green = image.GetPixel(k, l).G; if (green == 0)

green = 255;

blue = image.GetPixel(k, l).B; if (blue == 0)

blue = 255; jlhred += red; jlhgreen += green; jlhblue += blue; }

}

double RED = Math.Round((jlhred / 9), 0); double GREEN = Math.Round((jlhgreen / 9), 0); double BLUE = Math.Round((jlhblue / 9), 0); jlhred = 0; jlhgreen = 0; jlhblue = 0;

finalimage.SetPixel(i + 1, j + 1, Color.FromA rgb(255, (int)RED, (int)GREEN, (int)BLUE));

} }

return finalimage; }

void FilteringClick(object sender, EventArgs e) {

if (gbrAsli.Image != null) {

Stopwatch watch = new Stopwatch();// running time watch.Start();


(6)

gbrFiltering.Image

= arithmeticmean((Bitmap)gbrAsli.Image); watch.Stop();

RTfilter.Text =

Math.Round(Convert.ToDecimal(watch.ElapsedMilliseconds) / 1000, 4) .ToString() + " Sekon";

MSE1.Text

= MSE((Bitmap)gbrAsli.Image, (Bitmap)gbrFiltering.Image).ToString ();

PSNR1.Text

= PSNR(Convert.ToDouble(MSE1.Text)).ToString(); }

else {

MessageBox.Show("Gambar belum dimasukkan"); }

}

double MSE(Bitmap imageAsli, Bitmap imageHasil) {

double sum = 0;

double pxAsli, pxHasil, MSE;

for (int i = 0; i < imageAsli.Height; i++) //height {

for (int j = 0; j < imageAsli.Width; j++) //width {

pxAsli = imageAsli.GetPixel(j, i).R; pxHasil = imageHasil.GetPixel(j, i).R; sum += Math.Pow((pxAsli - pxHasil), 2); }

} MSE =

Math.Floor((sum / (imageAsli.Height * imageAsli.Width))); return MSE;

}

double PSNR(double MSE) {

double PSNR1 =

Math.Round(10 * Math.Log10(Math.Pow(255, 2) / MSE)); return PSNR1;

}

void KompresiClick(object sender, EventArgs e) {

if (gbrFiltering.Image != null) {


(7)

A-7

watch.Start();

Bitmap image = new Bitmap(gbrFiltering.Image); int xi = image.Width;

int yi = image.Height;

double red = 0, green = 0, blue = 0; //array red,green blue yg beda

double[] RED = new double[xi * yi]; double[] GREEN = new double[xi * yi]; double[] BLUE = new double[xi * yi]; //array red green blue kseluruhan

double[] arrayred = new double[xi * yi]; double[] arraygreen = new double[xi * yi]; double[] arrayblue = new double[xi * yi];

int acuan = 0, acuan1 = 0, acuan2 = 0, pos = 0, pos1 = 0, pos2 = 0, jumred = 1, jumgreen = 1, jumblue = 1, temp

= 0, temp1 = 0, temp2 = 0; //jlh array rgb

double[] kompressred = new double[xi * yi]; double[] kompressgreen = new double[xi * yi]; double[] kompressblue = new double[xi * yi]; double panjang;

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

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

red = image.GetPixel(j, i).R; if (red == 0)

red = 255;

green = image.GetPixel(j, i).G; if (green == 0)

green = 255;

blue = image.GetPixel(j, i).B; if (blue == 0)

blue = 255;

arrayred[acuan] = red; arraygreen[acuan] = green; arrayblue[acuan] = blue; //pengecekan red yang sama //jika tidak sama

if (arrayred[pos] != arrayred[acuan]) {

//menyimpan hasil red yang sama kompressred[temp] = jumred;

//pengecekan jumlah red lebih dari 3 if (jumred >= 1)


(8)

{

//menulis pixel kompress RED[temp] = arrayred[pos]; }

//variable untuk simpan jumlah kompress temp++;

//mengembalikan kembali nilai variabel jumlah red

jumred = 1;

//variable pindah untuk posisi pixel yg terkompress

pos = acuan; //jika sama }

else {

//menambah nilai kompress jumred++;

if ((acuan + 1) == (xi * yi)) {

//menyimpan jumlah kompress kompressred[temp] = jumred + 1; }

}

acuan++;

if (arraygreen[pos1] != arraygreen[acuan1]) {

kompressgreen[temp1] = jumgreen; if (jumgreen >= 1)

{

GREEN[temp1] = arraygreen[pos1]; }

temp1++; jumgreen = 1; pos1 = acuan1; }

else {

//menambah nilai kompress jumgreen++;

if ((acuan1 + 1) == (xi * yi)) {

//menyimpan jumlah kompress

kompressgreen[temp1] = jumgreen + 1; }

}

acuan1++;

if (arrayblue[pos2] != arrayblue[acuan2]) {


(9)

A-9

kompressblue[temp2] = jumblue; if (jumblue >= 1)

{

BLUE[temp2] = arrayblue[pos2]; }

temp2++; jumblue = 1; pos2 = acuan2; }

//jika sama else

{

//menambah nilai kompress jumblue++;

//pengecekan akhir pixel

if ((acuan2 + 1) == (xi * yi)) {

//menyimpan jumlah kompress

kompressblue[temp2] = jumblue + 1; }

}

//variable untuk indek simpan arrayred acuan2++;

} }

panjang = temp; if (temp1 > panjang) {

panjang = temp1; }

if (temp2 > panjang) {

panjang = temp2; }

int xii = (int)Math.Sqrt(panjang - 1); int ret = 0;

Bitmap finalimage = new Bitmap(xii, xii); for (int i = 0; i < xii; i++)

{

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

finalimage.SetPixel(j, i, Color.FromArgb(255, (int)RED[ret], (int)GREEN[ret], (int)BLUE[ret]));

ret++; }

}

gbrKompresi.Image = finalimage; watch.Stop();


(10)

RT2.Text =

Math.Round(Convert.ToDecimal(watch.ElapsedMilliseconds) / 1000, 4) .ToString() + " Sekon";

StreamWriter tulis_r = new StreamWriter(@"D:\\Retri Scrib\\cicilan program\\Notepad\\jlh_red_komfil.txt", false);

StreamWriter tulis_g = new StreamWriter(@"D:\\Retri Scrib\\cicilan program\\Notepad\\jlh_green_komfil.txt", false); StreamWriter tulis_b = new StreamWriter(@"D:\\Retri Scrib\\cicilan program\\Notepad\\jlh_blue_komfil.txt", false);

StreamWriter tulis_rr = new StreamWriter(@"D:\\Retri Scrib\\cicilan program\\Notepad\\piksel_red_kompres.txt", false);

StreamWriter tulis_gg = new StreamWriter(@"D:\\Retri Scrib\\cicilan

program\\Notepad\\piksel_green_kompres.txt", false);

StreamWriter tulis_bb = new StreamWriter(@"D:\\Retri Scrib\\cicilan program\\Notepad\\array_blue_kompres.txt", false);

for (int i = 0; i < kompressred.Length; i++) {

tulis_r.Write(kompressred[i].ToString() + "\t"); }

tulis_r.Close();

for (int i = 0; i < kompressgreen.Length; i++) {

tulis_g.Write(kompressgreen[i].ToString() + "\t"); }

tulis_g.Close();

for (int i = 0; i < kompressblue.Length; i++) {

tulis_b.Write(kompressblue[i].ToString() + "\t"); }

tulis_b.Close();

for (int i = 0; i < RED.Length; i++) {

tulis_rr.Write(RED[i].ToString() + "\t"); }

tulis_rr.Close();

for (int i = 0; i < GREEN.Length; i++) {

tulis_gg.Write(GREEN[i].ToString() + "\t"); }

tulis_gg.Close();

for (int i = 0; i < BLUE.Length; i++) {

tulis_bb.Write(BLUE[i].ToString() + "\t"); }

tulis_bb.Close(); }


(11)

A-11

{

MessageBox.Show("Belum ada gambar filtering"); }

}

void Button3Click(object sender, EventArgs e) {

if (gbrAsli.Image != null) {

Stopwatch watch = new Stopwatch(); watch.Start();

Bitmap image = new Bitmap(gbrAsli.Image); int xi = image.Width;

int yi = image.Height;

double red = 0, green = 0, blue = 0; //array red,green blue yg beda

double[] RED = new double[xi * yi]; double[] GREEN = new double[xi * yi]; double[] BLUE = new double[xi * yi]; //array red green blue kseluruhan

double[] arrayred = new double[xi * yi]; double[] arraygreen = new double[xi * yi]; double[] arrayblue = new double[xi * yi];

int acuan = 0, acuan1 = 0, acuan2 = 0, pos = 0, pos1 = 0, pos2 = 0, jumred = 1, jumgreen = 1, jumblue = 1, temp

= 0, temp1 = 0, temp2 = 0; //jlh array rgb

double[] kompressred = new double[xi * yi]; double[] kompressgreen = new double[xi * yi]; double[] kompressblue = new double[xi * yi]; double panjang;

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

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

red = image.GetPixel(j, i).R; if (red == 0)

red = 255;

green = image.GetPixel(j, i).G; if (green == 0)

green = 255;

blue = image.GetPixel(j, i).B; if (blue == 0)

blue = 255;

arrayred[acuan] = red; arraygreen[acuan] = green; arrayblue[acuan] = blue;


(12)

//pengecekan red yang sama //jika tidak sama

if (arrayred[pos] != arrayred[acuan]) {

//menyimpan hasil red yang sama kompressred[temp] = jumred;

//pengecekan jumlah red lebih dari 3 if (jumred >= 1)

{

//menulis pixel kompress RED[temp] = arrayred[pos]; }

//variable untuk simpan jumlah kompress temp++;

//mengembalikan kembali nilai variabel jumlah red

jumred = 1;

//variable pindah untuk posisi pixel yg terkompress

pos = acuan; //jika sama }

else {

//menambah nilai kompress jumred++;

if ((acuan + 1) == (xi * yi)) {

//menyimpan jumlah kompress kompressred[temp] = jumred + 1; }

}

acuan++;

if (arraygreen[pos1] != arraygreen[acuan1]) {

kompressgreen[temp1] = jumgreen; if (jumgreen >= 1)

{

GREEN[temp1] = arraygreen[pos1]; }

temp1++; jumgreen = 1; pos1 = acuan1; }

else {

//menambah nilai kompress jumgreen++;


(13)

A-13

if ((acuan1 + 1) == (xi * yi)) {

//menyimpan jumlah kompress

kompressgreen[temp1] = jumgreen + 1; }

}

acuan1++;

if (arrayblue[pos2] != arrayblue[acuan2]) {

kompressblue[temp2] = jumblue; if (jumblue >= 1)

{

BLUE[temp2] = arrayblue[pos2]; }

temp2++; jumblue = 1; pos2 = acuan2; }

//jika sama else

{

//menambah nilai kompress jumblue++;

//pengecekan akhir pixel

if ((acuan2 + 1) == (xi * yi)) {

//menyimpan jumlah kompress

kompressblue[temp2] = jumblue + 1; }

}

//variable untuk indek simpan arrayred acuan2++;

} }

panjang = temp; if (temp1 > panjang) {

panjang = temp1; }

if (temp2 > panjang) {

panjang = temp2; }

int xii = (int)Math.Sqrt(panjang - 1); int ret = 0;

Bitmap finalimage = new Bitmap(xii, xii); for (int i = 0; i < xii; i++)


(14)

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

finalimage.SetPixel(j, i, Color.FromArgb(255, (int)RED[ret], (int)GREEN[ret], (int)BLUE[ret]));

ret++; }

}

gbrAsliKompres.Image = finalimage; watch.Stop();

RT3.Text =

Math.Round(Convert.ToDecimal(watch.ElapsedMilliseconds) / 1000, 4) .ToString() + " Sekon";

StreamWriter tulis_r = new StreamWriter(@"D:\\Retri Scrib\\cicilan

program\\Notepad\\asli_jlh_red_kompres.txt", false);

StreamWriter tulis_g = new StreamWriter(@"D:\\Retri Scrib\\cicilan

program\\Notepad\\asli_jlh_green_kompres.txt", false);

StreamWriter tulis_b = new StreamWriter(@"D:\\Retri Scrib\\cicilan

program\\Notepad\\asli_jlh_blue_kompres.txt", false);

StreamWriter tulis_rr = new StreamWriter(@"D:\\Retri Scrib\\cicilan

program\\Notepad\\asli_array_red_beda_asli.txt", false);

StreamWriter tulis_gg = new StreamWriter(@"D:\\Retri Scrib\\cicilan

program\\Notepad\\asli_array_green_beda_asli.txt", false);

StreamWriter tulis_bb = new StreamWriter(@"D:\\Retri Scrib\\cicilan

program\\Notepad\\asli_array_blue_beda_asli.txt", false); for (int i = 0; i < kompressred.Length; i++) {

tulis_r.Write(kompressred[i].ToString() + "\t"); }

tulis_r.Close();

for (int i = 0; i < kompressgreen.Length; i++) {

tulis_g.Write(kompressgreen[i].ToString() + "\t"); }

tulis_g.Close();

for (int i = 0; i < kompressblue.Length; i++) {

tulis_b.Write(kompressblue[i].ToString() + "\t"); }

tulis_b.Close();

for (int i = 0; i < RED.Length; i++) {


(15)

A-15

tulis_rr.Write(RED[i].ToString() + "\t"); }

tulis_rr.Close();

for (int i = 0; i < GREEN.Length; i++) {

tulis_gg.Write(GREEN[i].ToString() + "\t"); }

tulis_gg.Close();

for (int i = 0; i < BLUE.Length; i++) {

tulis_bb.Write(BLUE[i].ToString() + "\t"); }

tulis_bb.Close(); }

else {

MessageBox.Show("Gambar belum dimasukkan"); }

}

void Simpan1Click(object sender, EventArgs e) {

SaveFileDialog simpan = new SaveFileDialog(); simpan.Filter = "image Files| *.bmp";

simpan.FileName = "*.bmp";

if (simpan.ShowDialog() == DialogResult.OK) {

gbrFiltering.Image.Save(simpan.FileName, ImageFor mat.Bmp);

MessageBox.Show("gambar sudah

disimpan", "save", MessageBoxButtons.OK, MessageBoxIcon.Informati on);

} else {

MessageBox.Show("gambar tidak tersimpan "); }

//tulis

StreamWriter tulis_r = new StreamWriter(@"D:\\Retri Scrib\\cicilan program\\Notepad\\gbr_filter_red.txt", false);

StreamWriter tulis_g = new StreamWriter(@"D:\\Retri Scrib\\cicilan program\\Notepad\\gbr_filter_green.txt", false); StreamWriter tulis_b = new StreamWriter(@"D:\\Retri Scrib\\cicilan program\\Notepad\\gbr_filter_blue.txt", false);

Bitmap filter = (Bitmap)gbrFiltering.Image; int[,] gambarasli_r

= new int[1, filter.Width * filter.Height]; int[,] gambarasli_g


(16)

= new int[1, filter.Width * filter.Height]; int[,] gambarasli_b

= new int[1, filter.Width * filter.Height];

gambarasli_r = notepad_merah(filter); gambarasli_g = notepad_hijau(filter); gambarasli_b = notepad_biru(filter); for (int i = 0; i < 1; i++)

{

for (int j = 0; j < gambarasli_r.Length; j++) {

tulis_r.Write(gambarasli_r[i, j].ToString() + "\t");

} }

tulis_r.Close();

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

for (int j = 0; j < gambarasli_g.Length; j++) {

tulis_g.Write(gambarasli_g[i, j].ToString() + "\t");

} }

tulis_g.Close();

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

for (int j = 0; j < gambarasli_b.Length; j++) {

tulis_b.Write(gambarasli_b[i, j].ToString() + "\t");

} }

tulis_b.Close(); }

void Simpan2Click(object sender, EventArgs e) {

SaveFileDialog simpan = new SaveFileDialog(); simpan.Filter = "image Files| *.bmp";

simpan.FileName = "*.bmp";

if (simpan.ShowDialog() == DialogResult.OK) {

gbrKompresi.Image.Save(simpan.FileName, ImageForm at.Bmp);

MessageBox.Show("gambar sudah

disimpan", "save", MessageBoxButtons.OK, MessageBoxIcon.Informati on);

} else {


(17)

A-17

}

StreamWriter tulis_r = new StreamWriter(@"D:\\Retri Scrib\\cicilan program\\Notepad\\komfil_red.txt", false);

StreamWriter tulis_g = new StreamWriter(@"D:\\Retri Scrib\\cicilan program\\Notepad\\komfil_green.txt", false);

StreamWriter tulis_b = new StreamWriter(@"D:\\Retri Scrib\\cicilan program\\Notepad\\komfil_blue.txt", false);

Bitmap asli = (Bitmap)gbrKompresi.Image; int[,] gambarasli_r

= new int[1, asli.Width * asli.Height]; int[,] gambarasli_g

= new int[1, asli.Width * asli.Height]; int[,] gambarasli_b

= new int[1, asli.Width * asli.Height];

gambarasli_r = notepad_merah(asli); gambarasli_g = notepad_hijau(asli); gambarasli_b = notepad_biru(asli); for (int i = 0; i < 1; i++)

{

for (int j = 0; j < gambarasli_r.Length; j++) {

tulis_r.Write(gambarasli_r[i, j].ToString() + "\t");

} }

tulis_r.Close();

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

for (int j = 0; j < gambarasli_g.Length; j++) {

tulis_g.Write(gambarasli_g[i, j].ToString() + "\t");

} }

tulis_g.Close();

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

for (int j = 0; j < gambarasli_b.Length; j++) {

tulis_b.Write(gambarasli_b[i, j].ToString() + "\t");

} }

tulis_b.Close(); }

void Simpan3Click(object sender, EventArgs e) {


(18)

simpan.Filter = "image Files| *.bmp"; simpan.FileName = "*.bmp";

if (simpan.ShowDialog() == DialogResult.OK) {

gbrAsliKompres.Image.Save(simpan.FileName, ImageF ormat.Bmp);

MessageBox.Show("gambar sudah

disimpan", "save", MessageBoxButtons.OK, MessageBoxIcon.Informati on);

} else {

MessageBox.Show("gambar tidak tersimpan "); }

StreamWriter tulis_r = new StreamWriter(@"D:\\Retri Scrib\\cicilan

program\\Notepad\\asli_kompres_red_asli.txt", false);

StreamWriter tulis_g = new StreamWriter(@"D:\\Retri Scrib\\cicilan

program\\Notepad\\asli_kompres_green_asli.txt", false);

StreamWriter tulis_b = new StreamWriter(@"D:\\Retri Scrib\\cicilan

program\\Notepad\\asli_komres_blue_asli.txt", false); Bitmap asli = (Bitmap)gbrAsliKompres.Image; int[,] gambarasli_r

= new int[1, asli.Width * asli.Height]; int[,] gambarasli_g

= new int[1, asli.Width * asli.Height]; int[,] gambarasli_b

= new int[1, asli.Width * asli.Height];

gambarasli_r = notepad_merah(asli); gambarasli_g = notepad_hijau(asli); gambarasli_b = notepad_biru(asli); for (int i = 0; i < 1; i++)

{

for (int j = 0; j < gambarasli_r.Length; j++) {

tulis_r.Write(gambarasli_r[i, j].ToString() + "\t");

} }

tulis_r.Close();

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

for (int j = 0; j < gambarasli_g.Length; j++) {

tulis_g.Write(gambarasli_g[i, j].ToString() + "\t");

} }


(19)

A-19

tulis_g.Close();

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

for (int j = 0; j < gambarasli_b.Length; j++) {

tulis_b.Write(gambarasli_b[i, j].ToString() + "\t");

} }

tulis_b.Close(); }

private void dekompresFilter_Click(object sender, EventArgs e) {

if (gbrKompresi.Image != null) {

Stopwatch watch = new Stopwatch(); watch.Start();

double[] kompressred

= new double[gbrKompresi.Image.Width*gbrKompresi.Image.Height]; double[] kompressgreen

= new double[gbrKompresi.Image.Width*gbrKompresi.Image.Height]; double[] kompressblue

= new double[gbrKompresi.Image.Width*gbrKompresi.Image.Height]; double[] jlh_red = new double[1000000];

double[] jlh_green = new double[1000000]; double[] jlh_blue = new double[1000000]; double[] red = new double[1000000]; double[] green = new double[1000000]; double[] blue = new double[1000000]; int a = 0;

StreamReader baca3 = new StreamReader("D:\\Retri Scrib\\cicilan program\\Notepad\\array_blue_kompres.txt");

StreamReader baca2 = new StreamReader("D:\\Retri Scrib\\cicilan program\\Notepad\\piksel_green_kompres.txt"); StreamReader baca1 = new StreamReader("D:\\Retri Scrib\\cicilan program\\Notepad\\piksel_red_kompres.txt");

StreamReader baca4 = new StreamReader("D:\\Retri Scrib\\cicilan program\\Notepad\\jlh_red_komfil.txt");

StreamReader baca5 = new StreamReader("D:\\Retri Scrib\\cicilan program\\Notepad\\jlh_green_komfil.txt");

StreamReader baca6 = new StreamReader("D:\\Retri Scrib\\cicilan program\\Notepad\\jlh_blue_komfil.txt");

StreamWriter tulis_red = new StreamWriter(@"D:\\Retri Scrib\\cicilan

program\\Notepad\\dekompres_red_filter.txt", false); StreamWriter tulis_green


(20)

= new StreamWriter(@"D:\\Retri Scrib\\cicilan

program\\Notepad\\dekompres_green_filter.txt", false); StreamWriter tulis_blue

= new StreamWriter(@"D:\\Retri Scrib\\cicilan

program\\Notepad\\dekompres_blue_filter.txt", false); kompressred = ambil_nilai(baca1);

kompressgreen = ambil_nilai(baca2); kompressblue = ambil_nilai(baca3); jlh_red = ambil_nilai(baca4); jlh_green = ambil_nilai(baca5); jlh_blue = ambil_nilai(baca6); for (int i

= 0; i < gbrKompresi.Image.Width*gbrKompresi.Image.Height; i++) {

for (int j = 0; j < jlh_red[i]; j++) {

red[a] = kompressred[i]; a++;

} }

//MessageBox.Show(red.ToString()); int b = 0;

for (int i

= 0; i < gbrKompresi.Image.Width*gbrKompresi.Image.Height; i++) {

for (int j = 0; j < jlh_green[i]; j++) {

green[b] = kompressgreen[i]; b++;

} }

int c = 0; for (int i

= 0; i < gbrKompresi.Image.Width*gbrKompresi.Image.Height; i++) {

for (int j = 0; j < jlh_blue[i]; j++) {

blue[c] = kompressblue[i]; c++;

} }

//membuat matriks int[,] pixel_red


(21)

A-21

int[,] pixel_green

= new int[gbrFiltering.Image.Width , gbrFiltering.Image.Height]; int[,] pixel_blue

= new int[gbrFiltering.Image.Width , gbrFiltering.Image.Height]; int indeks = 0;

Bitmap dekompresi

= new Bitmap(gbrFiltering.Image.Width , gbrFiltering.Image.Height) ;

for (int i = 0; i < gbrFiltering.Image.Width; i++) {

for (int j

= 0; j < gbrFiltering.Image.Height; j++) {

pixel_red[j, i] = Convert.Topnt32(red[indeks]);

pixel_green[j, i] = Convert.Topnt32(green[indeks]);

pixel_blue[j, i] = Convert.Topnt32(blue[indeks]);

indeks++; }

}

//buat gbr

for (int i = 0; i < gbrFiltering.Image.Width; i++) {

for (int j

= 0; j < gbrFiltering.Image.Height; j++) {

Color newpixel =

Color.FromArgb(255, pixel_red[j,i], pixel_green[j,i], pixel_blue[ j,i]);

dekompresi.SetPixel(j, i, newpixel); }

}

for (int i = 0; i < gbrFiltering.Image.Width; i++) {

for (int j

= 0; j < gbrFiltering.Image.Height; j++) {

Color cc = dekompresi.GetPixel(j, i); int pixel = cc.R;

tulis_red.Write(pixel_red[j,i] + "\t"); }

tulis_red.Write(tulis_red.NewLine); }


(22)

for (int i = 0; i < gbrFiltering.Image.Width; i++) {

for (int j

= 0; j < gbrFiltering.Image.Height; j++) {

Color cc = dekompresi.GetPixel(j, i); int pixel = cc.G;

tulis_green.Write(pixel_green[j,i] + "\t"); }

tulis_green.Write(tulis_green.NewLine); }

tulis_green.Close();

for (int i = 0; i < gbrFiltering.Image.Width; i++) {

for (int j

= 0; j < gbrFiltering.Image.Height; j++) {

Color cc = dekompresi.GetPixel(j, i); int pixel = cc.B;

tulis_blue.Write(pixel_blue[j,i] + "\t"); }

tulis_blue.Write(tulis_blue.NewLine); }

tulis_blue.Close();

gbrDekompresiFilter.Image = dekompresi; watch.Stop();

RT4.Text =

Math.Round(Convert.ToDecimal(watch.ElapsedMilliseconds) / 1000, 4) .ToString() + " Sekon";

MSE2.Text

= MSE((Bitmap)gbrFiltering.Image, (Bitmap)gbrDekompresiFilter.Ima ge).ToString();

PSNR2.Text

= PSNR(Convert.ToDouble(MSE2.Text)).ToString(); }

else {

MessageBox.Show("salah"); }

}

void Simpan4Click(object sender, EventArgs e) {


(23)

A-23

SaveFileDialog simpan = new SaveFileDialog(); simpan.Filter = "image Files| *.bmp";

simpan.FileName = "*.bmp";

if (simpan.ShowDialog() == DialogResult.OK) {

gbrDekompresiFilter.Image.Save(simpan.FileName, I mageFormat.Bmp);

MessageBox.Show("gambar sudah

disimpan", "save", MessageBoxButtons.OK, MessageBoxIcon.Informati on);

} else {

MessageBox.Show("gambar tidak tersimpan "); }

//tulis

StreamWriter tulis_r = new StreamWriter(@"D:\\Retri Scrib\\cicilan

program\\Notepad\\gbr_dekompresi_filter_red.txt", false);

StreamWriter tulis_g = new StreamWriter(@"D:\\Retri Scrib\\cicilan

program\\Notepad\\gbr_dekompresi_filter_green.txt", false); StreamWriter tulis_b = new StreamWriter(@"D:\\Retri Scrib\\cicilan

program\\Notepad\\gbr_dekompresi_filter_blue.txt", false); Bitmap dekompresFilter

= (Bitmap)gbrDekompresiFilter.Image; int[,] gambarasli_r

= new int[1, dekompresFilter.Width * dekompresFilter.Height]; int[,] gambarasli_g

= new int[1, dekompresFilter.Width * dekompresFilter.Height]; int[,] gambarasli_b

= new int[1, dekompresFilter.Width * dekompresFilter.Height]; gambarasli_r = notepad_merah(dekompresFilter); gambarasli_g = notepad_hijau(dekompresFilter); gambarasli_b = notepad_biru(dekompresFilter); for (int i = 0; i < 1; i++)

{

for (int j = 0; j < gambarasli_r.Length; j++) {

tulis_r.Write(gambarasli_r[i, j].ToString() + "\t");

} }

tulis_r.Close();

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

for (int j = 0; j < gambarasli_g.Length; j++) {


(24)

tulis_g.Write(gambarasli_g[i, j].ToString() + "\t");

} }

tulis_g.Close();

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

for (int j = 0; j < gambarasli_b.Length; j++) {

tulis_b.Write(gambarasli_b[i, j].ToString() + "\t");

} }

tulis_b.Close(); }

void OpenKomasClick(object sender, EventArgs e) {

OpenFileDialog open = new OpenFileDialog(); open.Filter = "Image File(.*bmp)|*.bmp"; if (open.ShowDialog() == DialogResult.OK) {

Bitmap gbr = new Bitmap(open.FileName);

var fileinfo = new Filepnfo(open.FileName); gbrAsliKompres.SizeMode =

PictureBoxSizeMode.StretchImage;

gbrAsliKompres.ImageLocation = open.FileName; Bitmap bit = new Bitmap(open.FileName);

ukuran4.Text

= ((fileinfo.Length) / 1024).ToString() + " KB";

nilaiKompres = fileinfo.Length/1024; height2.Text = bit.Height.ToString(); width2.Text = bit.Width.ToString(); rasio = 100

-(((nilaiKompres)/(nilaiAsli))*100); RK2.Text

= (Math.Round(rasio,2)).ToString() + " %"; gbrAsliKompres.Image = bit; }

}

void OpenDekomfilClick(object sender, EventArgs e) {

OpenFileDialog open = new OpenFileDialog(); open.Filter = "Image File(.*bmp)|*.bmp"; if (open.ShowDialog() == DialogResult.OK)


(25)

A-25

{

Bitmap gbr = new Bitmap(open.FileName);

var fileinfo = new Filepnfo(open.FileName); gbrDekompresiFilter.SizeMode =

PictureBoxSizeMode.StretchImage;

gbrDekompresiFilter.ImageLocation = open.FileName;

Bitmap bit = new Bitmap(open.FileName); ukuran5.Text

= ((fileinfo.Length) / 1024).ToString() + " KB";

height3.Text = bit.Height.ToString(); width3.Text = bit.Width.ToString(); gbrDekompresiFilter.Image = bit; }


(26)

DAFTAR RIWAYAT HIDUP

DATA PRIBADI

Nama Lengkap : Retri Witra Nastiti Jenis Kelamin : Perempuan

Tempat, Tanggal Lahir : Sei Rotan, 30 Desember 1992

Alamat : Jl. Nusa Indah , Gg.Kenanga No.060, Kec. Bt.Kuis

Agama : Islam

E-mail : retri.nastiti@gmail.com

Pendidikan Terakhir : Universitas Sumatera Utara Medan, Fakultas Ilmu Komputer dan Teknologi Informasi Jurusan S-1 Ilmu Komputer

PENDIDIKAN FORMAL

2011 – 2015 : S1 Ilmu Komputer Universitas Sumatera Utara, Medan 2009 – 2011 : SMA Negeri 8 Medan

2006 – 2008 : SMP Negeri 1 Percut Sei Tuan 1999 – 2005 : SD Negeri 104230 Batang Kuis

PENGALAMAN ORGANISASI DAN KEGIATAN ILMIAH

Anggota UKMI Al-Khuwarizmi periode 2012-2013

Sekretaris Bidang Kaderisasi UKMI Al-Khuwarizmi tahun 2013 Anggota UKM Sikonek USU tahun 2013-2014

Sekretaris Bidang Kaderisasi KAM Rabbani Fasilkom-TI USU tahun 2014 Sekretaris Departemen Agama Islam PEMA Fasilkom-TI USU tahun 2014

Anggota Majelis Permusyawaratan Mahasiswa Universitas (MPMU) USU tahun 2014 Anggota UKMI Ad-Dakwah USU tahun 2015


(27)

B-2

PENGALAMAN PEKERJAAN

Mengajar Privat tahun 2015


(28)

Alasdair, McAndrew. 2004. An Introduction to Digital Image Processing with Matlab. Notes for SCM2511 Image Processing 1, School of Computer Science and Mathematics Victoria University of Technology.

Alatas, Putri. 2009. Implementasi Teknik Steganografi dengan Metode LSB pada Citra Digital. Tugas Akhir. Fakultas Ilmu Komputer dan Teknologi Informasi. Sistem Informasi. Universitas Gunadarma.

Faradisa, Irmalia Suryani dan Bara Firmana Budiono. 2011. Implementasi Metode HUFFMAN sebagai Teknik Kompresi CItra.Elektro Eltek: 176-182.

Hariyati, Zulwita. 2014. Implementasi Metode Median Filtering dan Kompresi JPEG Untuk Citra BMP. Skripsi. Medan. Universitas Sumatera Utara.

Jalaludin, A& Melita, Y. 2012.Implementasi Metode Run Length Encoding (RLE) untuk Kompresi Citra.Teknika. Volume 3. Nomor 2. Hal 249-254.

Jannah, Asmaniatul. 2008.Analisis Perbandingan Metode Filter Gaussian, Mean Dan Median Terhadap Reduksi Noise Salt And Peppers. Skripsi. Malang: Universitas Islam Negeri Malang.

Juma’in & Melita, Yuliana. 2011. Kompresi Gambar atau Citra Menggunakan Discrete Cosine Transform. Jurnal. Surabaya: Sekolah Tinggi Teknik Surabaya.Volume 3. Hal 437- 442.

Kadir, A. dan Susanto, A.2013. Teori dan Aplikasi Pengolahan Citra. ANDI: Yogyakarta.

Kusumanto, RD. & Tompunu, A.N. 2011. Pengolahan Citra Digital untuk Mendeteksi Obyek Menggunakan Pengolahan Warna Model Normalisasi RGB. Jurnal Semantik 2011.


(29)

62

Neta, M.R.A. 2013. Perbandingan Algoritma Kompresi Terhadap Objek Citra Menggunakan JAVA.Jurnal SEMANTIK 2013: 224 – 230.

Putra, Darma. 2010.Pengolahan Citra Digital. Yogyakarta: ANDI.

Salomon, D. 2007. Variable-length Codes for Data Compression. Springer.

Sholeh, Muhammad& Badduring, A. 2012. Rancang Bangun Aplikasi Pengaburan Gambar. Prosiding Seminar Nasional Aplikasi Sains & Teknologi (SNAST) Periode III,330-336. Yogyakarta.

Sutoyo, T., Mulyanto, E., Suhartono, V., Nurhayati, O.D. & Wijinarto.2009. Teori Pengolahan Citra Digital. ANDI: Yogyakarta.

Syarif, Syafruddin.,dkk. 2012. Sistem Cerdas Deteksi Citra Dengan Metode Discrete Cosine Transform. Prosiding 2012. Makassar: Universitas Hasanuddin. Volume 6. Hal TE15-1 – TE15-14.


(30)

BAB 3

ANALISIS DAN PERANCANGAN SISTEM

3.1 Analisis Sistem

Langkah pertama dalam perancangan sebuah sistem adalah analisis sistem. Tahap ini akan mengidentifikasi seluruh komponen dan kebutuhan sistem agar sistem dapat berjalan sesuai dengan tujuan penelitian yang diinginkan dan dapat bekerja secara optimal. Adapun pada penelitian ini sistem yang akan dibuat adalah sebuah sistem yang mampu menampilkan kinerja dari metode arithmetic mean filterdan metode run

length encodingpada sebuah citra berformat *.bmp. 3.1.1 Analisis Masalah

Perancangan sistem yang dilakukan diharapakan dapat menyelesaikan masalah yang dibangun dalam penelitian ini. Yakni, bagaimana hasil kinerja dari metode run length encoding dalam mengkompresi sebuah citra digital berformat bmp , dimana citra tersebut telah melalui prosesfilteringterlebih dahulu menggunakan metodearithmetic mean filter. Parameter dari penelitian ini adalah Mean Square Error (MSE), Peak Signal to Noise Ratio(PSNR), ukuran file citra, rasio kompresi danrunning time. 3.1.2 Analisis Persyaratan

Analisi persyaratan terbagi atas dua bagian, yaitu persyaratan fungsional dam persyaratan nonfungsional.

3.1.2.1 Persyaratan Fungsional

Persyaratan fungsional adalah tahapan yang menggambarkan dan memaparkan tentang fungsi-fungsi dan kerja yang harus dan dapat dilakukan oleh sistem yang akan


(31)

22 dibangun. Adapun sistem dari implementasi metode Arithmetic Mean Filter dan Run Length Encoding (RLE) dalam penelitian ini memiliki persyaratan fungsional sebagai berikut:

1. Sistem mampu menampilkan citra hasil filtering menggunakan metode

Arithmetic Mean Filter.

2. Sistem mampu menampilkan citra hasil kompresi menggunakan metode

Run Length Encoding(RLE).

3. Kinerja dari metode filtering dan kompresi dapat dilihat dengan parameter MSE, PSNR, ukuran file citra, rasio kompresi, danrunning time.

4. Citra yang mampu ditampung oleh sistem adalah citra dengan format BMP maksimal dimensi 500 x 500pixel.

5. Citra yang telah dikompresi dapat didekompresi oleh sistem.

3.1.2.2 Persyaratan Non-Fungsional

Persyaratan non-fungsional dari sistem yang akan dirancang dalam penelitian ini adalah:

1. User friendly, artinya sistem yang dibangun harus mudah digunakan dan difahami olehuser.

2. Citra hasil filtering, kompresi dan dekompresi dapat disimpan dan dalam format BMP.

3. Sistem yang dibangun harus bersifat ekonomis, artinya tidak memerlukan biaya yang besar dalam penggunaannya.

3.1.3 Analisis Proses

Sistem yang dibangun dalam penelitian ini akan menampilkan tiga proses penting, yaitu proses filtering, kompresi, dan dekompresi pada citra BMP. Proses filtering menggunakan metode Arithmetic Mean Filter dan proses kompresi menggunakan metodeRun Length Encoding(RLE). Hasil dari masing-masing proses dapat disimpan dengan format keluaran .*bmp.


(32)

Tahap pertama yang dilakukan adalah citra akan difiltering, kemudian dilakukan kompresi dan terakhir dekompresi. Dalam proses kompresi dan dekompresi, citra yang akan dieksekusi adalah citra hasil filtering dan citra asli (citra tanpa proses filtering) yang akan diproses secara bergantian. Hasil kompresi dan dekompresi dari kedua citra tersebut menggunakan parameter MSE (Mean Square Error), PSNR (Peak Signal to Noise Ratio), ukuran citra, rasio kompresi, danrunning time.

3.1.3.1Use Case Diagram

Use case diagram menggambarkan fungsionalitas sistem secara keseluruhan, dan menunjukkan bagaimana interaksi antara user dan sistem. Berikut gambar 3.1 use case diagram sistem yang dibangun.

Gambar 3.B.Use Case Diagram

Dari gambar 3.1 di atas menjelaskan bahwa user dapat melakukan proses filtering, kompresi, dan dekompresi.

Berikut ini merupakan spesifikasi Use Case untuk filtering dapat dilihat pada Tabel 3.1.


(33)

24

Tabel 3.B TabelUse CaseProsesfilteringdenganArithmetic Mean Filter

Name ProsesfilteringdenganArithmetic Mean Filter

Actor User

Description Melakukan proses filtering menggunakan metode

Arithmetic Mean Filter

Preconditions User mengakses menu testing

Basic Flows 1.User menginput citra *.bmp untuk difilter

2.Sistem menampilkan citra yang telah diinput 2.User mengakses tombol filtering

3.Sistem menampilkan citra hasil filtering 4.User mengakses tombol simpan

Alternative Flows -Exception Flows

-Post Conditions User dapat melihat citra hasil filtering

Berikut ini merupakan spesifikasi Use Case untuk kompresi citra dapat dilihat pada Tabel 3.2.

Tabel 3.2 TabelUse CaseProses kompresi denganRun Length Encoding(RLE)

Name Proses kompresi denganRun Length Encoding(RLE)

Actor User

Description Melakukan proses kompresi menggunakan metodeRun Length Encoding(RLE)

Preconditions User mengakses menu testing

Basic Flows 1. User mengakses tombol kompresi untuk citra hasil


(34)

2. Sistem menampilkan citra hasil kompresi untuk citra

filtering

3. User mengakses tombol simpan 4. Citra tersimpan

5. User mengakses tombol kompresi untuk citra asli

6. Sistem menampilkan citra hasil kompresi untuk citra asli 7. User mengakses tombol simpan

8. Citra tersimpan Alternative Flows

-Exception Flows

-Post Conditions User dapat melihat citra hasil kompresi

Berikut ini merupakan spesifikasiUse Case untuk dekompresi citra dapat dilihat pada Tabel 3.3.

Tabel 3.3 TabelUse CaseProses dekompresi

Name Proses dekompresi

Actor User

Description Melakukan proses dekompresi citra Preconditions User mengakses menu testing

Basic Flows 1. User mengakses tombol dekompresi untuk citra hasil

filtering

2. Sistem menampilkan citra hasil dekompresi 3. User mengakses tombol simpan untuk citra hasil

dekompresi 4. Citra tersimpan


(35)

26 6. Sistem menampilkan citra hasil dekompresi

7. User mengakses tombol simpan 8. Citra tersimpan

Alternative Flows -Exception Flows

-Post Conditions User dapat melihat citra hasil dekompresi

3.1.3.2Activity Diagram

Activity diagram adalah diagram yang menggambarkan alur kegiatan penggunaan sistem dalam mengeksekusi tujuan yang diinginkan. Berikut ini gambar 3.2 activity diagramproses filtering.

Gambar 3.2Activity DiagramProsesFiltering


(36)

Gambar 3.3Activity DiagramProses Kompresi


(37)

28

Gambar 3.4Activity DiagramProses Dekompresi


(38)

Squence diagram adalah sebuah diagram yang menggambarkan interaksi antar objek dari sebuah sistem berdasarkan urutan waktu pemrosesan. Berikut ini gambar 3.5 menunjukkansquence diagramsistem dalam penelitian ini.

Gambar 3.5Sequence DiagramSistem

3.1.3.4 Analisis Proses MetodeArithmetic Mean Filter

Berikut ini merupakan contoh penggunaan metode arithmetic mean filter. Dimisalkan sebuah matriks citra 6x6 yang dapat dilihat pada tabel 3.4 berikut:


(39)

30

Untuk melakukan proses filtering terlebih dahulu

tentukan ukuran kernel yang akan digunakan,

maka dalam penelitian ini kernel yang digunakan

adalah kernel 3x3. Kemudian proses filtering

dimulai dari piksel paling kiri atas, seperti berikut:

Kernel 3x3

Matriks citra 6x6

Maka kernel 3x3 yang telah terpilih dilakukan perhitungan sesuai dengan rumus dari metode

arithmetic mean filter, yakni sebagai berikut: (x,y) =

= = 40

Hasil dari perhitungan kernel 3x3 di atas menjadi nilai matriks baru pada piksel yang berkoordinat (1,1) atau piksel yang terletak di tengah pada kernel 3x3 yang telah dipilih, dapat dilihat sebagai berikut:

12 9 0 4 3 8 0 9 0 1 2 22 1 2 8 0 8 8 3 3 4 3 22 5 0 3 3 9 0 9 0 9 0 43 4 5 1 2 8 0 8 7 6 6 44 4 4 4 4 8 0 6 6 6 5 97 1 2 1 2 4 3 4 3 4 3 12 9 0 4 3 8 0 9 0 1 2 22 1 2 8 0 8 8 3 3 4 3 22 5 0 3 3 9 0 9 0 9 0 43 4 5 1 2 8 0 8 7 6 6 44 4 4 4 4 8 0 6 6 6 5 97 1 2 1 2 4 3 4 3 4 3 1 2 9 0 4 3 2 2 1 2 8 0 2 2 5 0 3 3


(40)

(1,1)

Kernel 3x3

Matriks Citra 6x6

Lakukan dengan cara yang sama untuk piksel dan kernel selanjutnya, seperti di bawah ini.

Kernel 3x3

Matriks citra 6x6 (x,y) =

= = 63

Maka nilai matriks citra sekarang adalah: 1 2 9 0 4 3 2 2 4 0 8 0 2 2 5 0 3 3 12 9 0 4 3 8 0 9 0 1 2 22 4 0 8 0 8 8 3 3 4 3 22 5 0 3 3 9 0 9 0 9 0 43 4 5 1 2 8 0 8 7 6 6 44 4 4 4 4 8 0 6 6 6 5 97 1 2 1 2 4 3 4 3 4 3 12 9 0 4 3 8 0 9 0 1 2 22 1 2 8 0 8 8 3 3 4 3 22 5 0 3 3 9 0 9 0 9 0 43 4 5 1 2 8 0 8 7 6 6 44 4 4 4 4 8 0 6 6 6 5 97 1 2 1 2 4 3 4 3 4 3 9 0 4 3 8 0 1 2 8 0 8 8 5 0 3 3 9 0 12 9 0 4 3 8 0 9 0 1 2 22 4 0 6 3 8 8 3 3 4 3 22 5 0 3 3 9 0 9 0 9 0 Piksel tengah dari kernel 3x3


(41)

32

Begitu seterusnya hingga perhitungan kernel 3x3

mencapai piksel paling kanan bawah, berikut hasil

matriks keseluruhannya pada tabel 3.5.

Tabel 3.5 Hasil Filtering Matriks Citra 6x6

3.1.3.5 Analisis Proses MetodeRun Length Encoding(RLE)

Seperti pada metode filtering sebelumnya, berikut

ini merupakan contoh penggunaan metode

run length encoding (RLE). Dimisalkan pula

sebuah matriks citra 5x5 yang dapat dilihat pada

tabel 3.6 berikut.

Tabel 3.6 Matriks Citra Hasil Filtering

43 4 5 1 2 8 0 8 7 6 6 44 4 4 4 4 8 0 6 6 6 5 97 1 2 1 2 4 3 4 3 4 3 12 9 0 4 3 8 0 9 0 1 2 22 4 0 6 3 7 0 6 8 4 3 22 3 5 5 4 6 6 7 4 9 0 43 3 7 5 3 6 5 7 9 6 6 44 3 9 4 1 5 2 6 4 6 5 97 1 2 1 2 4 3 4 3 4 3 12 9 0 4 3 8 0 9 0 1 2 22 4 0 6 3 7 0 6 8 4 3 22 3 5 5 4 6 6 7 4 9 0 43 3 7 5 3 6 5 7 9 6 6


(42)

Proses pertama dalam metode run length encoding adalah nilai matriks citra 5x5 tersebut dibuat dalam bentuk satu baris, seperti berikut ini.

12 90 43 80 90 12 22 40 63 70 68 43 22 35 54 66 74 90 43 37 53 65 79 66 44 39 41 52 64 65 97 12 12 43 43 43

Dari baris matriks citra di atas dapat diketahui bahwa nilai 12 muncul 1 kali, 80 muncul 1 kali, nilai 88 1

kali, dan seterusnya. Maka di dapat kode RLE nya

seperti berikut ini:

12 1 90 1 43 1 80 1 90 1 12 1 22 1 40 1 63 1 70 1 68 1 43 1 22 1 35 1 54 1 66 1 74 1 90 1 43 1 37 1 53 1 65 1 79 1 66 1 44 1 39 1 41 1 52 1 64 1 65 1 97 1 12 2 43 3 Dari perhitungan di atas terdapat 33 nilai piksel dengan masing jumlahnya yang mengikuti. Maka nilai piksel dan jumlah dari masing-masing nilai piksel tersebut dapat dikelompokkan dalam bentuk matriks pada tabel 3.7 berikut ini.

44 3 9 4 1 5 2 6 4 6 5 97 1 2 1 2 4 3 4 3 4 3 12 9 0 4 3 8 0 9 0 1 2 22 4 0 6 3 7 0 6 8 4 3 22 3 5 5 4 6 6 7 4 9 0 43 3 7 5 3 6 5 7 9 6 6


(43)

34

Tabel 3.7 Nilai Matriks Citra Setelah Dikompresi

Pembentukan matriks di atas berdasarkan pembulatan hasil akar dari jumlah nilai piksel yang diketahui, dalam hal ini ada 33 buah nilai piksel. Maka pembulatan hasil akar dari 33 adalah sebagai berikut: .

Maka matriks baru untuk nilai piksel citra setelah dikompresi berdimensi 6x6 seperti yang ditunjukkan pada tabel 3.7 di atas.

Kemudian matriks dari jumlah masing-masing nilai piksel pada citra dapat dilihat pada tabel 3.8 berikut.

Tabel 3.8 Jumlah Masing-Masing Nilai Piksel Citra Terkompres

3.2PseudocodeProgram

9 1 2 4 5

97 1 2

4 3

0 0 0

1 1 1 1 1 1

1 1 1 1 1 1

1 1 1 1 1 1

1 1 1 1 1 1

1 1 1 1 1 1


(44)

Pseudocode program merupakan salah satu bentuk/teknik penulisan algoritma dalam menyelesaikan suatu masalah atau tujuan tertentu. Pseudocode menggambarkan sebuah proses atau algoritma dari program yang akan dibuat, namun tidak terikat dengan bahasa pemrograman terntentu.

3.2.1 Pseudocode Arithmetic Mean Filte xi <- image.Width

yi <- image.Height red <- 0

green <- 0 blue <- 0 jlhred <- 0 jlhgreen <- 0 jlhblue <- 0

For i <- 0 to xi-2

For j <- 0 to yi-2 For k <- 0 to i+2

For l <- 0 to j+2 If (red = 0)

red <- 255 If (green = 0)

green <- 255 If (red = 0)

blue <- 255 jlhred <- jlhred + red

jlhgreen <- jlhgreen + green jlhblue <- jlhblue + blue hslRED = jlhred/9

hslGREEN = jlhgreen/9 hslBLUE = jlhblue/9

finalimage.SetPixel(j + 1, i + 1, Color. FromArgb(255, red,green,blue))

jlhred <- 0 jlhgreen <- 0 jlhblue <- 0

xi dan yi dideklarasikan sebagai baris dan kolom pada matriks citra yang akan di

filtering. Sebelum RGB diproses dalam metode arithmetic mean filter diinisialisasi sama dengan nol terlebih dahulu begitu juga dengan hasil akhir dari jumlah RGB. Perulangan for untuk memproses kernel 3x3 dari matriks citra. Kemudian nilai piksel dari masing-masing RGB akan dijumlahkan dan dibagi dengan 9, sesuai dengan algoritma dari arithmetic mean filter dengan menggunakan kernel 3x3.


(45)

36

xi <- image.Width yi <- image.Height red <- 0

green <- 0 blue <- 0

[]RED <- [xi*yi] []GREEN <- [xi*yi] []BLUE <- [xi*yi] []arrayred <- [xi*yi] []arraygreen <- [xi*yi] []arrayblue <- [xi*yi] []kompressred <- [xi*yi] []kompressgreen <- [xi*yi] []kompressblue <- [xi*yi] acuan <- 0

pos,pos1,pos2 <- 0 temp,temp1,temp2 <- 0 jumred <- 1

jumgreen <- 1 jumblue <- 1

For i <- 0 to xi-2{

For j <- 0 to yi-2

If (red == 0) Red <- 255 If (green == 0)

green <- 255 If (red == 0)

blue <- 255 arrayred[acuan] <- red arraygreen[acuan] <- green arrayblue[acuan] <- blue if (arrayred[pos] = arrayred[acuan])

kompressred[temp]=jumred if (jumred >= 1)

RED[temp] = arrayred[pos]; temp++

jumred <- 1 pos <- acuan

if (arraygreen[pos1] = arraygreen[acuan]) kompressgreen[temp1]=jumgreen

if (jumgreen >= 1)

GREEN[temp1] = arraygreen[pos1]; temp1++

jumgreen <- 1 pos1 <- acuan


(46)

kompressblue[temp2]=jumblue if (jumblue >= 1)

BLUE[temp2] = arrayblue[pos2]; temp2++

jumblue <- 1 pos2 <- acuan Else

jumred++ jumgreen++ jumblue++

if ((acuan+1)= (xi*yi))

kompressred[temp]=jumred+1 kompressgreen[temp1]=jumgreen+1 kompressblue[temp2]=jumblue+1 }acuan++

xi adalah baris dan yi adalah kolom dari matriks citra. Untuk proses algoritma run length encoding, matriks citra perlu diubah menjadi satu vektor oleh karena itu dilakukan perkalian antara xi dan yi. Variabel pos digunakan untuk menyatakan posisi dari matriks citra, sedangkan variabel temp untuk menyimpan jumlah piksel yang terkompres. Array dari red, green, dan blue sebagai variabel yang menampung nilai temp untuk menyimpan piksel hasil kompresi, variabel arrayred, arraygreen, dan arrayblue adalah variabel yang menampung nilai pos. Sedangkan kompresred, kompresgreen, dan kompresblue merupakan variabel untuk menampung dan menyimpan nilai temp .

3.2.3PseudocodeDekompresi MetodeRun Length Encoding

double[]kompresred<- [imageKompres.Height*imageKompres.Width] double[]kompresgreen<- [imageKompres.Height*imageKompres.Width] double[]kompresblue<- [imageKompres.Height*imageKompres.Width] double[] jlh_red<- [1000000]

double[] jlh_green<- [1000000] double[] jlh_blue<- [1000000] double[] red<- [1000000] double[] green<- [1000000] double[] blue<- [1000000]

kompresred<- ambil_nilai(notepad1) kompresgreen<- ambil_nilai(notepad2) kompresblue<- ambil_nilai(notepad3) jlh_red <- ambil_nilai(notepad4)


(47)

38

jlh_green <- ambil_nilai(notepad5) jlh_blue <- ambil_nilai(notepad6) a <- 0

b <- 0 c <- 0

for i <- 0 to < imageKompres.Height*imageKompres.Width for j <- 0 to < jlh_red[i]

red[a] <- kompresred[i] red++

for i <- 0 to < imageKompres.Height*imageKompres.Width for j <- 0 to < jlh_green[i]

red[a] <- kompresgreen[i] green++

for i <- 0 to < imageKompres.Height*imageKompres.Width for j <- 0 to < jlh_blue[i]

red[a] <- kompresblue[i] blue++

Variabel kompresred/green/blue untuk menampung nilai dari matriks citra yang telah terkompres sebelumnya, sedangkan variabel jlh_red/green/blue untuk menampung nilai jumlah dari masing-masing nilai matriks pada citra, dan variabel red, green, blue akan menampung nilai matriks citra hasil dekompresi.

3.3 Perancangan Sistem

Perancangan sistem terdiri dari flowchart sistem secara keseluruhan dan perancangan antarmuka (interface) dari sistem yang akan dibuat.


(48)

Mulai

Input gambar (*.bmp)

Lakukan Arithmetic Mean Filter

Output gambar Filter

Kompresi gambar filter

Output gambar kompresi

Dekompresi gambar

Output gambar dekompresi

Selesai

Gambar 3.6Flowchart Sistem


(49)

40 Sistem ini dirancang dengan empat menu bar dengan 3 Form, menu Home, Testing,

Help, danExit,kemudian form menu utama, form pengujian/testing, formhelp.

3.3.2.1 Tampilan Menu Utama

Halaman menu utama merupakan halaman pertama yang akan muncul ketika sistem dijalankan. Halaman menu utama dalam sistem ini akan menampilkan 4 menu bar yakni, menu Home,Testing,Help, dan Exit, serta judul sistem yang memperkenalkan fungsi dan tujuan dari sistem. Berikut gambar 3.7 tampilan menu utama sistem.

Home Testing Help Exit

JUDUL SKRIPSI

Logo Fakultas

Nama Nim

PROGRAM STUDI 5

6 7

10

8

Gambar 3.7 Tampilan Menu Utama

Keterangan :

1. MenuHomemenampilkan halaman pertama sistem

2. Menu Testing untuk menampilkan proses filtering, kompresi, dan dekompresi pada citra

3. MenuHelpmenampilkan halaman petunjuk penggunaan sistem bagiuser

4. MenuExituntuk keluar dari sistem 5. Label untuk Judul Skripsi

6. Label untuk nama penulis


(50)

7. Label untuk nim penulis 8. Picturebox untuk logo fakultas 9. Label untuk program studi 3.3.2.2 Tampilan MenuTesting

Halama menu testing adalah halaman sistem yang menampilkan proses filtering

menggunakan metode arithmetic mean filter dan proses kompresi menggunakan metoderun length encoding. Berikut gambar 3.8 tampilan menutestingpada sistem.

Gambar 3.8 Tampilan MenuTesting

Keterangan :

1. MenuHomemenampilkan halaman pertama sistem

2. Menu Testing untuk menampilkan proses filtering, kompresi, dan dekompresi pada citra

3. MenuHelpmenampilkan halaman petunjuk penggunaan sistem bagiuser

4. MenuExituntuk keluar dari sistem

5. Picture Boxuntuk menampilkan citra awal/asli

1 2 6 5 4 3 7 11 1 9 8 15 14 13 12 18 17 16 19 21 20 22 26 25 24 23 32 31 30 29 28 27 35 34 33 39 38 37 36 43 42 41 40 46 44 45 51 50 49 48 47 54 53 52 58 57 56 55 59 10 60


(51)

42 6. Buttonbuka gambar untuk membuka citra yang akan ditampilkan

7. Panel yang berisi keterangan parameter hasil uji 8. Text Boxuntuk nilai nama file citra yang dibuka

9. Text Boxuntuk besar ukuran memori dari file citra yang dibuka 10.Text Boxuntuk ukuran tinggi citra

11.Text Box Iuntuk ukuran lebar citra

12.Picture Box untuk menampilkan citra hasil filtering 13.Buttonuntuk melakukan proses filtering pada citra 14.Buttonuntuk menyimpan file citra hasil filtering 15.Buttonuntuk membuka kembali file citra hasil filtering 16.Text Boxuntuk ukuran lebar citra hasil filtering

17.Text Boxuntuk ukuran tinggi citra hasil filtering 18.Text Boxuntuk nilai MSE citra hasilfiltering

19.Text Boxuntuk nilai PSNR citra hasilfiltering

20. Text Boxuntuk besar ukuran citra hasilfiltering

21.Text Boxuntukrunning timeprosesfiltering

22.Picture Box untuk menampilkan citra hasil kompresi

23.Buttonuntuk melakukan proses kompresi pada citra hasil filtering 24.Buttonuntuk menyimpan hasil citra kompresi

25.Buttonuntuk membuka kembali citra hasil kompresi 26.Text Boxuntuk rasio kompresi hasil kompresi pada citra 27.Text Boxuntuk ukuran tinggi citra hasil kompresi 28.Text Boxuntuk ukuran lebar citra hasil kompresi

29.Text Boxuntuk ukuran besar memori citra hasil kompresi 30.Text Boxuntukrunning timeproses kompresi pada citra 31.Picture Boxuntuk menampilkan hasil kompresi citra asli 32.Buttonuntuk melakukan proses kompresi pada citra asli 33.Buttonuntuk menyimpan hasil citra kompresi dari citra asli 34.Buttonuntuk membuka kembali citra hasil kompresi

35.Text Boxuntuk rasio kompresi hasil kompresi pada citra 36.Text Boxuntuk ukuran tinggi citra hasil kompresi 37.Text Boxuntuk ukuran lebar citra hasil kompresi


(52)

39.Text Boxuntukrunning timeproses kompresi pada citra

40.Picture Box untuk menampilkan citra hasil dekompresi citra filtering 41.Buttonuntuk melakukan proses dekompresi pada citra citra filtering 42.Buttonuntuk menyimpan file citra hasil dekompresi citra filtering 43.Buttonuntuk membuka kembali file citra hasil dekompresi citra filtering 44.Text Boxuntuk ukuran tinggi citra hasil dekompresi citra filtering 45.Text Boxuntuk ukuran lebar citra hasil dekompresi citra filtering 46.Text Boxuntuk nilai MSE citra hasildekompresicitra filtering 47.Text Boxuntuk nilai PSNR citra hasildekompresicitra filtering 48. Text Boxuntuk besar ukuran citra hasildekompresicitra filtering 49.Text Boxuntukrunning timeprosesdekompresicitra filtering 50.Picture Box untuk menampilkan citra hasil dekompresi citra asli 51.Buttonuntuk melakukan proses dekompresi citra asli

52.Buttonuntuk menyimpan file citra hasil dekompresi citra asli 53.Buttonuntuk membuka kembali file citra hasil dekompresi citra asli 54.Text Boxuntuk ukuran lebar citra hasil dekompresi citra asli

55.Text Boxuntuk ukuran tinggi citra hasil dekompresi citra asli 56.Text Boxuntuk nilai MSE citra hasildekompresicitra asli 57.Text Boxuntuk nilai PSNR citra hasildekompresicitra asli 58. Text Boxuntuk besar ukuran citra hasildekompresicitra asli 59.Text Boxuntukrunning timeprosesdekompresicitra asli 60.Buttonuntuk mereset semua proses yang sudah dijalankan 3.3.2.3 Tampilan MenuHelp

Menu help menampilkan keterangan atau penjelasan mengenai fungsi dan penggunaan sistem, yang merupakan tahapan/langkah – langkah dalam mengoperasikan sistem. Berikut gambar 3.9 tampilan menuhelp.

Keterangan

Tahapan Testing 1


(53)

44

Gambar 3.9 Tampilan MenuHelp

Keterangan:

1. Panel keterangan untuk menerangkan tujuan dan fungsi dari sistem serta metode apa yang digunakan dalam implementasinya.

2. Panel tahapantestingmenjelaskan langkah-langkah yang harus dilakukan pada prosestesting.


(54)

BAB 4

IMPLEMENTASI DAN PENGUJIAN

4.B Implementasi

Pada tahapan ini sistem yang sudah dirancang dan dianalisis sebelumnya akan dibangun dan direalisasikan sebagai bentuk solusi terhadap permasalahan yang terjadi. Adapun diagram Ishikawa (Fishbone Diagram) yang akan merangkum bagaimana penyelesaian terhadap masalah yang telah dianalisis sebelumnya secara detail, sehingga dapat menggambarkan bentuk dan fungsi dari sistem yang telah dibuat secara keseluruhan. Berikut gambar 4.1 diagramIshikawa(Fishbone Diagram) .

Metode arithmetic mean filter

citra digital BMP metode run length encoding C#

Melakukan filtering dan kebutuhan citra Kompresi pada citra sebagai data,

sehingga membantu menghemat ruang memori

Gambar 4.B. DiagramIshikawa

Dari diagram ishikawa di atas dapat dlihat bagaimana bentuk implementasi sistem berdasarkan empat kategori yang perlu diperhatikan yaitu material, metode, mesin, dan manusia. Material atau objek yang digunakan adalah citra digital dengan format BMP, sistem menggunakan bahasa pemograman C# yang dapat melakukan proses

filteringdan kompresi dengan metodearithmetic mean filteruntuk proses filtering dan Material

Manusia Mesin

Metode

Metode Arithmetic Mean Filter dan Run Length Encoding untuk mengolah dan melakukan kompresi citra BMP


(55)

46 metode run length encoding untuk proses kompresi. Dengan implementasi sistem yang dibuat diharapkan dapat membantu manusia dalam hal ini sebagai pengguna untuk dapat menghemat penggunaan memori dalam penyimpanan file citra. Artinya kedua metode yang disebutkan di atas yakni metode arithmetic mean filter dan metode run length encoding digunakan sebagai solusi untuk mengelolah dan melakukan kompresi pada citra BMP.

4.1.1Form Home

Form home merupakan halaman utama yang akan muncul pertama kali ketika sistem dijalankan. Halaman ini menampilkan judul implementasi yang menggambarkan fungsi dan tujuan dari sistem serta memiliki empat menu bar, yaitu menuHome, menu

Testing, menuHelp, danExit. Halaman menuhomedapat dilihat pada gambar 4.2.

Gambar 4.2. Halaman Menu Home

4.1.2Form Testing

Pada Form Testing akan menampilkan halaman untuk proses implementasi metode yang akan diuji/dijalankan. Proses testing dimulai dengan implementasi dari metode

Arithmetic Mean Filter kemudian metode kompresi yaitu metode Run Length Encoding. Form testingdapat dilihat pada gambar 4.3.


(56)

Gambar 4.3. MenuTesting

4.1.3Form Help

Pada form help akan menampilkan keterangan dari fungsi dan kegunaan sistem serta langkah-langkah dalam mengoperasikan sistem dalam hal ini menu testing. Berikut gambar 4.4 menuHelp


(57)

48

4.2 Pengujian

Pengujian sistem dilakukan menggunakan citra digital berwarna dengan format BMP sebagai objek penelitian dengan ukuran bujur sangkar dan berdimensi maksimal 500x500 piksel. Dalam hal ini ada tiga objek citra yang akan digunakan, dengan masing-masing ukuran dimensi 300x300 piksel, 400x400 piksel, dan 500x500 piksel.

4.2.1 Pengujian form Testing

Pada form testingakan menampilkan prosesfiltering, kompresi, dan dekompresi pada citra yang menjadi objek penelitian. Dimana akan menunjukkan keefektifan dan efisiensi kinerja dari metode arithmetic mean filter dan metode run length encoding

untuk filtering dan kompresi citra yang diterapkan dalam penelitian ini. Berikut gambar 4.5 merupakan gambar dari tampilanopen file imagedalam mengawali proses

testing.

Gambar 4.5. ProsesOpen File Image

Langkah pertama yang harus dilakukan dalam proses testing adalah mengambil citra yang akan digunakan dengan memilih button “Buka Gambar” dan sekaligus akan menampilkan namafiledarifilecitra yang dibuka, ukuran citra, dan dimensi citra baik


(58)

4.2.1.1 ProsesFilteringMenggunakan MetodeArithmetic Mean Filter

Untuk melakukan proses filtering menggunakan metode arithmetic mean filter maka klik button filtering, maka sistem akan memproses dan menampilkan citra hasil

filtering beserta nilai MSE, PSNR, dan running time. Kemudian simpan citra hasil filtering dan buka kembali untuk melihat dimensi dan ukuran citra hasil filtering. Berikut gambar 4.6 tampilan hasil dari prosesfiltering.

Gambar 4.6. ProsesFilteringpada Citra

4.2.1.2 Proses Kompresi Menggunakan Metode Run Length Encoding (RLE) pada Citra HasilFiltering

Setelah melakukan proses filtering pada citra, maka citra hasil filtering akan dikompresi menggunakan metode run length encoding dengan memilih button

kompresi pada groupbox “Kompresi Gambar Filtering”. Maka sistem akan menampilkan citra hasil kompresi tersebut beserta running time dari proses kompresi. Kemudian simpan gambar dan buka kembali untuk mengetahui dimensi dan ukuran citra hasil kompresi serta rasio kompresinya. Berikut gambar 4.7 tampilan hasil dari proses kompresi pada citra hasilfiltering.


(59)

50

Gambar 4.7. Proses Kompresi Menggunakan MetodeRun Length Encoding (RLE) pada Citra HasilFiltering

4.2.1.3 Proses Kompresi Menggunakan Metode Run Length Encoding (RLE) pada Citra Asli

Proses kompresi menggunakan metode run length encoding (RLE) pada citra asli dengan memilih button kompresi pada groupbox “Kompresi Gambar Asli”. Maka sistem akan menampilkan citra hasil kompresi tersebut beserta running time dari proses kompresi. Kemudian simpan gambar dan buka kembali untuk mengetahui dimensi dan ukuran citra hasil kompresi serta rasio kompresinya. Berikut gambar 4.8 tampilan hasil dari proses kompresi pada citra asli.


(60)

Gambar 4.8. Proses Kompresi Menggunakan MetodeRun Length Encoding (RLE) pada Citra Asli

4.2.1.4 Proses Dekompresi Citra Hasil Kompresi CitraFiltering

Untuk proses dekompresi pilih button dekompresi pada groupbox “Dekompresi Gambar Filtering”. Maka sistem akan menampilkan citra hasil dekompresi tersebut beserta running time dari proses kompresi, nilai MSE dan PSNR. Kemudian simpan gambar dan buka kembali untuk mengetahui dimensi dan ukuran citra hasil dekompresi. Berikut gambar 4.9 tampilan hasil dari proses dekompresi pada citra

filtering.


(61)

52 4.2.1.5 Proses Dekompresi Citra Hasil Kompresi Citra Asli

Pilih button dekompresi pada groupbox “Dekompresi Gambar Asli”. Maka sistem akan menampilkan citra hasil dekompresi tersebut beserta running time dari proses kompresi, nilai MSE dan PSNR. Kemudian simpan gambar dan buka kembali untuk mengetahui dimensi dan ukuran citra hasil dekompresi. Berikut gambar tampilan hasil dari proses dekompresi pada citra asli.

Gambar 4.B0 Proses Dekompresi Citra Hasil Kompresi Citra Asli

4.3 Hasil Pengujian

Berikut ini adalah hasil pengujian sistem pada form testing untuk mengimplementasikan kinerja metode arithmetic mean filter dan metode run length encoding, dengan menggunakan tiga objek gambar dengan ukuran dimensi masing-masing 300x300 piksel, 400x400 piksel, dan 500x500. Hasil pengujian sistem dapat dilihat pada tabel 4.1, tabel 4.2, tabel 4.3 dan tabel 4.4 berikut ini.


(62)

Tabel 4.B. Hasil Kompresi Citra Asli dan Citra Filtering Para

Meter Citra Asli CitraFiltering TerkompresiCitra Asli Citra FilteringTerkompresi

gambar_B.bmp

MSE 200

PSNR 25 db

Dimensi Citra

400x400 piksel 400x400 piksel 375x375 369x369

Ukuran Citra

468 KB 625 KB 549 KB 531 KB

Rasio Kompresi

-17,31% 15,04 %

Running Time

65,179 s 1,353 s 0,958 s

gambar_2.bmp

MSE 357

PSNR 23 db

Dimensi Citra


(63)

54

Ukuran Citra

263 KB 351 KB 312 KB 304 KB

Rasio Kompresi

-18,63% 13,39%

Running Time

13,033 s 0,531 s 0.819 s

gambar_3.bmp

MSE 298

PSNR 23 db

Dimensi Citra

500x500 piksel 500x500 piksel 479x479 piksel 476x476 piksel

Ukuran Citra

732 KB 976 KB 896 KB 885 KB

Rasio Kompresi

-22,4% 9,32 %

Running Time


(64)

Tabel 4.2. Hasil Dekompresi Citra Asli Terkompres dan Citra Filtering Terkompres

Para

Meter TerkompresCitra Asli CitraTerkompresFiltering DekompresiCitra Asli Terkompresi

Dekompresi Citra Filtering

Terkompresi

gambar_B.bmp

MSE 200 219 465

PSNR 25 db 25 db 21

Dimensi Citra

400x400 piksel 400x400 piksel 400x400 piksel 400x400 piksel

Ukuran Citra

468 KB 625 KB 625 KB 625 KB

Rasio Kompresi

Running Time

21,892 s 3,828 s 3,926 s

gambar_2.bmp

MSE 357 339 693


(65)

56

Dimensi Citra

300x300 piksel 300x300 piksel 300x300 piksel 300x300 piksel

Ukuran Citra

263 KB 351 KB 351 KB 351 KB

Rasio Kompresi

Running Time

13,033 s 2,16 s 2,178 s

gambar_3.bmp

MSE 298 521 549

PSNR 23 db 21 db 21 db

Dimensi Citra

500x500 piksel 500x500 piksel 500x500 piksel 500x500 pi ksel

Ukuran Citra

732 KB 976 KB 976 KB 976 KB

Rasio Kompresi

Running Time

36,883 s 5,982 s 5,959 s

Tabel 4.3. Hasil Perhitungan Dimensi, Ukuran, dan Rasio Kompresi pada Citra Asli Terkompres, dan CitraFilteringTerkompres


(66)

Tabel 4.4. Hasil Perhitungan MSE, PSNR, Dimensi, dan Ukuran Citra Filtering, Dekompresi Citra Asli Terkompresi, dan Dekompresi Citra Filtering

Terkompresi

Berdasarkan tabel 4.1 dan tabel 4.3 di atas maka dapat dilihat bahwa kinerja metode

arithmetic mean filter dalam membantu kinerja metode run length encoding untuk melakukan kompresi pada citra cukup baik namun proses filtering pada citra menambah ukuran citra sehingga tidak dapat menigkatkan kefektifan kinerja dari metode kompresirun length encoding. Dan kualitas citra yang ditampilkan dari proses

filtering berdasarkan visualisasi dan nilai MSE, serta PSNR nya juga cukup bagus. Dimana dari ketiga gambar yang diuji nilai MSE tertinggi dalam prosesfiltering pada citra hanya 357, artinya cukup rendah dan menunjukkan bahwa kualitas citra yang ditampilkan cukup baik. Metode run length encoding mampu bekerja dalam melakukan kompresi pada citra hanya setelah citra melalui proses filtering sebelumnya, dari tabel di atas dapat dilihat juga bahwa metode run length encoding mampu mengkompresi citra hingga 15% saja untuk citra yang telah difiltering sebelumnya, sedangkan untuk citra asli yang tidak melalui proses filtering terlebih dahulu, metoderun length encodingtidak mampu mengkompresi citra, bahkan ukuran citra bisa bertambah hingga 22% lebih, walaupun metode ini mampu melakukan


(67)

58 kompresi pada setiap dimensi citra hingga 7% dengan efisiensi waktu yang baik dalam proses kompresinya yakni hanya sekitar 1 - 2 sekon saja.

Namun proses kompresi pada citra dengan metode run length encoding dapat didekompresi sehingga citra yang sudah terkompres sebelumnya dapat dikembalikan kedalam bentuk semula namun kualitas yang ditampilkan memang tidak sebaik citra yang asli sebelumnya namun cukup bagus. Hal ini dapat dilihat dari nila MSE dan PSNR nya, pada citra hasil filtering rata rata nilai MSE dan PSNR nya adalah 285 dan 23,67 db. Sedangkan rata-rata nilai MSE dan PSNR citra hasil dekompresi untuk citrafilteringyang terkompresi adalah 569 dan 20,67 db, sehingga dapat dilihat selisih MSE dan PSNR nya adalah 284 dan 3 db. Selisih nilai MSE nya memang cukup besar namun selisih dari nilai PSNR nya sangat sedikit hanya sekitar 12,5 % perbedaannya dari nilai PSNR awal.

Jika dilihat dari nilai MSE dan PSNR nya juga, maka kualitas citra dari hasil dekompresi citra asli terkompres lebih baik dibandingkan citra hasil dekompresi citra

filtering terkompres, di mana rata-rata MSE dan PSNR dari citra hasil dekompresi citra asli terkompres adalah 359, 67 dan 23 db, sedangkan nilai MSE dan PSNR dari citra hasil dekompresi citra filtering terkompres adalah 569 dan 20,67 db. Perlu diketahui bahwa semakin rendah nilai MSE suatu citra maka semakin baik kualitas citra tersebut, sebaliknya semakin tinggi nilai PSNR suatu citra maka semakin tinggi pula kualitas citra tersebut.


(68)

BAB 5

KESIMPULAN DAN SARAN

5.B Kesimpulan

Berdasarkan hasil implementasi dan pengujian sistem implementasi metodearithmetic mean filter dan kompresi citra menggunakan metode run length encoding maka kesimpulan yang didapat adalah sebagai berikut:

1. Penambahan proses filtering menggunakan metode arithmetic mean filter dapat membantu metode run length encoding untuk melakukan kompresi pada citra sehingga citra dapat terkompresi, namun ukuran citra hasil kompresi tidak lebih kecil dari citra asli disebabkan proses filtering yang telah dilakukan sebelumnya menggunakan metodearithmetic mean filterternyata menambah ukuran citra. 2. Waktu proses kompresi menggunakan metode run length encoding sangat cepat.

Semakin kecil ukuran citra semakin cepat proses kompresi.

3. Metode run length encoding adalah metode kompresi citra yang sangat buruk karena tidak mampu melakukan kompresi pada citra dengan baik

4. Citra hasil kompresi menggunakan metode run length encoding dapat didekompresi dan menghasilkan citra dekompresi yang cukup baik. Artinya citra yang telah dikompresi dapat dikembalikan ke dalam bentuk semula namun kualitasnya tidak sebaik citra awal.

5. Kualitas Citra hasil dekompresi dari citra asli yang terkompres lebih baik dari pada citra hasil dekompresi dari citrafilteringyang terkompres.


(69)

60

6. Waktu yang dibutuhkan untuk proses dekompresi sedikit lebih lama dibandingkan waktu untuk proses kompresi.

5.2 Saran

Adapun saran-saran yang diperlukan untuk penelitian maupun pengembangan berikutnya adalah:

1. Sistem ini belum mampu meningkatkan kinerja dari metode run length encoding

dalam melakukan kompresi pada citra, untuk pengembangan selanjutnya diharapakan dapat menemukan solusi yang tepat untuk meningkatkan kemampuan atau kinerja dari metode kompresi pada citra tersebut.

2. Sistem ini menggunakan software sharpDevelop 4.3, untuk penelitian selanjutnya diharapkan dapat menggunakan software lain seperti matlab, delphi, Java, dan lain sebagainya agar lebih berkembang dan variatif.

3. Pada sistem ini citra yang digunakan adalah citra berbentuk persegi, pada penelitian selanjutnya diharapkan dapat mengakses semua bentuk dan ukuran citra.


(70)

BAB 2

LANDASAN TEORI

2.1 Citra

2.1.1 Definisi Citra

Citra adalah suatu representasi (gambaran), kemiripan, atau imitasi dari suatu objek. Citra digital adalah citra yang dapat diolah oleh komputer. Citra sebagai keluaran suatu sistem perekaman data dapat bersifat optik berupa foto, bersifat analog berupa sinyal-sinyal video seperti gambar pada monitor televisi, atau bersifat digital yang dapat langsung disimpan pada suatu media penyimpanan (Sutoyo dkk, 2009).

2.1.2 Picture Element (pixel)

Setiap picture element(pixel) atau disebut juga piksel digambarkan sebagai satu kotak kecil. Setiap piksel mempunyai koordinat posisi. Sistem koordinat piksel mengikuti asas pemindaian pada layar TV standar, dimana setiap piksel memiliki koordinat berupa

(x,y) Dalam hal ini,

x menyatakan posisi kolom; Y menyatakan posisi baris;

Piksel pojok kiri-atas mempunyai koordinat (0,0) dan piksel pada pojok kanan-bawah mempunyai koordinat (N-1, M-1) (Kadir & Susanto, 2013).

Namun dalam praktiknya, penggunaan koordinat pada sistem tertentu mempunyai sedikit perbedaan, contohnya pada MATLAB piksel pojok kanan-atas tidak mempunyai koordinat (0,0) melainkan (1,1) (Kadir & Susanto, 2013).


(71)

7

Citra bitmap adalah susunan bit-bit warna untuk tiap pixel yang membentuk pola tertentu.Pola-pola warna ini menyajikan informasi yang dapat dipahami sesuai dengan persepsi indera penglihatan manusia. Format file ini merupakan format grafis yang fleksibel untukplatform Windowssehingga dapat dibaca oleh program grafis manapun. Format ini mampu menyimpan informasi dengan kualitas tingkat 1 bit sampai 24 bit. Citra bitmap didefinisikan sebagai fungsi f (x,y) dengan x dan y adalah koordinat bidang. Besaran f untuk tiap koordinat (x,y) disebut intensitas atau derajat keabuan citra pada titik tersebut (Jannah, 2008). Berikut gambar 2.1 menunjukkan gambar matriksbitmap

Gambar 2.1 .Bitmapdengan nilai matriksnya (Sutoyo dkk, 2009) 2.1.4 Jenis Citra

2.1.4.1 Citra Biner (Monokrom)

Setiap piksel hanya terdiri dari warna hitam atau putih, karena hanya ada dua warna untuk setiap piksel, maka hanya perlu 1 bit per piksel (0 dan 1) atau apabila dalam 8 bit ( 0 dan 255), sehingga sangat efisien dalam hal penyimpanan. Gambar yang direpresentasikan dengan biner sangat cocok untuk teks (dicetak atau tulisan tangan), sidik jari (finger print), atau gambar arsitektur (Kusumanto & Tompunu, 2011). Gambar 2.2 berikut adalah contoh citra biner.


(72)

Gambar 2.2 Citra Biner (Alasdair, 2004) 2.1.4.2 Citra Skala Keabuan (Grayscale)

Citra grayscale merupakan citra digital yang hanya memiliki satu nilai kanal pada setiap piksel-nya, dengan kata lain nilai bagianRED=GREEN=BLUE. Nilai tersebut digunakan untuk menunjukkan tingkat intensitas. Warna yang dimiliki adalah warna dari hitam, keabuan, dan putih. Tingkatan keabuan di sini merupakan warna abu dengan berbagai tingkatan dari hitam hingga mendekati putih. Citra grayscaleberikut memiliki kedalaman warna 8 bit (256 kombinasi warna keabuan) (Hariyati, 2014). Berikut contoh citragrayscalepada gambar 2.3.

Gambar 2.3 CitraGrayscale 2.1.4.3. Citra Warna (True Color)

Pada citra warna setiap titik mempunyai warna yang spesifik yang merupakan kombinasi dari tiga warna dasar, yaitu: merah, hijau, biru. Format citra ini sering disebut sebagai citra RGB (red- green-blue). Setiap warna dasar mempunyai intensitas sendiri dengan nilai maksimum 255 (8 bit).


(73)

9 Dengan demikian setiap titik pada citra warna membutuhkan 3 byte. Jumlah kombinasi warna yang mungkin untuk format citra ini adalah 224 atau lebih dari 16 juta warna, dengan demikian dianggap mencakup semua warna yang ada, inilah sebabnya format ini dinamakan true color (Jalaluddin & Melita, 2012). Pada gambar 2.4 berikut adalah contoh citra warna.

Gambar 2.4 Citra Warna (Hariyati, 2014) 2.1.4.4 Citra Warna Berindeks

Setiap titik (pixel) pada citra warna berindeks mewakili indeks dari suatu tabel warna yang tersedia (biasanya disebut palet warna),

Keuntungan pemakaian palet warna adalah kita dapat dengan cepat memanipulasi warna tanpa harus mengubah informasi pada setiap titik dalam citra. Keuntungan yang lain, penyimpanan lebih kecil (Syarif dkk, 2012). Berikut adalah contoh citra warna berindeks pada gambar 2.5.


(74)

Gambar 2.5 Citra Warna Berindeks (Syarif dkk, 2012) 2.2 Pengolahan Citra

2.2.1 Definisi Pengolahan Citra

Pengolahan Citra adalah kegiatan memperbaiki kualitas citra agar mudah diinterpretasi oleh manusia/mesin (komputer). Masukannya adalah citra dan keluarannya juga citra tapi dengan kualitas lebih baik daripada citra masukan, misal citra warnanya kurang tajam, kabur (blurring), mengandungnoise (misal bintik-bintik putih), dan lain-lain sehingga perlu ada pemrosesan untuk memperbaiki citra karena citra tersebut menjadi sulit diinterpretasikan karena informasi yang disampaikan menjadi berkurang (Syarif dkk, 2012).

2.2.2. Aplikasi dan Prinsip Dasar Pengolahan Citra

pengolahan citra merupakan bagian penting yang mendasari aplikasi nyata, seperti pengenalan pola, penginderaan jarak jauh melalui satelit atau pesawat udara, dan

machine vision. Pada pengenalan pola, pengolahan citra antara lain berperan memisahkan objek dari latar belakang secara otomatis. Selanjutnya, objek akan diproses oleh pengklasifikasi pola. Pengolahan citra juga dapat dimanfaatkan, misalnya untuk penentuan jenis jenis tanaman hias melalui ciri-ciri citra daun.

Aplikasi-aplikasi seperti itu menggunakan prinsip dasar dalam pengolahan citra seperti peningkatan kecerahan dan kontras, penghilangan derau pada citra, dan pencarian bentuk objek (Kadir & Susanto, 2013).


(1)

DAFTAR ISI

Halaman

Persetujuan ii

Pernyataan iii

Penghargaan iv

Abstrak vi

Abstract vii

Daftar Isi viii

Daftar Tabel xi

Daftar Gambar xii

Daftar Lampiran xiii

Bab 1 Pendahuluan

1.1 Latar Belakang 1

1.2 Rumusan Masalah 2

1.3 Batasan Masalah Atau Ruang Lingkup Masalah 3

1.4 Tujuan Penelitian 3

1.5 Manfaat Penelitian 3

1.6 Metode Penelitian 3

1.7 Sistematika Penulisan 4

Bab 2 Landasan Teori

2.1 Citra 6

2.1.1 Definisi Citra 6

2.1.2Picture Element (Pixel) 6

2.1.3 Matriks Bitmap 7

2.1.4 Jenis Citra 7

2.1.4.1 Citra Biner (Monokrom) 7

2.1.4.2 Citra Skala Keabuan (Grayscale) 8

2.1.4.3 Citra Warna (True Color) 8

2.1.4.4 Citra Warna Berindeks 9

2.2 Pengolahan Citra 10

2.2.1 Definisi Pengolahan Citra 10

2.2.2 Aplikasi dan Prinsip Dasar Pengolahan Citra 10 2.2.3 Peningkatan Kualitas Citra (Image Enhancement) 11

2.2.4 Perbaikan Citra (Image Restoration) 11

2.2.5 Transformasi Fourier 12

2.2.6 Segmentasi 12

2.3Filtering 13

2.3.1Arithmetic Mean Filter 13

2.4 Kompresi Citra 14

2.4.1 Pengertian Kompresi 14


(2)

2.4.3 MetodeRun Length Encoding 17

2.4.4Ratio Of Compression(RG) 18

2.4.5Compression Ratio(CR) 18

2.4.6 Data Berlebihan (Data Redudency) 18

2.5Mean Square Error(MSE) danPeak Signal to Noise Ratio(PSNR) 19 Bab 3 Analisis dan Perancangan Sistem

3.1 Analisis Sistem 21

3.1.1 Analisis Masalah 21

3.1.2 Analisis Persyaratan 21

3.1.2.1 Persyaratan Fungsional 21

3.1.2.2 Persyaratan Non-Fungsional 22

3.1.3 Analisis Proses 22

3.1.3.1Use CaseDiagram 23

3.1.3.2ActivityDiagram 26

3.1.3.3SequanceDiagram 29

3.1.3.4 Analisis Proses MetodeArithmetic Mean Filter 29 3.1.3.5 Analisis Proses MetodeRun Length Encoding(RLE) 32

3.2PseudocodeProgram 34

3.2.1Pseudocode Arithmetic Mean Filter 34

3.2.2Pseudocode Run Length Encoding 35

3.2.3PseudocodeDekompresi Metode RunLength Encoding 37

3.3 PeranGangan Sistem 37

3.3.1FlowchartSistem 38

3.3.2 PeranGangan Antarmuka Sistem 39

3.3.2.1 Tampilan Menu Utama 39

3.3.2.2 Tampilan MenuTesting 40

3.3.2.3 Tampilan MenuHelp 42

Bab 4 Implementasi dan Pengujian

4.1 Implementasi 44

4.1.1Form Home 45

4.1.2Form Testing 45

4.1.3Form Help 46

4.2 Pengujian 47

4.2.1 PengujianForm Testing 47

4.2.1.1 ProsesFilteringMenggunakan Metode

Arithmetic Mean Filter 48

4.2.1.2 Proses Kompresi Menggunakan Metode

Run Length Encoding(RLE) pada Citra HasilFiltering 48 4.2.1.3 Proses Kompresi Menggunakan Metode

Run Length Encoding(RLE) pada Citra Asli 49 4.2.1.4 Proses Dekompresi Citra Hasil Kompresi CitraFiltering 50 4.2.1.5 Proses Dekompresi Citra Hasil Kompresi Citra Asli 51


(3)

Bab 5 Kesimpulan dan Saran

5.1 Kesimpulan 58

5.2. Saran 59


(4)

DAFTAR TABEL

Nomor

Tabel Nama Tabel Halaman

3.1 3.2 3.3 3.3 3.5 3.6 3.7 3.8 3.1 3.2 3.3 3.3

SpesifikasiUse CaseProsesFilteringdenganArithietic Mean Filter

SpesifikasiUse CaseProses Kompresi denganRun Length Encoding(RLE)

SpesifikasiUse CaseProses Dekompresi Matriks Citra 6x6

HasilFilteringMatriks 6x6 Matriks Citra Hasil Filtering

Nilai Matriks Citra Setelah Dikompresi

Jumlah Masing-Masing Nilai Piksel Citra Terkompres Hasil Kompresi Citra Asli dan CitraFiltering

Hasil Dekompresi Citra Asli Terkompres dan Citra Filtering Terkompres

Hasil Perhitungan Dimensi, Ukuran dan Rasio Kompresi pada Citra Asli Terkompres dan CitraFilteringTerkompres

Hasil Perhitungan MSE, PSNR, Dimensi, dan Ukuran dari Citra Filtering, Citra Dekompresi dari Citra Asli Terkompres, dan Citra Dekompresi dari CitraFilteringTerkompres

23 23 25 30 32 32 33 33 52 53 55 56


(5)

DAFTAR GAMBAR

Nomor

Gambar Nama Gambar Halaman

2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10

Bitmap dengan Nilai Matrisknya Citra Biner

Citra Grayscale Citra Warna

Citra Warna Berindeks Pemilihan Kernel 3x3

Proses Kompresi Citra Analog ke Citra Digital dan Pengirimannya

Kompresi Citra Menggunakan 7-Zip Use Case Diagram

Activity DiagramProsesFiltering Activity DiagramProses Kompresi Activity DiagramProses Dekompresi Sequence DiagramSistem

FlowchartSistem Tampilan Menu Utama Tampilan MenuTesting Tampilan MenuHelp DiagramIshikawa Halaman MenuHome MenuTesting

MenuHelp

ProsesOpen File Image ProsesFilteringpada Citra

Proses Kompresi Menggunakan Metode Run Length Encoding (RLE) pada Citra HasilFiltering

Proses Kompresi Menggunakan Metode Run Length Encoding (RLE) pada Citra Asli

Proses Dekompresi Citra Hasil Kompresi CitraFiltering Proses Dekompresi Citra Hasil Kompresi Citra Asli

7 8 8 9 10 13 15 16 23 26 27 28 29 38 39 40 43 44 45 46 46 47 48 49 50 50 51


(6)

DAFTAR LAMPIRAN

Halaman

A.ListingProgram A-1