Implementasi dan Perbandingan Metode Wiener Filter dan Adaptive Median Filter Untuk Memperbaiki Kualitas Citra Digital

(1)

LISTING PROGRAM

1. Kode Program MainForm using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; namespace skrips { /// <summary>

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

public partial class MainForm : Form {

public MainForm() {

//

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

//

InitializeComponent();

//

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

// }

void Label1Click(object sender, EventArgs e) {

}

void TestingToolStripMenuItemClick(object sender, EventArgs e)

{

Testing b1 = new Testing(); b1.ShowDialog();

}

void ExitToolStripMenuItemClick(object sender, EventArgs e) {

if (MessageBox.Show("Apakah Anda ingin

keluar?","Keluar", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)


(2)

Application.Exit(); }

void HelpToolStripMenuItemClick(object sender, EventArgs e) {

Help form3 = new Help(); form3.ShowDialog(); }

2. Kode Program Form Testing using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Windows.Forms; namespace skrips { /// <summary>

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

/// public partial class Testing : Form {

public Testing() {

//

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

//

InitializeComponent();

//

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

// }

void OpenClick(object sender, EventArgs e) {

OpenFileDialog open = new OpenFileDialog(); open.Filter = "Image File(.*bmp)|*.bmp";

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


(3)

Bitmap bit = new Bitmap(open.FileName); if (bit.Width == bit.Height)

{

gbrAsli.SizeMode = PictureBoxSizeMode.StretchImage; gbrAsli.ImageLocation = open.FileName;

textBox11.Text=bit.Width.ToString(); textBox12.Text=bit.Height.ToString();

textBox10.Text=open.SafeFileName.ToString(); ukuran.Text = (fileSize / 1000).ToString();

} else{

MessageBox.Show("Panjang dan lebar citra harus sama!", "Gagal", MessageBoxButtons.OK, MessageBoxIcon.Error); }

} }

void BalikClick(object sender, EventArgs e) {

this.Dispose(); }

double hitungMSE(Bitmap imageAsli, Bitmap imageHasil) {

double sum = 0;

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 = Math.Floor(sum /(imageAsli.Height*imageAsli.Width)); return MSE;

}

double hitungPSNR(double MSE) {

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

}

void Simpan1Click(object sender, EventArgs e) {

if(gbrHasil.Image != null) {

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


(4)

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

gbrHasil.Image.Save(save.FileName, System.Drawin g.Imaging.ImageFormat.Bmp);

MessageBox.Show("Citra berhasil

disimpan", "save", MessageBoxButtons.OK, MessageBoxIcon.Information); }

else {

MessageBox.Show("Citra gagal tersimpan"); }

} }

void Simpan2Click(object sender, EventArgs e) {

if(gbrHasil2.Image != null) {

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

save.FileName = "*.bmp";

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

gbrHasil2.Image.Save(save.FileName, System.Drawing.Ima ging.ImageFormat.Bmp);

MessageBox.Show ("Citra berhasil disimpan", "save", MessageBoxButtons.OK, MessageBoxIcon.Information);

} else {

MessageBox.Show("Citra gagal tersimpan"); }

} }

void Button3Click(object sender, EventArgs e) {

if(gbrHasil3.Image != null) {

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

save.FileName = "*.bmp";

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

gbrHasil3.Image.Save(save.FileName, System.Drawing.Imagi ng.ImageFormat.Bmp);

MessageBox.Show("Citra berhasil disimpan", "save", MessageBoxButtons.OK, MessageBoxIcon.Information); }

else {


(5)

MessageBox.Show("Citra gagal tersimpan"); }

} }

void WienerClick(object sender, EventArgs e) {

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

FFTN a = new FFTN(gbrAsli.Image); // kelas wiener filter a.FFTExecute();

gbrHasil.Image = a.InverseFFT(); //transformasi balik wiener filter

gbrHasil.SizeMode = PictureBoxSizeMode.StretchImage; watch.Stop();

textBox3.Text = Math.Round(Convert.ToDecimal (watch.ElapsedMilliseconds)/1000,4).ToString();

textBox1.Text=hitungMSE((Bitmap)gbrAsli.Image,(Bitmap)gbrHasil. Image).ToString();

textBox2.Text=hitungPSNR(Convert.ToDouble(textBox1.Text)).ToStr ing();

MessageBox.Show("Proses Filtering selesai. Tekan tombol Simpan untuk menyimpan citra", "Berhasil", MessageBoxButtons.OK,

MessageBoxIcon.Information); }

void Button1Click(object sender, EventArgs e) // tombol AMF {

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

gbrHasil2.Image= AdaptiveMedianFilter((Bitmap)gbrAsli.Image,3); gbrHasil2.SizeMode = PictureBoxSizeMode.StretchImage;

watch.Stop();

textBox6.Text = Math.Round(Convert.ToDecimal (watch.ElapsedMilliseconds)/1000,4).ToString();

textBox4.Text=hitungMSE((Bitmap)gbrAsli.Image,(Bitmap)gbrHasil2. Image).ToString();

textBox5.Text=hitungPSNR(Convert.ToDouble(textBox4.Text)).ToStri ng();

MessageBox.Show("Proses Filtering selesai. Tekan tombol Simpan untuk menyimpan

citra", "Berhasil", MessageBoxButtons.OK, MessageBoxIcon.Information) ;

}

void Button2Click(object sender, EventArgs e)// tombol Wiener+AMF {

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

gbrHasil3.Image=AdaptiveMedianFilter((Bitmap)gbrHasil.Image,3); gbrHasil3.SizeMode = PictureBoxSizeMode.StretchImage;


(6)

textBox7.Text = (Math.Round(Convert.ToDecimal (watch.ElapsedMilliseconds)/1000,4)+decimal.Parse(textBox3.Text)).ToS tring(); textBox8.Text=hitungMSE((Bitmap)gbrAsli.Image,(Bitmap)gbrHasil3 .Image).ToString(); textBox9.Text=hitungPSNR(Convert.ToDouble(textBox4.Text)).ToStr ing();

MessageBox.Show("Proses Filtering selesai. Tekan tombol Simpan untuk menyimpan

citra", "Berhasil", MessageBoxButtons.OK, MessageBoxIcon.Information) ;

}

Bitmap AdaptiveMedianFilter(Bitmap sourceImage, int size) {

Bitmap bmp;

Bitmap asli = (Bitmap)sourceImage;

bmp = new Bitmap(asli.Width,asli.Height);

List<List<int>>r = red(sourceImage, size); // array utk menampung nilai red

List<List<int>>b = blue(sourceImage, size); // array utk menampung nilai blue

List<List<int>>g = green(sourceImage, size); // array untuk menampung nilai green

for (int i = 0;i < sourceImage.Width;i++){ for (int j =0;j < sourceImage.Height;j++){

bmp.SetPixel(i, j, Color.FromArgb(r[i][j],g[i][j ],b[i][j])); // menampung nilai pixel rgb

} }

return bmp; }

List<List<int>> red(Image sourceImage, int kernelsize) {

Bitmap asli = (Bitmap)sourceImage; int batas = kernelsize/2;

List<int> r = new List<int>();

List<List<int>> outr = new List<List<int>>(); Color d;

for (int i = 0;i < sourceImage.Width;i++){ List<int> nilai = new List<int>();

for (int j = 0;j<sourceImage.Height;j++){

while(true){

for (int x = -batas;x <= batas;x++){ for (int y = -batas;y <= batas;y++){ int x1 = i+x;

int x2 = y+j;

x1 = Math.Abs(x1) >= sourceImage.Width ? sourceImage.Width2(Math.Abs(x1)


(7)

sourceImage.Width): Math.Abs(x1);//ini pengkondisian di mana jendela filter tidak melewati batas dari ukuran image

x2 = Math.Abs(x2) >= sourceImage.Height ? sourceImage.Height2(Math.Abs(x2) sourceImage.Height) : Math.Abs(x2);

d = asli.GetPixel(x1, x2); r.Add(d.R);

} }

r.Sort();//pengurutan

int imedian = r.Count/2;//indeks median

int a1 = r[imedian] - r[0];//Level A --> Zmed - Zmin

int a2 = r[imedian] - r[r.Count-1]; // Zmed - Zmax

if (a1 > 0 && a2 < 0) //Jika memenuhi ke level B

{

int b1 = asli.GetPixel(i, j).R r[0];//Level B --> Zxy - Zmin

int b2 = asli.GetPixel(i, j).R r[r.Count-1]; // Zxy - Zmax

if (b1 > 0 && b2 < 0)

nilai.Add(asli.GetPixel(i, j).R);//ou tput Zxy

else

nilai.Add(r[imedian]);//output Zmed r.Clear();

batas = kernelsize/2; break;

}

else if (batas < kernelsize/2 + 2)//jika tidak memenuhi persyaratan, ke level B

{

batas += 1;//menambah batas jendela filter menjadi 5

r.Clear();

continue;//ulangi level A }

else {

nilai.Add(asli.GetPixel(i, j).R); // ditampung nilai hasilnya

r.Clear();

batas = kernelsize/2; break; } } } outr.Add(nilai); } return outr;


(8)

}

List<List<int>> green(Image sourceImage, int kernelsize) {

Bitmap asli = (Bitmap)sourceImage; int batas = kernelsize/2;

List<int> r = new List<int>();

List<List<int>> outr = new List<List<int>>(); Color d;

for (int i = 0;i < sourceImage.Width;i++){ List<int> nilai = new List<int>();

for (int j = 0;j<sourceImage.Height;j++){

while(true){

for (int x = -batas;x <= batas;x++){ for (int y = -batas;y <= batas;y++){ int x1 = i+x;

int x2 = y+j;

x1 = Math.Abs(x1) >= sourceImage.Width ? sourceImage.Width2(Math.Abs(x1) sourceImage.Width): Math.Abs(x1);

x2 = Math.Abs(x2) >= sourceImage.Height ? sourceImage.Height2(Math.Abs(x2) sourceImage.Height) : Math.Abs(x2);

d = asli.GetPixel(x1, x2); r.Add(d.G);

} }

r.Sort();

int imedian = r.Count/2; int a1 = r[imedian] - r[0];

int a2 = r[imedian] - r[r.Count-1]; if (a1 > 0 && a2 < 0){

int b1 = asli.GetPixel(i, j).G - r[0]; int b2 = asli.GetPixel(i, j).G

r[r.Count-1];

if (b1 > 0 && b2 < 0)

nilai.Add(asli.GetPixel(i, j).G); else

nilai.Add(r[imedian]); r.Clear();

batas = kernelsize/2; break;

}

else if (batas < kernelsize/2 + 2){ batas += 1;

r.Clear();

continue; }


(9)

nilai.Add(asli.GetPixel(i, j).G); r.Clear();

batas = kernelsize/2; break; } } } outr.Add(nilai); //nilai.Clear(); } return outr; }

List<List<int>> blue(Image sourceImage, int kernelsize) {

Bitmap asli = (Bitmap)sourceImage; int batas = kernelsize/2;

List<int> r = new List<int>();

List<List<int>> outr = new List<List<int>>(); Color d;

for (int i = 0;i < sourceImage.Width;i++){ List<int> nilai = new List<int>();

for (int j = 0;j<sourceImage.Height;j++){ while(true){

for (int x = -batas;x <= batas;x++){ for (int y = -batas;y <= batas;y++){ int x1 = i+x;

int x2 = y+j;

x1 = Math.Abs(x1) >= sourceImage.Width ? sourceImage.Width2(Math.Abs(x1) sourceImage.Width): Math.Abs(x1);

x2 = Math.Abs(x2) >= sourceImage.Height ? sourceImage.Height2(Math.Abs(x2) sourceImage.Height) : Math.Abs(x2);

d = asli.GetPixel(x1, x2); r.Add(d.B);

} }

r.Sort();

int imedian = r.Count/2; int a1 = r[imedian] - r[0];

int a2 = r[imedian] - r[r.Count-1]; if (a1 > 0 && a2 < 0){

int b1 = asli.GetPixel(i, j).B - r[0]; int b2 = asli.GetPixel(i, j).B

r[r.Count-1];

if (b1 > 0 && b2 < 0)

nilai.Add(asli.GetPixel(i, j).B); else


(10)

r.Clear();

batas = kernelsize/2; break;

}

else if (batas < kernelsize/2 + 2){ batas += 1;

r.Clear(); continue; } else{ nilai.Add(asli.GetPixel(i, j).B); r.Clear();

batas = kernelsize/2; break; } } } outr.Add(nilai); } return outr; }

void Button4Click(object sender, EventArgs e) // button reset {

gbrAsli.Image = null; gbrHasil.Image = null; gbrHasil2.Image = null; gbrHasil3.Image = null; textBox1.Text = null; textBox2.Text = null; textBox3.Text = null; textBox4.Text = null; textBox5.Text = null; textBox6.Text = null; textBox7.Text = null; textBox8.Text = null; textBox9.Text = null; textBox10.Text = null; textBox11.Text = null; textBox12.Text = null; ukuran.Text = null; }

3. Kode Program Class FFTN (Wiener Filter) : using System; using System.Drawing; using System.Windows.Forms; namespace skrips { /// <summary>


(11)

/// Description of FFT. /// </summary>

public class FFTN {

public struct Complex{ public double real; public double imag; }

Bitmap gbrhasil;

Complex [][] Rgambar, Ggambar, Bgambar, shiftR, shiftG, shift B;

int nx,ny; int [,] R,G,B;

public FFTN(Image sourceImage) {

gbrhasil

= new Bitmap(sourceImage.Width,sourceImage.Height); nx = sourceImage.Width;

ny = sourceImage.Height;

Rgambar = new Complex[sourceImage.Width][]; Ggambar = new Complex[sourceImage.Width][]; Bgambar = new Complex[sourceImage.Width][]; shiftR = new Complex[sourceImage.Width][]; shiftG = new Complex[sourceImage.Width][]; shiftB = new Complex[sourceImage.Width][]; for (int i = 0;i < sourceImage.Width;i++){

Rgambar[i] = new Complex[sourceImage.Height]; Ggambar[i] = new Complex[sourceImage.Height]; Bgambar[i] = new Complex[sourceImage.Height]; shiftR[i] = new Complex[sourceImage.Height]; shiftG[i] = new Complex[sourceImage.Height]; shiftB[i] = new Complex[sourceImage.Height]; for (int j = 0;j < sourceImage.Height;j++){ Rgambar[i][j].real

= ((Bitmap)sourceImage).GetPixel(i, j).R; Ggambar[i][j].real = ((Bitmap)sourceImage).GetPixel(i, j).G; Bgambar[i][j].real = ((Bitmap)sourceImage).GetPixel(i, j).B; Rgambar[i][j].imag = 0; Ggambar[i][j].imag = 0; Bgambar[i][j].imag = 0; }

} }

public void FFTExecute(){ ForwardFFT(Rgambar); ForwardFFT(Ggambar); ForwardFFT(Bgambar); FFTShift();


(12)

R = Plot(shiftR); G = Plot(shiftG); B = Plot(shiftB); RemoveFFTShift(); Hitung();

}

void ForwardFFT(Complex [][] gambar){ //Transform the Rows

double [] real = new double[gambar.Length]; double [] imag = new double[gambar.Length]; for (int i=0; i<gambar[0].Length; i++){ for (int j = 0; j<gambar.Length; j++){ real[j] = gambar[j][i].real;

imag[j] = gambar[j][i].imag; }

FFT1D(real,imag);//baris for (int j = 0; j<nx; j++){ gambar[j][i].real = real[j]; gambar[j][i].imag = imag[j]; }

}

for (int i = 0; i<10; i++)

real = new double[gambar[0].Length]; imag = new double[gambar[0].Length]; for (int i = 0; i<gambar.Length; i++){

for (int j = 0; j<gambar[0].Length; j++){ real[j] = gambar[i][j].real;

imag[j] = gambar[i][j].imag; }

FFT1D(real,imag);//kolom for (int j = 0; j<ny; j++){ gambar[i][j].real = real[j]; gambar[i][j].imag = imag[j]; }

} }

void FFT1D(double [] real, double [] imag){ int length = real.Length,n;

double Theta = 3.14 / length; double real2 = Math.Cos(Theta); double imag2 = Math.Sin(Theta); int k = length;

double temp; while (k > 1){ n = k; k >>= 1; temp = real2;


(13)

imag2 = (imag2*temp) + (temp*imag2); double real1 = 1;

double imag1 = 0;

for (int l = 0;l < k;l++){

for (int a = l;a < length; a+=n){ int b = a + k;

double real3 = real[a] - real[b]; double imag3 = imag[a] - imag[b]; real[a] += real[b];

imag[a] += imag[b];

real[b] = (real3 * real1) - (imag3 * imag1); imag[b] = (imag3 * real1) + (real3 * imag1); }

temp = real1;

real1 = (real1 * real2) - (imag1 * imag2); imag1 = (imag1 * real2) + (temp * imag2); }

}

int m = (int)(Math.Log10(length)/Math.Log10(2)); for (int a = 0;a < length; a++){

long b = a; b

= (((b & 0xaaaaaaaa) >> 1) | ((b & 0x55555555) << 1)); b

= (((b & 0xcccccccc) >> 2) | ((b & 0x33333333) << 2)); b

= (((b & 0xf0f0f0f0) >> 4) | ((b & 0x0f0f0f0f) << 4)); b

= (((b & 0xff00ff00) >> 8) | ((b & 0x00ff00ff) << 8)); b = ((b >> 16) | (b << 16)) >> (32 - m); if (b > a){

double real4 = real[a]; double imag4 = imag[a]; real[a] = real[b]; imag[a] = imag[b]; real[b] = real4; imag[b] = imag4; }

} }

public void FFTShift() {

int i, j;

for (i = 0; i <= (ny / 2) - 1; ++i) {

for (j = 0; j <= (nx / 2) - 1; ++j) {

shiftR[i + (nx / 2)][ j + (ny / 2)] = Rgambar[i][j];


(14)

Rgambar[i + (nx / 2)][ j + (ny / 2)];

shiftR[i + (nx / 2)][j] = Rgambar[i][ j + (ny / 2)];

shiftR[i][ j + (nx / 2)] = Rgambar[i + (nx /2)][ j];

shiftG[i + (nx / 2)][ j + (ny / 2)] = Ggambar[i][j];

shiftG[i][ j] = Ggambar[i + (nx / 2)][ j + (ny / 2)];

shiftG[i + (nx / 2)][ j] = Ggambar[i][ j + (ny / 2)];

shiftG[i][ j + (nx / 2)] = Ggambar[i + (nx /2)][ j];

shiftB[i + (nx / 2)][ j + (ny / 2)] = Bgambar[i][j];

shiftB[i][ j] = Bgambar[i + (nx / 2)][ j + (ny / 2)];

shiftB[i + (nx / 2)][ j] = Bgambar[i][ j + (ny / 2)];

shiftB[i][ j + (nx / 2)] = Bgambar[i + (nx /2)][ j];

} } return; }

public void RemoveFFTShift() {

int i, j;

for (i = 0; i <= (nx / 2) - 1; i++) for (j = 0; j <= (ny / 2) - 1; j++) {

Rgambar[i + (nx / 2)][ j + (ny / 2)] = shiftR[i][ j];

Rgambar[i][ j] = shiftR[i + (nx / 2)][ j + (ny / 2)];

Rgambar[i + (nx / 2)][ j] = shiftR[i][ j + (ny / 2)];

Rgambar[i][ j + (nx / 2)] = shiftR[i + (nx / 2)][ j];

Ggambar[i + (nx / 2)][ j + (ny / 2)] = shiftG[i][ j];

Ggambar[i][ j] = shiftG[i + (nx / 2)][ j + (ny / 2)];

Ggambar[i + (nx / 2)][ j] = shiftG[i][ j + (ny / 2)];

Ggambar[i][ j + (nx / 2)] = shiftG[i + (nx / 2)][ j];

Bgambar[i + (nx / 2)][ j + (ny / 2)] = shiftB[i][ j];

Bgambar[i][ j] = shiftB[i + (nx / 2)][ j + (ny / 2)];


(15)

Bgambar[i + (nx / 2)][ j] = shiftB[i][ j + (ny / 2)];

Bgambar[i][ j + (nx / 2)] = shiftB[i + (nx / 2)][ j];

}

}

public Bitmap InverseFFT(){ // proses dari inverse FFT int i, j;

Conjugate(Rgambar); Conjugate(Ggambar); Conjugate(Bgambar); ForwardFFT(Rgambar); ForwardFFT(Ggambar);

ForwardFFT(Bgambar); // FFT 1D Conjugate(Rgambar);

Conjugate(Ggambar); Conjugate(Bgambar); byte R,G,B;

for (i = 0; i <= nx - 1; i++) for (j = 0; j <= ny - 1; j++) {

R

= (byte)Math.Abs(Rgambar[i][j].real / (nx * ny)); G

= (byte)Math.Abs(Ggambar[i][j].real / (nx * ny)); B

= (byte)Math.Abs(Bgambar[i][j].real / (nx * ny));

gbrhasil.SetPixel (i, j, Color.FromArgb(R,G,B)); // tampung ke nilai piksel

}

return gbrhasil; }

void Conjugate(Complex [][] G){

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

for (int j = 0;j < G[i].Length;j++){ G[i][j].imag *= -1;

} } }

public int [,] Plot(Complex [][] shift){ Bitmap a = new Bitmap(nx, ny);

int i, j; float max;

float[,] FFTLog = new float[nx, ny]; float[,] FFTPhaseLog = new float[nx, ny];

float[,] FourierMagnitude = new float[nx, ny]; // bilangan real dalam Transformasi Fourier

float[,] FourierPhase


(16)

int[,] FFTNormalized = new int[nx, ny]; int[,] FFTPhaseNormalized = new int[nx, ny]; for (i = 0; i <nx; i++)

for (j = 0; j <ny; j++) {

FourierMagnitude[i, j] = (float)Math.Sqrt((sh ift[i][j].real * shift[i][j].real)+(shift[i][j].imag * shift[i][j].im ag));

FourierPhase[i, j] =(float) Math.Atan(shift[i ][j].real/shift[i][j].imag);

FFTLog[i, j] = (float)Math.Log(1 + FourierMag nitude[i, j]);

FFTPhaseLog[i, j] = (float)Math.Log(1 + Math.Abs( FourierPhase[i, j]));

}

max = FFTLog[0, 0]; for (i = 0; i <nx; i++) for (j = 0; j <ny; j++) {

if (FFTLog[i, j] > max) max = FFTLog[i, j]; }

for (i = 0; i <nx ; i++) for (j = 0; j <ny; j++) {

FFTLog[i, j] = FFTLog[i, j] / max; }

for (i = 0; i <nx; i++) for (j = 0; j <ny; j++) {

FFTNormalized[i, j] = (int)(2000*FFTLog[i, j]); }

return FFTNormalized; }

void Hitung(){ // perhitungan Wiener Filter for (int i = 0;i < nx; i++){

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

Rgambar[i][j].real=(Rgambar[i][j].real*R[i,j])/((R[i,j])+100); Ggambar[i][j].real=(Ggambar[i][j].real*G[i,j])/((G[i,j])+100); Bgambar[i][j].real=(Bgambar[i][j].real*B[i,j])/((B[i,j])+100); Rgambar[i][j].imag=(Rgambar[i][j].imag*R[i,j])/((R[i,j])+100); Ggambar[i][j].imag=(Ggambar[i][j].imag*G[i,j])/((G[i,j])+100); Bgambar[i][j].imag=(Bgambar[i][j].imag*B[i,j])/((B[i,j])+100); } } } } }


(17)

4. Kode Program Form Help using System;

using System.Drawing;

using System.Windows.Forms; namespace skrips

{

/// <summary>

/// Description of Help. /// </summary>

public partial class Help : Form {

public Help() {

//

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

//

InitializeComponent();

//

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

// }

void Label1Click(object sender, EventArgs e) {

}

void BalikClick(object sender, EventArgs e) {

this.Dispose(); }

} }


(18)

DAFTAR RIWAYAT HIDUP

DATA PRIBADI

Nama Lengkap : Siti Aisyah Jenis Kelamin : Perempuan

Alamat : Jl. A.R Hakim Gg. Nangka no.7, Medan

E-mail : aya.aisyah04@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 2008 – 2011 : MAN 2 Model Medan

2005 – 2008 : MTs Swasta Al-Ulum Medan 1999 – 2005 : SD Muhammadiyah 07 Medan

PENGALAMAN ORGANISASI DAN KEGIATAN ILMIAH

 Anggota Syiar UKMI Al-Khuwarizmi Fasilkom-TI 2012-2013

 Sekretaris LSO-IT UKMI Al-Khuwarizmi Fasilkom-TI 2013-2014

 Anggota PSDM PEMA USU 2014

 Sekretaris Umum KAM Rabbani Fasilkom-TI USU 2014

 Praktek Kerja Lapangan di Kantor Gubsu Juli-Agustus 2014

 Anggota Kajian Kontemporer UKMI Ad-Dakwah USU 2015

 Anggota Komisi A “Isu dan Media” Puskomda SUMUT 2015

KEAHLIAN

 Bahasa Indonesia, Bahasa Inggris


(19)

DAFTAR PUSTAKA

Ahmad, Usman. 2005. Pengolahan Citra Digital dan Pemrogramannya. Graha Ilmu: Yogyakarta.

Al-amri, S.S., Kalyankar, N.V., & S.D, Khamitkar. 2010. A comparative study of removal noise from remote sensing image. IJCSI International Journal of Computer Science Issues 7(1): 32-34.

Ambule, V., Ghute, M., Kamble, K. & Katre S. 2013. Adaptive Median Filter for Image Enhancement. IJESIT International Journal of Engineering Science and Innovative Technology 2(1): 318-322.

Fatmawati, Diana. 2010. Implementasi metode peregangan kontras (contrast stretching) untuk memperbaiki kualitas citra. Skripsi. Universitas Sumatera Utara.

Ibrahim, H., Kong, Nicholas S.P. & Ng, Theam Foo. 2008. Simple adaptive median filter for the removal of impulse noise from highly corrupted images. IEEE Transactions on Consumer Electronics 54(4): 1920-1922.

Juneja, Mamta & Mohana, Rajni. 2009. An Improved Adaptive Median Filtering Method for Impulse Noise Detection. International Journal of Recent Trends in Engineering 1(1): 274-278.

Kadir, Abdul. 2013. Dasar Pengolahan Citra dengan Delphi. Penerbit Andi: Yogyakarta.

Kadir, Abdul & Susanto, Adhi. 2013. Teori dan Aplikasi Pengolahan Citra. Penerbit Andi: Yogyakarta.

Kumar, S., Kumar, P., Gupta, M. & Nagawat, A.K. 2010. Performance comparison of median and wiener filter in image de-noising. International Journal of Computer Applications (0975 – 8887) 12(4): 27-31.

Listiyani, Eva. 2013. Implementasi adaptive median filter sebagai reduksi noise pada citra digital. Skripsi. Sekolah Tinggi Manajemen Informatika dan Teknik Komputer Surabaya.

McAndrew, A. 2004. An Introduction to Digital Image Processing with MATLAB. School of Computer Science and Mathematics, Victoria University of Technology.


(20)

Munir, Rinaldi. 2004. Pengolahan Citra Digital dengan Pendekatan Algoritmik. Informatika: Bandung.

Murinto, E. & W. Risnadi, S. 2007. Analisis perbandingan metode intensity filtering dengan metode frequency filtering sebagai reduksi noise pada citra digital. Seminar Nasional Aplikasi Teknologi Informasi 2007 (SNATI 2007). ISSN : 1907-5022.

Nalwan, Agustinus. 2000. Pengolahan Gambar Secara Digital. P.T Elex Media Komputindo: Jakarta.

Prasetyo, E. 2011. Pengolahan Citra Digital dan Aplikasinya Menggunakan Matlab. ANDI: Yogyakarta.

Saselah, G., Weku, W. & Latumakulita, L. 2013. Perbaikan citra digital dengan menggunakan filtering technique dan similarity measurement. JdC 2(2): 4-5. Shinde, B., Mhaske, D. & Dani, A.R. 2012. Study of noise detection and noise

removal techniques in medical images. I.J. Image, Graphics and Signal Processing 2: 51-60.

Sholihin, R.A., Purwoto, B. H. 2013. Perbaikan citra dengan menggunakan median filter dan metode histogram equalization. Jurnal Emitor ISSN 1411-8890 14(02): 40-42.

Sulistyo, W. Yos, Filipus, F.Y. 2009. Analisis penerapan metode median filter untuk mengurangi noise pada citra digital. Konferensi Nasional Sistem dan Informatika 2009 (KNS&I), pp. 9-35.

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

Thivakaran, T. K. & Chandrasekaran, R. M. 2010. Nonlinear Filter Based Image Denoising Using AMF Approach. International Journal of Computer Science and Information Security 7(2): 224-227.

Whitten, J.L. & Bentley, L.D. 2004. System Analysis and Design Methods. 6th Edition. McGraw-Hill/Irwin: New York.

Yuwono, Bambang. 2010. Image smoothing menggunakan mean filtering, median filtering, modus filtering dan gaussian filtering. Skripsi. Universitas Pembangunan Nasional Yogyakarta.


(21)

BAB 3

ANALISIS DAN PERANCANGAN SISTEM

3.1. Analisis Sistem

Analisis sistem bertujuan untuk memecah sistem ke dalam komponen-komponen subsistem yang lebih kecil untuk mengetahui hubungan setiap komponen tersebut dalam mencapai tujuan (Whitten, 2004).

3.1.1 Analisis masalah

Masalah yang akan diselesaikan dengan menggunakan sistem ini adalah bagaimana melakukan perbaikan citra digital yang memiliki noise asli dan impulse noise menjadi citra yang lebih baik, dimana noise dihilangkan melalui suatu proses filtering yang dilakukan pada citra berformat .bmp. Metode yang digunakan untuk perbaikan citra pada penelitian ini adalah Wiener Filter, Adaptive Median Filter dan gabungan Wiener Filter dengan Adaptive Median Filter.

Analisis masalah ini secara spesifik diilustrasikan pada gambar 3.1 yang dirancang dalam bentuk Diagram Ishikawa.


(22)

Gambar 3.1. Diagram Ishikawa

Bagian penyebab suatu masalah (tulang ikan) terdiri atas 4 aspek yaitu Materials, Methode, Machine, dan Man. Materials merupakan aspek permasalahan yang bersumber dari bahan-bahan penyebab suatu masalah atau dampak. Method merupakan aspek permasalahan yang bersumber dari cara yang digunakan dalam mengatasi dampak. Man merupakan aspek permasalahan yang berasal dari sumber daya manusia. Dan machine merupakan aspek permasalahan yang berasal dari perangkat yang digunakan dalam proses penyebab suatu masalah. Pada sistem ini, permasalahan pada aspek materials adalah citra yang memiliki noise asli dan impulse noise, permasalahan pada aspek method adalah kesalahan dalam penerapan metode filtering, permasalahan pada aspek machine adalah kesalahan dalam penggunaan alat pada saat akuisisi citra, dan permasalahan pada aspek man adalah kesalahan pada saat pengambilan dan capturing gambar.

3.1.2 Analisis persyaratan

Analisis persyaratan merupakan proses melibatkan semua kegiatan yang dibutuhkan untuk membuat dan memelihara sistem. Analisis persyaratan terbagi menjadi dua bagian penting, yaitu persyaratan fungsional dan persyaratan non-fungsional.


(23)

3.1.2.1Persyaratan fungsional

Persyaratan fungsional merupakan jenis persyaratan yang berisi proses – proses apa saja yang nantinya akan dilakukan oleh sistem, persyaratan fungsional juga berisi informasi apa saja yang dihasilkan oleh sistem. Adapun persyaratan fungsional yang digunakan dalam sistem perbaikan citra yang berisi noise asli dan impulse noise pada citra digital dengan metode Wiener Filter, Adaptive Median Filter dan gabungan Wiener Filter dengan Adaptive Median Filter adalah sebagai berikut:

1. Citra yang digunakan adalah citra true color dengan format bitmap (*.bmp) dengan ukuran dimensi sama dengan 256x256 atau 512x512 piksel.

2. Sistem mengambil citra inputan berupa citra yang memiliki noise asli dan citra dengan impulse noise.

3. Sistem menggunakan konstanta bernilai 100 pada Wiener Filter dan window maksimum yang bernilai 5 pada Adaptive Median Filter.

4. Sistem melakukan perhitungan Mean Squared Error (MSE), Peak Signal to Noise Ratio (PSNR) dan running time sebagai parameter pembanding kualitas citra. 5. Citra hasil proses filtering disimpan dengan format file asalnya yaitu .bmp.

3.1.2.2 Persyaratan non-fungsional

Persyaratan non-fungsional merupakan persyaratan yang berisi property prilaku yang dimiliki suatu sistem. Adapun persyaratn non-fungsional pada sistem yang harus terpenuhi adalah sebagai berikut:

1. Performa (Performance)

Sistem yang dibangun harus dapat memperbaiki citra yang berisi noise asli dan impulse noise, dan menunjukkan proses perubahan noise pada citra hasil.

2. Informasi (Information)

Sistem yang akan dibangun harus mudah dimengerti oleh pengguna agar informasi yang dibutuhkan oleh user tersampaikan dengan baik.

3. Hemat biaya (Economy)

Sistem yang dibangun tidak membutuhkan perangkat tambahan untuk implementasinya sehingga tidak menambah biaya.

4. Dokumentasi

Sistem yang dibangun harus dapat menyimpan citra degan format *.bmp, serta sistem juga harus mampu menyimpan citra hasil filtering.


(24)

5. Manajemen kualitas

Sistem yang dibangun harus memiliki kualitas yang baik, dimana sistem dapat memperbaiki citra yang berisi noise asli dan impulse noise untuk menghasilkan citra yang lebih baik dari citra aslinya dan dapat menghitung nilai MSE dan PSNR secara tepat serta dapat menghitung nilai running time.

6. Kontrol

Sistem yang akan dibangun harus dapat menampilkan kotak dialog error ketika user salah dalam melakukan penginputan.

3.1.3 Analisis proses

Sistem ini dibuat menggunakan teknik filtering yaitu Wiener Filter, Adaptive Median Filter dan gabungan Wiener Filter dengan Adaptive Median Filter. Dimana noise yang digunakan merupakan noise asli yang bukan melalui proses bangkitan dari sistem, melainkan noise yang memang sudah terdapat dalam citra itu sendiri dan ditambah citra dengan impulse noise. Sistem ini hanya memiliki 1 proses saja, yaitu hanya proses filtering. Dimana pada proses Wiener Filter dilakukan pada kawasan frekuensi yang memerlukan transformasi Fourier untuk dapat mentransfer fungsi filter dari kawasan spasial ke kawasan frekuensi. Sedangkan pada proses Adaptive Median Filter dilakukan pada kawasan spasial. Untuk proses kombinasi Wiener Filter dengan Adaptive Median Filter diambil dari hasil pemrosesan filter Wiener Filter yang kemudian dilakukan lagi pemfilteran Adaptive Median Filter.

3.1.3.1Use Case diagram

Sebuah use-case diagram adalah sebuah urutan aksi yang dilakukan oleh sistem dan menghasilkan hasil nilai kepada seorang pengguna. Use-case menggambarkan sekumpulan interaksi antara pengguna dengan sistem. Use Case Diagram dari sistem yang akan dibangun dapat ditunjukkan pada gambar 3.2


(25)

<<extends>> Filter Citra Pilih citra Wiener Filter Adaptive Median Filter

Kombinasi Wiener Filter dan Adaptive

Median Filter

Simpan citra hasil

System

User

Hitung MSE, PSNR, dan running time

<<includes>>

<<includes>> <<includ

es>>

<<in clud

es>> <<includes>>

Gambar 3.2. Use Case Diagram

Diagram pada gambar 3.2 menjelaskan aksi yang dapat dilakukan oleh user. User membuka aplikasi Filtering, kemudian melakukan input citra awal yang berisikan noise asli atau impulse noise, setelah citra berhasil diinput user dapat melakukan langsung proses filtering menggunakan metode Wiener Filter, Adaptive Median Filter dan kombinasi Wiener Filter dengan Adaptive Median Filter. Setelah dilakukan filtering maka akan muncul citra hasil beserta parameternya (MSE, PSNR, dan running time). Kemudian, user dapat menyimpan citra hasil filtering. Berikut ini merupakan spesifikasi Use Case untuk Pilih Citra dapat dilihat pada Tabel 3.1.

Tabel 3.1. Spesifikasi Use Case Pilih Citra Use Case Pilih Citra

Actors User

Preconditions User memulai mengakses menu Filtering

Postconditions Sistem akan menampilkan citra awal yang telah dipilih dari direktori yang berformat *.bmp

Main Flow Of Event

User System Response

1. Mengeksekusi tombol ambil citra

2. Menampilkan pop-up window open untuk menampilkan lokasi


(26)

penyimpanan gambar 3. Pengguna memilih file

citra yang berformat *.bmp

4. Menampilkan file citra yang telah dipilih

Alternative Flow -

Berikut ini merupakan spesifikasi Use Case Filtering Citra dapat dilihat pada Tabel 3.2.

Tabel 3.2. Spesifikasi Use Case Filtering Citra Use Case Pilih Metode Filtering

Actors User

Preconditions User mengakses menu Filtering kemudian menekan tombol Filtering Citra

Postconditions Sistem menampilkan citra hasil filtering Main Flow Of Event

User System Response

1. Mengakses menu filtering

2. Menampilkan halaman beberapa metode filtering

3. Memilih satu per satu button filtering

4. Menampilkankan citra hasil filtering dari metode Wiener Filter, Adaptive Median Filter dan kombinasi Wiener Filter dengan Adaptive Median Filter beserta parameternya yakni MSE, PSNR, dan running time.

Alternative Flow -

Tabel 3.3. Spesifikasi Use Case Wiener Filter Use Case Wiener Filter

Actors User

Preconditions User mengakses menu filtering

Postconditions Sistem akan menampilkan citra hasil perbaikan dari Wiener Filter

Main Flow Of Event

User System Response

1. Memilih menu filtering

2. Menampilkan halaman pilihan metode filtering

3. Pilih metode Wiener Filter

4. Menampilkan halaman kerja citra hasil dengan Wiener Filter


(27)

5. Lakukan filtering 6. Menampilkan citra hasil perbaikan Wiener Filter

7. - 8. Menghitung dan menampilkan nilai

MSE, PSNR, dan running time Alternative Flow -

Berikut ini merupakan spesifikasi Use Case Adaptive Median Filter dapat dilihat pada Tabel 3.4.

Tabel 3.4. Spesifikasi Use Case Adaptive Median Filter Use Case Adaptive Median Filter

Actors User

Preconditions User mengakses menu filtering

Postconditions Sistem akan menampilkan citra hasil perbaikan dari Adaptive Median Filter

Main Flow Of Event

User System Response

1. Mengakses menu filtering

2. Menampilkan halaman pilihan metode filtering

3. Memilih metode Adaptive Median Filter

4. Menampilkankan halaman kerja proses Adaptive Median Filter

5. Lakukan filtering 6. Menampilkan citra hasil perbaikan Adaptive Median Filter

7. - 8. Menghitung dan menampilkan nilai

MSE, PSNR, dan running time Alternative Flow -

Berikut ini merupakan spesifikasi Use Case kombinasi Wiener Filter dan Adaptive Median Filter dapat dilihat pada Tabel 3.5.


(28)

Tabel 3.5. Spesifikasi Use Case kombinasi Wiener Filter dan Adaptive Median Filter Use Case Kombinasi Wiener Filter dan Adaptive Median Filter

Actors User

Preconditions User mengakses menu filtering

Postconditions Sistem akan menampilkan citra hasil perbaikan dari kombinasi Wiener Filter dan Adaptive Median Filter Main Flow Of Event

User System Response

1. Mengakses menu filtering

2. Menampilkan halaman pilihan metode filtering

3. Memilih metode kombinasi Wiener Filter dan Adaptive Median Filter

4. Menampilkankan halaman kerja proses kombinasi Wiener Filter dan Adaptive Median Filter

5. Lakukan filtering 6. Menampilkan citra hasil perbaikan Adaptive Median Filter

7. - 8. Menghitung dan menampilkan nilai

MSE, PSNR, dan running time Alternative Flow -

Berikut ini merupakan spesifikasi Use Case hitung MSE, PSNR dan running time dapat dilihat pada Tabel 3.6.

Tabel 3.6. Spesifikasi Use Case hitung MSE, PSNR dan running time Use Case Hitung MSE, PSNR dan running time

Actors User

Preconditions User memilih salah satu button filtering

Postconditions Sistem menampilkan nilai MSE, PSNR dan running time Main Flow Of Event

User System Response

1. Menekan tombol filtering

2. Memunculkan citra hasil perbaikan yang telah difiltering

3. - 4. Memunculkan nilai MSE, PSNR dan

running time Alternative Flow -


(29)

Berikut ini merupakan spesifikasi Use Case Simpan Citra dapat dilihat pada Tabel 3.7. Tabel 3.7. Spesifikasi Use Case Simpan Citra Hasil

Use Case Simpan Citra Hasil

Actors User

Preconditions User mengeksekusi button simpan citra

Postconditions Sistem akan menyimpan citra hasil yang telah difiltering ke direktori penyimpanan citra

Main Flow Of Event

User System Response

1. Mengeksekusi button simpan citra

2. Menampilkan pop-up window save untuk menampilkan lokasi

penyimpanan gambar Alternative Flow -

3.1.3.2. Activity diagram

Activity diagram menggambarkan proses kerja dalam sebuah sistem yang sedang berjalan. Berikut ini akan dijelaskan Activity Diagram dari sistem yang dibuat yaitu Activity Diagram Wiener Filter, Adaptive Median Filter dan kombinasi Wiener Filter dengan Adaptive Median Filter.


(30)

Gambar 3.3 berikut ini merupakan activity diagram filtering dari sistem yang akan dibangun.


(31)

3.1.3.2Sequence diagram

Sequence diagram (diagram urutan) adalah suatu diagram yang memperlihatkan interaksi-interaksi antar objek di dalam sistem yang disusun pada sebuah urutan atau rangkaian waktu. Sequence diagram diawali dari apa yang men-trigger aktivitas tersebut, proses dan perubahan apa saja yang terjadi secara internal dan keluaran yang dihasilkan (Whitten, 2004). Untuk sistem ini, sequence diagram filtering terbagi menjadi tiga bagian yaitu Wiener Filter, Adaptive Median Filter, dan kombinasi Wiener Filter dengan Adaptive Median Filter. Berikut ini akan di jelaskan Sequence Diagram dari sisem yang dibuat yaitu Sequence Diagram Wiener Filter.

Untuk sequence diagram Wiener Filter dapat dilihat pada gambar 3.4.

Gambar 3.4. Sequence Diagram Wiener Filter

Pada tahap ini proses yang berlangsung adalah proses Wiener Filter. Dimana metode tersebut akan melakukan filtering langsung terhadap citra noise asli dan impulse noise. Pada tahap pertama, proses yang akan dilakukan pertama dengan menggunakan metode Wiener Filter adalah melakukan open file image, disini citra yang diambil merupakan citra yang berisi noise asli dan impulse noise. Kemudian setelah muncul


(32)

citra dengan noise lakukan filtering langsung untuk memperbaiki citra dan memunculkan nilai MSE, PSNR, running time citra setelah difiltering.

Berikut ini merupakan Sequence Diagram Adaptive Median Filter dapat dilihat pada gambar 3.5.

Gambar 3.5. Sequence Diagram Adaptive Median Filter

Tahap kedua, proses yang akan dilakukan untuk mereduksi noise asli dengan menggunakan metode Adaptive Median Filter adalah melakukan open file image, disini citra yang diambil merupakan citra yang berisi noise asli dan impulse noise. Kemudian setelah muncul citra dengan noise, lakukan filtering langsung untuk memperbaiki citra dan memunculkan nilai MSE, PSNR, running time citra setelah difiltering.


(33)

Berikut ini merupakan Sequence Diagram kombinasi Wiener Filter dan Adaptive Median Filter pada gambar 3.6.

Gambar 3.6. Sequence Diagram Kombinasi Wiener Filter dan Adaptive Median Filter

Pada tahap ini, proses yang berlangsung adalah kombinasi Wiener Filter dengan Adaptive Median Filter untuk memperbaiki citra yang memilki noise asli dan impulse noise.

3.1.3.4. Flowchart sistem

Flowchart merupakan suatu bagan atau gambar yang menunjukan urutan serta hubungan proses dengan intruksinya. Gambar pada Flowchart dinyatakan dengan menggunakan simbol–simbol yang menandakan atau menggambarkan suatu proses. Sedangkan hubungan yang terjadi tiap–tiap proses bisa divisualkan dengan menggunakan garis penghubung.Gambar 3.7 berikut ini merupakan Flowchart dari sistem yang akan dibangun.


(34)

Gambar 3.7. Flowchart keseluruhan sistem

Sub-flowchart yang menggambarkan proses pada Wiener Filter, Adaptive Median Filter, dan Kombinasi Wiener Filter dan Adaptive Median Filter dapat dilihat pada Gambar 3.8, Gambar 3.9, dan Gambar 3.10.


(35)

(36)

(37)

Gambar 3.10. Flowchart Kombinasi Wiener Filter dan Adaptive Median Filter

3.1.3.5. Pseudocode

Pseudocode merupakan sebuah kode yang digunakan untuk menulis sebuah algoritma dengan cara yang bebas yang tidak terikat dengan bahasa pemrograman tertentu. Pseudocode berisikan langkah–langkah untuk menyelesaikan suatu permasalahan, hanya saja bentuknya sedikit berbeda dari algoritma. Tujuan dari penggunaan pseudocode adalah untuk mempermudah manusia dalam pemahaman dibandingkan


(38)

menggunakan bahasa pemrograman yang umum digunakan, terlebih aspeknya yang ringkas serta tidak bergantung pada suatu sistem tertentu merupakan prinsip utama dalam suatu algoritma. Berikut adalah pseudocode dari Wiener Filter dan Adaptive Median Filter.

3.1.3.5.1. Pseudocode Wiener Filter

Wiener Filter dibuat dalam sebuah kelas FFT (Fast Fourier Transform). Karena kinerja dari filtering ini berada dalam kawasan frekuensi sehingga tak lepas dari transformasi Fourier.

3.1.3.4.1. Pseudocode Rayleigh Noise public class FFTN

{

public struct Complex{ public double real public double imag }

Bitmap gbrhasil

Complex [][] (R,G,B)gambar int nx,ny

int [,] R,G,B

public FFTN(Image sourceImage) {

gbrhasil  new Bitmap(sourceImage.Width,sourceImage.Height) nx  sourceImage.Width

ny  sourceImage.Height

(R,G,B)gambar  new Complex[sourceImage.Width][] shift(R,G,B) new Complex[sourceImage.Width][] for I  0 to i<sourceImage.Width {

(R,G,B)gambar[i]  new Complex[sourceImage.Height] shift(R,G,B)[i]  new Complex[sourceImage.Height] for j  0 to j<sourceImage.Height;j++){

(R,G,B)gambar[i][j].real  ((Bitmap)sourceImage). GetPixel(i,j).(R,G,B)

(R,G,B)gambar[i][j].imag  0 }

} }

void ForwardFFT(Complex [][] gambar){

double [] real  new double[gambar.Length] double [] imag  new double[gambar.Length] for i  0 to i<gambar[0].Length {

for j  0 to j<gambar.Length { real[j]  gambar[j][i].real imag[j]  gambar[j][i].imag }

FFT1D(real,imag) // transform the rows

for j  0 to j<nx {

gambar[j][i].real  real[j] gambar[j][i].imag  imag[j] }


(39)

Gambar 3.7. Pseudocode Uniform Noise 3.1.3.4.3. Pseudocode Contraharmonic Mean Filter

Metode Contraharmonic Mean Filter adalah menjumlahkan semua nilai piksel berpangkat Q+1 dibagi dengan jumlah semua nilai piksel berpangkat Q. Nilai yang

menjadi nilai piksel baru pada citra hasil filtering. Pseudocode Contraharmonic Mean Filter dapat dilihat pada Gambar 3.8.

Gambar 3.8. Pseudocode Contraharmonic Mean Filter real  new double[gambar[0].Length]

imag  new double[gambar[0].Length] for i  0 to i<gambar.Length {

for j  0 to j<gambar[0].Length { real[j]  gambar[i][j].real imag[j]  gambar[i][j].imag }

FFT1D(real,imag) // transform the columns

for j  0 to j<ny {

gambar[i][j].real  real[j] gambar[i][j].imag  imag[j] }

} }

void FFT1D(double[] real, double[] imag) { // pemrosesan FFT

int length  real.Length, n

double Theta  3.14/length // Nilai phi

double real2  Math.Cos(Theta) // Nilai cos phi double imag2  Math.Sin(Theta) // Nilai sin phi

int k  length double temp while (k > 1){ n  k k >>= 1 temp  real2

real2  (real2*real2) - (imag2*imag2) imag2  (imag2*temp) + (temp*imag2) double real1  1

double imag1  0 for l  0 to l<k {

for a  l to a<length { int b  a + k

double real3  real[a] - real[b] double imag3  imag[a] - imag[b] real[a] += real[b]

imag[a] += imag[b]

real[b]  (real3 * real1)-(imag3 * imag1) imag[b]  (imag3 * real1)+(real3 * imag1) }

temp  real1

real1  (real1 * real2) - (imag1 * imag2) imag1  (imag1 * real2) + (temp * imag2) } }

void Hitung(){ // proses Wiener Filter

for i  0 to i<nx {

for j  0 to j<ny {

(R,G,B)gambar[i][j].real ((R,B,G)gambar[i][j].real * (R,G,B)[i,j] ) / (( (R,G,B)[i,j]) + 100)

(R,G,B)gambar[i][j].imag ((R,G,B)gambar[i][j].imag * (R,G,B)[i,j])/(( (R,G,B)[i,j]) + 100)

} } }


(40)

Pada pseudocode terlihat bahwa dalam kelas FFT terdapat fungsi-fungsi yang digunakan untuk proses pemfilteran. Pemrosesan Wiener Filter pada citra terdapat pada fungsi Hitung(), sedangkan fungsi selainnya merupakan fungsi untuk membantu pemrosesan FFT itu sendiri.

3.1.3.5.2. Pseudocode Adaptive Median Filter

Gambar 3.10. Pseudocode Mean Square Error (MSE)

3.1.3.4.6. Pseudocode Peak Signal to Noise Ratio (PSNR)

PSNR merupakan parameter kinerja metode filter yang berbanding terbalik dengan MSE. PSNR membandingkan maksimum warna citra dengan akar MSE. Pseudocode PSNR dapat dilihat pada Gambar 3.11.

Gambar 3.11. Pseudocode Peak Signal to Noise Ratio (PSNR)

3.1.Perancangan Sistem

.

Bitmap bmp

Bitmap asli  (Bitmap)sourceImage

bmp  new Bitmap(asli.Width,asli.Height) List<List<int>>r  red(sourceImage, size) List<List<int>>b  blue(sourceImage, size) List<List<int>>g  green(sourceImage, size) for i  0 to i<sourceImage.Width {

for j  0 to j<sourceImage.Height {

bmp.SetPixel(i,j,Color.FromArgb(r[i][j],g[i][j],b[i][j])) }

}return bmp

List<List<int>> (red,blue,green)(Image sourceImage,int kernelsize) {

Bitmap asli  (Bitmap)sourceImage int batas  kernelsize/2

List<int> r  new List<int>()

List<List<int>> outr  new List<List<int>>()

r.Sort()

int imedian  r.Count/2 // indeks median

int a1  r[imedian] - r[0] // Level A --> Zmed - Zmin

int a2  r[imedian] - r[r.Count-1] // Zmed – Zmax

if (a1 > 0 && a2 < 0) // Jika memenuhi, lanjut ke level B

{

int b1  asli.GetPixel(i, j).(R,G,B) - r[0] // Level B dimana Zxy – Zmin

int b2  asli.GetPixel(i, j).(R,G,B) - r[r.Count-1] // Zxy - Zmax

if (b1 > 0 && b2 < 0)

nilai.Add(asli.GetPixel(i, j).(R,G,B) // output Zxy

else

nilai.Add(r[imedian]) // output Zmed

r.Clear() break }

else if (batas < kernelsize/2 + 2)  jika tidak memenuhi persyaratan ke level B {

batas += 1  menambah batas jendela filter menjadi 5

r.Clear()

continue  ulangi level A


(41)

3.2.1. Flowchart

Flowchart merupakan representasi visual dari urutan langkah dan keputusan yang dibutuhkan untuk menampilkan proses pada suatu sistem. Setiap langkah digambarkan dalam bentuk diagram dan dihubungkan dengan garis berpanah. Flowchart sistem dapat dilihat pada Gambar 3.12.

3.2 Perancangan Sistem

Perancangan sistem merupakan perancangan proses, alur, dan gambaran suatu sistem. Perancangan sistem terdiri atas rancangan antarmuka (interface).

3.2.1. Perancangan Interface

Perancangan interface merupakan perancangan tampilan aplikasi sistem. Perancangan interface terdiri atas 3 form utama yang merepresentasikan menu-menu sistem, yaitu form Home, Filtering, dan Help. Form Home merupakan tampilan awal aplikasi. Form Filtering merupakan menu yang dapat digunakan oleh pengguna untuk melakukan proses filtering. Form Help berisi panduan untuk pengguna dalam menggunakan aplikasi sistem.

3.2.1.1. Halaman Menu Utama (Form Home)

Perancangan menu utama dapat dilihat pada gambar 3.13.

Gambar 3.11. Rancangan Interface Menu Utama }

else {

nilai.Add(asli.GetPixel(i, j).(R,G,B)) r.Clear()

batas  kernelsize/2 break

}

outr.Add(nilai) }

return outr


(42)

Tabel 3.8. Keterangan gambar rancangan interface Menu Home

No Keterangan

1. Menu Strip merupakan menu yang terdiri dari Home, Filtering, Help dan Exit

2. Label untuk menampilkan judul penelitian

3. Picture Box untuk menampilkan gambar logo Fasilkom-TI USU 4. Label untuk menampilkan Nama dan NIM programmer

5. Label untuk menampilkan Program Studi dan Fakultas programmer

3.2.1.2. Halaman Filtering

Perancangan halaman interface Filtering dapat dilihat pada gambar 3.14.

Gambar 3.12. Rancangan Interface Filtering

Tabel 3.9. Keterangan gambar rancangan interface Filtering

No Keterangan

1. Button “Kembali” untuk kembali ke halaman menu utama

2. Picture Box untuk menampilkan citra yang memiliki noise asli dan impulse noise


(43)

3. Button “Ambil Citra” untuk mengambil citra (*.bmp) yang akan difilter 4. Button “Reset” untuk menghapus seluruh output dan input.

5. Label nama citra, dimensi citra dan ukuran citra

6. TextBox untuk menampilkan nama citra dan ukuran citra 7. Panel berisi TextBox untuk membuat catatan keterangan 8. Picture Box yang menampilkan citra hasil dari Wiener Filter 9. Panel parameter berisi MSE, PSNR dan Text Box running time

10. Button “Filtering” untuk memroses citra yang memiliki noise dengan Wiener Filter

11. Button “Simpan” untuk menyimpan citra hasil yang telah diproses dengan Wiener Filter

12. Picture Box yang menampilkan citra hasil dari Adaptive Median Filter 13. Panel parameter berisi MSE, PSNR dan Text Box running time

14. Button “Filtering” untuk memroses citra yang memiliki noise dengan Adaptive Median Filter

15. Button “Simpan” untuk menyimpan citra hasil yang telah diproses dengan Adaptive Median Filter

16. Picture Box yang menampilkan citra hasil dari kombinasi Wiener Filter dan Adaptive Median Filter

17. Panel parameter berisi MSE, PSNR dan Text Box running time

18. Button “Filtering” untuk memroses citra yang memiliki noise dengan kombinasi Wiener Filter dan Adaptive Median Filter

19. Button “Simpan” untuk menyimpan citra hasil yang telah diproses dengan kombinasi Wiener Filter dan Adaptive Median Filter

3.2.1.3. Halaman Help


(44)

Gambar 3.13. Rancangan Interface Help

Tabel 3.10. Keterangan gambar rancangan interface Help

No. Keterangan

1. Button “Kembali” untuk balik ke menu halaman utama 2. Label “Bantuan”

3 Panel TextBox yang berisi langkah-langkah untuk menjelaskan penggunaan aplikasi pada form Filtering


(45)

BAB 4

IMPLEMENTASI DAN PENGUJIAN

4.1. Implementasi

Implementasi adalah kegiatan yang dilakukan untuk menguji data dan menerapkan sistem yang diperoleh dari hasil analisis. Implementasi merupakan salah satu unsur tahapan dari keseluruhan pembangunan sistem komputerisasi, dan unsur yang harus dipertimbangkan dalam pembangunan sistem. Sistem ini dibangun dengan menggunakan C# 4.3.

4.1.1. Implementasi Algoritma

Teknik filtering yang digunakan untuk memperbaiki citra yang memiliki noise asli dan impulse noise adalah Wiener Filter dan Adaptive Median Filter.

4.1.1.1. Implementasi Wiener Filter

Bagian ini menjelaskan mengenai proses perbaikan citra noise menggunakan metode Wiener Filter. Wiener Filter termasuk metode filtering pada kawasan frekuensi, sehingga diperlukan transformasi Fourier. Transformasi Fourier yang digunakan adalah Fast Fourier Transform (FFT).

Berikut persamaan transformasi Fourier 1D (Kadir & Susanto, 2013).

( ) = 1 ( ) ( 2 − 2 ) ………( 9)

Dengan u = 0,1,2,…,N-1.

Pada persamaan (9), j menyatakan √−1. Dengan demikian, hasil transformasi Fourier berupa bilangan kompleks.


(46)

Untuk Wiener Filter sendiri, persamaan yang dipakai dalam kawasan frekuensi berupa (McAndrew, 2004) :

( , ) = 1

( , )

| ( , ) | | ( , ) | +

^( , ) ………( 11)

Dalam hal ini, ( , ) dinamakan sebagai fungsi transfer filter dan diperoleh melalui pengenaan FFT. Dan adalah nilai konstanta yang dalam hal ini bernilai 100.

Misalkan, terdapat f(x) = (12,35,30,24). Transformasi Fourier-nya sebagai berikut.

( 0) = 1

4 ( ) (

2 0

4 −

2 0

4 )

= ( 0) cos( 0) − ( 0) + ( 1) cos( 0)− ( 0) + ( 2) cos( 0) − ( 0)

+ ( 3) cos( 0)− ( 0) ) / 4

= ( ( 0) + ( 1) + ( 2) + ( 3) + ( 4) ) / 4 = ( 12 + 35 + 30 + 24) / 4

= 25,25 ( 1) = 1

4 ( ) (

2 1

4 −

2 1

4 )

= ( 0) cos( 0) − ( 0) + ( 1) cos( / 2) − ( / 2) + ( 2) cos( ) −

( ) + ( 3) cos( 3 / 2) − ( 3 / 2) ) / 4

= 25 ( 1−0) + 35( 0− ) + 30(−1−0) + 24( 0 + ) ) / 4 = (−5 + 24) / 4 = −1,25 + j 6

( 2) = 1

4 ( ) (

2 2

4 −

2 2

4 )

= ( 0) cos( 0) − ( 0) + ( 1) cos( )− ( ) + ( 2) cos( 2 )−

( 2 ) + ( 3) cos( 3 )− ( 3 ) ) / 4

= 25 ( 1−0) + 35(−1−0) + 30( 1−0) + 24(−1−0) ) / 4

= −4


(47)

( 3) = 1

4 ( ) (

2 3

4 −

2 3

4 )

= ( 0) cos( 0) − ( 0) + ( 1) cos( 3 / 2) − ( 3 / 2) + ( 2) cos( 3 ) −

( 3 ) + ( 3) cos( 9 / 2) − ( 9 / 2) ) / 4

= 25 ( 1−0) + 35( 0 + ) + 30(−1−0) + 24( 0− ) ) / 4

