LISTING PROGRAM
1. Form Pengujian ONF dan BRF
using System; using System.Collections.Generic;
using System.ComponentModel; using System.Data;
using System.Drawing; using System.Drawing.Imaging;
using System.Linq; using System.Text;
using System.Threading.Tasks; using System.Windows.Forms;
namespace SelectiveFilter2 {
public partial class Form1 : Form {
double waktu = 0.0; bool noise;
int[,] dataA; int[,] dataB;
struct COMPLEX {
public double real, imag; public COMPLEXdouble x, double y
{ real = x;
imag = y; }
public float Magnitude {
return floatMath.Sqrtreal real + imag imag; }
public float Phase {
return floatMath.Atanimag real; }
} byte[,] r_data;
byte[,] g_data; byte[,] b_data;
FFT ImgFFT; public Form1
{ InitializeComponent;
} private void bukaGambarToolStripMenuItem_Clickobject sender,
EventArgs e {
Universitas Sumatera Utara
openFileDialog.InitialDirectory = ; openFileDialog.Filter = Bitmap files.bmp|.bmp|Jpeg
Files.jpg|.jpg|All valid files + .bmp.jpg|.bmp.jpg;
openFileDialog.FilterIndex = 2; openFileDialog.RestoreDirectory = true;
if DialogResult.OK == openFileDialog.ShowDialog {
this.AutoScroll = true; this.citraAsli.Image = new
BitmapopenFileDialog.FileName; this.Invalidate;
Bitmap b = new BitmapBitmapthis.citraAsli.Image; dataA = new int[b.Height,b.Height];
dataB = new int[b.Height,b.Height]; if b.Width == b.Height
{ LL.Text = b.Width.ToString;
TT.Text = b.Height.ToString; noise = false;
BitmapData bmdata = b.LockBitsnew Rectangle0, 0, b.Width, b.Height, ImageLockMode.ReadWrite,
PixelFormat.Format24bppRgb; int stride = bmdata.Stride;
System.IntPtr Scan0 = bmdata.Scan0; unsafe
{ byte p = bytevoidScan0;
int nOffset = stride - b.Width 3; r_data = new byte[b.Width, b.Height];
g_data = new byte[b.Width, b.Height]; b_data = new byte[b.Width, b.Height];
for int y = 0; y b.Height; ++y {
for int x = 0; x b.Width; ++x {
b_data[x, y] = p[0]; g_data[x, y] = p[1];
r_data[x, y] = p[2]; p += 3;
} p += nOffset;
} }
Bitmap Is = new BitmapBitmapthis.citraAsli.Image;
Sinu_noise periodik = new Sinu_noiseIs; periodik.Period = 200;
periodik.Fade = 2;
Universitas Sumatera Utara
citraNoise.Image = periodik.ResultImage; Bitmap Is4 = new
BitmapBitmapthis.citraAsli.Image; selectiveFilter.CitraAbu2Is4;
Citra_Gray.Image = null; Citra_Gray.Image = Is4;
for int i = 0; i dataA.GetLength1; i++ {
for int j = 0; j dataA.GetLength1; j++ {
dataA[i, j] = Is4.GetPixeli, j.R; }
} Bitmap Is2 = new
BitmapBitmapthis.citraNoise.Image; selectiveFilter.CitraAbu2Is2;
citraAbu.Image = null; citraAbu.Image = Is2;
Bitmap Is3 = new BitmapBitmapthis.citraAbu.Image;
ImgFFT = new FFTIs3; ImgFFT.ForwardFFT;
ImgFFT.FFTShift; ImgFFT.FFTPlotImgFFT.FFTShifted;
citraSpektrum.Image = ImageImgFFT.FourierPlot; Bitmap aa = new
BitmapBitmapthis.Citra_Gray.Image; Bitmap bb = new
BitmapBitmapthis.citraAbu.Image; }
else {
citraAsli.Image = null; MessageBox.ShowLebar dan Tinggi gambar harus
sama, Gagal, MessageBoxButtons.OK, MessageBoxIcon.Error; }
} }
private void simpanGambarToolStripMenuItem_Clickobject sender, EventArgs e
{ Application.Exit;
} private void groupBox2_Enterobject sender, EventArgs e
{ }
Universitas Sumatera Utara
private void button1_Clickobject sender, EventArgs e {
if citraAsli.Image = null ||citraAbu.Image=null {
DateTime satu, dua; double W, D0, n;
if W1.Text = || D01.Text = || n1.Text =
{ try
{ W = Convert.ToDoubleW1.Text;
D0 = Convert.ToDoubleD01.Text; n = Convert.ToDoublen1.Text;
Bitmap Is3 = new BitmapBitmapthis.citraAbu.Image;
ImgFFT = new FFTIs3; satu = DateTime.Now;
ImgFFT.ForwardFFT; ImgFFT.FFTShift;
ImgFFT.FFTPlotImgFFT.FFTShifted; citraSpektrum.Image =
ImageImgFFT.FourierPlot; ImgFFT.RemoveFFTShift;
double[,] a = new double[ImgFFT.Obj.Width, ImgFFT.Obj.Height];
selectiveFilter.Band_Rejecta, W, D0, ImgFFT.Obj.Width, ImgFFT.Obj.Height, 1, intn;
for int p = 0; p 5; p++ {
for int v = 0; v ImgFFT.Obj.Height; v++
{ for int u = 0; u ImgFFT.Obj.Width;
u++ {
ImgFFT.FFTNormal[u, v].real = a[u, v];
ImgFFT.Output[u, v].real = ImgFFT.FFTNormal[u, v].real;
ImgFFT.FFTNormal[u, v].imag = a[u, v];
ImgFFT.Output[u, v].imag = ImgFFT.FFTNormal[u, v].imag;
} }
} ImgFFT.RemoveFFTShift;
ImgFFT.InverseFFT; dua = DateTime.Now;
TimeSpan seli = dua.Subtractsatu;
Universitas Sumatera Utara
BR_ideal.Image = ImageImgFFT.Obj; Bitmap bb;
if noise == false {
bb= new BitmapBitmapthis.BR_ideal.Image;
for int i = 0; i dataB.GetLength1; i++
{ for int j = 0; j
dataB.GetLength1; j++ {
dataB[i, j] = bb.GetPixeli, j.R;
} }
MSE1.Text = MSEPSNR.HitungMSE2dataA, dataB.ToString;
PSNR1.Text = MSEPSNR.HitungPSNRConvert.ToDoubleMSE1.Text.ToString;
RT1.Text = seli.TotalMilliseconds.ToString;
} satu = DateTime.Now;
ImgFFT = new FFTIs3; ImgFFT.ForwardFFT;
ImgFFT.FFTShift; ImgFFT.FFTPlotImgFFT.FFTShifted;
citraSpektrum.Image = ImageImgFFT.FourierPlot;
ImgFFT.RemoveFFTShift; selectiveFilter.Band_Rejecta, W, D0,
ImgFFT.Obj.Width, ImgFFT.Obj.Height, 2, intn; for int p = 0; p 1; p++
{ for int v = 0; v ImgFFT.Obj.Height;
v++ {
for int u = 0; u ImgFFT.Obj.Width; u++
{ ImgFFT.FFTNormal[u, v].real =
a[u, v]; ImgFFT.Output[u, v].real =
ImgFFT.FFTNormal[u, v].real; ImgFFT.FFTNormal[u, v].imag =
a[u, v]; ImgFFT.Output[u, v].imag =
ImgFFT.FFTNormal[u, v].imag; }
} }
Universitas Sumatera Utara
ImgFFT.RemoveFFTShift; ImgFFT.InverseFFT;
dua = DateTime.Now; BR_B.Image = ImageImgFFT.Obj;
if noise == false {
bb = new BitmapBitmapthis.BR_B.Image; for int i = 0; i dataB.GetLength1;
i++ {
for int j = 0; j dataB.GetLength1; j++
{ dataB[i, j] = bb.GetPixeli,
j.R; }
} MSE2.Text = MSEPSNR.HitungMSE2dataA,
dataB.ToString; PSNR2.Text =
MSEPSNR.HitungPSNRConvert.ToDoubleMSE2.Text.ToString; seli = dua.Subtractsatu;
RT2.Text = seli.TotalMilliseconds.ToString;
} satu = DateTime.Now;
ImgFFT = new FFTIs3; ImgFFT.ForwardFFT;
ImgFFT.FFTShift; ImgFFT.FFTPlotImgFFT.FFTShifted;
citraSpektrum.Image = ImageImgFFT.FourierPlot;
ImgFFT.RemoveFFTShift; selectiveFilter.Band_Rejecta, W, D0,
ImgFFT.Obj.Width, ImgFFT.Obj.Height, 3, intn; for int p = 0; p 8; p++
{ for int v = 0; v ImgFFT.Obj.Height;
v++ {
for int u = 0; u ImgFFT.Obj.Width; u++
{ ImgFFT.FFTNormal[u, v].real =
a[u, v]; ImgFFT.Output[u, v].real =
ImgFFT.FFTNormal[u, v].real; ImgFFT.FFTNormal[u, v].imag =
a[u, v]; ImgFFT.Output[u, v].imag =
ImgFFT.FFTNormal[u, v].imag; }
}
Universitas Sumatera Utara
} ImgFFT.RemoveFFTShift;
ImgFFT.InverseFFT; dua = DateTime.Now;
BR_G.Image = ImageImgFFT.Obj; if noise == false
{ bb = new BitmapBitmapthis.BR_G.Image;
for int i = 0; i dataB.GetLength1; i++
{ for int j = 0; j
dataB.GetLength1; j++ {
dataB[i, j] = bb.GetPixeli, j.R;
} }
MSE3.Text = MSEPSNR.HitungMSE2dataA, dataB.ToString;
PSNR3.Text = MSEPSNR.HitungPSNRConvert.ToDoubleMSE3.Text.ToString;
seli = dua.Subtractsatu; RT3.Text =
seli.TotalMilliseconds.ToString; }
MessageBox.ShowProses Filter selesai, tekan tombol simpan untuk menyimpan gambar, Sukses,
MessageBoxButtons.OK, MessageBoxIcon.Information; }
catch Exception ex {
MessageBox.ShowMasukkan angka, bukan Huruf, GAGAL, MessageBoxButtons.OK, MessageBoxIcon.Error;
} }
} }
private void button2_Clickobject sender, EventArgs e {
if citraAsli.Image = null || citraAbu.Image = null
{ double D0, n;
DateTime satu, dua; int x1x, x2x, y1y, y2y;
if DO2.Text = || n2.Text = || x1.Text = || x2.Text = || y1.Text = || y2.Text =
{ try
{ D0 = Convert.ToDoubleDO2.Text;
n = Convert.ToDoublen2.Text;
Universitas Sumatera Utara
x1x = Convert.ToInt32x1.Text; x2x = Convert.ToInt32x2.Text;
y1y = Convert.ToInt32y1.Text; y2y = Convert.ToInt32y2.Text;
Bitmap Is3 = new BitmapBitmapthis.citraAbu.Image;
satu = DateTime.Now; ImgFFT = new FFTIs3;
ImgFFT.ForwardFFT; ImgFFT.FFTShift;
ImgFFT.FFTPlotImgFFT.FFTShifted; citraSpektrum.Image =
ImageImgFFT.FourierPlot; double[,] a = new double[ImgFFT.Obj.Width,
ImgFFT.Obj.Height]; int[,] K = { { x1x, y1y }, { x2x, y2y } };
selectiveFilter.Optimum_notcha, K, D0, ImgFFT.Obj.Width, ImgFFT.Obj.Height, 1, intn;
ImgFFT.RemoveFFTShift; for int p = 0; p 1; p++
{ for int v = 0; v ImgFFT.Obj.Height;
v++ {
for int u = 0; u ImgFFT.Obj.Width; u++
{ MessageBox.Showa[u,
v].ToString; ImgFFT.FFTNormal[u, v].real =
a[u, v]; ImgFFT.Output[u, v].real =
ImgFFT.FFTNormal[u, v].real; ImgFFT.FFTNormal[u, v].imag =
a[u, v]; ImgFFT.Output[u, v].imag =
ImgFFT.FFTNormal[u, v].imag; }
} }
ImgFFT.RemoveFFTShift; ImgFFT.InverseFFT;
dua = DateTime.Now; TimeSpan seli;
ONF_I.Image = ImageImgFFT.Obj; Bitmap bb;
if noise == false {
bb = new BitmapBitmapthis.ONF_I.Image;
for int i = 0; i dataB.GetLength1; i++
{
Universitas Sumatera Utara
for int j = 0; j dataB.GetLength1; j++
{ dataB[i, j] = bb.GetPixeli,
j.R; }
} MSE4.Text = MSEPSNR.HitungMSE2dataA,
dataB.ToString; PSNR4.Text =
MSEPSNR.HitungPSNRConvert.ToDoubleMSE4.Text.ToString; seli = dua.Subtractsatu;
RT4.Text = seli.TotalMilliseconds.ToString;
} satu = DateTime.Now;
ImgFFT = new FFTIs3; ImgFFT.ForwardFFT;
ImgFFT.FFTShift; ImgFFT.FFTPlotImgFFT.FFTShifted;
citraSpektrum.Image = ImageImgFFT.FourierPlot;
double[,] a1 = new double[ImgFFT.Obj.Width, ImgFFT.Obj.Height];
int[,] K1 = { { x1x, y1y }, { x2x, y2y } }; selectiveFilter.Optimum_notcha1, K1, D0,
ImgFFT.Obj.Width, ImgFFT.Obj.Height, 2, intn; ImgFFT.RemoveFFTShift;
for int p = 0; p 1; p++ {
for int v = 0; v ImgFFT.Obj.Height; v++
{ for int u = 0; u ImgFFT.Obj.Width;
u++ {
MessageBox.Showa[u, v].ToString;
ImgFFT.FFTNormal[u, v].real = a1[u, v];
ImgFFT.Output[u, v].real = ImgFFT.FFTNormal[u, v].real;
ImgFFT.FFTNormal[u, v].imag = a1[u, v];
ImgFFT.Output[u, v].imag = ImgFFT.FFTNormal[u, v].imag;
} }
} ImgFFT.RemoveFFTShift;
ImgFFT.InverseFFT; dua = DateTime.Now;
ONF_B.Image = ImageImgFFT.Obj; if noise == false
{
Universitas Sumatera Utara
bb = new BitmapBitmapthis.ONF_B.Image;
for int i = 0; i dataB.GetLength1; i++
{ for int j = 0; j
dataB.GetLength1; j++ {
dataB[i, j] = bb.GetPixeli, j.R;
} }
MSE5.Text = MSEPSNR.HitungMSE2dataA, dataB.ToString;
PSNR5.Text = MSEPSNR.HitungPSNRConvert.ToDoubleMSE5.Text.ToString;
seli = dua.Subtractsatu; RT5.Text =
seli.TotalMilliseconds.ToString; }
satu = DateTime.Now; ImgFFT = new FFTIs3;
ImgFFT.ForwardFFT; ImgFFT.FFTShift;
ImgFFT.FFTPlotImgFFT.FFTShifted; citraSpektrum.Image =
ImageImgFFT.FourierPlot; double[,] a2 = new double[ImgFFT.Obj.Width,
ImgFFT.Obj.Height]; int[,] K2 = { { x1x, y1y }, { x2x, y2y } };
selectiveFilter.Optimum_notcha2, K2, D0, ImgFFT.Obj.Width, ImgFFT.Obj.Height, 3, intn;
ImgFFT.RemoveFFTShift; for int p = 0; p 1; p++
{ for int v = 0; v ImgFFT.Obj.Height;
v++ {
for int u = 0; u ImgFFT.Obj.Width; u++
{ MessageBox.Showa[u,
v].ToString; ImgFFT.FFTNormal[u, v].real =
a2[u, v]; ImgFFT.Output[u, v].real =
ImgFFT.FFTNormal[u, v].real; ImgFFT.FFTNormal[u, v].imag =
a2[u, v]; ImgFFT.Output[u, v].imag =
ImgFFT.FFTNormal[u, v].imag; }
} }
Universitas Sumatera Utara
ImgFFT.RemoveFFTShift; ImgFFT.InverseFFT;
dua = DateTime.Now; ONF_G.Image = ImageImgFFT.Obj;
if noise == false {
aa = new BitmapBitmapthis.Citra_Gray.Image;
bb = new BitmapBitmapthis.ONF_G.Image;
for int i = 0; i dataB.GetLength1; i++
{ for int j = 0; j
dataB.GetLength1; j++ {
dataB[i, j] = bb.GetPixeli, j.R;
} }
MSE6.Text = MSEPSNR.HitungMSE2dataA, dataB.ToString;
PSNR6.Text = MSEPSNR.HitungPSNRConvert.ToDoubleMSE6.Text.ToString;
seli = dua.Subtractsatu; RT6.Text =
seli.TotalMilliseconds.ToString; }
MessageBox.ShowProses Filter selesai, tekan tombol simpan untuk menyimpan gambar, Sukses,
MessageBoxButtons.OK, MessageBoxIcon.Information; }
catch Exception ex {
} }
} }
private void Form1_Loadobject sender, EventArgs e {
waktu = 0.0; noise = false;
} private void timerx_Tickobject sender, EventArgs e
{ }
private void Form1_FormClosedobject sender, FormClosedEventArgs e
{ Application.Exit;
}
Universitas Sumatera Utara
public void SimpanMetodPictureBox abc {
if abc.Image = null {
Bitmap copy = new BitmapBitmapabc.Image; SaveFileDialog saveFileDialog = new SaveFileDialog;
saveFileDialog.InitialDirectory = ; saveFileDialog.Filter = Bitmap
Files.bmp|.bmp|Jpeg Files.jpg|.jpg|All valid files.bmp.jpg|.bmp.jpg;
saveFileDialog.FilterIndex = 2; saveFileDialog.RestoreDirectory = true;
if DialogResult.OK == saveFileDialog.ShowDialog {
copy.SavesaveFileDialog.FileName; }
} }
private void button3_Clickobject sender, EventArgs e {
SimpanMetodBR_ideal; }
private void button4_Clickobject sender, EventArgs e {
SimpanMetodBR_B; }
private void button5_Clickobject sender, EventArgs e {
SimpanMetodBR_G; }
private void button6_Clickobject sender, EventArgs e {
SimpanMetodONF_I; }
private void button7_Clickobject sender, EventArgs e {
SimpanMetodONF_B; }
private void button8_Clickobject sender, EventArgs e {
SimpanMetodONF_G; }
private void petunjukToolStripMenuItem_Clickobject sender, EventArgs e
{ Form3 bc = new Form3;
bc.ShowDialog; }
private void tentangToolStripMenuItem_Clickobject sender, EventArgs e
Universitas Sumatera Utara
{ Form4 po = new Form4;
po.ShowDialog; }
private void bukaGambarNoiseToolStripMenuItem_Clickobject sender, EventArgs e
{ OpenFileDialog openFileDialog = new OpenFileDialog;
openFileDialog.InitialDirectory = ; openFileDialog.Filter = Bitmap files.bmp|.bmp|Jpeg
Files.jpg|.jpg|All valid files + .bmp.jpg|.bmp.jpg;
openFileDialog.FilterIndex = 2; openFileDialog.RestoreDirectory = true;
if DialogResult.OK == openFileDialog.ShowDialog {
this.AutoScroll = true; Form5 po = new Form5;
po.citraAbu.Image = new BitmapopenFileDialog.FileName;
po.Invalidate; Bitmap Is3 = new BitmapBitmappo.citraAbu.Image;
po.LL.Text = Is3.Width.ToString; po.TT.Text = Is3.Height.ToString;
if Is3.Width == Is3.Height {
noise = true; ImgFFT = new FFTIs3;
ImgFFT.ForwardFFT; ImgFFT.FFTShift;
ImgFFT.FFTPlotImgFFT.FFTShifted; po.citraSpektrum.Image =
ImageImgFFT.FourierPlot; this.Hide;
po.ShowDialog; this.Show;
} else
{ MessageBox.ShowLebar dan Tinggi gambar harus
sama, Gagal, MessageBoxButtons.OK, MessageBoxIcon.Error; }
} }
private void button9_Clickobject sender, EventArgs e {
SimpanMetodCitra_Gray; }
} }
Universitas Sumatera Utara
2. Form Implementasi ONF dan BRF