105 LISTING PROGRAM Kode Program Menu Utama: using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using System.Data; using System.Linq; using System.ComponentModel; using System.Text; namespace projek public partial class MainForm : Form public MainForm() Windows Forms designer support. InitializeComponent() call. void DdfToolStripMenuItem_Click(object sender, EventArgs e) void LinkLabel1_LinkClicked(object sender, LinkLabelLinkCli ckedeventargs e) void LinkLabel4_LinkClicked(object sender,linklabellinkclick edeventargs e)
106 void ContextMenuStrip1_Opening(object sender,system.componen tmodel.canceleventargs e) void MenuStrip1_ItemClicked(object sender,toolstripitemclick edeventargs e) void BANTUANToolStripMenuItem_Click(object sender, EventA rgs e) Form6 frm6 = new Form6(); frm6.showdialog(); void KELUARToolStripMenuItem_Click(object sender, EventArgs e) this.close(); void TENTANGToolStripMenuItem_Click(object sender, EventArgs e) Form5 frm5 = new Form5(); frm5.showdialog(); void DETEKSITEPIToolStripMenuItem_Click(object sender, EventArgs e) Hide(); Form2 frm2 = new Form2(); frm2.showdialog(); e) void HOMEToolStripMenuItem_Click(object sender, EventArgs Hide();
107 MainForm mf = new MainForm(); mf.showdialog(); Kode Program Menu Deteksi Tepi: using System; using System.Drawing; using System.Windows.Forms; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Linq; using System.Text; using System.Collections; using System.IO; using System.Runtime.InteropServices; using System.Diagnostics; namespace projek public partial class Form2 : Form public Form2() public double hitungmse(bitmap gambar_asli, Bitmap gambar_hasil) double sum = 0; double r1, r2, g1, g2, b1, b2, MSE; for (int i = 0; i < gambar_asli.height; i++) for (int j = 0; j < gambar_asli.width; j++) r1 = gambar_asli.getpixel(j, i).r; r2 = gambar_asli.getpixel(j, i).r; sum += Math.Pow(r1 - r2, 2);
108 g1 = gambar_asli.getpixel(j, i).g; g2 = gambar_hasil.getpixel(j, i).g; sum += Math.Pow(g1 - g2, 2); b1 = gambar_asli.getpixel(j, i).b; b2 = gambar_hasil.getpixel(j, i).b; sum += Math.Pow(b1 - b2, 2); MSE = sum / (gambar_asli.height * gambar_asli.width); return MSE; public double hitungpsnr(double MSE) double PSNR = Math.Log10(Math.Pow(255, 2) / MSE); return PSNR; private ArrayList konvolusi(int xpos, int ypos, Bitmap bitmap) // inisialisasi variabel untuk menampung nilai ArrayList neighbourslist = new ArrayList(); int xstart, xfinish, ystart, yfinish; int pixel; // menentukan posisi awal dan akhir koordinat dalam // ukuran mask 3 x 3 xstart = xpos - 1; xfinish = xpos + 1; ystart = ypos - 1; yfinish = ypos + 1; // loop sejumlah 3 x 3 perluasan pixel tetangga for (int y = ystart; y <= yfinish; y++) for (int x = xstart; x <= xfinish; x++) // kondisi IF.. ELSE.. untuk mendaftarkan
109 anggota tetangga // bila posisi x dan y tidak valid maka isi list dengan 0 // tidak valid : nilai negatif atau lebih dari batas citra if (x < 0 y < 0 x > (bitmap.width - 1) y > (bitmap.height - 1)) // menambahkan data ke list dengan nilai 0 // 0D : artinya nilai 0 dengan tipe double (D) neighbourslist.add(0); else // menampung nilai pixel pada titik (x,y) pada variabel pixel pixel = bitmap.getpixel(x, y).r; pixel // menambahkan data ke list dengan nilai neighbourslist.add(pixel); // nilai kembalian berupa array list return konvolusi; private int getgradienvalue(arraylist neighbourslist, String masktype) // sobel X : mask dari sobel X // sobel Y : mask dari sobel Y int result = 0; int a; a = Convert.ToInt32(Math.Sqrt(2));
110 int[,] sobelx = -1,0,1, -2,0,2, -1,0,1 ; int[,] sobely = 1,2,1, 0,0,0, -1,-2,-1 ; int[,] Frei_ChenX = -1, 0,1, -a,0,a, -1,0,1 ; int[,] Frei_ChenY= 1,a,1, 0,0,0, -1,-a,-1 ; // count : digunakan untuk menunjukkan index pada list int count = 0; // kondisi untuk mask type, bila X maka lakukan sobel X // tetapi jika Y maka lakukan sobel Y if (masktype.equals("sx")) // looping untuk menghitung nilai sobel X pada titik (x,y) for (int y = 0; y < 3; y++) for (int x = 0; x < 3; x++) // perhitungan sobel X result += sobelx[x, y] * Convert.ToInt16(neighboursList[count])); // increment count yang digunakan untuk index neighbourslist count++; else if (masktype.equals("sy")) // looping untuk menghitung nilai sobel Y pada titik (x,y) for (int y = 0; y < 3; y++) for (int x = 0; x < 3; x++) // perhitungan sobel Y result+=(sobely[x, y] * Convert.ToInt16(neighboursList[count])); // increment count yang digunakan untuk index neighbourslist count++; else if (masktype.equals("fx"))
111 // looping untuk menghitung nilai sobel Y pada titik (x,y) for (int y = 0; y < 3; y++) for (int x = 0; x < 3; x++) // perhitungan FREI-CHEN X result +=(Frei_ChenX[x, y] * Convert.ToInt16(neighboursList[count])) // increment count yang digunakan untuk index neighbourslist count++; else if (masktype.equals("fy")) // looping untuk menghitung nilai sobel Y pada titik (x,y) for (int y = 0; y < 3; y++) for (int x = 0; x < 3; x++) // perhitungan frei-chen Y result = result + (Frei_ChenY[x, y] * Convert.ToInt16(neighboursList[count ])); // increment count yang digunakan untuk index neighbourslist count++; // nilai kembalian hasil sobel X atau sobel Y pada titik (x,y) pada citra return result; private int getmorfovalue(arraylist neighbourlist, String masktype) int result=0;
112 int maks = 0; int count=0; int min = 255; if (masktype.equals("d")) for (int y = 0; y < 3; y++) for (int x = 0; x < 3; x++) result = Convert.ToInt16(neighbourlist[count]); if (maks < result) maks= result; count++; return maks; else if (masktype.equals("e")) for (int y = 0; y < 3; y++) for (int x = 0; x < 3; x++) result = Convert.ToInt16(neighbourlist[count]); if (result < min) min = result; // increment count yang digunakan untuk index neighbourslist count++; return min; void GroupBox2_Enter(object sender, EventArgs e)
113 void SobelToolStripMenuItem_Click(object sender, EventArgs e) Form2 frm2 = new Form2(); frm2.showdialog(); void Button4_Click(object sender, EventArgs e) Bitmap gambar_awal = new Bitmap(pictureBox1.Image); Bitmap gambar = new Bitmap(gambar_awal); Bitmap bitmap = new Bitmap(gambar); Bitmap hasil = new Bitmap(gambar); Stopwatch sw = new Stopwatch(); int result; int count = 0; int resultfx; int resultfy; // inisialisasi array list untuk menampung pixel tetangga ArrayList neighbourslist = new ArrayList(); // mengosongkan list sobel X sw.start(); // nested looping untuk scanline citra secara horizontal for (int y = 0; y < bitmap.height; y++) for (int x = 0; x < bitmap.width; x++) // mengosongkan list neighbourslist.clear(); // menampung list tetangga dengan perluasan 3 x 3 neighbourslist = konvlusi(x, y, bitmap); resultfx = getgradienvalue(neighbourslist,"fx"); resultfy = getgradienvalue(neighbourslist, "fy");
114 result = Convert.ToInt16(Math.Sqrt(Math.Pow(resultFx, 2) + Math.Pow(result Fy, 2))); // kondisi untuk filter nilai harus dalam range 0-255 if (result < 0) result = 0; else if (result > 255) result = 255; // set nilai pixel baru setelah dikenakan sobel mask X pada titik (x,y) hasil.setpixel(x, y, Color.FromArgb(result, r esult, result)); count++; sw.stop(); picturebox3.image=hasil; double MSE = hitungmse(gambar, hasil); textbox6.text= MSE.ToString(); textbox7.text=hitungpsnr(mse).tostring(); textbox8.text=math.round(convert.todecimal(sw.elapsed Milliseconds)/ 1000, 4).ToString(); void Button6_Click(object sender, EventArgs e) if (picturebox2.image!= null) SaveFileDialog simpan = new SaveFileDialog(); simpan.filter = "Image Files *.bmp Image Files *.jpg"; simpan.filename = "*.jpg"; if (simpan.showdialog() == DialogResult.OK)
115 m.drawing.imaging.imageformat.jpeg); picturebox2.image.save(simpan.filename, Syste string filename = simpan.filename.substring(0, simpan.filename.length - 4) + ".txt"; FileStream fstream = new FileStream(filename, FileMode.OpenOrCreate); StreamWriter sw = new StreamWriter(fstream); SeekOrigin seekorigin = new SeekOrigin(); sw.basestream.seek(0, seekorigin); sw.flush(); sw.close(); MessageBox.Show("Citra Hasil Deteksi Tepi Sobel Telah Disimpan", "Simpan", MessageBoxButtons.OK, MessageBoxIcon.Informa tion); else MessageBox.Show("Citra Hasil Deteksi Tepi Belum Ada"); void Button7_Click(object sender, EventArgs e) // TODO: Implement Button7_Click if (picturebox3.image!= null) SaveFileDialog simpan = new SaveFileDialog(); simpan.filter = "Image Files *.bmp Image Files *.jpg"; simpan.filename = "*.jpg"; if (simpan.showdialog() == DialogResult.OK)
116 m.drawing.imaging.imageformat.jpeg); picturebox3.image.save(simpan.filename, Syste string filename = simpan.filename.substring(0, simpan.filename.length - 4) + ".txt"; FileStream fstream = new FileStream(filename, FileMode.OpenOrCreate); StreamWriter sw = new StreamWriter(fstream); SeekOrigin seekorigin = new SeekOrigin(); sw.basestream.seek(0, seekorigin); sw.flush(); sw.close(); MessageBox.Show("Citra Hasil Deteksi Tepi Sobel Telah Disimpan", "Simpan", MessageBoxButtons.OK, MessageBoxIcon.Informa tion); else MessageBox.Show("Citra Hasil Deteksi Tepi Belum Ada"); void Button5_Click(object sender, EventArgs e) Bitmap gambar_awal = new Bitmap(pictureBox1.Image); Bitmap gambar = new Bitmap(gambar_awal); Bitmap bitmap = new Bitmap(gambar); Bitmap hasil = new Bitmap(gambar); Stopwatch sw = new Stopwatch(); int result; int count = 0; int resultdilasi; int resulterosi; // inisialisasi array list untuk menampung pixel
117 tetangga ArrayList neighbourslist = new ArrayList(); // mengosongkan list sobel X sw.start(); // nested looping untuk scanline citra secara horizontal for (int y = 0; y < bitmap.height; y++) for (int x = 0; x < bitmap.width; x++) // mengosongkan list neighbourslist.clear(); // menampung list tetangga dengan perluasan 3 x 3 neighbourslist = konvolusi(x, y, bitmap); resultdilasi = getmorfovalue(neighbourslist,"d"); resulterosi = getmorfovalue(neighbourslist, "E"); result = Convert.ToInt32(resultDilasiresultErosi); // kondisi untuk filter nilai harus dalam range 0-255 if (result < 0) result = 0; else if (result > 255) result = 255; // set nilai pixel baru setelah dikenakan sobel mask X pada titik (x,y) hasil.setpixel(x, y, Color.FromArgb(result, r esult, result)); count++;
118 sw.stop(); picturebox4.image=hasil; double MSE = hitungmse(gambar, hasil); textbox9.text= MSE.ToString(); textbox10.text=hitungpsnr(mse).tostring(); textbox11.text=math.round(convert.todecimal(sw.elapse dmilliseconds)/ 1000, 4).ToString(); void Button8_Click(object sender, EventArgs e) if (picturebox4.image!= null) SaveFileDialog simpan = new SaveFileDialog(); simpan.filter = "Image Files *.bmp Image Files *.jpg"; simpan.filename = "*.jpg"; if (simpan.showdialog() == DialogResult.OK) picturebox4.image.save(simpan.filename, Syste m.drawing.imaging.imageformat.jpeg); string filename = simpan.filename.substring(0, simpan.filename.length - 4) + ".txt"; FileStream fstream = new FileStream(filename, FileMode.OpenOrCreate); StreamWriter sw = new StreamWriter(fstream); SeekOrigin seekorigin = new SeekOrigin(); sw.basestream.seek(0, seekorigin); sw.flush(); sw.close(); MessageBox.Show("Citra Hasil Deteksi Tepi Sobel Telah Disimpan", "Simpan", MessageBoxButtons.OK, MessageBoxIcon.Informa tion);
119 Ada"); else MessageBox.Show("Citra Hasil Deteksi Tepi Belum void Button3_Click(object sender, EventArgs e) Bitmap gambar_awal = new Bitmap(pictureBox1.Image); Bitmap gambar = new Bitmap(gambar_awal); Bitmap bitmap = new Bitmap(gambar); Bitmap hasil = new Bitmap(gambar); Stopwatch sw = new Stopwatch(); int result; int count = 0; int resultsx; int resultsy; // inisialisasi array list untuk menampung pixel tetangga ArrayList neighbourslist = new ArrayList(); // mengosongkan list sw.start(); // nested looping untuk scanline citra secara horizontal for (int y = 0; y < bitmap.height; y++) for (int x = 0; x < bitmap.width; x++) // mengosongkan list neighbourslist.clear(); // menampung list tetangga dengan perluasan 3 x 3 neighbourslist = Konvolusi (x, y, bitmap); resultsx = getgradienvalue(neighbourslist,"sx"); resultsy = getgradienvalue(neighbourslist, "sy");
120 result = Convert.ToInt16(Math.Sqrt(Math.Pow(resultSx, 2) + Math.Pow(result Sy, 2))); // kondisi untuk filter nilai harus dalam range 0-255 if (result < 0) result = 0; else if (result > 255) result = 255; // set nilai pixel baru setelah dikenakan sobel mask X pada titik (x,y) hasil.setpixel(x, y, Color.FromArgb(result, r esult, result)); count++; sw.stop(); picturebox2.image=hasil; double MSE = hitungmse(gambar, hasil); textbox3.text= MSE.ToString(); textbox4.text=hitungpsnr(mse).tostring(); textbox5.text=math.round(convert.todecimal(sw.elapsed Milliseconds)/ 1000, 4).ToString(); gs e) void KeluarToolStripMenuItem_Click(object sender, EventAr Close(); void Button1_Click(object sender, EventArgs e) try
121 OpenFileDialog open = new OpenFileDialog(); open.filter = "Image Files(*.bmp) *.bmp Image Files(*.jpg) *.jpg All Files(*.*) *.*"; if (open.showdialog() == DialogResult.OK) Bitmap gambar = new Bitmap(open.FileName.ToString()); Bitmap gray= new Bitmap(gambar); int rata2=0; for(int y =0; y< gambar.height; y++) for (int x=0; x< gambar.width; x++) rata2=(gambar.getpixel(x, y).r + gambar.getp ixel(x, y).g + gambar.getpixel(x, y).b)/3; gray.setpixel(x, y, Color.FromArgb(rata2,rata 2,rata2)); picturebox1.image= gray; textbox13.text = open.filename.tostring(); textbox2.text = gambar.width.tostring(); textbox12.text = gambar.height.tostring(); long filesize = new System.IO.FileInfo(open.FileName).Length; if (filesize / 1000 < 1) textbox1.text = filesize.tostring(); lblsize.text = "Byte"; else textbox1.text = (filesize / 1000).ToString(); lblsize.text = "Kb";
122 image"); catch (Exception) throw new ApplicationException("Failed loading void DeteksiTepiToolStripMenuItem_Click(object sender, Ev entargs e) Hide(); Form2 frm2 = new Form2(); frm2.showdialog(); void Form2_Load(object sender, EventArgs e) void Button9_Click(object sender, EventArgs e) Bitmap gambar_awal = new Bitmap(pictureBox2.Image); Bitmap gambar_utama= new Bitmap(pictureBox1.Image); Bitmap gambar = new Bitmap(gambar_awal); Bitmap bitmap = new Bitmap(gambar); Bitmap hasil = new Bitmap(gambar); Stopwatch sw = new Stopwatch(); Bitmap gambar2= new Bitmap(gambar); int result; int count = 0; int resultdilasi; int resulterosi; // inisialisasi array list untuk menampung pixel tetangga ArrayList neighbourslist = new ArrayList(); // mengosongkan list
123 sw.start(); // nested looping untuk scanline citra secara horizontal for (int y = 0; y < bitmap.height; y++) for (int x = 0; x < bitmap.width; x++) // mengosongkan list neighbourslist.clear(); // menampung list tetangga dengan perluasan 3 x 3 neighbourslist = Konvolusi(x, y, bitmap); resultdilasi = getmorfovalue(neighbourslist,"d"); resulterosi = getmorfovalue(neighbourslist,"e"); result = Convert.ToInt32(resultDilasiresultErosi); // kondisi untuk filter nilai harus dalam range 0-255 if (result < 0) result = 0; else if (result > 255) result = 255; // set nilai pixel baru setelah dikenakan sobel mask X pada titik (x,y) hasil.setpixel(x, y, Color.FromArgb(result, r esult, result)); count++; sw.stop(); picturebox5.image=hasil; double MSE = hitungmse(gambar_utama,hasil);
124 textbox16.text= MSE.ToString(); textbox15.text=hitungpsnr(mse).tostring(); textbox14.text=math.round(convert.todecimal(sw.elapse dmilliseconds)/ 1000, 4).ToString(); void Button11_Click(object sender, EventArgs e) // TODO: Implement Button11_Click Bitmap gambar_awal = new Bitmap(pictureBox3.Image); Bitmap gambar_utama= new Bitmap(pictureBox1.Image); Bitmap gambar = new Bitmap(gambar_awal); Bitmap bitmap = new Bitmap(gambar); Bitmap hasil = new Bitmap(gambar); Stopwatch sw = new Stopwatch(); Bitmap gambar2= new Bitmap(gambar); int result; int count = 0; int resultdilasi; int resulterosi; // inisialisasi array list untuk menampung pixel tetangga ArrayList neighbourslist = new ArrayList(); // mengosongkan list sw.start(); // nested looping untuk scanline citra secara horizontal for (int y = 0; y < bitmap.height; y++) for (int x = 0; x < bitmap.width; x++) // mengosongkan list neighbourslist.clear(); // menampung list tetangga dengan perluasan 3 x 3 neighbourslist = konvolusi(x, y, bitmap); resultdilasi = getmorfovalue(neighbourslist,"d"); resulterosi
125 = getmorfovalue(neighbourslist,"e"); result = Convert.ToInt32(resultDilasiresultErosi); // kondisi untuk filter nilai harus dalam range 0-255 if (result < 0) result = 0; else if (result > 255) result = 255; // set nilai pixel baru setelah dikenakan sobel mask X pada titik (x,y) hasil.setpixel(x, y, Color.FromArgb(result, r esult, result)); count++; sw.stop(); picturebox6.image=hasil; double MSE = hitungmse(gambar_utama,hasil); textbox19.text= MSE.ToString(); textbox18.text=hitungpsnr(mse).tostring(); textbox17.text=math.round(convert.todecimal(sw.elapse dmilliseconds)/ 1000, 4).ToString(); void Button2_Click(object sender, EventArgs e) if (picturebox5.image!= null) SaveFileDialog simpan = new SaveFileDialog(); simpan.filter = "Image Files *.bmp Image Files *.jpg"; simpan.filename = "*.jpg"; if (simpan.showdialog() == DialogResult.OK)
126 m.drawing.imaging.imageformat.jpeg); picturebox3.image.save(simpan.filename, Syste string filename = simpan.filename.substring(0, simpan.filename.length - 4) + ".txt"; FileStream fstream = new FileStream(filename, FileMode.OpenOrCreate); StreamWriter sw = new StreamWriter(fstream); SeekOrigin seekorigin = new SeekOrigin(); sw.basestream.seek(0, seekorigin); sw.flush(); sw.close(); MessageBox.Show("Citra Hasil Deteksi Tepi Telah Disimpan", "Simpan", MessageBoxButtons.OK, MessageBoxIcon.Informa tion); else MessageBox.Show("Citra Hasil Deteksi Tepi Belum Ada"); void Button10_Click(object sender, EventArgs e) if (picturebox6.image!= null) SaveFileDialog simpan = new SaveFileDialog(); simpan.filter = "Image Files *.bmp Image Files *.jpg"; simpan.filename = "*.jpg"; if (simpan.showdialog() == DialogResult.OK) picturebox3.image.save(simpan.filename, Syste m.drawing.imaging.imageformat.jpeg);
127 string filename = simpan.filename.substring(0, simpan.filename.length - 4) + ".txt"; FileStream fstream = new FileStream(filename, FileMode.OpenOrCreate); StreamWriter sw = new StreamWriter(fstream); SeekOrigin seekorigin = new SeekOrigin(); sw.basestream.seek(0, seekorigin); sw.flush(); sw.close(); MessageBox.Show("Citra Hasil Deteksi Tepi Telah Disimpan", "Simpan", MessageBoxButtons.OK, MessageBoxIcon.Informa tion); else MessageBox.Show("Citra Hasil Deteksi Tepi Belum Ada"); void HomeToolStripMenuItem_Click(object sender, EventArgs e) Hide(); MainForm mf = new MainForm(); mf.showdialog(); void BantuanToolStripMenuItem_Click(object sender, EventA rgs e) Form6 frm6 = new Form6(); frm6.showdialog(); void TentangToolStripMenuItem_Click(object sender, EventA rgs e)
128 Form5 frm5 = new Form5(); frm5.showdialog(); Kode Program Menu Bantuan: using System; using System.Drawing; using System.Windows.Forms; namespace projek public partial class Form6 : Form public Form6() InitializeComponent(); Kode Program Menu Tentang: using System; using System.Drawing; using System.Windows.Forms; namespace projek public partial class Form5 : Form public Form5() InitializeComponent();
129 CURRICULUM VITAE Nama : Khairani Tempat & Tanggal Lahir : Ramunia 12 Agustus 1993 Alamat Sekarang : Jln. Pantai Labu Gang Besi Timur kec. Pantai Labu Alamat Orang Tua : Jln. Pantai Labu Gang Besi Timur kec. Pantai Labu Email : khairanivl@gmail.com Riwayat Pendidikan 2011 2015 : S-1 Ilmu Komputer Universitas Sumatera Utara, Medan 2008 2011 : SMA Negeri1, Lubuk Pakam 2005 2008 : SMP Negeri1, Lubuk Pakam 1999 2005 : SDNegeri 104248, Beringin Keahlian Bahasa : Indonesia, Inggris Bahasa Pemrograman : C#, PHP, Mathlab Database : MSQL Pengalaman Organisasi [2009 2010] PMR 010 SMA Negeri 1 Lubuk Pakam [2012 2014] Sekdiv Dana dan Usaha Ukmi Al-Khuwarizmi Fasilkom-TI USU [2013 2014] AnggotaPEMA Fasilkom-TI USU [2013 2014] Anggota KAM Rabbani Fasilkom-TI USU