= −5 + 11

4 = −1,25 + j 2,75

Gambar 4.1 memperlihatkan citra asli dan hasil transformasi Fourier

F(x) F(u)

Gambar 4.1. Citra dimensi satu dan hasil transformasi Fourier

Setelah didapat hasil dari FFT, maka lanjut ke proses Wiener Filter (dalam hal ini, hanya bilangan realnya saja yang akan dihitung)

( , ) = 1

( , )

| ( , ) | | ( , ) | +

^( , )

( 0) = 1

25,25

|25,25|

|25,25| + 100 25 =

637,56

16098,4 + 100 25 = 0,98

( 1) = 1

−1,25

|−1,25|

|−1,25| + 100 35 =

1,56

(−1,95) + 100 35 = 0,56

( 2) = 1 −1

|−1|

|−1| + 100 30 =

1

(−1) + 100 30 = 0,3

( 3) = 1

1,25

|1,25|

|1,25| + 100 24 =

|1,56|

|1,95| + 100 24 = 0,37

Maka, hasil perhitungan dari Wiener Filter sementara adalah : 0,98 0,56

0,3 0,37 Real

25 35 30 24

Real Imajiner

25,25 0

-1,25 6

-1 0

-1,25 2,75


(48)

4.1.1.2. Implementasi Adaptive Median Filter

