Implementasi dan Perbandingan Metode Wiener Filter dan Adaptive Median Filter Untuk Memperbaiki Kualitas Citra Digital
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