• Tidak ada hasil yang ditemukan

BAB 5 KESIMPULAN DAN SARAN

5.2. Saran

Adapun saran yang ingin penulis berikan sehubungan dengan hasil penelitian ini adalah sebagai berikut :

1. Sistem ini dapat dikembangkan lebih lanjut sehingga dapat mendeteksi gambar

pada 1 (satu) atau lebih drive, tidak hanya terbatas pada 1 (satu) folder saja.

2. Dapat digunakan metode pendeteksian garis tepi lainnya, untuk

membandingkan hasil output standar deviasi, kurtosis dan skewness dengan

metode edge linking yang digunakan.

3. Dapat digunakan metode segmentasi lainnya, sehingga dapat dibandingkan

hasil outputnya dengan metode kohonen SOM yang digunakan.

DAFTAR PUSTAKA

Carlos Reyes-Aldasoro, Constantino. 2010. Image Segmantation With Kohonen

Neural Network Self-Organizing Map. Instituto Tecnologico Autonomo de Mexico

Fahzuanta, Putra Maqrifad. 2010. Analisis Perbandingan Pendeteksian Garis Tepi

Pada Citra Digital Antara Metode Edge Linking. Skripsi Sarjana Ilmu Komputer Universitas Sumatera Utara.

Fazry, Lhuqita. 2008. Kompresi Citra Menggunakan Metode Kompresi Citra Fraktal.

Skripsi Sarjana Sains Universitas Indonesia.

Heaton, j. 2003. Introduction to Neural Network with Java.

http://www.heatonresearch.com/articles/6/page2.html.

Iqbal, Muhammad. 2010. Analisis Threshold Untuk Mengekstrasi Jalan Dari Foto

Udara. Skripsi Sarjana Ilmu Komputer Universitas Sumatera Utara.

Iza, Dzikru Rohmatul. 2013. Steganografi Pada Citra Digital Menggunakan Metode

Discrete Wavelet Transform. Skripsi Sarjana Teknik Elektro Universitas Brawijaya.

Kusumadewi, s. 2003. Artificial Intelligence Teknik dan Aplikasinya. Yogyakarta:

Graha Ilmu.

Kusumanto, RD, Tompunu, Alan Novi. 2011. Pengolahan Citra Digital Untuk

Mendeteksi Obyek Menggunakan Pengolahan Warna Model Normalisasi.

Palembang: Seminar Nasional Teknologi Informasi Dan Komunikasi Terapan

Mandalasari, Alvia Ferry. 2013. Segmentasi Citra Medis Menggunakan Metode Otsu

Dan Iterasi. Skripsi Sarjana Teknik Informatika Universitas Sunan Kalijaga Yogyakarta

Siahaan, Meilinda. 2009. Implementasi Segmentasi Citra Menggunakan Metode Graph Yang Efisien. Skripsi Sarjan Sains Universitas Sumatera Utara.

Thaiyalnayaki, K. 2010. Finger Print Recognation Using Discrete Wavelet

Transform. Sri Venkateshwara College of Engineering Sriperumbudur, Chennai.

Zamasari, Reki. 2005. Pengenalan Pola Karakter Aksara Jawa dengan Algoritma Kohonen Neural Network. Skripsi Sarjana FMIPA Universitas Dipenogoro Semarang.

LAMPIRAN LISTING PROGRAM

Imports System Imports System.IO Imports System.Math Public Class frmUtama

Dim diCari As DirectoryInfo

Dim flPath As String, srcPath As String

Dim asNode As Double, dsNode As Double, ksNode As Double, ssNode As Double

Dim atNode() As Double, dtNode() As Double, ktNode() As Double, stNode() As Double

Dim tmpTarget As PictureBox Dim LT As Long, HT As Long

Dim MaxErr As Double, LRate As Double

Dim outDev() As Double, outKur() As Integer, outSkew() As Integer Dim inDev As Double, inKur As Integer, inSkew As Integer

Dim FinProses As Boolean

Dim posX As Single, posY As Single Private Sub DoReset()

