Implementasi High-Boost Filtering Untuk Memperbaiki Kualitas Citra Digital

A-2

Listing Program
Kode Program Menu Home:
using
using
using
using
using
using
using
using

System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Linq;
System.Text;
System.Windows.Forms;


namespace High_Boost_Filtering
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void pengujianToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Dispose();
Form2 frm2 = new Form2();
frm2.ShowDialog();
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void helpToolStripMenuItem_Click(object sender, EventArgs e)

{
Form3 frm3 = new Form3();
this.Dispose();
frm3.ShowDialog();
}
private void hasilToolStripMenuItem_Click(object sender, EventArgs e)
{
Form4 frm4 = new Form4();
this.Dispose();
frm4.ShowDialog();
}
}
}

Universitas Sumatera Utara

A-2
Kode Program Menu Pengujian:
using
using

using
using
using
using
using
using
using
using
using
using

System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Drawing.Imaging;
System.Linq;
System.Text;
System.Windows.Forms;

System.Runtime.InteropServices;
System.Diagnostics;
System.IO;

namespace High_Boost_Filtering
{
public partial class Form2 : Form
{
BitmapData bmpData = null;
private bool bitdeviasi;
private double Deviasi;
IntPtr point = IntPtr.Zero;
Bitmap imageAwal;
int[,] pixelImage;
double A = 2.6;
double w;
string JenisNoise = "";
byte[] Pixels;

double[,] tapisHighBoost;

public Form2()
{
InitializeComponent();
}
private void homeToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Dispose();
Form1 frm1 = new Form1();
frm1.ShowDialog();
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Keluar Aplilkasi?", "Keluar", MessageBoxButtons.YesNo,
MessageBoxIcon.Question) == DialogResult.Yes)
Application.Exit();
}
private void Form2_Load(object sender, EventArgs e)
{
w = (9 * A) - 1;
tapisHighBoost = new double[3, 3] { {-1,-1,-1},

{-1,w,-1},

Universitas Sumatera Utara

A-2
{-1,-1,-1}};
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
tapisHighBoost[i, j] = (1 / 9) * tapisHighBoost[i, j];
}
}
}
private Bitmap getSaltAndPepper(Bitmap image)
{
int x = image.Width;
int y = image.Height;
int pixelx, pixely, val;
double prob;

prob = Convert.ToDouble(textBox1.Text);
prob = Convert.ToInt32((prob/200) * x * y);
Random rnd = new Random();
for (int i = 0; i < prob; i++)
{
pixelx = rnd.Next(0, x - 1);
pixely = rnd.Next(0, y - 1);
val = rnd.Next(0, 10);
if (val = 1 || persegi == 0);

Universitas Sumatera Utara

A-2
var kutup = Math.Sqrt(-2 * Math.Log(persegi) / persegi);
Deviasi = v2 * kutup;
bitdeviasi = true;
return v1 * kutup;
}
private Bitmap getGaussianNoise(Bitmap image)
{

int x = image.Width;
int y = image.Height;
double gaussnumber = 0.0;
double prob;
prob = Convert.ToInt32(textBox1.Text);
int step, newpixel, PixelSize = x * y;
BitmapData bmpData = null;
byte[] Pixels;
Random rnd = new Random();
Rectangle box = new Rectangle(0, 0, x, y);
int Depth = System.Drawing.Bitmap.GetPixelFormatSize(image.PixelFormat);
step = Depth / 8;
bmpData = image.LockBits(box, ImageLockMode.ReadWrite, image.PixelFormat);
Pixels = new byte[PixelSize * step];
point = bmpData.Scan0;
Marshal.Copy(point, Pixels, 0, Pixels.Length);
for (int i = 0; i < Pixels.Length; i += step)
{
if (i < Pixels.Length - step)
{

for (int j = 0; j < step; j++)
{
gaussnumber = getGaussianNumber();
newpixel = Convert.ToInt32(gaussnumber * prob) +
Convert.ToInt32(Pixels[i + j]);
if (newpixel < 0) newpixel = 0;
if (newpixel > 255) newpixel = 255;
Pixels[i + j] = Convert.ToByte(newpixel);
}
}
JenisNoise = "Gaussian Noise";
}
Marshal.Copy(Pixels, 0, point, Pixels.Length);
image.UnlockBits(bmpData);
return image;
}
bool isGrayscale(params int[] ints)
{
for (int i = 0; i < ints.Length - 1; i++)
{

if (ints[i] != ints[i + 1])
return false;

Universitas Sumatera Utara

A-2
}
return true;
}
private void btnImport_Click(object sender, EventArgs e)
{
OpenFileDialog open = new OpenFileDialog();
open.Filter = "bmp Files|*.bmp|png Files|*.png|All Files(*.*)|*.*";
open.FileName = "*.bmp";
bool grayscale = true;
if (open.ShowDialog() == DialogResult.OK)
{
imageAwal = new Bitmap(open.FileName);
for (int i = 0; i < imageAwal.Height; i++)
{

for (int j = 0; j < imageAwal.Width; j++)
{
if (! isGrayscale(imageAwal.GetPixel(j, i).R,
imageAwal.GetPixel(j, i).G, imageAwal.GetPixel(j, i).B))
{
MessageBox.Show("Image harus Grayscale", "High-Boost
Filtering", MessageBoxButtons.OK, MessageBoxIcon.Warning);
grayscale = false;
break;
}
}
if (!grayscale)
break;
}
if (grayscale)
imgAwal.Image = imageAwal;
}
}
private void rbtSalt_CheckedChanged(object sender, EventArgs e)
{
if (rbtSalt.Checked)
{
if (textBox1.Text != "")
{
imgNoise.Image = null;
imgNoise.Image = getSaltAndPepper(imageAwal);
MessageBox.Show("Salt & Pepper Noise telah ditambahkan ke Image",
"High-Boost Filtering", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("Masukkan probabilitas Noise terlebih dahulu", "HighBoost Filtering", MessageBoxButtons.OK, MessageBoxIcon.Warning);
textBox1.Focus();
rbtSalt.Checked = false;
}
}
}
private void rbtGaussian_CheckedChanged(object sender, EventArgs e)
{

Universitas Sumatera Utara

A-2
if (rbtGaussian.Checked)
{
if (textBox1.Text != "")
{
imgNoise.Image = null;
imgNoise.Image = getGaussianNoise(imageAwal);
MessageBox.Show("Gaussian Noise telah ditambahkan ke Image", "HighBoost Filtering", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("Masukkan probabilitas Noise terlebih dahulu", "HighBoost Filtering", MessageBoxButtons.OK, MessageBoxIcon.Warning);
textBox1.Focus();
rbtGaussian.Checked = false;
}
}
}
private void btnReset_Click(object sender, EventArgs e)
{
imgAwal.Image = null;
imgHasil.Image = null;
imgNoise.Image = null;
textBox1.Text = "";
rbtGaussian.Checked = false;
rbtSalt.Checked = false;
txtMSE.Text = "";
txtPSNR.Text = "";
}
private void btnSimpan_Click(object sender, EventArgs e)
{
if (imgHasil.Image != null)
{
SaveFileDialog simpan = new SaveFileDialog();
simpan.Filter = "Image Files|*.bmp|Image Files|*.png";
simpan.FileName = "*.bmp";
if (simpan.ShowDialog() == DialogResult.OK)
{
imgHasil.Image.Save(simpan.FileName,
System.Drawing.Imaging.ImageFormat.Bmp);
string filename = simpan.FileName.Substring(0, simpan.FileName.Length
- 4) + ".txt";
FileStream fstream = new FileStream(filename, FileMode.OpenOrCreate);
StreamWriter sw = new StreamWriter(fstream);
SeekOrigin seekorigin = new SeekOrigin();
sw.BaseStream.Seek(0, seekorigin);
sw.WriteLine(txtMSE.Text + "/" + txtPSNR.Text);
sw.Flush();
sw.Close();
MessageBox.Show("Image Hasil Telah Disimpan", "Simpan",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
{

Universitas Sumatera Utara

A-2
MessageBox.Show("Image Noise Tidak Ada");
}
}
private void btnFilter_Click(object sender, EventArgs e)
{
Bitmap image = new Bitmap(imgNoise.Image);
Bitmap output = new Bitmap(image.Width, image.Height);
int pixel;
pixelImage = new int[image.Height, image.Width];
for (int i = 0; i < image.Height; i++)
{
for (int j = 0; j < image.Width; j++)
{
pixelImage[i, j] = image.GetPixel(j, i).R;
}
}
for (int i = 0; i < image.Height - 2; i++)
{
for (int j = 0; j < image.Width - 2; j++)
{
pixel = Convert.ToInt32(HighBoost(i, j));
if (pixel < 0)
pixel *= -1;
if (pixel > 255)
pixel = 255;
output.SetPixel(j + 1, i + 1, Color.FromArgb(255, pixel, pixel,
pixel));
}
}
imgHasil.Image = output;
}
private double HighBoost(int x, int y)
{
double Hasil = 0;
int row = x;
int col = y;
for (int i = 0; i < 3; i++)
{
col = y;
for (int j = 0; j < 3; j++)
{
Hasil += pixelImage[row, col] * tapisHighBoost[i, j];
col++;
}
row++;
}
double HighBoost = ((A - 1) * pixelImage[x, y]) + Hasil;
return HighBoost;
}
private double hitungMSE(Bitmap imageAsli, Bitmap imageHasil)
{
double sum = 0;

Universitas Sumatera Utara

A-2
double pxAsli, pxHasil, MSE;
for (int i = 0; i < imageAsli.Height; i++)
{
for (int j = 0; j < imageAsli.Width; j++)
{
pxAsli = imageAsli.GetPixel(j, i).R;
pxHasil = imageHasil.GetPixel(j, i).R;
sum += Math.Pow(pxAsli - pxHasil, 2);
}
}
MSE = sum / (imageAsli.Height * imageAsli.Width);
return MSE;
}
private double hitungPSNR(double MSE)
{
double PSNR = Math.Log10(Math.Pow(255, 2) / MSE);
return PSNR;
}
private void btnHitung_Click(object sender, EventArgs e)
{
double MSE = hitungMSE((Bitmap)imgAwal.Image, (Bitmap)imgHasil.Image);
double PSNR = hitungPSNR(MSE);
txtMSE.Text = Math.Round(Convert.ToDecimal(MSE.ToString()), 4).ToString();
txtPSNR.Text = Math.Round(Convert.ToDecimal(PSNR.ToString()), 4).ToString();
}
private void helpToolStripMenuItem_Click(object sender, EventArgs e)
{
Form3 frm3 = new Form3();
this.Dispose();
frm3.ShowDialog();
}
private void hasilToolStripMenuItem_Click(object sender, EventArgs e)
{
Form4 frm4 = new Form4();
this.Dispose();
frm4.ShowDialog();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
if (imgNoise.Image != null)
{
SaveFileDialog simpan = new SaveFileDialog();
simpan.Filter = "Image Files|*.bmp|Image Files|*.png";
simpan.FileName = "*.bmp";
if (simpan.ShowDialog() == DialogResult.OK)
{

Universitas Sumatera Utara

A-2
imgNoise.Image.Save(simpan.FileName,
System.Drawing.Imaging.ImageFormat.Bmp);
string filename = simpan.FileName.Substring(0, simpan.FileName.Length
- 4) + ".txt";
FileStream fstream = new FileStream(filename, FileMode.OpenOrCreate);
StreamWriter sw = new StreamWriter(fstream);
SeekOrigin seekorigin = new SeekOrigin();
sw.BaseStream.Seek(0, seekorigin);
sw.WriteLine(textBox1.Text + "/" + JenisNoise);
sw.Flush();
sw.Close();
MessageBox.Show("Image Noise Telah Disimpan", "Simpan",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
{
MessageBox.Show("Image Noise Tidak Ada");
}
}
private void imgNoise_Click(object sender, EventArgs e)
{
}
}
}

Kode Program Menu Hasil:
using
using
using
using
using
using
using
using
using

System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Linq;
System.Text;
System.IO;
System.Windows.Forms;

namespace High_Boost_Filtering
{
public partial class Form4 : Form
{
public Form4()
{
InitializeComponent();
}
private void homeToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Dispose();
Form1 frm1 = new Form1();
frm1.ShowDialog();
}

Universitas Sumatera Utara

A-2

private void pengujianToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Dispose();
Form2 frm2 = new Form2();
frm2.ShowDialog();
}
private void helpToolStripMenuItem_Click(object sender, EventArgs e)
{
Form3 frm3 = new Form3();
this.Dispose();
frm3.ShowDialog();
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Keluar Aplilkasi?", "Keluar", MessageBoxButtons.YesNo,
MessageBoxIcon.Question) == DialogResult.Yes)
Application.Exit();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Image Files(*.bmp)|*.bmp|Image Files(*.jpg)|*.jpg|All
Files(*.*)|*.*";
if (open.ShowDialog() == DialogResult.OK)
{
Bitmap bit = new Bitmap(open.FileName);
imgAwal.Image = bit;
long fileSize = new System.IO.FileInfo(open.FileName).Length;
if (fileSize / 1000 < 1)
{
size.Text = fileSize.ToString();
labelsize.Text = "Byte";
}
else
{
size.Text = (fileSize / 1000).ToString();
labelsize.Text = "Kb";
}
string pixel = "";
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
pixel += bit.GetPixel(j, i).R + " ";
}
pixel += "\r\n";
}
txtAwal.Text = pixel;
// location.Text = Path.GetFullPath(open.FileName);
filename.Text = Path.GetFileName(open.FileName);
// height.Text = bit.Height.ToString();
// width.Text = bit.Width.ToString();

Universitas Sumatera Utara

A-2
}
}
catch (Exception)
{
throw new ApplicationException("Failed loading image");
}
}
private void groupBox1_Enter(object sender, EventArgs e)
{
}
private void button3_Click(object sender, EventArgs e)
{
try
{
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Image Files(*.bmp)|*.bmp|Image Files(*.jpg)|*.jpg|All
Files(*.*)|*.*";
if (open.ShowDialog() == DialogResult.OK)
{
Bitmap bit = new Bitmap(open.FileName);
imgNoise.Image = bit;
string nama = open.FileName.Substring(0, open.FileName.Length - 4) +
".txt";
FileStream fstream = new FileStream(nama, FileMode.Open,
FileAccess.ReadWrite);
StreamReader sreader = new StreamReader(fstream);
sreader.BaseStream.Seek(0, SeekOrigin.Begin);
string Keterangan = sreader.ReadToEnd();
sreader.Close();
string[] info = new string[2];
info = Keterangan.Split('/');
textBox1.Text = info[0];
textBox2.Text = info[1];
string pixel = "";
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
pixel += bit.GetPixel(j, i).R + " ";
}
pixel += "\r\n";
}
txtNoise.Text = pixel;
}
}
catch (Exception)
{
throw new ApplicationException("Failed loading image");
}
}
private void button2_Click(object sender, EventArgs e)
{
try

Universitas Sumatera Utara

A-2
{
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Image Files(*.bmp)|*.bmp|Image Files(*.jpg)|*.jpg|All
Files(*.*)|*.*";
if (open.ShowDialog() == DialogResult.OK)
{
Bitmap bit = new Bitmap(open.FileName);
imgHasil.Image = bit;
string nama = open.FileName.Substring(0, open.FileName.Length - 4) +
".txt";
FileStream fstream = new FileStream(nama, FileMode.Open,
FileAccess.ReadWrite);
StreamReader sreader = new StreamReader(fstream);
sreader.BaseStream.Seek(0, SeekOrigin.Begin);
string Keterangan = sreader.ReadToEnd();
sreader.Close();
string[] info = new string[2];
info = Keterangan.Split('/');
textBox3.Text = info[0];
textBox4.Text = info[1];
string pixel = "";
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
pixel += bit.GetPixel(j, i).R + " ";
}
pixel += "\r\n";
}
txtHasil.Text = pixel;
}
}
catch (Exception)
{
throw new ApplicationException("Failed loading image");
}
}
private void reset_Click(object sender, EventArgs e)
{
imgAwal.Image = null;
imgHasil.Image = null;
imgNoise.Image = null;
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
filename.Text = "";
size.Text = "";
txtAwal.Text = "";
txtHasil.Text = "";
txtNoise.Text = "";
}
private void helpToolStripMenuItem1_Click(object sender, EventArgs e)
{

Universitas Sumatera Utara

A-2
this.Dispose();
Form3 frm3 = new Form3();
frm3.ShowDialog();
}

}
}