Bagian ini menjelaskan mengenai proses perbaikan citra noise menggunakan Adaptive Median Filter dengan matriks citra misalnya 4x4. Window maksimum atau Smax yang digunakan bernilai 3. Dari matriks citra 4x4 diambil matriks citra 3x3 untuk melakukan proses filtering pada titik pusat dari matriks citra 3x3 tersebut, terlihat pada Gambar 4.2.

35 35 30

35 12 35

12 34 35

Gambar 4.2. Matriks citra 3x3 sebelum difiltering

Ditentukan nilai Zxy, Zmin, Zmed dan Zmax berdasarkan matriks citra 3x3 tersebut berdasarkan urutan:

12, 12, 30, 34, 35, 35, 35, 35, 35

Zmin = 12, Zmed = 35, Zmax = 35

Zxy = 12 (Nilai piksel paling tengah dari matriks citra)

Dilakukan perhitungan pada persamaan Adaptive Median Filter yang berfungsi untuk melihat apakah Zmin < Zmed < Zmax.

Dengan syarat :

1. Jika hasilnya bernilai true, lakukan perhitungan yang berfungsi untuk melihat apakah Zmin < Zmed < Zmax. Jika hasilnya true, maka Zxy bukan merupakan noise sehingga nilai Zxy tidak perlu diubah. Selain itu, ubah nilai Zxy dengan nilai Zmed.