ClearPictureBox(pbSource) ClearPictureBox(pbPreview) btnSource.Text = "Load" btnSource.Enabled = True btnProses.Enabled = False lblFolder.Text = "" txtLT.Text = "10" txtHT.Text = "250" txtErr.Text = "0.05" txtInDev.Text = "" txtInKur.Text = "" txtInSkew.Text = "" lstDeviasi.Items.Clear() lstKurtosis.Items.Clear() lstSkewness.Items.Clear() lstHasil.Items.Clear() lstDaftar.Items.Clear() End Sub

Private Sub ClearPictureBox(ByVal pb As PictureBox) pb.Image = Nothing

pb.BackColor = Color.Empty pb.Invalidate()

End Sub

Private Sub btnSource_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSource.Click

Select Case btnSource.Text Case "Load"

FinProses = False

ofdPicture.Filter = "BMP|*.bmp" ofdPicture.FileName = ""

ofdPicture.ShowDialog()

srcPath = ofdPicture.FileName If Len(srcPath) < 1 Then Exit Sub

pbSource.Image = LoadPic(Image.FromFile(srcPath), 150, 150)

btnSource.Text = "Deteksi Tepi" Case "Deteksi Tepi"

intVector = pbSource.Width * pbSource.Height pbSource.Image = DoEdgeLinking(pbSource, True) If Len(lblFolder.Text) < 1 Then

btnSource.Enabled = False Else

btnSource.Enabled = True End If

btnSource.Text = "Segmentasi Kohonen" Case "Segmentasi Kohonen"

LT = txtLT.Text HT = txtHT.Text

ReDim srcNode(intVector - 1)

pbSource.Image = DoSegment(pbSource, LT, HT, True, 0) asNode = AvgNode(True, 0)

dsNode = DevNode(asNode, True, 0)

ksNode = KurNode(asNode, dsNode, True, 0) ssNode = SkewNode(asNode, True, 0)

ReDim trgNode(lstDaftar.Items.Count - 1, intVector - 1)

ReDim atNode(lstDaftar.Items.Count - 1) ReDim dtNode(lstDaftar.Items.Count - 1) ReDim ktNode(lstDaftar.Items.Count - 1) ReDim stNode(lstDaftar.Items.Count - 1) tmpTarget = New PictureBox

tmpTarget.Width = 150 tmpTarget.Height = 150

For i = 0 To lstDaftar.Items.Count - 1 lstDaftar.SelectedIndex = i

