• Tidak ada hasil yang ditemukan

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

N/A
N/A
Protected

Academic year: 2017

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

Copied!
105
0
0

Teks penuh

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

(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

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

{

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

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

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;

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

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

}

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

{

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;

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

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

(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

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

}

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)

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

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

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

}

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

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

(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

(27)

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.

(29)

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.

(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

(31)

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

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

(33)
[image:33.595.102.531.111.474.2]

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

[image:34.595.100.534.81.385.2] [image:34.595.97.534.454.756.2]

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)

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

[image:35.595.99.534.81.257.2]

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)

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)

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:

(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

(41)

Begitu seterusnya hingga perhitungan kernel 3x3

mencapai piksel paling kanan bawah, berikut hasil

[image:41.595.188.522.81.602.2]

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

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

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)

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]

(47)

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

[image:48.595.237.432.87.671.2]

Selesai

Gambar 3.6Flowchart Sistem

(49)

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

[image:49.595.112.522.283.563.2]

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

[image:50.595.77.555.287.565.2]

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

(51)

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

(53)

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,

[image:54.595.100.547.405.606.2]

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

(55)

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

[image:55.595.106.505.374.591.2]

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

(56)
[image:56.595.109.507.83.293.2]

Gambar 4.3. MenuTesting

4.1.3Form Help

[image:56.595.107.507.445.653.2]

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)

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

[image:57.595.109.506.416.624.2]

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

[image:58.595.109.505.257.464.2]

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

(59)
[image:59.595.109.506.81.289.2]

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

(60)
[image:60.595.108.506.83.290.2]

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

[image:60.595.110.506.523.731.2]

filtering.

(61)

4.2.1.5 Proses Dekompresi Citra Hasil Kompresi Citra Asli

[image:61.595.110.505.252.454.2]

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

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

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

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)

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

[image:65.595.109.542.82.609.2]

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

(66)
[image:66.595.108.540.141.390.2]

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

(67)

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

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

(69)

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

Gambar

Tabel 3.B Tabel Use Case Proses filtering dengan Arithmetic Mean Filter
Tabel 3.3.
Gambar 3.2 Activity Diagram Proses Filtering
Tabel 3.5 Hasil Filtering
+7

Referensi

Dokumen terkait

PENDIDIKAN ANAK USIA DINI DAN PENDIDIKAN MASYARAKAT DIREKTORAT PEMBINAAN PENDIDIKAN ANAK USIA DINI.

2009 Novel: Tegar Bengawan Pemenang I Sayembara Penulisan Buku Pengayaan PUSBUK KEMENDIKBUD 2009 2009 Prophetic Learning Pro-U Media (Cetakan ke-2 pd 2010) 2008 Novel:

Pola adalah satu paket objek atau konsep yang dapat dikenali untuk membentuk sebuah model yang mirip dengan target model dengan berpatok pada bagaimana ciri

Berdasarkan temuan penelitian ini terungkap bahwa, setiap simbol yang terdapat pada kain songket dan dipakai oleh masyarakat adat dapat ditafsirkan sebagai nilai-nilai

K egiatan ini merupakan bagian dari yang dilakukan oleh Aliansi Kota dan Kabupaten Peduli Sanitasi Indonesia (AKKOPSI) untuk mendukung peningkatan akses masyarakat

[r]

URAIAN BARANG POS

Surat Edaran Otorisasi Jasa Keuangan Nomor 18/SEOJK.03/2015 tanggal 08 Juni 2015 Tentang Transparansi dan Publikasi Laporan Bank Umum Syariah dan Unit Usaha Syariah2.