2. Jika hasilnya bernilai false, maka ubah nilai Zxy dengan Zmed Diperoleh bahwa :


(49)

Sehingga nilai Zxy diubah menjadi nilai Zmed. Seperti pada gambar 4.3.

35 35 30

35 35 35

35 33 12

Gambar 4.3. Matriks citra 3x3 setelah difiltering

Hasil akhir citra 4x4 sebelum dan sesudah proses filtering dapat dilihat pada Gambar 4.4.

(a) (b)

Gambar 4.4. (a) Matriks citra 4 4 sebelum filtering (b) Matriks citra 4 4 setelah filtering dengan Adaptive Median Filter

35 35 30 36 35 12 35 52 12 34 35 52 76 52 52 52

35 35 30 36 35 35 35 52 12 34 52 52 76 52 52 52


(50)

4.1.2. Implementasi User Interface 4.1.2.1. Form Home (Main form)

Pada saat aplikasi dijalankan, maka form pertama yang akan muncul ialah form home. Form home berisi informasi mengenai judul skripsi dan nama penulis. Pada form home juga terdapat menu filtering, menu help dan exit. Gambar 4.5 menunjukkan tampilan form home pada sistem.

Gambar 4.5. Form Home

4.1.2.1. Form Filtering

Form Filtering merupakan form implementasi dan perbandingan metode Wiener Filter dan Adaptive Median Filter dengan penambahan kombinasi keduanya. Form ini hanya menampilkan citra asli yang berisi noise dan citra yang telah mengalami proses filtering beserta perhitungan MSE, PSNR, dan running time dari proses filtering tersebut. Tampilan form Filtering dapat dilihat pada Gambar 4.6.