Kode Program Menu Help:
using
using
using
using
using
using
using
using

System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Linq;
System.Text;
System.Windows.Forms;

namespace High_Boost_Filtering
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
private void homeToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Dispose();
Form1 frm1 = new Form1();
frm1.ShowDialog();
}
private void pengujianToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Dispose();
Form2 frm2 = new Form2();
frm2.ShowDialog();
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Keluar Aplilkasi?", "Keluar", MessageBoxButtons.YesNo,
MessageBoxIcon.Question) == DialogResult.Yes)
Application.Exit();
}
private void hasilToolStripMenuItem_Click(object sender, EventArgs e)
{
Form4 frm4 = new Form4();
this.Dispose();
frm4.ShowDialog();
}

Universitas Sumatera Utara

B-1

DAFTAR RIWAYAT HIDUP

DATA PRIBADI

Nama Lengkap

: Azhar Indra Rifangi

Jenis Kelamin

: Laki-laki

Tempat, Tanggal Lahir

: Medan,21 Januari 1992

Alamat

: Jl.Jangka no.28

Agama

: Islam

E-mail

: azharrifangi@gmail.com

Pendidikan Terakhir

: Universitas Sumatera Utara Medan, Fakultas Ilmu
Komputer dan Teknologi Informasi Jurusan S1 Ilmu
Komputer

PENDIDIKAN FORMAL
2009 – 2014

: S1 Ilmu Komputer Universitas Sumatera Utara, Medan

2006 – 2009

: SMA Negeri 2 Medan

2003 – 2006

: SMP Harapan 1 Medan

1997 – 2003

: SD Harapan 1 Medan

PENGALAMAN ORGANISASI DAN KEGIATAN ILMIAH
 Anggota Departemen Hubungan Masyarakat Ikatan Mahasiswa S1 Ilmu Komputer
(IMILKOM), 2010-2012

 Ketua Pemerintahan Mahasiswa/ Badan Eksekutif Mahasiswa

Fakultas Ilmu

Komputer dan Teknologi Informasi ,2012-2014

Universitas Sumatera Utara