Implementasi dan Perbandingan Metode Frei-Chen, Morphologi dan Sobel untuk Deteksi Tepi pada Citra Foto Rontgen Kista Rongga Mulut
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)
{ }
(2)
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();
}
void HOMEToolStripMenuItem_Click(object sender, EventArgs e)
{
(3)
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);
(4)
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++) {
(5)
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;
// menambahkan data ke list dengan nilai pixel
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;
(6)
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")) {
(7)
// 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)
{
(8)
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; }
(9)
{
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
(10)
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";
(11)
{
pictureBox2.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);
} } 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) {
(12)
pictureBox3.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);
} } 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;
(13)
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(resultDilasi-resultErosi);
// 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++; }
(14)
} 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);
} }
(15)
else {
MessageBox.Show("Citra Hasil Deteksi Tepi Belum Ada");
} }
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
(16)
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();
}
void KeluarToolStripMenuItem_Click(object sender, EventAr gs e)
{
Close(); }
void Button1_Click(object sender, EventArgs e) {
(17)
{
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"; }
(18)
} }
catch (Exception) {
throw new ApplicationException("Failed loading image");
} }
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
(19)
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(resultDilasi-resultErosi);
// 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;
(20)
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
(21)
= getMorfoValue(neighboursList,"E");
result = Convert.ToInt32(resultDilasi-resultErosi);
// 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) {
(22)
pictureBox3.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 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);
(23)
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)
(24)
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();
} } }
(25)
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 : [email protected]
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
(26)
DAFTAR PUSTAKA
Barus, O. 2011. Identifikasi Tepi Citra Menggunakan Algoritma Sobel Edge Detection. Skipsi.Universitas Sumatera Utara.
Burger, W. & Burge, M.J.2008. Digital Image Prosessing An Algoritmic Using Java.
Spinger Science + Bisiness Media LLC: NewYork.
Crane, R. 1997. A Simplifield Approach to Image Processing Clasical and Modern Techniques Inc. Prentice Hall PTR: Upper saddle River.
Dixon, A. 2010. Mandibullar Swelling. Radiopedia.org, 21 September 2015 (diakses 21 September 2015).
Donnel, C. 2012. Dentigerous In Left Maxillary Antrum. Radiopedia.org, 21 September 2015 (diakses 21 September 2015).
Fahzuanta,Q.M.P.2010. Analisis Perbandingan Garis Tepi pada Citra Digital antaraMetode Edge Lingking dan Operator Sobel. Skripsi. Universitas Sumatera Utara.
Freisen, B. 2012. Glandular Odontogenic Cyst. Radiopedia.org, 21 September 2015 (diakses 21 September 2015).
Gaillard, F. 2008. Ameloblastoma. Radiopedia.org, 21 September 2015 (diakses 21 September 2015).
Gonzales, R.C. & Woods, R. E. 2002. Digital Image Processing.Prentice Hall. Hacking, C. 2015. Maxillary Dentigerous. Radiopedia.org, 21 September
2015(diakses 21 September 2015).
Hannessy, O. 2015. Ameloblastoma. Radiopedia.org, 21 September 2015 (diakses 21
September 2015).
Isnanto, R.R.2003. Teknik-Teknik Analisis pada Citra Tulang sebagai Alat Bantu Identifikasi Medis. Skripsi. Universitas Diponegoro Semarang.
Kadir, A. 2013. Dasar pengolahan Citra dengan Delphi. Penerbit Andi: Yogyakarta.
Kadir, A. & Susanto. A. 2013. Teori dan Aplikasi Pengolahan Citra Digital. Penerbit
(27)
Andi: Yogyakarta.
Knipe, H. 2015. Maxillary Keratocystic Odontogenic Tumour. Radiopedia.org, 21 September 2015 (diakses 21 September 2015).
Lestari, Dewi.2006.Analisis dan Implementasi Penghalusan Citra (Image Smooting) pada Citra Digital Menggunakan Metode Uniform Smooting, Gaussian Smooting, dan Threshold. Skripsi. Universitas Komputer Indonesia Bandung.
Munir, Rinaldi. 2004. Pengolahan Citra Digital dengan Pendekatan Algoritmik. Penerbit Informatika : Bandung.
Niknejad, M. T. 2015. Dentigerous. Radiopedia.org, 21 September 2015 (diakses 21
September 2015).
Pratt, K. William., 1991. Digital Image Processing, Secon Edition, Jhon Wiley And
Son : USA
Putra, D. 2010. Pengolahan Citra Digital. Penerbit ANDI: Yogyakarta.
Rabou, A. A. 2014. Ameloblastoma. Radiopedia.org, 21 September 2015 (diakses 21
September 2015).
Shih, F. Y. 2009. Image Prosessing and Mathematical Morphology. CRC Press: New
York.
Surya, A.T. 2009.Gambaran Radiografi Odontogenik Keratokista. Skripsi. Universitas Sumatera Utara.
Sutoyo, T. & Mulyanto, E. 2009.Teori Pengolahan Citra Digital. Penerbit ANDI:Yogyakarta.
Wijaya, E. 2012 Analisis Intensitas Pendeteksian Tepi Sobel. Skripsi. Universitas Komputer Indonesia Bandung.
(28)
BAB III
ANALISIS DAN PERANCANGAN SISTEM
3.1 Analisis Sistem
Analisis system merupakan tahapan awal yang dilakukan dalam memahami sebuah sistem. Tahapan ini menjelaskan berbagai permasalahan yang akan membantu proses perancangan model sistem yang nantinya akan diimplementasikan.
3.1.1 Analisis Masalah
Rumusan masalah yang nantinya akan diselesaiakan pada penulisan skripsi ini, yaitu: 1. Bagaimana cara memperjelas tepian citra foto rontgen pada kasus kista rongga
mulut pada level penyakit ringan, sedang dan kronis.
2. Bagaimana perbandingan hasil deteksi tepi citra dengan menggunakan, metode Frei-Chen, Morphologi, Sobel, serta kombinasi metode Sobel dengan Morphologi dan Frei-Chen dengan Morphologi berdasarkan parameternya.
Permasalahan yang akan diangkat dari penelitian ini adalah bagaimana cara memperjelas tepi citra pada foto Rontgen dengn format JPG yang diubah dalam bentuk grayscale. Kemudian akan dilakukan pendeteksian tepi citra dengan metode Frei-Chen, Sobel, dan Morphologi. Ukuran citra maksimum yang digunakan dalam penelitian ini adalah 700 x 700 pixel. Masalah pada penelitian ini secara umum ditunjukkan dengan menggunakan diagram Ishikawa pada Gambar 3.1.
(29)
Material Metode
User Sistem
Citra rontgen dengan format .jpg
Operator Sobel
Operator Frei-Chen
Operator Morphologi
Deteksi Tepi citra
Melakukan pendeteksian tepi citra Menginputkan citra
rontgen
Menggunakan Sistem
Gambar 3.1 Ishikawa Diagram
3.1.2 Analisis Persyaratan
Terdapat dua bagian pada analisis persyaratan, yaitu persyaratan fungsional dan persyaratan non-fungsional.
3.1.2.1 Persyaratan Fungsional
Analisis fungsional disini mendekripsikan tentang sistem yang disediakan. sistem ini mendeteksi tepi pada citra foto rontgen menggunakan metode Frei-Chen, Sobel, dan Morphologi terdapat beberapa persyaratan fungsional antara lain :
1. Format citra merupakan citra Rontgen dengan format JPG yang diubah dalam bentuk grayscale.
2. Ukuran citra maksimum yang digunakan adalah 700 x 700 pixel.
3. Metode yang digunakan untuk mendeteksi tepi citra adalah Frei-Chen, Morphologi, Sobel, kombinasi metode Sobel dan Morphologi, serta kombinasi Frei-Chen dengan Morphologi.
4. Parameter yang digunakan untuk membandingkan kualitas citra adalah Mean Square Error (MSE), Peak Signal to Noise Ratio (PSNR), dan running time (waktu akses).
(30)
3.1.2.2 Persyaratan Non-Fungsional
Kebutuhan non-fungsional adalah kebutuhan yang berisi kinerja operasional dan performance dari suatu sistem. Terdapat beberapa persyaratan non-fungsional yang harus dipenuhi diantaranya :
1. Performa
Perangkat lunak yang akan dibangun harus dapat menunjukkan hasil dari proses deteksi tepi pada citra.
2. Mudah digunakan
Sistem yang dibangun harus mudah digunakan (user friendly), artinya sistem ini akan mudah digunakan oleh user dengan tampilan yang sederhana dan dapat dimengerti.
3. Hemat Biaya
Sistem atau perangkat lunak yang digunakan tidak memerlukan perangkat tambahan yang dapat mengeluarkan biaya.
4. Dokumentasi
Sistem yang dibangun harus bisa menyimpan citra hasil proses deteksi tepi pada citra.
5. Kontrol
Sistem yang dibangun harus dapat menampilkan kotak dialog eror ketika user salah dalam melakukan penginputan.
6. Manajemen Kualitas
Sistem atau perangkat lunak yang dibangun harus memiliki kualitas yang baik yaitu dapat menghitung nilai MSE dan PSNR secara tepat serta dapat menghitung nilai running time.
(31)
3.1.3 Analisis Proses
Sistem ini memiliki lima proses, yaitu proses deteksi tepi dengan menggunakan metode Frei-Chen, Sobel, dan Morphologi serta deteksi tepi dengan kombinasi metode Sobel dengan Morphologi serta Frei-Chen dengan Morphologi. Selanjutnya akan dilakukan proses perhitungan nilai MSE, PSNR dan Running Time pada masing-masing proses deteksi tepi.
3.1.3.1 Use Case Diagram
Use case diagram menggambarkan interaksi antara sistem dengan pelaku. Diagram use case ini mendeskripsikan siapa saja yang menggunakan sistem dan bagaimana cara mereka berinteraksi dengan sistem. Use case diagram dapat ditunjukkan pada Gambar 3.2 berikut ini.
Pengguna
System
Input Citra
Deteksi Tepi Frei-Chen deteksi Tepi Morphologi
Ubah Citra ke Grayscale
Deteksi Tepi Sobel
Deteksi Tepi Sobel & Morphologi Deteksi Tepi
«extends»
«extends»
«extends»
«extends»
Deteksi Tepi Frei-Chen & Morphologi «extends»
«extends»
Hitung MSE, PSNR, & Running Time
Simpan Citra «extends»
«extends»
«extends»
«extends»
«extends»
«extends» «extends»
(32)
3.1.3.1.1 Use Case Input Citra
Spesifikasi use case input citra dapat dilihat pada Tabel 3.1. Tabel 3.1 Spesifikasi Use Case Input Citra
Name Input Citra
Actors Pengguna
Trigger Pengguna memilih menu Deteksi Tepi.
Preconditions Pengguna menggunakan aplikasi Deteksi Tepi pada citra.
Post Conditions Sistem akan menampilkan citra dan yang telah dipilih dan mengubahnya menjadi citra grayscale
Success Scenario 1.Pengguna mengeksekusi menu Deteksi Tepi. 2.Sistem akan menampilkan halaman Deteksi Tepi. 3.Pengguna memilih citra awal yang berupa citra
rontgen berformat JPG.
4. Sistem akan menampilakan citra yang telah diubah menjadi citra grayscale lalu menampilkan lokasi file, ukuran, dan dimensi citra.
Alternative Flows -
3.1.3.1.2 Use Case Deteksi Tepi Sobel
Spesifikasi use case Deteksi Tepi Sobel dapat dilihat pada Tabel 3.2. Tabel 3.2 Spesifikasi Use Case Deteksi Tepi Sobel
Name Deteksi Tepi Sobel
Actors Pengguna
Trigger Pengguna memilih menu Deteksi Tepi
Preconditions Pengguna menginput citra yang akan dideteksi tepi. Post Conditions Sistem akan menampilkan citra yang telah dideteksi
tepi dengan metode Sobel, berikut dengan nilai MSE, PSNR, dan Running Time.
Success Scenario 1.Pengguna mengeksekusi tombol Deteksi Tepi 2.Sistem akan menampilkan citra hasil deteksi tepi. 3.Sistem akan menampilkan nilai MSE, PSNR, dan
(33)
Running Time citra.
4.Pengguna dapat melihat file citra yang telah dideteksi tepi dengan metode Sobel berikut dengan nilai MSE, PSNR dan Running Time citra. Alternative Flows -
3.1.3.1.3 Use Case Deteksi Tepi Frei-Chen
Spesifikasi use case Deteksi TepiFrei-Chen dapat dilihat pada Tabel 3.3. Tabel 3.3 Spesifikasi Use Case Deteksi Tepi Frei-Chen
Name Deteksi Tepi Frei-Chen
Actors Pengguna
Trigger Pengguna memilih menu Deteksi Tepi
Preconditions Pengguna menginput citra yang akan dideteksi tepi. Post Conditions Sistem akan menampilkan citra yang telah dideteksi
tepi dengan metode Frei-Chen, berikut dengan nilai MSE, PSNR, dan Running Time.
Success Scenario 1. Pengguna mengeksekusi tombol Deteksi Tepi 2. Sistem akan menampilkan citra hasil deteksi tepi. 3. Sistem akan menampilkan nilai MSE, PSNR, dan
Running Time citra.
4. Pengguna dapat melihat file citra yang telah dideteksi tepi dengan metode Frei-Chen berikut dengan nilai MSE, PSNR dan Running Time citra. Alternative Flows -
3.1.3.1.4 Use Case Deteksi Tepi Morphologi
Spesifikasi use case deteksi tepi Morphologi dapat dilihat pada Tabel 3.4. Tabel 3.4 Spesifikasi Use Case Deteksi Tepi Morphologi
Name Deteksi Tepi Morphologi
Actors Pengguna
Trigger Pengguna memilih menu Deteksi Tepi
(34)
Post Conditions Sistem akan menampilkan citra yang telah dideteksi tepi dengan metode morphologi, berikut dengan nilai MSE, PSNR, dan Running Time.
Success Scenario 1. Pengguna mengeksekusi tombol Deteksi Tepi 2. Sistem akan menampilkan citra hasil deteksi tepi. 3. Sistem akan menampilkan nilai MSE, PSNR, dan
Running Time citra.
4. Pengguna dapat melihat file citra yang telah dideteksi tepi dengan metode morphologi berikut dengan nilai MSE, PSNR dan Running Time citra. Alternative Flows -
3.1.3.1.5 Use Case Deteksi Tepi Sobel Dan Morphologi
Spesifikasi use case deteksi tepi Sobel dan Morphologi dapat dilihat pada Tabel 3.5. Tabel 3.5 Spesifikasi Use Case Deteksi Tepi Sobel Dan Morphologi
Name Deteksi Tepi Sobel dan Morphologi
Actors Pengguna
Trigger Pengguna memilih menu Deteksi Tepi
Preconditions Pengguna melakukan deteksi tepi citra dengan metode Sobel.
Post Conditions Sistem akan menampilkan citra yang telah dideteksi tepi dengan metodeSobel danmorphologi, berikut dengan nilai MSE, PSNR, dan Running Time.
Success Scenario 1. Pengguna mengeksekusi tombol Deteksi Tepi 2. Sistem akan menampilkan citra hasil deteksi tepi. 3. Sistem akan menampilkan nilai MSE, PSNR, dan
Running Time citra.
4. Pengguna dapat melihat file citra yang telah dideteksi tepi dengan metode Sobel dan
Morphologi berikut dengan nilai MSE, PSNR dan Running Time citra.
Alternative Flows -
3.1.3.1.6 Use Case Deteksi Tepi Frei-Chen Dan Morphologi
(35)
Tabel 3.6 Spesifikasi Use Case Deteksi Tepi Frei-Chen Dan Morphologi
Name Deteksi Tepi Sobel dan Morphologi
Actors Pengguna
Trigger Pengguna memilih menu Deteksi Tepi
Preconditions Pengguna melakukan deteksi tepi citra dengan metode Sobel.
Post Conditions Sistem akan menampilkan citra yang telah dideteksi tepi dengan metodeSobel danmorphologi, berikut dengan nilai MSE, PSNR, dan Running Time.
Success Scenario 1. Pengguna mengeksekusi tombol Deteksi Tepi 2. Sistem akan menampilkan citra hasil deteksi tepi. 3. Sistem akan menampilkan nilai MSE, PSNR, dan
Running Time citra.
4. Pengguna dapat melihat file citra yang telah dideteksi tepi dengan metode Sobel dan
Morphologi berikut dengan nilai MSE, PSNR dan Running Time citra.
Alternative Flows - 3.1.3.1.7 Use Case Simpan Citra
Spesifikasi use case Simpan Citra Hasil Deteksi tepi dapat dilihat pada Tabel 3.7. Tabel 3.7 Spesifikasi Use Case Simpan Citra
Name Simpan Citra
Actors Pengguna
Trigger Pengguna telahmelihat hasil deteksi tepi dan perhitungan nilai MSE, PSNR, dan Running Time. Preconditions Pengguna mengakses menu Deteksi Tepi
Post Conditions Sistem menyimpan citra hasil Deteksi Tepi dengan metode Sobel, Frei-Chen, morphologi, Sobel dan Morphologi serta Frei-Chen dan Morphologi
Success Scenario 1.Pengguna mengeksekusi tombol Simpan Gambar. 2.Sistem akan menampilkan pop-up window Save
Asuntuk menampilkan lokasi penyimpanan gambar.
3.Pengguna menyimpan citra hasil deteksi tepi. 4.Sistem akan menyimpan citra hasil deteksi tepi.
(36)
Alternative Flows - 3.1.3.2 Activity Diagram
Activity diagram adalah diagram aktivitas yang mendeskripsikan proses kerja dalam sebuah sistem yang sedang berjalan.Activity diagram bertujuan untuk membantu memahami keseluruhan proses dan menggambarkan interaksi antara beberapa use case.Activity diagram sistem ini dapat dilihat pada Gambar 3.3.
System User
Pilih Menu
Ambil Gambar
Pilih Deteksi Tepi
Baca Citra
Ubah dalam Grayscale
Menampilkan Citra
Menekan Button Simpan
Deteksi Tepi
Menampilkan Citra Hasil Deteksi Tepi
Hitung Nilai MSE, PSNR dan Running Time
Menampilkan Nilai MSE, PSNR dan Running Time
Menyimpan Citra Deteksi Tepi
!=Deteksi Tepi
.*jpg
Metode Sobel
Metode Frei-Chen
Metode Morphologi
Metode Sobel dan Morphologi
Metode Frei-Chen dan Morphologi !=Sobel
!= Frei-Chen
!=morphologi
!=Sobel dan Morphologi
(37)
3.1.3.3 Sequence Diagram
Sequence diagram merupakan suatu diagram yang menampilkan interaksi-interkasi yang ada pada sistem secara berurutan.Sequence diagram sistem ini dapat dilihat pada Gambar 3.4.
Actor
Input Citra Deteksi Tepi Simpan Citra
Hasil Deteksi Tepi Hitung Nilai MSE,
PSNR dan Running Time
Input Citra
Tampil Citra Citra Telah Dideteksi Tepi Tampilkan Citra Hasil Deteksi tepi dan Parameter
Simpan Citra Citra Tersimpan
Gambar 3.4 Sequence Diagram
3.1.3.4 Analisis Proses Deteksi Tepi dengan Metode Sobel
Berikut ini merupakan contoh penggunaan metode Sobel. Dimisalkan terdapat suatu matriks citra input 5x5 :
⎣ ⎢ ⎢ ⎢
⎡35 151 69 24 36
6 1 10 7 5
8 3 8 8 5
2 5 1 9 4⎦
⎥ ⎥ ⎥ ⎤
Selanjutnya matriks tersebut dihitung dengan menggunakan kernel 3 x 3,dengan operator sobel yaitu :
(38)
Sx = (�2+��3+�4)- (�0+��7+�6)
Sy= (�0+��1+�2)- (�6+��5+�4)
� = ���2+��2
Perhitungan dimulai dari koordinat Sx(1, 1), Sy(1,1) dan dilakukan dengan mengambil matriks 3x3 dari matriks tetangga piksel yang akan direduksi. Untuk dapat melakukan operasi perhitungan pada koordinat (1,1) diberikan boundary matrik citra dengan nilai 0. Perhitungan dilakukan pada setiap nilai piksel pada matriks citra dimana c adalah konstanta bernilai 2. Contoh penggunaan rumus operator sobel dapat dilihat sepertidi bawah ini:
⎣ ⎢ ⎢ ⎢
⎡35 151 69 24 3 6
6 1 10 7 5
8 3 8 8 5
2 5 1 9 4⎦
⎥ ⎥ ⎥ ⎤ ⎣ ⎢ ⎢ ⎢ ⎢ ⎡ 0
0 0 3
0 1
0 5 15
0 6 0 2 0 3 0 0
9 4 6 0
0 6 1
0 0 0 8 2 0 3 5 0
10 7 5 0
8 1 0 8 9 0 5 0 4 0 0 0⎦ ⎥ ⎥ ⎥ ⎥ ⎤
��(1, 1) = (0 + 2(1) + 15)−(0 + 2(0) + 0) = 18
��(1, 1) = (0 + 2(0) + 0)−(0 + 2(5) + 15) =−25
�(1, 1) =�182+ (−25)2 = 30,81 = 31
��(1, 2) = (0 + 2(6) + 9)−(0 + 2(13) + 5) =−10
��(1, 2) = (0 + 2(0) + 0)−(5 + 2(15) + 9) =−44
�(1, 2) =�−102+ (−44)2 = 45,12 = 45
��(1, 3) = (0 + 2(2) + 4)−(0 + 2(1) + 15) =−9
�0 �1 �2
�7 (�,�) �3
(39)
��(1, 3) = (0 + 2(0) + 0)−(15 + 2(9) + 4) =−37
�(1, 3) =�−92+ (−37)2 = 38,07 = 38
��(1, 4) = (0 + 2(3) + 6)−(0 + 2(6) + 9) =−9
��(1, 4) = (0 + 2(0) + 0)−(9 + 2(4) + 6) =−23
�(1, 4) =�−92+ (−23)2 = 24,6 = 25
��(1, 5) = (0 + 2(0) + 0)−(0 + 2(2) + 4) =−8
��(1, 5) = (0 + 2(0) + 0)−(4 + 2(6) + 0) =−16
�(1, 5) =�−82+ (−16)2 = 17,83 = 18
��(2, 1) = (1 + 2(15) + 1)−(0 + 2(0) + 0) = 32
��(2, 1) = (0 + 2(3) + 1)−(0 + 2(6) + 1) =−6
�(2, 1) =�322+ (−6)2 = 33,10 = 33
��(2, 2) = (6 + 2(9) + 10)−(3 + 2(5) + 6) = 15
��(2, 2) = (3 + 2(1) + 6)−(6 + 2(1) + 10) =−7
�(2, 2) =�152+ (−7)2 = 16,55 = 17
��(2, 3) = (2 + 2(4) + 7)−(1 + 2(2) + 1) = 11
��(2, 3) = (1 + 2(6) + 2)−(1 + 2(10) + 7) =−13
�(2, 3) =�112+ (−13)2 = 17,02 = 17
��(2, 4) = (3 + 2(6) + 5)−(6 + 2(9) + 10) =−13
��(2, 4) = (6 + 2(2) + 3)−(10 + 2(7) + 5) =−16
�(2, 4) =�−132+ (−16)2 = 20,6 = 21
��(2, 5) = (0 + 2(0) + 0)−(2 + 2(4) + 7) =−17
��(2, 5) = (2 + 2(3) + 0)−(7 + 2(5) + 0) =−9
�(2, 5) =�−172+ (−9)2 = 19,23 = 19
��(3, 1) = (15 + 2(1) + 3)−(0 + 2(0) + 0) = 20
��(3, 1) = (0 + 2(5) + 15)−(0 + 2(8) + 3) =−6
�(3, 1) =�202+ (−6)2 = 20,8 = 21
��(3, 2) = (9 + 2(10) + 8)−(5 + 2(6) + 8) = 12
(40)
�(3, 2) =�122+ (−4)2 = 12,6 = 13
��(3, 3) = (4 + 2(7) + 8)−(2 + 2(1) + 3) = 19
��(3, 3) = (2 + 2(9) + 4)−(3 + 2(8) + 8) =−3
�(3, 3) =�192+ (−3)2 = 19,23 = 19
��(3, 4) = (6 + 2(5) + 5)−(9 + 2(10) + 8) =−16
��(3, 4) = (9 + 2(4) + 6)−(8 + 2(8) + 5) =−6
�(3, 4) =�−162+ (−6)2 = 17,08 = 17
��(3, 5) = (0 + 2(0) + 0)−(4 + 2(7) + 8) =−26
��(3, 5) = (4 + 2(6) + 0)−(8 + 2(5) + 0) =−2
�(3, 5) =�−262+ (−2)2 = 26,07 = 26
��(4, 1) = (3 + 2(5) + 0)−(0 + 2(0) + 0) = 13
��(4, 1) = (0 + 2(6) + 1)−(0 + 2(2) + 5) =−2
�(4, 1) =�132+ (−2)2 = 13,15 = 13
��(4, 2) = (10 + 2(8) + 1)−(6 + 2(8) + 2) = 3
��(4, 2) = (6 + 2(1) + 10)−(2 + 2(5) + 1) = 5
�(4, 2) =�32+ 52 = 5,8 = 6
��(4, 3) = (7 + 2(8) + 9)−(1 + 2(3) + 5) = 20
��(4, 3) = (1 + 2(10) + 7)−(5 + 2(1) + 9) = 12
�(4, 3) =�202+ 122 = 23,32 = 23
��(4, 4) = (5 + 2(5) + 4)−(10 + 2(8) + 1) =−8
��(4, 4) = (10 + 2(7) + 5)−(1 + 2(9) + 4) = 6
�(4, 4) =�−82+ 62 = 14,4 = 14
��(4, 5) = (0 + 2(0) + 0)−(0 + 2(8) + 9) =−25
��(4, 5) = (7 + 2(5) + 0)−(9 + 2(4) + 0) = 0
�(4, 5) =�−252+ 02 = 25
��(5, 1) = (3 + 2(5) + 0)−(0 + 2(0) + 0) = 13
��(5, 1) = (0 + 2(8) + 1)−(0 + 2(0) + 0) = 19
(41)
��(5, 2) = (8 + 2(1) + 0)−(8 + 2(2) + 0) =−2
��(5, 2) = (8 + 2(3) + 8)−(0 + 2(0) + 0) = 22
�(5, 2) =�−22+ 222 = 22,09 = 22
��(5, 3) = (8 + 2(9) + 0)−(2 + 2(5) + 0) =−13
��(5, 3) = (3 + 2(8) + 8)−(0 + 2(0) + 0) = 27
�(5, 3) =�−132+ 272 = 29,9 = 30
��(5, 4) = (5 + 2(4) + 0)−(8 + 2(1) + 0) = 3
��(5, 4) = (8 + 2(8) + 8)−(0 + 2(0) + 0) = 32
�(5, 4) =�32+ 322 = 32,1 = 32
��(5, 5) = (0 + 2(0) + 0)−(8 + 2(9) + 0) =−26
��(5,5) = (8 + 2(5) + 0)−(0 + 2(0) + 0) = 0
�(5, 5) =�−262+ 182 = 31,6 = 32
Setelah dilakukan perhitungan seperti diatas, maka didapat lah citra output dari matriks 5x5 yang sebelumnya telah disebutkan.
Citra output dapat dilihat pada matriks berikut ini:
⎣ ⎢ ⎢ ⎢
⎡35 151 69 24 36
6 1 10 7 5
8 3 8 8 5
2 5 1 9 4⎦
⎥ ⎥ ⎥ ⎤
⎣ ⎢ ⎢ ⎢
⎡3133 4517 3817 2521 1819
21 13 19 17 26
13 6 23 14 25
23 22 30 32 32⎦
⎥ ⎥ ⎥ ⎤
3.1.3.5 Analisis Proses Deteksi Tepi dengan Metode Frei-Chen
Berikut ini merupakan contoh penggunaan metode Frei-Chen. Dimisalkan terdapat suatu matriks citra input 5x5 :
(42)
⎣ ⎢ ⎢ ⎢
⎡35 151 69 24 36
6 1 10 7 5
8 3 8 8 5
2 5 1 9 4⎦
⎥ ⎥ ⎥ ⎤
Selanjutnya matriks tersebut dihitung dengan menggunakan kernel 3 x 3, dengan operator Frei-Chen yaitu :
��2 = (�2+��3+�4)- (�0+��7+�6) ��2= (�0+��1+�2)- (�6+��5+�4)
�= ���2 +��2
Perhitungan dimulai dari koordinat Fx(1,1), Fy(1,1) dan dilakukan dengan mengambil matriks 3x3 dari matriks tetangga piksel yang akan direduksi. Untuk dapat melakukan operasi perhitungan pada koordinat (1, 1) diberikan boundary matrik citra dengan nilai 0. Perhitungan ini dilakukan pada setiap nilai piksel pada matriks citra dimana c adalah konstanta bernilai √2. Contoh penggunaan operator Frei-Chen dapat dilihat seperti di bawah ini:
⎣ ⎢ ⎢ ⎢
⎡35 151 69 24 3 6
6 1 10 7 5
8 3 8 8 5
2 5 1 9 4
⎦ ⎥ ⎥ ⎥ ⎤ ⎣ ⎢ ⎢ ⎢ ⎢ ⎡ 0
0 0 3
0 1
0 5 15
0 6 0 2 0 3 0 0
9 4 6 0
0 6 1
0 0 0 8 2 0 3 5 0
10 7 5 0
8 1 0 8 9 0 5 0 4 0 0 0⎦ ⎥ ⎥ ⎥ ⎥ ⎤
��(1, 1) =�0 +√2(1) + 15� − �0 +√2(0) + 0�= 16
��(1, 1) = �0 +√2(0) + 0� − �0 +√2(5) + 15� =−22
�(1, 1) =�16 + (−22)2 = 27,2 = 27
�0 �1 �2
�7 (�,�) �3
(43)
��(1, 2) =�0 +√2(6) + 9� − �0 +√2(13) + 5�= −6
��(1, 2) = �0 +√2(0) + 0� − �5 +√2(15) + 9�=−35
�(1, 2) =�−62+ (−35)2 = 36
��(1, 3) =�0 +√2(2) + 4� − �0 +√2(1) + 15�= −10
��(1, 3) = �0 +√2(0) + 0� − �15 +√2(9) + 4�=−32
�(1, 3) =�−102+ (−32)2 = 34
��(1, 4) =�0 +√2(3) + 6� − �0 +√2(6) + 9� =−10
��(1, 4) = �0 +√2(0) + 0� − �9 +√2(4) + 6�=−21
�(1, 4) =�−102+ (−21)2 = 23,68 = 24
��(1, 5) =�0 +√2(0) + 0� − �0 +√2(2) + 4� =−7
��(1, 5) = �0 +√2(0) + 0� − �4 +√2(6) + 0�=−12
�(1, 5) =�−72+ (−12)2 = 23,68 = 24
��(2, 1) =�1 +√2(15) + 1� − �0 +√2(0) + 0�= 23
��(2, 1) = �0 +√2(3) + 1� − �0 +√2(6) + 1�=−4
�(2, 1) =�232+ (−4)2 = 23,68 = 24
��(2, 2) =�6 +√2(9) + 10� − �3 +√2(5) + 6�= 13
��(2, 2) = �3 +√2(1) + 6� − �6 +√2(1) + 10� =−7
�(2, 2) =�132+ (−7)2 = 14,76 = 15
��(2, 3) =�2 +√2(4) + 7� − �1 +√2(2) + 1� = 10
��(2, 3) = �1 +√2(6) + 2� − �1 +√2(10) + 7�=−11
�(2, 3) =�102+ 112 = 14,8 = 15
��(2, 4) =�3 +√2(6) + 5� − �6 +√2(9) + 10�= −12
��(2, 4) = �6 +√2(2) + 3� − �10 +√2(7) + 5�= 13
�(2, 4) =�−122+ 132 = 17,6 = 18
��(2, 5) =�0 +√2(0) + 0� − �2 +√2(4) + 7� =−15
(44)
�(2, 5) =�−152+ (−8)2 = 17
��(3, 1) =�15 +√2(1) + 3� − �0 +√2(0) + 0�= 19
��(3, 1) = �0 +√2(5) + 15� − �0 +√2(8) + 3�= 8
�(3, 1) =�192+ 82 = 20,6 = 21
��(3, 2) =�9 +√2(10) + 8� − �5 +√2(6) + 8�= 10
��(3, 2) = �5 +√2(2) + 9� − �8 +√2(3) + 8�= 3
�(3, 2) =�102+ 32 = 10,3 = 10
��(3, 3) =�4 +√2(7) + 8� − �2 +√2(1) + 3� = 15
��(3, 3) = �2 +√2(9) + 4� − �3 +√2(8) + 8�= 4
�(3, 3) =�152+ 42 = 15,52 = 16
��(3, 4) =�6 +√2(5) + 5� − �9 +√2(10) + 8�= 13
��(3, 4) = �9 +√2(4) + 6� − �8 +√2(8) + 5�= 4
�(3, 4) =�132+ 42 = 13,6 = 14
��(3, 5) =�0 +√2(0) + 0� − �4 +√2(7) + 8� =−22
��(3, 5) = �4 +√2(6) + 0� − �8 +√2(5) + 0�= 3
�(3, 5) =�−222+ 32 = 26,07 = 22
��(4, 1) =�3 +√2(5) + 0� − �0 +√2(0) + 0� = 10
��(4, 1) = �0 +√2(6) + 1� − �0 +√2(2) + 5�= 2
�(4, 1) =�102+ 22 = 10
��(4, 2) =�10 +√2(8) + 1� − �6 +√2(8) + 2�= 3
��(4, 2) = �6 +√2(1) + 10� − �2 +√2(5) + 1�= 7,3
�(4, 2) =�32+ 7,32 = 7,6 = 8
��(4, 3) =�7 +√2(8) + 9� − �1 +√2(3) + 5� = 17
��(4, 3) = �1 +√2(10) + 7� − �5 +√2(1) + 9�= 11
�(4, 3) =�172+ 112 = 20,32 = 20
(45)
��(4, 4) = �10 +√2(7) + 5� − �1 +√2(9) + 4�= 7
�(4, 4) =�−62+ 72 = 9,4 = 9
��(4, 5) =�0 +√2(0) + 0� − �0 +√2(8) + 9� =−20
��(4, 5) = �7 +√2(5) + 0� − �9 +√2(4) + 0�=−1
�(4, 5) =�−202+−12 = 20
��(5, 1) =�3 +√2(5) + 0� − �0 +√2(0) + 0� = 10
��(5, 1) = �0 +√2(8) + 1� − �0 +√2(0) + 0�= 8
�(5, 1) =�102+ 82 = 13
��(5, 2) =�8 +√2(1) + 0� − �8 +√2(2) + 0� =−1
��(5, 2) = �8 +√2(3) + 8� − �0 +√2(0) + 0�= 20
�(5, 2) =�−12+ 202 = 20
��(5, 3) =�8 +√2(9) + 0� − �2 +√2(5) + 0� = 12
��(5, 3) = �3 +√2(8) + 8� − �0 +√2(0) + 0�= 22
�(5, 3) =�122+ 222 = 25
��(5, 4) =�5 +√2(4) + 0� − �8 +√2(1) + 0� = 2
��(5, 4) = �8 +√2(8) + 8� − �0 +√2(0) + 0�= 27
�(5, 4) =�22+ 272 = 27
��(5, 5) =�0 +√2(0) + 0� − �8 +√2(9) + 0� =−21
��(5, 5) = �8 +√2(5) + 0� − �0 +√2(0) + 0�= 15
�(5, 5) =�−212+ 152 = 26
Setelah dilakukan perhitungan seperti diatas, maka didapat lah citra output dari matriks 5x5 yang sebelumnya telah disebutkan.
(46)
⎣ ⎢ ⎢ ⎢
⎡35 151 69 24 36
6 1 10 7 5
8 3 8 8 5
2 5 1 9 4⎦
⎥ ⎥ ⎥ ⎤ ⎣ ⎢ ⎢ ⎢
⎡2724 3615 3415 2418 2417
21 10 16 14 22
10 8 20 9 20
13 20 25 27 26⎦
⎥ ⎥ ⎥ ⎤
3.1.3.6 Analisis Proses Deteksi Tepi dengan Metode Morphologi
Berikut ini merupakan contoh penggunaan metode Morphologi. Dimisalkan terdapat suatu matriks citra input 5x5 :
⎣ ⎢ ⎢ ⎢
⎡35 151 69 24 36
6 1 10 7 5
8 3 8 8 5
2 5 1 9 4⎦
⎥ ⎥ ⎥ ⎤
Selanjutnya matriks tersebut dihitung dengan menggunakan kernel 3 x 3yaitu :
D(x,y) = maks (�0,�1,�2…�8); E(x,y) = min (�0,�1,�2…�8); T = D(x,y) - E(x,y)
Keterangan:
D(x, y) = Dilasi pada titik x, y E(x, y) = Erosi pada titik x, y T = Deteksi Tepi.
�0 �1 �2
�7 (�,�) �3
(47)
Perhitungan dimulai pada koordinat D (1, 1) dan E(1, 1) dan dilakukan dengan mengambil matriks 3x3 dari matriks tetangga piksel yang akan direduksi. Untuk dapat melakukan operasi perhitungan pada koordinat (1,1) diberikan boundary matrik citra dengan nilai 0. Perhitungan ini dilakukan pada setiap nilai piksel pada matriks citra. Contoh penggunaan operator Morphologi yaitu dilasi dan erosi untuk deteksi tepidapat dilihat seperti di bawah ini:
⎣ ⎢ ⎢ ⎢
⎡35 171 69 24 3 6
6 1 10 7 5
8 3 8 8 5
2 5 1 9 4⎦
⎥ ⎥ ⎥ ⎤ ⎣ ⎢ ⎢ ⎢ ⎢ ⎡ 0 0 0 3 0 1
0 5 15
0 6 0 2 0 3 0 0
9 4 6 0
0 6 1
0 0 0 8 2 0 3 5 0
10 7 5 0
8 1 0 8 9 0 5 0 4 0 0 0⎦ ⎥ ⎥ ⎥ ⎥ ⎤
D(1,1)= maks (0,0,0,15,1,6,0,0,3) = 15 E(1,1) = min (0,0,0,15,1,6,0,0,3) = 0 T(1,1) = 15 – 0 =15
D(1,2)= maks (0,0,0,9,10,1,6,3,15) = 15 E(1,2) = min (0,0,0,9,10,1,6,3,15) = 0 T(1,2) = 15 – 0 = 15
D(1,3)= maks (0,0,0,2,4,9,15,1,6) = 15 E(1,3) = min (0,0,0,2,4,9,17,1,6) = 0 T(1,3) = 15 – 0 = 15
D(1,4)= maks (0,0,0,3,2,4,9,6,2) = 9 E(1,4) = min (0,0,0,3,2,4,9,6,2) = 0 T(1,4) = 9 – 0 = 9
D(1,5)= maks (0,0,0,0,0,6,4,2,3) = 6 E(1,5) = min (0,0,0,0,0,6,4,2,3) = 0 T(1,5) = 6 - 0 = 6
D(2,1) = maks (0,3,1,15,1,6,0,0,5) = 15 E(2,1) = min (0,3,1,15,1,6,0,0,5) = 0 T(2,1) = 15 – 0 = 15
(48)
D(2,2)= maks (3,1,6,9,10,1,6,5,15) = 15 E(2,2) = min (3,1,6,9,10,1,6,5,15) = 1 T(2,2) = 15 – 1 = 14
D(2,3)= maks (1,6,2,4,7,10,1,2,9) = 10 E(2, 3)= min (1,6,2,4,7,10,1,2,9) = 1 T(2,3)= 10 – 1 = 9
D(2,4)= maks (6,2,3,6,5,7,10,9,4) = 10 E(2,4)= min (6,2,3,6,5,7,10,9,4) = 2 T(2,4)= 10 - 2 = 8
D(2,5)= maks (2,3,0,0,0,5,7,4,6) = 7 E(2,5) = min (2,3,0,0,0,5,7,4,6) = 0 T(2,5) = 7 - 0 = 7
D(3,1) = maks (0,5,15,1,3,8,0,0,5) = 15 E(3,1) = min (0,5,15,1,3,8,0,0,5) = 0 T(3,1) = 15 – 0 = 15
D(3,2)= maks (5,2,9,10,8,3,8,6,1) = 10 E(3,2)= min (5,2,9,10,8,3,8,6,1) = 1 T(3,2)= 10 – 1 = 9
D(3,3)= maks (2,9,4,7,8,8,3,1,10) = 10 E(3,3)= min (2,9,4,7,8,8,3,1,10) = 1 T(3,3)= 10 - 1= 9
D(3,4)= maks (9,4,6,5,5,8,8,10,7) = 10 E(3,4)= min (9,4,6,5,5,8,8,10,7) = 4 T(3,4) =10 – 4 = 6
D(3,5) = maks(4,6,0,0,0,5,8,7,5) = 8 E(3,5)= min (4,6,0,0,0,5,8,7,5) = 0 T(3,5) = 8 - 0 = 8
D(4,1) = maks (0,6,1,3,5,2,0,0,8) = 8 E(4,1)= min (0,6,1,3,5,2,0,0,8) = 0 T(4,1)= 8 - 0 = 8
(49)
D(4,2)= maks (6,1,10,8,1,5,2,8,3) = 10 E(4,2)= min (6,1,10,8,1,5,2,8,3) = 1 T(4,2)=10 - 1= 9
D(4, 3)= maks (1,10,7,8,9,1,5,3,8) = 10 E(4,3)= min (1,10,7,8,9,1,5,3,8) = 1 T(4,3)= 10 - 1 = 9
D(4,4)= maks (10,7,5,5,4,9,1,8,8) = 10 E(4,4)= min (10,7,5,5,4,9,1,8,8) = 1 T(4,4)= 10 - 1 = 9
D(4,5)= maks (7,5,0,0,0,4,9,8,5) = 9 E(4,5)= min (7,5,0,0,0,4,9,8,5) = 0 T(4,5)= 9 - 0 = 9
D(5,1)= maks (0,8,3,5,0,0,0,0,2) = 8 E(5,1)= min (0,8,3,5,0,0,0,0,2) = 0 T(5,1)= 8 – 0 = 8
D(5,2)= maks (8,3,8,1,0,0,0,2,5) = 8 E(5,2)= min (8,3,8,1,0,0,0,2,5) = 0 T(5,2)= 8 – 0 = 8
D(5,3)= maks (3,8,8,9,0,0,0,5,1) = 9 E(5,3)= min (3,8,8,9,0,0,0,5,1) = 0 T(5,3)=9-0=9
D(5,4)= maks (8,8,5,4,0,0,0,1,9) = 9 E(5,4)= min (0,8,3,5,0,0,0,0,2) = 0 T(5,4)= 9 – 0 = 9
D(5,5)= maks (8,5,0,0,0,0,0,9,4) = 9 E(5,5)= min (8,5,0,0,0,0,0,9,4) = 0 T(5,5)= 9 - 0 = 9
Setelah dilakukan perhitungan seperti diatas, maka didapat citra output dari matriks 5x5 yang sebelumnya telah disebutkan.
(50)
Citra output dapat dilihat pada matriks berikut ini:
⎣ ⎢ ⎢ ⎢
⎡35 12 69 24 36
6 1 10 7 5
8 3 8 8 5
2 5 1 9 4⎦
⎥ ⎥ ⎥ ⎤ ⎣ ⎢ ⎢ ⎢
⎡1515 1514 159 98 67
15 9 9 6 8
8 9 9 9 9
8 8 9 9 9⎦
⎥ ⎥ ⎥ ⎤
3.2 Pseudocode
Pseudocode adalah kode yang digunakan untuk menuliskan sebuah algoritma yang bebas dan tidak terkaid dengan bahasa pemrograman tertentu. Pseudocode berisi langkah-langkah untuk menyelesaikan suatu permasalahn yang bentuknya sedikit berbeda dari algoritma. Pseudocode menggunakan bahasa ynag mudah dipahami secara umum dan ringkas.
3.2.1 Pseudocode Proses Deteksi Tepi
1. Mengubah citra dengan format JPG menjadi citra grayscale
int rata2=0;
for y <-0; y< gambar.Tinggi; y++
for x<-0; x< gambar.Lebar; x++ rata2=(gambar.GetPixel(x, y).R +
gambar.GetPixel(x, y).G + gambar.GetPixel(x, y).B)/3;
2. Melakukan Konvolusi citra dengan ukuran kernel 3x3 int xStart, xFinish, yStart, yFinish;
int pixel;
xStart = xPos - 1 xFinish = xPos + 1 yStart = yPos - 1
yFinish = yPos + 1 for y <- yStart y <= yFinish for (int x <- xStart; x <= xFinish
if (x < 0 || y < 0 || x >(gambar.lebar-1) || y > (gambar.Tinggi - 1))
neighboursList.Add(0) else
pixel = bitmap.GetPixel(x, y).R neighboursList.Add(pixel)
(51)
3. Melakukan Deteksi Tepi Dengan Metode Sobel
int[,] sobelX = { {-1,0,1}, {-2,0,2}, {-1,0,1} }
int[,] sobelY = { { 1,2,1 }, { 0,0,0 }, { -1,-2,-1 } } int count = 0;
if (sobelX)) for y <- 0 y < 3
for x <- 0 x < 3
hasil += (sobelX[x, y] * (konvolusi[count])) count++
else if (sobelY)) for y <- 0 y < 3 for x <- 0 x < 3
Hasil += (sobelY[x, y] *(konvolusi[count])) count++
magnitude= (Math.Sqrt(Math.Pow(sobelX, 2) + Math.Pow(Sobel, 2)))
4. Melakukan Deteksi Tepi Dengan Metode Frei-Chen if (Frei_ChenX)
a=akar(2)
int[,] Frei_ChenX = { {-1, 0,1}, {-a,0,a}, {-1,0,1} } int[,] Frei_ChenY= { {1,a,1}, { 0,0,0 }, {-1,-a,-1} } int count = 0
for (int y <- 0 y < 3 for (int x <- 0 x < 3
Hasil+=(Frei_ChenX[x, y] * (konvolusi[count])) count++;
else if (Frei_ChenY)) for (int y <- 0 y < 3 for (int x <- 0 x < 3
result += (Frei_ChenY[x, y] * (konvolusi[count])) count++
magnitude= (Math.Sqrt(Math.Pow(sobelX, 2) + Math.Pow(Sobel, 2))) 4. Melakukan Deteksi Tepi Dengan Metode Morphologi
int result=0; int maks = 0; int count=0; int min = 255; if (Dilasi)
for (int y <- 0 y < 3 for (int x <- 0 x < 3 hasil+=(konvolusi[count]) if (maks < hasil)
maks= hasil count++
return maks; else if (Erosi)) for (int y <- 0 y < 3 for (int x <- 0 x < 3 hasil+=(konvolusi[count]) if (hasil < min){
(52)
min = hasil count++
Padapseudocode proses deteksi tepi Sobel, Frei-Chen dan Morphologi citra terlebih dahulu diubah dari format JPG menjadi grayscale, kemudian dilakukan pendeteksian tepi dengan menerapkan konvolusi 3x3 dan dioperasikan dengan operator Sobel dan Frei-Chen kemudian dihitung nilai Magnitudnya (gradiennya). Pada proses morphologi diambil nilai maks= 255, kemudian diambil nilai tertinggi dari citra konvolusi 3x3 untuk operasi dilasi, sedangkan untuk erosidiambil nilai min = 0, dan kemudian diambil nilai minimun dari citra konvolusi 3x3.
3.2.2 Pseudocode Proses Perhitungan MSE
for i <- 0 i < gambar.Tinggi for j <- 0 j < gambar.Tinggi r1 = gambar.GetPixel(j, i).R r2 = gambar.GetPixel(j, i).R sum += Math.Pow(r1 - r2, 2) g1 = gambar.GetPixel(j, i).G g2 = gambar.GetPixel(j, i).G sum += Math.Pow(g1 - g2, 2) b1 = gambar.GetPixel(j, i).B b2 = gambar.GetPixel(j, i).B sum += Math.Pow(b1 - b2, 2)
MSE=sum / (gambar.Height * gambar.Width); return MSE;
pada pseudocode menentukan nilai MSE dilakukan perhitungan citra asli dengan citra hasil yang telah dideteksi tepi.
3.2.3 Pseudocode Proses perhitungan presentase MSE
for (int i =0; i< gambar.Height; i++) for (int j= 0; j<gambar.Width; j++)
r=gambar.GetPixel(j,i).R;
(53)
persenMSE =MSE/sum * 100; return persenMSE;
3.2.4 Pseudocode Proses perhitungan PSNR
PSNR = Math.Log10(Math.Pow(255, 2) / MSE) return PSNR;
Pada pseudocode perhitungan PSNR dilakukan perhitungan dengan menggunakan hasil nilai MSE sebelumnya yang telah diproses.
3.3 Perancangan Sistem
(54)
Mulai Selesai Input Citra Asli (.jpg) Deteksi Tepi Sobel Deteksi Tepi Morphologi Deteksi Tepi Frei-Chen
Proses Deteksi Tepi Frei-Chen
Proses Deteksi Tepi Sobel
Proses Deteksi Morphologi
Citra Hasil Deteksi Tepi
Hitung PSNR, MSE dan Running Time Hasil Deteksi Tepi Citra Tampilkan Nilai
PNSR, MSE dan Running Time Ubah Citra Asli (.jpg) Menjadi Citra Grayscale
Citra Grayscale Deteksi Tepi Sobel & Morphologi Deteksi Tepi Frei-Chen &Morphologi
Proses Deteksi Tepi Sobel & Morphologi
Proses Deteksi Tepi Frei-Chen & Morphologi ya
Tidak Tidak Tidak Tidak Tidak
ya ya ya ya
Simpan
Deteksi Tepi Bantuan Tentang Keluar
Halaman Bantuan Halaman Tentang Tidak Tidak Tidak ya ya ya ya Tidak
Gambar 3.5 Flowchart Rancangan Sistem
3.3.2 Perancangan Antarmuka Sistem (Interface)
Perancangan antarmuka digunakan untuk menampilkan antarmuka sistem yang akan digunakan oleh pengguna. Sistem ini dirancang dalam 4 form, yaitu form Home, form Deteksi Tepi, form Tentang, dan form Bantuan.
(55)
3.3.2.1 Halaman Menu Utama
Halaman menu utama merupakan halaman yang pertama kali muncul pada saat sistem dijalankan. Halaman ini memiliki beberapa menu bar, yaitu menu home, menu deteksi tepi, menu bantuan, menu tentang, dan menu keluar. Tampilan rancangan halaman menu utama dapat dilihat pada Gambar 3.6 berikut.
Home Deteksi Tepi Bantuan Tentang Keluar
Judul
Nama dan Nim
Logo Fakultas
Program Studi
1 2 3 4 5
7 6
8
9
Gambar 3.6 Rancangan Antarmuka Halaman Menu Utama
Keterangan:
1. Merupakan Tool Strip Menu ItemHome.
2. Merupakan Tool Strip Menu Item Deteksi Tepi. 3. Merupakan Tool Strip Menu Item Tentang. 4. Merupakan Tool Strip Menu Item Bantuan. 5. Merupakan Tool Strip Menu Item Keluar. 6. Merupakan Label Judul Skripsi.
7. Merupakan Label Nama dan NIM. 8. Merupakan Picture Box Logo Fakultas.
(56)
9.Merupakan Label Program Studi. 3.3.2.2 Halaman Menu Deteksi Tepi
Halaman menu deteksi tepi merupakan halaman yang akan digunakan untuk melakukan proses deteksi tepi. Tampilan rancangan halaman Menu deteksi tepi dapat dilihat pada Gambar 3.7 berikut :
Home Deteksi Tepi Bantuan Tentang Keluar
5
7 Ambil Gambar
MSE PSNR Running Time File Ukuran Dimensi KB X Simpan Deteksi Tepi Deteksi Tepi Deteksi Tepi Deteksi Tepi Deteksi Tepi Simpan Simpan Simpan Simpan MSE MSE MSE MSE PSNR PSNR PSNR PSNR Running Time Running Time Running Time Running Time 7 8 9 7 10 Keterangan 15 6
1 2 3 4
55 45 35 25 12 11 16 14 13 24 23 22 21 20 19 18 17 33 32 31 30 29 28 27 26 34 10 10 10 10 10 10 10 10 10 10 10 65 63 64 61 60 59 58 57 56 54 53 52 51 50 49 48 47 46 44 43 42 41 40 39 38 37 36 62 Sobel Frei-Chen
Morphologi Sobel & Morphologi Frei-Chen & Morphologi File Info
Gambar 3.7 Rancangan Antarmuka Halaman Menu Detaksi Tepi
Keterangan:
1. Merupakan Tool Strip Menu ItemHome. 2. Merupakan Tool Strip Menu ItemDeteksi Tepi.
(57)
3. Merupakan Tool Strip Menu Item Tentang. 4. Merupakan Tool Strip Menu Item Bantuan. 5. Merupakan Tool Strip Menu Item Keluar. 6. Merupakan Group Box untuk File Info. 7. Merupakan Picture Box Citra Awal. 8. Merupakan Button Ambil Gambar. 9. Merupakan Label File.
10. Merupakan Label Ukuran. 11.Merupakan Label Dimensi
12. Merupakan Text Box untuk menampilkan lokasi File. 13. Merupakan Text Box untuk menampilkan Ukuran File.
14. Merupakan Text Box untuk menampilkan Panjang dan lebar Citra. 15. Merupakan Group Box untuk Sobel
16. Merupakan Picture Box Citra Sobel. 17. Merupakan Button Deteksi Tepi 18. Merupakan Button Simpan. 19.Merupakan Label MSE. 20.Merupakan Label PSNR.
21.Merupakan Label Running Time.
22. Merupakan Text Box untuk menampilkan nilai MSE. 23. Merupakan Text Box untuk menampilkan nilai PSNR.
24. Merupakan Text Box untuk menampilkan nilai Running Time. 25. Merupakan Group Box untuk Frei-Chen
26. Merupakan Picture Box Citra Frei-Chen. 27. Merupakan Button Deteksi Tepi
28. Merupakan Button Simpan. 29.Merupakan Label MSE. 30.Merupakan Label PSNR.
31.Merupakan Label Running Time.
(58)
33. Merupakan Text Box untuk menampilkan nilai PSNR.
34. Merupakan Text Box untuk menampilkan nilai Running Time. 35. Merupakan Group Box untuk Morphologi.
36. Merupakan Picture Box Citra Morphologi. 37. Merupakan Button Deteksi Tepi
38. Merupakan Button Simpan. 39.Merupakan Label MSE. 40.Merupakan Label PSNR.
41.Merupakan Label Running Time.
42. Merupakan Text Box untuk menampilkan nilai MSE. 43. Merupakan Text Box untuk menampilkan nilai PSNR.
44. Merupakan Text Box untuk menampilkan nilai Running Time. 45. Merupakan Group Box untuk Sobel & Morphologi.
46. Merupakan Picture Box Citra Sobel & Morphologi. 47. Merupakan Button Deteksi Tepi.
48. Merupakan Button Simpan. 49.Merupakan Label MSE. 50.Merupakan Label PSNR.
51.Merupakan Label Running Time.
52. Merupakan Text Box untuk menampilkan nilai MSE. 53. Merupakan Text Box untuk menampilkan nilai PSNR.
54. Merupakan Text Box untuk menampilkan nilai Running Time. 55. Merupakan Group Box untuk Frei-Chen & Morphologi. 56. Merupakan Picture Box Citra Frei-Chen & Morphologi. 57. Merupakan Button Deteksi Tepi.
58. Merupakan Button Simpan. 59.Merupakan Label MSE. 60.Merupakan Label PSNR.
61.Merupakan Label Running Time.
(59)
63. Merupakan Text Box untuk menampilkan nilai PSNR.
64. Merupakan Text Box untuk menampilkan nilai Running Time. 65. Merupakan Group BoxKeterangan.
3.3.2.3 Halaman Menu Bantuan
Tampilan rancangan halaman Menu Bantuan dapat dilihat pada Gambar 3.8 berikut :
1
Bantuan
Gambar 3.8 Rancangan Antarmuka Halaman Menu Bantuan
Keterangan :
1.Merupakan Group Box untuk Bantuan. 3.3.2.4 Halaman Menu Tentang
Halaman menu Tentang merupakan halaman tentang penulis dan keterangan lainnya. Tampilan rancangan halaman menu Tentang dapat dilihat pada Gambar 3.9 berikut :
(60)
2 1
Identitas Foto
AUTHOR
Gambar 3.9 Rancangan Antar muka Halaman Menu Tentang
Keterangan :
1. Merupakan Picture Box untuk menampilkan Foto Penulis. 2 Merupakan Group Box untuk menampilkan identitas penulis.
(61)
BAB IV
IMPLEMENTASI DAN PENGUJIAN
4.1. Implementasi Sistem
Setelah proses analisis dan perancangan sistem, tahap selanjutnya adalah proses implementasi dan pengujian sistem. Implementasi sistem merupakan penerapan fungsionalitas suatu sistem setelah selesai dilakukan pemodelan dan perancangan sistem. Impelementasi sistem inidibangun dengan menggunakan bahasa pemrograman C# dengan memakai IDE SharpDevelop. Terdapat 4 form utama pada sistem ini yaitu form Home (Mainform), form Deteksi Tepi, form Bantuan, dan form Tentang.
4.1.1 Form Menu Utama (Mainform)
Form menu Utama adalah form yang ditampilkan saat aplikasi dijalankan pertama kali. Form Menu Utama menampilkanin formasi judul skripsi, data penulis, dan menu untuk memanggil form Deteksi Tepi, form Bantuan, dan form Tentang. Tampilan form Home dapat dilihat pada Gambar 4.1.
(62)
Gambar 4.1 Tampilan Form Menu Utama
4.1.2 Form Deteksi Tepi
Form Deteksi Tepi merupakan form implementasi dan perbandingan metode Chen, Morphologi, Sobel, kombinasi metode Sobel dan Morphologi serta Frei-Chen dan Morphologi untuk deteksi tepi citra. Form ini menampilkan citra asli sebelum mengalami proses deteksi tepi, citra yang diubah menjadi citra grayscale dan citra yang telah mengalami proses deteksi tepi beserta perhitungan MSE, PSNR, dan Running Time dari proses deteksi tepi tersebut. Tampilan form Deteksi Tepi dapat dilihat pada Gambar 4.2.
(63)
Gambar 4.2 Tampilan Form Deteksi Tepi 4.1.3 Form Bantuan
Form Bantuan berisi panduan untuk pengguna agar dapat menjalankan dan menggunakan sistem aplikasi dengan mudah. Tampilan form Bantuan dapat dilihat pada Gambar 4.3.
(64)
4.1.4 Form Tentang
Form Tentang menampilkan data dan profil penulis. Tampilan form Tentang dapat dilihat pada Gambar 4.4.
Gambar 4.4 Tampilan Form Tentang.
4.2. Pengujian Sistem
Pengujian sistem merupakan hasil dari proses implementasi sistem. Pengujian dilakukan dengan menggunakan dua buah citra berformat JPG lalu diubah ke dalam format bitmap berukuran maksimum700x700 piksel. Ada 9 file citra yang digunakan dimana masing-masing penyakit kista rongga mulut yaitu ameloblastoma, dentigerous dan Odontogenik Keraticyst diambil 3 sampel foto rontgen. Gambar 4.5, 4.6, 4.7 menunjukan gambar yang akan diuji.
(65)
Gambar 4.5 Gambar Radiografi Kista Ameloblastoma (a) Unicystic Luminal Ameloblastoma (Hannessy, 2015), (b) Multicystic
Ameloblastoma (Gaillard, 2008), (c) Malignant Ameloblastoma (Rabou, 2014)
Gambar 4.6 Gambar Radiografi Kista Dentigerous (a) Unilacular Dentigerous (Niknejad, 2012), (b) Maxilary Dentigerous (Hacking, 2015),
(c) Dentigerous in Left Maxillary Antrum (Donnel, 2012)
Gambar 4.7 Gambar Radiografi Kista Odontogenik Keratocyst (a) Glandular Odontogenic Cyst (Freisen, 2014), (b) Mandibular Swelling Odontogenic (Dixon, 2010), (c)Maxillary Keratocyst Odontogenic Tumour (Knipe, 2015)
(66)
4.2.1 Proses Pengujian Form Deteksi Tepi
Pengujian metode deteksi tepidiawali dengan memilih citra rontgen kista rongga mulut yang akan digunakan dalam prosesdeteksi tepi yaitu dengancara memilih tombol ambil gambar. Selanjutnya sistem akan menampilkan cita yang telah dipilih dan telah diubah ke dalam bentuk grayscale. Setelah citra tampil pada sistem, langkah selanjutnya adalah memilih metode mana yang akan digunakan untuk proses deteksi tepi pada citra. Untuk lebih jelasnyaseperti yang ditunjukan pada gambar 4.5.
Gambar 4.5 Proses Input Citra pada Form Deteksi Tepi.
4.2.2 Proses Pengujian Proses Deteksi Tepi
Proses Pengujian deteksi tepi pada form deteksi tepi untuk membuktikan hasil dari deteksi tepi. Ada 9 citra yang diuji yaitu citra foto rontgen penyakit kista rongga mulut yaitu Ameloblastoma, dentigerous, dan odontogenik keratocyst, masing masing 3 sample citra diuji dari tiap penyakit. Citra tersebut akan dideteksi tepi dengan menggunakan metode Sobel, Frei-Chen, Morphologi,
(67)
kombinasi Sobel dan Morphologi serta kombinasi Frei-Chen dan Morphologi. Hasil deteksi tepi akan ditampilkan dengan nilai parameternya yaitu: MSE, PSNR, dan Running Time. Masing- masing metode akan dibandingkan nilai parameter dari hasi deteksi tepinya. Tampilan proses deteksi tepi pada form Deteksi Tepi ditunjukan pada gambar 4.6.
Gambar 4.6 Proses Pengujian Proses Deteksi Tepi dengan Metode Sobel, Frei-Chen, Morphologi, Kombinasi Sobel dan Morphologi serta Kombinasi
Frei-Chen dan Morphologi
4.3. Hasil Pengujian
Pengujian metode deteksi tepi dilakukan terhadap 9 citra foto rontgen berformat JPG dengan ukuran dimensi yang bervariasi
Hasil pengujian metode Sobel dalam mendeteksi tepi citra foto rontgen penyakit kista rongga mulutdapat dilihat pada tabel 4.1.
(68)
Tabel 4.1 Hasil Pengujian Metode Sobel
Sobel
Jenis Kista Unicystic luminal Ameloblastoma
Multicystic Ameloblastoma
Malignant Ameloblastoma
Amelo blastoma
MSE : 22300,98203125 MSE : 31469,7531314 MSE :14288,86265406 PSNR : 0,464756373094 PSNR :0,31518702482 PSNR :0,658082699097
Running Time :0,702 Running Time :8,227 Running Time :4,0
Denti gerous
Unilacular Dentigerous Maxilary Dentigerous Dentigerous in Left Maxillary Antrum
(1)
3.1.3.1.4 Use Case Deteksi Tepi Morphologi
3.1.3.1.5 Use Case Deteksi Tepi Sobel dan Morphologi 3.1.3.1.6 Use Case Deteksi Tepi Frei-Chen dan Morphologi 3.1.3.1.7 Use Case Simpan Citra
36 36 37 38 3.1.3.2 Activity Diagram
3.1.3.3 Sequence Diagram
3.1.3.4 Analisis Proses deteksi tepi dengan Metode Sobel 3.1.3.5 Analisis Proses deteksi tepi dengan Metode Frei-Chen 3.1.3.6 Analisis Proses deteksi tepi dengan Metode Morphologi 3.2 Pseudocode
3.2.1 Pseudocode Proses Deteksi Tepi 3.2.2 Pseudocode Proses Perhitungan MSE
3.2.3 Pseudocode Proses Perhitungan Presentase MSE 3.2.4 Pseudocode proses Perhitungan PSNR
39 40 41 45 49 43 54 55 56 56 3.3 Perancangan Sistem
3.3.1 Flowchart Perancangan Sistem
3.3.2 Perancangan Antarmuka Siatem (Interface)
57 57 58 3.3.2.1 Halaman Menu Home
3.3.2.2 Halaman Menu Deteksi Tepi 3.3.2.3 Halaman Menu Bantuan 3.3.2.4 Halaman Menu Tentang
58 59 63 63
Bab IV Implementasi dan Pengujian 64
4.1 Implementasi Sistem 64
4.1.1 Form home (MainForm) 65
4.1.2.Form Deteksi Tepi 66
4.1.3 Form Bantuan 67
4.1.4 Form Tentang 67
4.2 Pengujian Sistem
4.2.1 Proses Pengujian Form Deteksi Tepi
67 69
(2)
4.2.2 Proses Pengujian Proses Deteksi tepi 4.3 Hasil Pengujian
69 70
Bab V Kesimpulandan Saran 85
5.1 Kesimpulan 5.2 Saran
85 86 Daftar Pustaka
Lampiran Listing Program Lampiran Curriculum Vitae
87
A1 B1
(3)
DAFTAR TABEL
Nomor Tabel
NamaTabel Halaman
2.1 2.2 2.3 3.1 3.2 3.3 3.4 3.5 3.6 3.7 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9
Warna dan Nilai Penyusun Warna
Tabel Kebenaran AND, OR, XOR dan NAND Tabel Kebenaran NOT
Spesifikasi Use Case Input Citra
Spesifikasi Use Case Deteksi Tepi Sobel Spesifikasi Use Case Deteksi Tepi Frei-Chen Spesifikasi Use Case Deteksi Tepi Morphologi Spesifikasi Use Case Deteksi Tepi Sobel dan Morphologi
Spesifikasi Use Case Deteksi Tepi Frei-Chen dan Morphologi
Spesifikasi Use Case Simpan Citra Hasil Pengujian Metode Sobel Hasil Pengujian Metode Frei-Chen Hasil Pengujian Metode Morphologi
Hasil Pengujian Metode Sobel dan Morphologi Hasil Pengujian Metode Frei-Chen dan Morphologi Perbandingan Nilai MSE, Hasil Deteksi Tepi
Metode Sobel , Frei-Chen, Morphologi,Kombinasi Sobel dan Morphologi serta Kombinasi Frei-Chen dan Morphologi
Perbandingan Nilai MSE, Hasil Deteksi Tepi Metode Sobel , Frei-Chen, Morphologi,Kombinasi Sobel dan Morphologi serta Kombinasi Frei-Chen dan Morphologi dalam persen (%)
Perbandingan Nilai PSNR, Hasil Deteksi Tepi Metode Sobel , Frei-Chen, Morphologi,Kombinasi Sobel dan Morphologi serta Kombinasi Frei-Chen dan Morphologi
Perbandingan Nilai Running Time, Hasil Deteksi Tepi Metode Sobel , Frei-Chen, Morphologi, Kombinasi Sobel dan Morphologi serta Kombinasi Frei-Chen dan Morphologi
10 24 24 35 35 36 37 38 38 39 71 73 75 77 79 81 82 83 83
(4)
DAFTAR GAMBAR
Nomor Gambar
NamaGambar Halaman
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 2.14 2.15 2.16 3.1 3.2 3.3 3.4 3.5 3.6 3.7
Gambar Citra Rontgen Contoh Citra RGB Contoh Citra Biner Contoh Citra Grayscale Sistem Koordinat Citra
Gambar Radiografi Kista Ameloblastoma (a)Unicystic luminal Ameloblastoma (b) Multicystic Ameloblastoma, (c) Malignant Ameloblastoma
Gambar Radiografi Kista Odontogenik Keratocyst (a) Glandular Odontogenic Cyst, (b) Mandibular Swelling Odontogenic, (c) Maxillary Keratocyst Odontogenic Tumour
Gambar Radiografi Kista Dentigerous Unilacular Dentigerous, (b) Maxilary Dentigerous, (c) Dentigerous in Left Maxillary Antrum
Penggunaan Operasi Uniaon pada Citra Biner Penggunaan Operasi Interseksi pada Citra Biner Penggunaan Operasi Komplemen pada Citra Biner Penggunaan Operasi Translasi pada Citra Biner Hasil Operasi Logika atas Dua Citra A dan B (a) Element Penstruktur Squre (b) Element Penstruktur Rectangel (c) Element Penstruktur Line (d) Element Penstruktur Disk (e) Element penstruktur Diamond
Penggunaan Operasi Dilasi Pada Citra Penggunaan Operasi Erosi Pada Citra Ishikawa Diagram
Use Case Diagram Activity Diagram Sequence Diagram
Flowchart Rancangan Sistem
Rancangan Antarmuka Halaman Menu Utama Rancangan Antarmuka Halaman Menu Deteksi Tepi 8 10 11 12 12 16 16 16 21 22 23 23 24 25 27 27 32 34 40 41 57 58 59
(5)
4.4 4.5
4.6
4.7
4.8 4.9
Tampilan Form Tentang
Gambar Radiografi Kista Ameloblastoma (a)Unicystic luminal Ameloblastoma (b) MulticysticAmeloblastoma, (c) Malignant Ameloblastoma
Gambar Radiografi Kista Odontogenik Keratocyst (a) Glandular Odontogenic Cyst, (b) Mandibular Swelling Odontogenic, (c) Maxillary Keratocyst Odontogenic Tumour
Gambar Radiografi Kista Dentigerous Unilacular Dentigerous, (b) Maxilary Dentigerous, (c) Dentigerous in Left Maxillary Antrum Proses Input Citra pada Form Deteksi Tepi Proses Pengujian Deteksi Tepi dengan Metode Sobel, Frei-Chen, Morphologi, Kombinasi Sobel dan Morphologi serta Kombinasi Frei-Chen dan Morphologi
67 68
68
68
69 70
(6)
DAFTAR LAMPIRAN
A.Listing Program A-1