(51)

Gambar 4.6. Form Filtering

4.1.2.1. Form Help

Form Help berisi mengenai petunjuk penggunaan aplikasi untuk memudahkan pengguna dalam memahami dan menggunakan aplikasi dengan baik. Form help ditunjukkan pada Gambar 4.7.


(52)

4.2. Pengujian

Pengujian sistem merupakan hasil dari proses implementasi sistem. Pengujian dilakukan dengan menggunakan citra yang berisi noise asli yang dalam hal ini noise tidak dibangkitkan dari sistem sehingga tidak akan ada probabilitas noise dan ditambah citra dengan impulse noise. Citra dengan noise asli didapat dari hasil capturing kamera digital. Citra yang akan diuji memiliki format bitmap (*.bmp) yang berukuran 256x256 piksel atau 512x512 piksel.

4.2.1. Pengujian Proses Filtering

Pengujian metode filter diawali dengan memilih citra dengan noise asli atau citra dengan impulse noise yang akan digunakan dalam proses filtering. Setelah citra tampil pada sistem, maka akan ditampilkan informasi citra. Kemudian citra noise tersebut di-filter menggunakan metode Wiener Filter, Adaptive Median Filter dan kombinasi keduanya. Nilai MSE, PSNR, dan running time akan muncul bersamaan dengan citra hasil filtering. Setelah proses filter selesai, sistem akan menampilkan message box yang menyatakan bahwa proses filter telah berhasil dilakukan seperti terlihat pada gambar 4.8.