tmpTarget.Image = LoadPic(Image.FromFile(flPath & "\" & lstDaftar.Items(i)), 150, 150)

tmpTarget.Image = DoEdgeLinking(tmpTarget, False) tmpTarget.Image = DoSegment(tmpTarget, LT, HT, False, i)

atNode(i) = AvgNode(False, i)

dtNode(i) = DevNode(atNode(i), False, i)

ktNode(i) = KurNode(atNode(i), dtNode(i), False, i)

stNode(i) = SkewNode(atNode(i), False, i) Next

btnProses.Enabled = True btnSource.Text = "Load" End Select

End Sub

Private Sub btnFolder_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFolder.Click

fbdFolder.Description = "Pilih Lokasi Folder" fbdFolder.ShowDialog()

flPath = fbdFolder.SelectedPath If Len(flPath) < 1 Then Exit Sub lblFolder.Text = flPath

diCari = New DirectoryInfo(flPath) lstDaftar.Items.Clear()

For Each fi In diCari.GetFiles("*.bmp") lstDaftar.Items.Add(fi.Name)

Next

If btnSource.Enabled = False Then btnSource.Enabled = True End Sub

Private Sub lstDaftar_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles lstDaftar.MouseDown If e.Button = Windows.Forms.MouseButtons.Right And FinProses Then

cmsAksi.Show(Me.lstDaftar, New Point(Me.posX, Me.posY)) End If

End Sub

Private Sub lstDaftar_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles lstDaftar.MouseMove posX = e.X

posY = e.Y End Sub

Private Sub lstDaftar_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

lstDaftar.SelectedIndexChanged

Using fs As New System.IO.FileStream(flPath & "\" & lstDaftar.Items(lstDaftar.SelectedIndex), IO.FileMode.Open, IO.FileAccess.Read) pbPreview.Image = LoadPic(Image.FromStream(fs), 150, 150) End Using If FinProses Then lstDeviasi.SelectedIndex = lstDaftar.SelectedIndex lstKurtosis.SelectedIndex = lstDaftar.SelectedIndex lstSkewness.SelectedIndex = lstDaftar.SelectedIndex lstHasil.SelectedIndex = lstDaftar.SelectedIndex Using fs As New System.IO.FileStream(flPath & "\" & lstDaftar.Items(lstDaftar.SelectedIndex), IO.FileMode.Open, IO.FileAccess.Read)

pbPreview.Image = LoadPic(Image.FromStream(fs), 150, 150)

End Using

pbPreview.Image = DoEdgeLinking(pbPreview, False) pbPreview.Image = DoSegment(pbPreview, LT, HT, False, lstDaftar.SelectedIndex)

End If End Sub

Private Sub btnReset_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReset.Click

DoReset() End Sub

Private Sub frmUtama_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

DoReset() End Sub

Private Sub btnProses_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProses.Click

Dim CekDev As Boolean, CekKur As Boolean, CekSkew As Boolean Dim Hasil() As String

MaxErr = txtErr.Text inDev = dsNode

tmpKur = ksNode - 3 If tmpKur < 0 Then inKur = -1

ElseIf tmpKur = 0 Then inKur = 0 Else inKur = 1 End If If ssNode < 0 Then inSkew = 0 Else inSkew = 1 End If txtInDev.Text = inDev txtInKur.Text = inKur txtInSkew.Text = inSkew ReDim outDev(lstDaftar.Items.Count - 1) ReDim outKur(lstDaftar.Items.Count - 1) ReDim outSkew(lstDaftar.Items.Count - 1) ReDim Hasil(lstDaftar.Items.Count - 1) lstDeviasi.Items.Clear() lstKurtosis.Items.Clear() lstSkewness.Items.Clear() lstHasil.Items.Clear() For i = 0 To lstDaftar.Items.Count - 1 outDev(i) = dtNode(i) tmpKur = ktNode(i) - 3 If tmpKur < 0 Then outKur(i) = -1 ElseIf tmpKur = 0 Then outKur(i) = 0 Else outKur(i) = 1 End If If stNode(i) < 0 Then outSkew(i) = 0 Else outSkew(i) = 1 End If

dDev = Abs(inDev - outDev(i)) * 100 If dDev <= MaxErr Then

CekDev = True Else

CekDev = False End If

If inKur = outKur(i) Then CekKur = True

Else

CekKur = False End If

If inSkew = outSkew(i) Then CekSkew = True

Else

CekSkew = False End If

If CekDev And CekKur And CekSkew Then Hasil(i) = "Mirip"

Else

Hasil(i) = "Tidak Mirip" End If lstDeviasi.Items.Add(outDev(i)) lstKurtosis.Items.Add(outKur(i)) lstSkewness.Items.Add(outSkew(i)) lstHasil.Items.Add(Hasil(i)) Next FinProses = True End Sub

Private Sub cmsAksi_ItemClicked(ByVal sender As Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles cmsAksi.ItemClicked

Dim strNewFile As String, strOldFile As String Dim tmpCheck As Boolean

strOldFile = flPath & "\" & lstDaftar.Items(lstDaftar.SelectedIndex)

If e.ClickedItem.Name = "tsmHapus" Then

If MsgBox("Anda Ingin Menghapus File Gambar " &

lstDaftar.Items(lstDaftar.SelectedIndex) & " Dari Media Penyimpanan Data?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Konfirmasi Hapus File") = MsgBoxResult.Yes Then

tmpCheck = False Do

Try

If File.Exists(strOldFile) Then FileSystem.Kill(strOldFile) MsgBox("File Berhasil Di Hapus",

MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "Hapus File Sukses") tmpCheck = True

lstDaftar.Items.Clear()

For Each fi In diCari.GetFiles("*.bmp") lstDaftar.Items.Add(fi.Name) Next End If Catch ex As Exception tmpCheck = False End Try

Loop Until tmpCheck = True End If

Else

If MsgBox("Ubah Nama File Gambar " &

lstDaftar.Items(lstDaftar.SelectedIndex) & "?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Konfirmasi Ubah Nama File") = MsgBoxResult.Yes Then

strNewFile = InputBox("Input Nama File Pengganti") If Len(strNewFile) < 1 Then Exit Sub

strNewFile = flPath & "\" & strNewFile & ".bmp" Do

Try

If File.Exists(strOldFile) Then

FileSystem.Rename(strOldFile, strNewFile) MsgBox("Nama File Berhasil Di Ubah", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "File Rename Sukses") tmpCheck = True

For Each fi In diCari.GetFiles("*.bmp") lstDaftar.Items.Add(fi.Name) Next End If Catch ex As Exception tmpCheck = False End Try

Loop Until tmpCheck = True End If

End If End Sub

Private Sub btnAbout_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAbout.Click

frmAbout.ShowDialog(Me) End Sub

Private Sub btnTutup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTutup.Click

Me.Close() End Sub

Private Sub tsmHapus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsmHapus.Click

End Sub End Class Imports System Imports System.Drawing Imports System.Drawing.Imaging Imports System.Math Module mdlUtama

Public intVector As Long, trgVector As Long

Public srcNode() As Double, trgNode(0, 0) As Double Public Bobot As Double

Public Function LoadPic(ByVal tmpPic As Image, ByVal THeight As Integer, ByVal TWidth As Integer) As Image

Return New Bitmap(tmpPic, THeight, TWidth) End Function

'By Hippies

(http://planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=72467&lngWId=1)

Public Function DoEdgeLinking(ByVal tmpPic As PictureBox, ByVal blMode As Boolean) As Image

Dim bmpIn As New Bitmap(tmpPic.Image) Dim bmpOut As New Bitmap(tmpPic.Image)

Dim tmpR As Long, tmpG As Long, tmpB As Long

Dim Op_X(0 To 2, 0 To 2) As Integer, Op_Y(0 To 2, 0 To 2) As Integer

Dim Itensity As Long, GradX As Long, GradY As Long, Grad As Long

Grad = 0

Op_X(1, 0) = -(Sqrt(2)) Op_X(2, 0) = -1 Op_X(0, 1) = 0 Op_X(1, 1) = 0 Op_X(2, 1) = 0 Op_X(0, 2) = 1 Op_X(1, 2) = (Sqrt(2)) Op_X(2, 2) = 1 Op_Y(0, 0) = -1 Op_Y(1, 0) = 0 Op_Y(2, 0) = 1 Op_Y(0, 1) = -(Sqrt(2)) Op_Y(1, 1) = 0 Op_Y(2, 1) = (Sqrt(2)) Op_Y(0, 2) = -1 Op_Y(1, 2) = 0 Op_Y(2, 2) = 1 For X = 0 To bmpIn.Height - 1 For Y = 0 To bmpIn.Width - 1 GradX = 0 GradY = 0 Grad = 0 If X = 0 Or Y = 0 Or X = bmpIn.Width - 1 Or Y = bmpIn.Height - 1 Then Grad = 0 Else For I = 0 To 2 For J = 0 To 2 tmpR = bmpIn.GetPixel(Y + J - 1, X + I - 1).R tmpG = bmpIn.GetPixel(Y + J - 1, X + I - 1).G tmpG = bmpIn.GetPixel(Y + J - 1, X + I - 1).B Itensity = (tmpR + tmpG + tmpB) / 3 GradX = GradX + (Itensity * Op_X(J, I)) GradY = GradY + (Itensity * Op_Y(J, I)) Next J

Next I

Grad = Round(Sqrt(Abs(GradX * GradX) + Abs(GradY * GradY)))

End If

If Grad < 0 Then Grad = 0

ElseIf Grad > 255 Then Grad = 255

End If

bmpOut.SetPixel(Y, X, Color.FromArgb(Grad, Grad, Grad))

Next Next

DoEdgeLinking = bmpOut End Function

Public Function DoSegment(ByVal tmpPic As PictureBox, ByVal iTL As Long, ByVal iHL As Long, ByVal blMode As Boolean, ByVal Pos As Long) As Image

Dim bmpIn As New Bitmap(tmpPic.Image) Dim bmpOut As New Bitmap(tmpPic.Image)

Dim tmpR As Long, tmpG As Long, tmpB As Long Dim tmpPos As Long

Dim Node As Boolean tmpPos = 0 For X = 0 To bmpIn.Height - 1 For Y = 0 To bmpIn.Width - 1 tmpR = bmpIn.GetPixel(Y, X).R If tmpR < iTL Then tmpR = 0 tmpG = 0 tmpB = 0 Node = 0

ElseIf tmpR >= iTL And tmpR <= iHL Then tmpR = 255 tmpG = 255 tmpB = 255 Node = 1 Else tmpR = 0 tmpG = 0 tmpB = 0 Node = 0 End If If blMode Then srcNode(tmpPos) = Node Else

trgNode(Pos, tmpPos) = Node End If bmpOut.SetPixel(Y, X, Color.FromArgb(tmpR, tmpG, tmpB)) tmpPos += 1 Next Next DoSegment = bmpOut End Function

Public Function AvgNode(ByVal blMode As Boolean, ByVal Pos As Long) As Double

Dim tmpTotal As Double tmpTotal = 0

For i = 0 To intVector - 1 If blMode Then

tmpTotal = tmpTotal + srcNode(i) Else

tmpTotal = tmpTotal + trgNode(Pos, i) End If

Next

AvgNode = tmpTotal / intVector End Function

Public Function DevNode(ByVal avNode As Double, ByVal blMode As Boolean, ByVal Pos As Long) As Double

Dim tmpTotal As Double, tmpDist As Double tmpTotal = 0

For i = 0 To intVector - 1 If blMode Then

tmpTotal = tmpTotal + (tmpDist ^ 2) Else

tmpDist = trgNode(Pos, i) - avNode tmpTotal = tmpTotal + (tmpDist ^ 2) End If

Next

tmpTotal = tmpTotal / (intVector - 1) DevNode = tmpTotal ^ 0.5

End Function

Public Function KurNode(ByVal avNode As Double, ByVal dvNode As Double, ByVal blMode As Boolean, ByVal Pos As Long) As Double

Dim tmpTotal As Double, tmpMoment As Double, tmpSD As Double tmpTotal = 0

For i = 0 To intVector - 1 If blMode Then

tmpMoment = Abs(srcNode(i) - avNode) ^ 4 tmpSD = Abs(srcNode(i) - avNode) ^ 2

tmpTotal = tmpTotal + (tmpMoment / (tmpSD ^ 2)) Else

tmpMoment = Abs(trgNode(Pos, i) - avNode) ^ 4 tmpSD = Abs(trgNode(Pos, i) - avNode) ^ 2

tmpTotal = tmpTotal + (tmpMoment / (tmpSD ^ 2)) End If

Next

KurNode = tmpTotal / intVector End Function

Public Function SkewNode(ByVal avNode As Double, ByVal blMode As Boolean, ByVal Pos As Long) As Double

Dim tmpM3 As Double, tmpM2 As Double tmpM3 = 0 tmpM2 = 0 For i = 0 To intVector - 1 If blMode Then tmpM3 = tmpM3 + ((srcNode(i) - avNode) ^ 3) tmpM2 = tmpM2 + ((srcNode(i) - avNode) ^ 2) Else tmpM3 = tmpM3 + ((trgNode(Pos, i) - avNode) ^ 3) tmpM2 = tmpM2 + ((trgNode(Pos, i) - avNode) ^ 2) End If Next tmpM3 = tmpM3 / intVector tmpM2 = (tmpM2 / intVector) ^ (3 / 2) SkewNode = tmpM3 / tmpM2 End Function End Module

Dokumen terkait