• Tidak ada hasil yang ditemukan

Implementasi High-Boost Filtering Untuk Memperbaiki Kualitas Citra Digital

N/A
N/A
Protected

Academic year: 2017

Membagikan "Implementasi High-Boost Filtering Untuk Memperbaiki Kualitas Citra Digital"

Copied!
14
0
0

Teks penuh

(1)

Listing Program

Kode Program Menu Home:

using System;

using System.Collections.Generic; using System.ComponentModel; using System.Data;

using System.Drawing; using System.Linq; using System.Text;

using System.Windows.Forms; 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(); }

(2)

Kode Program Menu Pengujian:

using System;

using System.Collections.Generic; using System.ComponentModel; using System.Data;

using System.Drawing;

using System.Drawing.Imaging; using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Runtime.InteropServices; using System.Diagnostics;

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

(3)

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

{

image.SetPixel(pixelx, pixely, Color.FromArgb(255, 0, 0, 0)); }

else {

image.SetPixel(pixelx, pixely, Color.FromArgb(255, 255, 255, 255)); }

JenisNoise = "Salt & Pepper Noise"; }

return image;

}

private double getGaussianNumber() {

Random rnd = new Random(); double v1, v2, persegi; if (bitdeviasi)

{

bitdeviasi = false; return Deviasi * 1; }

do {

v1 = 2 * rnd.NextDouble() - 1; v2 = 2 * rnd.NextDouble() - 1; persegi = v1 * v1 + v2 * v2;

}

(4)

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

(5)

}

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", "High-Boost Filtering", MessageBoxButtons.OK, MessageBoxIcon.Warning);

textBox1.Focus();

rbtSalt.Checked = false; }

} }

(6)

if (rbtGaussian.Checked) {

if (textBox1.Text != "") {

imgNoise.Image = null;

imgNoise.Image = getGaussianNoise(imageAwal);

MessageBox.Show("Gaussian Noise telah ditambahkan ke Image", "High-Boost Filtering", MessageBoxButtons.OK, MessageBoxIcon.Information);

} else {

MessageBox.Show("Masukkan probabilitas Noise terlebih dahulu", "High-Boost 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);

(7)

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

(8)

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

(9)

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

using System.Collections.Generic; using System.ComponentModel; using System.Data;

using System.Drawing; using System.Linq; using System.Text; using System.IO;

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

(10)

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

(11)

} }

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

(12)

{

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

}

(13)

this.Dispose();

Form3 frm3 = new Form3(); frm3.ShowDialog();

}

} }

Kode Program Menu Help:

using System;

using System.Collections.Generic; using System.ComponentModel; using System.Data;

using System.Drawing; using System.Linq; using System.Text;

using System.Windows.Forms; 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();

(14)

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

: [email protected]

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

Referensi

Dokumen terkait

Rumusan masalah pada penelitian ini adalah bagaimana merestorasi citra menggunakan metode filtering pada domain frekuensi, kemudian bagaimana perbandingan hasil

melakukan proses filtering menggunakan Arithmetic Mean Filter dan peningkatan kualitas citra menggunakan High Boost Filtering dengan membandingkan nilai PSNR dan

Berdasarkan tabel 4.13 dan tabel 4.14 dapat disimpulkan bahwa tingkat ketajaman Gaussian adalah tingkat ketajaman yang lebih baik untuk Image Smoothing dan citra berformat

Puji dan syukur penulis panjatkan kepada Tuhan Yang Maha Esa atas berkat dan karunia-Nya sehingga penulis dapat menyelesaikan skripsi ini, sebagai syarat untuk

Nama Lengkap : NURUL ULFAH PRIMADINI Nama Panggilan :

Jenis metode yang digunakan untuk peningkatan kualitas citra (image enhacement) pada bagian spatial filtering adalah low pass filter dan high pass filter.. Sedangkan

seperti halnya teori konvolusi, juga bisa mendapatkan hasil yang sama dalam domain frekuensi dengan perkalian antara F(u,v) dengan H(u,v), transformasi fourier filter. Biasanya

Puji dan syukur penulispanjatkankehadirat Tuhan Yang Maha Kuasa atas segala berkat dan kasih karunia-Nya sehingga penulis dapat menyelesaikan penyusunan skripsi ini,