Gambar 4.8. Message Box Filtering berhasil

Untuk nilai MSE, PSNR, dan running time akan digunakan untuk membandingkan metode filter yang digunakan sistem. Proses pengujian Filtering dapat dilihat pada Gambar 4.9 dan Gambar 4.10


(53)

Gambar 4.9. Proses pemfilteran citra yang memiliki noise asli dengan Wiener Filter, Adaptive Median Filter dan kombinasi keduanya

Gambar 4.10. Proses pemfilteran citra yang berisi impulse noise dengan Wiener Filter, Adaptive Median Filter dan kombinasi keduanya


(54)

4.3. Hasil Pengujian

Pengujian metode filtering dilakukan terhadap beberapa gambar berformat bitmap dengan ukuran dimensi yang bervariasi pada masing-masing citra. Citra dengan noise asli dan impulse noise yang diuji pada penelitian ini dapat dilihat pada gambar 4.11 dan gambar 4.12.


(55)

Gambar 4.12. Beberapa citra yang berisi impulse noise

Hasil pengujian metode Wiener Filter, Adaptive Median Filter dan kombinasi keduanya dapat dilihat pada tabel 4.1, tabel 4.2, tabel 4.3 dan tabel 4.4.


(56)

(57)

(58)

(59)

(60)

(61)

