Implementasi dan Perbandingan Metode Frei-Chen, Morphologi dan Sobel untuk Deteksi Tepi pada Citra Foto Rontgen Kista Rongga Mulut

(1)

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