(62)

(63)

(64)

(65)

Sekilas citra dari Wiener Filter yang ditunjukkan pada tabel 4.1 dan tabel 4.2 memperlihatkan hasil yang sedikit lebih gelap dari citra asalnya dibandingkan dengan hasil Adapative Median Filter. Hal ini disebabkan perubahan piksel dari pemrosesan Wiener Filter lebih kecil dari piksel awal sehingga mengakibatkan citra hasil menjadi sedikit lebih gelap. Hal ini dapat ditunjukkan oleh gambar 4.13.

(a)

(b)

Gambar 4.13. (a) Nilai piksel awal red sebelum difilter dan (b) nilai piksel akhir red setelah difilter dengan Wiener Filter

147 157 152 155 153 156 156 148 147 151 152 155 153 162 147 152 152 155 153 152 157 162 153 153 158

130 139 134 137 153 138 138 131 130 151 134 137 135 144 147 135 134 137 135 135 139 144 136 136 140


(66)

Nilai MSE, PSNR, dan running time filtering beserta rata-ratanya untuk citra noise asli dapat dilihat lebih jelas pada tabel 4.4, tabel 4.5, dan tabel 4.6 berikut.

Tabel 4.4. Rata-rata Nilai MSE, PSNR, dan running time pada citra 256x256 piksel dan 512x512 piksel dengan Wiener Filter

Ukuran citra (piksel)

Nama citra (.bmp)

Citra Hasil Wiener Filter MSE PSNR (db) RT (s)

256

x

256

books 144 4 3,068

ayin 258 3 2,997

pas photo 318 3 2,811

home 215 3 2,99

Rata-rata 233,75 3,25 2,967

512

x

512

books 234 3 11,665

ayin 246 3 11,631

pas photo 318 3 12,293

home 312 3 12,117

Rata-rata 277,5 3 11,927

Tabel 4.5. Rata-rata Nilai MSE, PSNR, dan running time pada citra 256x256 piksel dan 512x512 piksel dengan Adaptive Median Filter

Ukuran citra (piksel)

Nama citra (.bmp)

Citra Hasil Adaptive Median Filter MSE PSNR (db) RT (s)

256

x

256

books 129 4 25,953

ayin 275 3 26,689

pas photo 33 4 25,847

home 269 3 25,856

Rata-rata 176,5 3,5 26,086

512

x

512

books 28 4 98,945

ayin 154 4 110,86

pas photo 10 5 103,702

home 11 5 61,087


(67)

Tabel 4.6. Rata-rata Nilai MSE, PSNR, dan running time pada citra 256x256 piksel dan 512x512 piksel dengan Kombinasi WF dan AMF

Ukuran citra (piksel)

Nama citra (.bmp)

Citra Hasil Kombinasi MSE PSNR (db) RT (s)

256

x

256

books 276 4 14,648

ayin 528 3 14,920

pas photo 352 4 14,519

home 463 3 15,453

Rata-rata 404,75 3,5 14,885

512

x

512

books 266 4 58,145

ayin 405 4 61,491

pas photo 709 5 59,229

home 325 5 61,087

Rata-rata 426,25 4,5 59,988

Sementara pada citra impulse noise, nilai MSE, PSNR, dan running time filtering dan rata-ratanya untuk dapat dilihat lebih jelas pada tabel 4.7, tabel 4.8, dan tabel 4.9 berikut.


(68)

Tabel 4.7. Rata-rata Nilai MSE, PSNR, dan running time pada citra impulse noise 256x256 piksel dan 512x512 piksel dengan Wiener Filter

Ukuran citra (piksel)

Nama citra (.bmp)

Citra Hasil Wiener Filter MSE PSNR (db) RT (s)

256

x

256

cat (impulse) 154 4 2,933

dedek (impulse) 168 4 2,95

natra (impulse) 223 3 2,921

jamur (impulse) 95 4 2,998

Rata-rata 160 3,5 2,950

512

x

512

cat (impulse) 157 4 12,231

dedek (impulse) 121 4 11,638

natra (impulse) 149 4 12,036

jamur (impulse) 93 4 11,583

Rata-rata 130 4 11,872

Tabel 4.8. Rata-rata Nilai MSE, PSNR, dan running time pada citra impulse noise 256x256 piksel dan 512x512 piksel dengan Adaptive Median Filter

Ukuran citra (piksel)

Nama citra (.bmp)

Citra Hasil Adaptive Median Filter MSE PSNR (db) RT (s)

256

x

256

cat (impulse) 884 3 26,428

dedek (impulse) 425 3 26,791

natra (impulse) 1043 3 27,673

jamur (impulse) 531 3 15,365

Rata-rata 720,75 3 24,064

512

x

512

cat (impulse) 891 3 112,37

dedek (impulse) 1010 3 99,244

natra (impulse) 962 3 114,082

jamur (impulse) 906 3 103,318


(69)

Tabel 4.9. Rata-rata Nilai MSE, PSNR, dan running time pada citra impulse noise 256x256 piksel dan 512x512 piksel dengan Kombinasi WF dan AMF

Ukuran citra (piksel)

Nama citra (.bmp)

Citra Hasil Kombinasi MSE PSNR (db) RT (s)

256

x

256

cat (impulse) 1009 3 15,071

dedek (impulse) 582 3 15,348

natra (impulse) 1203 3 15,568

jamur (impulse) 620 3 15,365

Rata-rata 853,5 3 15,338

512

x

512

cat (impulse) 1018 3 63,694

dedek (impulse) 1097 3 60,993

natra (impulse) 1065 3 68,151

jamur (impulse) 983 3 63,095

Rata-rata 1040,75 3 63,983

Perbandingan rata-rata MSE, PSNR, dan RT untuk ketiga filtering dapat dilihat pada tabel 4.10.


(1)

vii

IMPLEMENTATION AND COMPARISON OF WIENER FILTER AND ADAPTIVE MEDIAN FILTER TO IMPROVE THE QUALITY OF DIGITAL

IMAGE

ABSTRACT

The use of digital image takes the necessary role as the form of information since its has so many advantages. Despite of being rich of information, not all images have good visual to display. This may be caused by the disturbances such as noises, the color intensity that is too contrast or blurred. The noise itself, is a disturbance caused by the diverged of digital data which is received by image receiver device, starts from digital camera and scanner. Noise can be reduced by using filtering technique. There are 2 types of filtering method used, those are Wiener Filter that included in one of non-spatial filter type (frequency filter) and Adaptive Median Filter the development filter from Median Filter. As for the noise in this case is the original noise obtained from camera digital capturing, and impulse noise. From the result of research shows that Combination of Wiener Filter and Adaptive Median Filter method is better in improving image quality that contains original noise and impulse noise compared to Wiener Filter and Adaptive Median Filter refered by its parameter (MSE, PSNR, and running time). The bigger an image’s size then the bigger that running time outcame. While in a process of running time, Adaptive Median Filter took so much time compared to Wiener Filter and the combination of WF and AMF. Yet for the visual display, Adaptive Median Filter shows better result than Wiener Filter and the both Combination.

Keywords : Wiener Filter, Adaptive Median Filter, Combination of Wiener Filter and Adaptive Median Filter, original noised, impulse noised.


(2)

DAFTAR ISI

Halaman

Persetujuan ii

Pernyataan iii

Penghargaan iv

Abstrak vi

Abstract vii

Daftar Isi viii

Daftar Tabel x

Daftar Gambar xi

Daftar Lampiran xii

Bab 1 Pendahuluan 1

1.1. Latar Belakang 1

1.2. Rumusan Masalah 3

1.3. Tujuan Penelitian 3

1.4. Batasan atau Rang Lingkup Penelitian 3

1.5. Manfaat Penelitian 4

1.6. Metodologi Penelitian 4

1.7. Sistematika Penulisan 5

Bab 2 Landasan Teori 7

2.1. Citra Digital 7

2.2. Representasi Citra Digital 7

2.3. Jenis-jenis Citra 8

2.3.1. Citra Biner (Monokrom) 8

2.3.2. Citra Grayscale (skala keabuan) 9

2.3.3. Citra warna (true color) 9

2.4. Pixel (Picture Element) 10

2.5. Firmat File Citra 11

2.5.1. Format File Bitmap (BMP) 11

2.6. Noise (Derau) 11

2.7. Pengolahan Citra Digital 13

2.7.1. Pengolahan Citra di Kawasan Spasial dan Kawasan

Frekuensi 15

2.7.1.1. Adaptive Median Filter 15

2.7.1.2. Wiener Filter 18

2.8. Parameter Pembanding Kualitas Citra 18

2.8.1. Mean Square Error (MSE) 18


(3)

ix

3.1.2. Analisis persyaratan 21

3.1.2.1. Persyaratan fungsional 21

3.1.2.2. Persyaratan non-fungsional 22

3.1.3. Analisis proses 23

3.1.3.1. Use Case diagram 23

3.1.3.2. Activity diagram 28

3.1.3.3. Sequence diagram 30

3.1.3.4. Flowchart sistem 32

3.1.3.5. Pseudocode 36

3.1.3.5.1. Pseudocode Wiener Filter 37 3.1.3.5.2. Pseudocode Adaptive Median Filter 39

3.2. Perancangan Sistem 40

3.2.1. Perancangan Interface 40

3.2.1.1. Rancangan Menu Utama (Form Home) 40

3.2.1.2. Halaman Filtering 41

3.2.1.3. halaman Help 42

Bab 4 Implementasi dan Pengujian 44

4.1. Implementasi 44

4.1.1. Implementasi Algoritma 44

4.1.1.1. Implementasi Wiener Filter 44

4.1.1.2. Implementasi Adaptive Median Filter 46

4.1.2. Implementasi User Interface 48

4.1.2.1. Form Home (Main form) 48

4.1.2.2. Form Filtering 48

4.1.2.3. Form Help 49

4.2. Pengujian 51

4.2.1. Proses Pengujian Filtering 51

4.3. Hasil Pengujian 53

Bab V Kesimpulan dan Saran 71

5.1. Kesimpulan 71

5.2. Saran 72

Daftar Pustaka 73

Listing Program A-1


(4)

DAFTAR TABEL

Halaman

Tabel 2.1 Warna dan nilai penyusun warna 10

Tabel 3.1 Spesifikasi Use Case Pilih Citra 24-25

Tabel 3.2 Spesifikasi Use Case Filtering Citra 25

Tabel 3.3 Spesifikasi Use Case Wiener Filter 25-26

Tabel 3.4 Spesifikasi Use Case Adaptive Median Filter 26 Tabel 3.5 Spesifikasi Use Case kombinasi Wiener Filter dan Adaptive

Median Filter 26-27

Tabel 3.6 Spesifikasi Use Case hitung MSE, PSNR dan Running Time 27 Tabel 3.7 Spesifikasi Use Case Simpan Citra Hasil 27-28 Tabel 3.8 Keterangan gambar rancangan interface Menu Home 41 Tabel 3.9 Keterangan gambar rancangan interface Filtering 41-42 Tabel 3.10 Keterangan gambar rancangan interface Help 43 Tabel 4.1 Hasil Pengujian Filtering untuk citra berukuran 256x256

piksel (noise asli) 55-58

Tabel 4.2 Hasil Pengujian Filtering untuk citra berukuran 256x256

piksel (impulse noise) 59-62

Tabel 4.3 Hasil Pengujian Filtering untuk citra berukuran 512x512

(Noise asli dan impulse noise) 63

Tabel 4.4 Rata-rata Nilai MSE, PSNR, dan Running Time pada

citra 256x256 piksel dan 512x512 piksel dengan Wiener Filter 65 Tabel 4.5 Rata-rata Nilai MSE, PSNR, dan Running Time pada

citra 256x256 piksel dan 512x512 piksel dengan Adaptive

Median Filter 65

Tabel 4.6 Rata-rata Nilai MSE, PSNR, dan Running Time pada citra 256x256 piksel dan 512x512 piksel dengan Kombinasi WF dan

AMF 66

Tabel 4.7 Rata-rata Nilai MSE, PSNR, dan Running Time pada citra impulse

noise 256x256 piksel dan 512x512 piksel dengan Wiener Filter 67

Tabel 4.8 Rata-rata Nilai MSE, PSNR, dan Running Time pada citra impulse

noise 256x256 piksel dan 512x512 piksel dengan Adaptive

Median Filter 67

Tabel 4.9 Rata-rata Nilai MSE, PSNR, dan Running Time pada citra impulse

noise 256x256 piksel dan 512x512 piksel dengan Kombinasi WF

dan AMF 68

Tabel 4.10 Perbandingan rata-rata nilai MSE, PSNR, dan Running Time pada


(5)

xi

DAFTAR GAMBAR

Halaman

Gambar 2.1 Citra grayscale dalam bentuk matriks 8

Gambar 2.2 Cita Biner 9

Gambar 2.3 Citra Grayscale 9

Gambar 2.4 Citra warna (true color) 10

Gambar 2.5 Citra dengan impulse noise 12

Gambar 2.6 Citra usg.bmp yang berisi noise 13

Gambar 2.7 Proses Transformasi Citra 15

Gambar 3.1 Diagram Ishikawa 21

Gambar 3.2 Use case diagram 24

Gambar 3.3 Activity Diagram Filtering 29

Gambar 3.4 Sequence Diagram Wiener Filter 30

Gambar 3.5 Sequence Diagram Adaptive Median Filter 31 Gambar 3.6 Sequence Diagram Kombinasi kombinasi Wiener Filter dan

Adaptive Median Filter 32

Gambar 3.7 Flowchart keseluruhan sistem 33

Gambar 3.8 Flowchart Wiener Filter 34

Gambar 3.9 Flowchart Adaptive Median Filter 35

Gambar 3.10 Flowchart Kombinasi Wiener Filter dan Adaptive Median Filter 36

Gambar 3.11 Rancangan Interface Menu Utama 40

Gambar 3.12 Rancangan Interface Filtering 41

Gambar 3.13 Rancangan Interface Help 42

Gambar 4.1 Citra dimensi satu dan hasil transformasi Fourier 46

Gambar 4.2 Matriks citra 3x3 sebelum difiltering 47

Gambar 4.3 Matriks citra 3x3 setelah difiltering 48

Gambar 4.4 Matriks citra 4x4 sebelum filtering dan Matriks citra 4x4

setelah filtering dengan Adaptive Median Filter 48

Gambar 4.5 Form Home 49

Gambar 4.6 Form Filtering 50

Gambar 4.7 Form Help 50

Gambar 4.8 Message Box Filtering berhasil 51

Gambar 4.9 Proses pemfilteran citra yang memiliki noise asli dengan Wiener

Filter, Adaptive Median Filter dan kombinasi keduanya 52

Gambar 4.10 Proses pemfilteran citra yang berisi impulse noise dengan

Wiener Filter, Adaptive Median Filter dan kombinasi keduanya 52

Gambar 4.11 Citra yang terdegradasi noise asli hasil capturing kamera digital 53 Gambar 4.12 Beberapa citra yang berisi impulse noise 54 Gambar 4.13 (a) Nilai piksel awal red sebelum difilter dan (b) nilai piksel


(6)

DAFTAR LAMPIRAN

Halaman

A. Listing Program A-1