DAFTAR PUSTAKA
Abdul Nasir, A.S., Mustafa, N., Mohd Nasir, N., F. 2009. Application of Thresholding
Technique in Determining Ratio of Blood Cells for Leukemia Detection.
Proceedings of the International Conference on Man-Machine Systems (ICoMMS), pp 2A2 1-6.
Agung, T. B.W., Hermanto, I.G.R. & Retno, N. D. 2009. Pengenalan Huruf Bali
Menggunakan Metode Modified Direction Feature dan Learning Vector
Quantization. Konferensi Nasional Sistem dan Informatika 2009, Bali.
Bradski, G. & Kaehler, A. 2008. Learning OpenCV. O’Relly Media, Inc : Sebastopol.
Canny, J. 1986. A computational approach to edge detection. Pattern Analysis and
Machine Intelligence IEEE Transactions on PAMI-8(6) : 679– 698.
Ding, X. 2002. Chinese Character Recognition: A Review. Acta Electronica Sinica, Vol.(30), No.9.
Duda R. O. & Hart P. E. 1972. Use of the Hough transform to detect lines and curves
in pictures. Communications of the ACM 15(1): 11–15.
Gonzales, R.C. & Woods, R.E. 2002. Digital Image Processing. New Jersey:Prentice-Hall Inc.
Hough P. V. C. 1962. Methods and means for recognizing complex patterns. U.S. Patent 3: 069 & 654.
Jawas, N. & Suciati, N. 2013. Image Inpainting using Erosion and Dilation
Operation. International Journal of Advanced Science and Technology Vol. 51.
Jia, W.K., Gang, Z.H., Liang, P.Z., Ying, H., 2011. Chinese Chess Character
Recognition with Radial Harmonic Fourier Moments. International
Khusbu & Mehta, S. 2013. Image Pre-processing on Character Recognition using
Neural Networks. International Journal of Computer Applications (0975 –
8887), Vol.(82): 13.
Liu, X.Y. & Blumentstein, M. 2008. A Modified Direction Feature for Cursive
Character Recogition. m.blumenstein@griffith.edu.au.
Liu, Y. 2009. Printed Chinese Character Recognition. Computer Science At Massey University, Auckland, New Zealand.
Miljkovic, O. 2009. Image Pre-Processing Tool. Kragujevac J. Math. 32 (2009) : 97– 107.
Mitchell, T. 1997. Artificial Neural Networks in Machine Learning, 1st Edition. McGraw-Hill : 95-111.
Nosrati, M. , Karimi, R. & Hariri, M. 2012. Detecting Circular Shapes From Areal
Images Using Median Filter and CHT. World Applied Programming Special
Section for Proceeding of International E-Conference on Computer Engineering (IeCCE) 2(1) : 49-54.
Prof. Tambe, S.B., Prof. Kulhare, D., Nirmal, M. D. & Prof. Prajapati, G. 2013. Image
Processing Through Erosion and Dilation Methods. International Journal of
Emerging Technology and Advanced Engineering. Vol.(3): Issue 7. Putra, D. 2008. Pengelolahan Citra Digital. Penerbit Andi, Yogyakarta. Rahul et al. 2013. Image Processing and Digital Recognition.
Robinson, P., Roodt, Y. & Nel, A. 2012. Gaussian blur identification using scale-space theory.
Romen, T. S., Roy, S., Imocha, O. S., Sinam, T. & Manglem K.S. 2011. A New Local
Adaptive Thresholding Technique in Binarization. International Journal of
Computer Science Issues (IJCSI), Vol.(8) Issue 6.
Saleh, S. A., Dr. Kalyankar, N.V. & Dr. Khamitkar, S.D. 2010. Linear and Non-linear
Contrast Enhancement Image. International Journal of Computer Science and
Network Security (IJCSNS), Vol(10) No.2.
Smereka, M. & Duleba, I. 2008. Circular Object Detection Using A Modified Hough
Transform.
Snehal, O. M. & Prof. Shandilya, V. K. 2012. Image Enhancement and Its Various
Techniques. International Journal of Advanced Research in Computer Science
and Software Engineering (IJARCSSE) Vol.(2): Issue 4.
Soo, C.P. & Ji, H.H. 2002. Design of FIR bilevel Laplacian-of-Gaussian filter,
(ELSEVIER) Signal Processing 82 : 677 – 691.
Tkalci, M. & Jurij, F. T. 2003. Colour spaces - perceptual, historical and
applicational background. EUROCON 2003 : IEEE, Vol.(1).
Wen, Y.C. 2014. Chinese-Chess Image Recognition by using Feature Comparison
Techniques. An International Journal of Applied Mathematics & Information
-BAB 3
ANALISIS DAN PERANCANGAN SISTEM
Bab ini akan membahas tentang implementasi metode yang digunakan untuk mengenali pola karakter mandarin sebagai pengidentifikasian karakter mandarin yang terdapat pada biji catur cina. Adapun 2(dua) tahap yang akan dibahas pada bab ini, yaitu tahap analisis dan tahap perancangan sistem. Pada tahap analisis akan dilakukan analisa terhadap data yang digunakan untuk diproses dan analisis terhadap teknik maupun metode yang digunakan pada setiap langkah pemrosesan data. Pada tahap perancangan sistem akan dibahas mengenai perancangan tampilan antarmuka sistem. 3.1. Data yang digunakan
Data yang digunakan dalam penelitian ini adalah citra yang diambil oleh kamera
webcam. Adapun beberapa aspek yang berhubungan dengan pengambilan data yang
digunakan adalah resolusi kamera webcam, pencahayaan (lighting), jarak pengambilan dan posisi pengambilan citra.
Pada penelitian ini, penulis menggunakan kamera webcam eksternal beresolusi tinggi, yaitu 15 megapixel dengan resolusi gambar 640x480 pixel. Pengambilan gambar dilakukan dengan pencahayaan ± 200 lux. Jarak pengambilan gambar berada pada jarak antara 15-20 cm dari kamera webcam. Posisi pengambilan gambar berada pada satu titik yaitu tengah-tengah kamera webcam dan pemgabilan gambar dilakukan tegak lurus. Hal ini dilakukan agar sistem dapat menangkap gambar dari objek yang akan dikenali dengan baik.
3.2. Analisis Sistem
webcam; konversi warna RGB menjadi grayscale; proses Gaussian Blur;
pendeteksian cincin catur cina dengan Hough Circle Detection; mengubah nilai
grayscale; citra mengalami Dilation; resizing citra; proses binerisasi citra; normalisasi
citra; penajaman nilai pixel pada citra dengan Min-Max Linear Contrast Streching; proses thinning pada citra; proses binerisasi citra thinning; data biner citra mengalami ekstraksi fitur Direction Feature dan pada akhirnya diklasifikasi dengan jaringan saraf tiruan Backpropagation. Setelah langkah-langkah tersebut dilakukan maka akan didapatkan hasil klasifikasi jenis catur cina berdasarkan jenis font yang berbeda-beda. Setiap tahapan yang dilakukan akan dijelaskan lebih terperinci pada bagian-bagian selanjutnya. Adapun arsitektur umum yang menggambarkan metode pada penelitian ini ditunjukkan pada Gambar 3.1.
Gambar 3.1 Arsitektur umum Neural Network CITRA INPUT Image Enhancement Gaussian Blur Canny Edge Detection Hough Circles Detection
Colour Space Conversion RGB2Grayscale
ERASE CIRCLES
Dilation Thresholding
Image Normalization Resizing Image MinMax Linear Contrast Stretching Thinning ZhangSuen Binerization Feature Extraction Direction Feature Extraction BACKPROPAGATION Database Output Chess Name
3.2.1. Colour Space Conversion
Tahap awal dalam pengenalan karakter mandarin pada biji catur cina adalah pendeteksian warna pada huruf dan cincin yang terdapat pada biji catur cina. Warna yang terdapat pada biji catur cina adalah warna merah atau hitam. Tahap ini bertujuan untuk memisahkan warna background dan foreground yang tidak diperlukan dari citra yang ditangkap oleh kamera webcam.
3.2.1.1. RGB2Grayscale
Dalam menghilangkan warna background dan foreground yang tidak diperlukan pada citra yang tertangkap kamera webcam, proses perubahan citra RGB menjadi citra keabuaan dilakukan agar pengidentifikasian lebih mudah dan cepat dengan menggunakan citra yang memiliki rentang nilai 0-255 dengan jumlah rentang 256 nilai, 28 (8 bit). Adapun contoh perhitungan konversi nilai RGB pada citra berukuran 3x3 pixel yang akan diubah menjadi citra keabuaan ditunjukkan oleh tabel 3.1.
Tabel 3.1 Matriks RGB pada citra 3x3 pixel
(x,y) 0 1 2
0 (50,60,70) (180,0,25) (250,0,0) 1 (100,0,0) (40,150,90) (0,0,100)
2 (0,30,0) (0,90,0) (0,0,80)
Proses pengkorvensian matriks(1,1) citra RGB menjadi citra Grayscale adalah seperti berikut:
Y = 0.299(R) + 0.588(G) + 0.114(B) Y = 0.299(40) + 0.588(150) + 0.114(90)
Dengan melakukan perhitungan yang sama secara raster pada semua pixel yang terdapat pada citra RGB, maka didapatkan hasil yang ditunjukkan oleh tabel 3.2.
Tabel 3.2 Matriks Grayscale pada citra 3x3 pixel
(x,y) 0 1 2
0 58 57 75
1 30 111 11
2 18 53 9
Proses konversi citra RGB menjadi Grayscale yang tertangkap oleh kamera webcam ditunjukkan oleh gambar 3.2.
(a) Citra RGB 640x480 px dari webcam (b) Citra grayscale 640x480 px hasil konversi
Gambar 3.2 Citra RGB webcam dan Citra grayscale hasil konversi 3.2.2. Image Enhancement
3.2.2.1. Gaussian Blur //SmoothGaussian
GaussianBlur digunakan di dalam penelitian ini berfungsi untuk menghilangkan noise
pada citra grayscale yang telah dikonversi dari citra berwarna. Tujuan dari penggunaan GaussianBlur adalah untuk mendapatkan bentuk dari cincin dan karakter cina yang terdapat pada citra grayscale. Persamaan GaussianBlur dapat dilihat pada persamaan 2.2. Persamaan ini dapat digunakan pada salah satu fungsi EmguCV yaitu fungsi SmoothGaussian(). Berikut adalah penjelasan dari penggunaan fungsi
SmoothGaussian() beserta dengan parameter yang dibutuhkan untuk menjalankan
fungsi ini.
SmoothGaussian(kernersize)
Parameter :
- kernelsize = ukuran kernel yang digunakan, dalam penelitian ini adalah 9x9.
3.2.2.2. Dilation
Proses Dilation digunakan pada akhir dari proses penangkapan citra. Proses Gaussian
Blur menyebabkan pixel pada contour karakter cina terkikis. Proses Dilation mampu
mempertebal contour pada karakter cina yang terdapat pada citra grayscale sehingga dapat mempermudah proses selanjutnya dengan data citra yang baik. Berikut adalah penjelasan dari penggunaan fungsi Dilation() pada salah satu fungsi yang terdapat di EmguCV.
Dilation(iterations)
Parameter :
- iterations = jumlah iterasi untuk proses dilasi(mempertebal) pada citra
grayscale, dalam penelitian ini iterasi dilasi yang digunakan
bervariasi bergantung pada warna dan set sampel biji catur. 3.2.3. Canny Edge Detection
dijabarkan edge detection dapat mengurangi jumlah data yang akan diproses dan juga menyediakan elemen struktural yang dapat digunakan untuk proses yang lebih mendalam. Pendeteksian lingkaran digunakan untuk mendeteksi lingkaran atau cincin yang terdapat pada biji catur cina.
3.2.3.1. Hough Circle Detection
Penggunaan Hough Circle Detection bertujuan untuk menemukan cincin yang terdapat pada permukaan biji catur cina. Beberapa sampel yang ditemukan oleh penulis tidak memiliki kualitas cat yang baik sehingga dengan mendeteksi dan menghapus lingkaran yang terdapat pada permukaan biji catur cina dapat membantu dalam proses klasifikasi. Dalam mendapatkan hasil dari pendeteksian circles didalam fungsi HoughCircles() yang terdapat di dalam EmguCV, peneliti menggunakan citra grayscale yang telah mengalami proses thresholdbinary untuk mendeteksi lingkaran yang terdapat pada citra tersebut. Berikut adalah penjelasan dari penggunaan fungsi
HoughCircles() pada penelitian ini.
HoughCircles(cannyThreshold, accumulatorThreshold, dp, minDist, minRadius,
maxRadius)
Parameter :
- cannyThreshold = threshold untuk bentuk-bentuk canny yang akan
dideteksi, di dalam penelitian ini threshold yang digunakan 100.
- accumulatorThreshold = threshold penentu bentuk lingkaran; semakin
kecil nilai accumulatorThreshold, semakin banyak lingkaran yang salah yang akan terdeteksi; di dalam penelitian ini threshold yang digunakan 50.
- dp = resolusi accumulator untuk mendeteksi pusat lingkaran, di dalam
- minDist = jarak minimal lingkaran dengan ukuran dari citra, di dalam
penelitian ini minDist adalah satu perempat (1/4) dari tinggi citra.
- minRadius = jari-jari minimal lingkaran yang akan terdeteksi, di dalam
penelitian ini minRadius adalah 10.
- maxRadius = jari-jari maksimal lingkaran yang akan terdeteksi, di dalam
penelitian ini maxRadius adalah 400.
Pendeteksian jari-jari lingkaran menghasilkan tiga buah variabel yaitu posisi x pusat lingkaran, posisi y pusat lingkaran dan besar radius lingkaran. Berikut adalah
pseudocode pendeteksian lingkaran pada biji catur cina.
Langkah 1: Menentukan posisi x, y dan radius lingkaran terdeteksi Initialisasi Circles, PosisiX, PosisiY, RadiusLingkaran
Initialisasi CannyThreshold = 100, AccThresold = 50, dp = 2, RadiusMin =10, RadiusMax = 400
Circles = CitraGrayscale.HoughCircles(CannyThreshold, AccThreshold, dp, Tinggi Citra Grayscale/4, RadiusMin, RadiusMax)
For Each LingkaranDitemukan In Circles { VariabelHitungLingkaran++
If (HitungLingkaran = 1){
PosisiX = nilai titik pusat x di dalam LingkaranDitemukan PosisiY = nilai titik pusat y di dalam LingkaranDitemukan RadiusLingkaran = nilai radius di dalam LingkaranDitemukan }
}
Langkah 2 : Mengisi lingkaran yang terdeteksi dengan warna biru dan hijau sebagai parameter yang mempermudah dalam penghapusan cincin pada citra biji catur cina. Initialisasi MinRadius, MaxRadius
For Each LingkaranDitemukan In Circles{ HitungLingkaran++
If (HitungLingkaran = 1){
Set dimana LingkaranDitemukan dengan radius = MaxRadius menjadi warna RGB(0,255,0) atau warna hijau
} }
For Each LingkaranDitemukan In Circles{ HitungLingkaran++
If (HitungLingkaran = 1){
Set dimana LingkaranDitemukan dengan radius = MinRadius menjadi warna RGB(0,0,255) atau warna biru
} }
Hasil dari proses Hough Circles Detection ditunjukkan pada gambar 3.3.
Gambar 3.3 Hasil pendeteksian Hough Circles Detection dan parameter warna pada citra terdeteksi
3.2.4. Cropping
Pada proses ini juga terdapat fungsi drawImage() dari library C#.Net yang bertujuan untuk mengambarkan citra hasil cropping.
drawImage(image, destRect, srcRect, srcUnit)
Parameter :
- image = citra yang akan dicrop
- destRect = bangun persegi panjang untuk menletakkan hasil dari crop
- srcRect = bangun persegi panjang untuk mencari area untuk dicrop
- srcUnit = unit atau satuan hitung grafik, di dalam penelitian ini srcUnit adalah pixel
Kedua parameter srcRect dan destRect membutuhkan sebuah objek bangun persegi panjang. Oleh sebab itu, dibutuhkan pendeklarasian objek baru dan mengisi parameter yang diperlukan pada konstruktor class Rectangle() yang terdapat pada library C#.Net.
Rectangle( x, y, widthImage, heightImage)
Parameter :
- x = titik x pada sudut kiri atas pada bangun persegi panjang - y = titik y pada sudut kiri atas pada bangun persegi panjang
- widthImage = lebar persegi panjang terhitung dari titik x sebagai titik awal
- heightImage = tinggi persegi panjang terhitung dari titik y sebagai titik awal Berikut penggunaan fungsi drawImage() dan objek dari class Rectangle() pada
pseudocode proses cropping biji catur cina.
Initialisasi Xpusat, Ypusat, lebarCitra = 300, tinggiCitra = 300 Initialisasi x’ = Xpusat – (lebarCitra/2)
Initialiasisi y’ = Ypusat – (tinggiCitra/2)
Intialisasi srcRect, destRect Using graphic dari BitmapRGB{
srcRect = new Rectangle( x = x’, y = y’, widthImage = lebarCitra, heightImage = tinggiCitra)
destRect = new Rectangle(x = 0, y = 0, widthImage = lebarCitra, heightImage = tinggiCitra)
graphic.drawImage(CitraRGB, destRect, srcRect, GraphicUnit.pixel) }
Using graphic dari BitmapGrayscale{
srcRect dengan x = x’, y = y’, widthImage = lebarCitra, heightImage = tinggiCitra
destRect dengan x = 0, y = 0, widthImage = lebarCitra, heightImage = tinggiCitra
graphic.drawImage(CitraGrayscale, destRect, srcRect, GraphicUnit.pixel) }
Hasil dari proses cropping pada citra RGB dan grayscale ditunjukkan oleh gambar 3.4.
(a) Gambar RGB yang tercrop (b) Gambar grayscale yang tercrop
3.2.5. Erase Circles
Proses penghapusan cincin lingkaran yang terdapat pada biji catur cina bertujuan untuk proses pengklasifikasian yang lebih akurat. Peneliti mempertimbangkan hasil akurasi yang didapatkan pada tahap akhir dikarenakan tidak semua kualitas cat pada biji catur baik. Oleh sebab itu, proses pengklasifikasian dapat terganggu apabila fitur yang terkandung di dalam citra biji catur masih memiliki cincin. Teknik penghapusan yang dilakukan oleh penulis adalah dengan membandingkan dua buah citra yaitu citra RGB dan grayscale. Penulis menggubah nilai pixel dari citra grayscale pada posisi x dan y menjadi putih secara raster apabila pada posisi x dan y dari citra RGB bukan berwarna biru. Berikut pseudocode proses penghapusan cincin lingkaran pada citra 300x300 pixel bijic catur cina.
Initialisasi x, y Initialisasi r,g,b
For y = 0 To tinggiCitra-1{ For x = 0 To lebarCitra-1{ r = nilai Red citra RGB g = nilai Green citra RGB b = nilai Blue citra RGB
If ( ! (r = 0 && g = 0 && b = 255) ){
CitraGrayscale pada posisi (x,y) diubah menjadi intentsitas 255 atau warna putih
}
} }
Gambar 3.5 Cincin pada citra grayscale yang telah terbuang dan hanya karakter cina 3.2.6. Thresholding
Pada citra sebelumnya masih terkandung informasi yang tidak diperlukan. Oleh sebab itu, penulis melakukan proses thresholding untuk mengambil informasi yang diperlukan yang terdapat pada foreground citra atau karakter cina pada citra. Proses
thresholding menggunakan nilai threshold yang pada akhir proses ini akan
menghasilkan file biner dari citra grayscale. Berikut pseudocode proses thresholding yang menghasilkan file biner.
Intialisasi x,y
Initialisasi r, g, b, AveRGB
Initialisasi ThresholdValue, BinaryValue[,]
Citra RGB = Citra Grayscale dimana citra grayscale diubah menjadi rgb agar bisa mendapatkan nilai r,g,b dari citra keabuan
y = 0
While( y <= CitraRGB.Tinggi -1 ){ x = 0
While( x <= CitraRGB.Lebar - 1 ){ r = CitraRGB.NilaiRed
g = CitraRGB.NilaiGreen b = CitraRGB.NilaiBlue AveRGB = (r + g + b) / 3
If(AveRGB > = 0 && AveRGB<= ThresholdValue ){ BinaryValue[x,y] = 1
BinaryValue[x,y] = 0 }
x++ } y++ }
Write(BinaryValue) proses akhir adalah melakukan filestream untuk menyimpan data biner
3.2.7. Image Normalization
Normalisasi citra pada penelitian ini bertujuan untuk mengurangi citra background yang tidak berada pada jangkauan citra foreground secara kordinat maupun ordinat. Perbedaan hasil akurasi sangat dipengaruhi oleh proses normalisasi dimana proses normalisasi dapat membantu penulis untuk mendapatkan nilai fitur yang dapat diklasifikasi dengan baik. Citra yang telah mengalami binerisasi akan digunakan oleh peneliti sebagai matriks pembanding untuk menormalkan citra yang masih berukuran 300x300 pixel yang masih belum dinormalisasikan. Proses ini akan menghasilkan ukuran yang bervariasi tergantung dari lebar dan tinggi dari setiap karakter cina pada citra. Berikut pseudocode untuk menormalisasikan citra.
Langkah 1 : Pengecekan empat (4) sisi dari citra secara raster yaitu : sisi kiri, sisi kanan, sisi atas, sisi bawah.
Initilisasi FirstFoundBool = false Intialisasi lebarCitra, tinggiCitra
Intialisasi BinaryData[,] = Data Biner yang ditarik kembali dengan filestream
Fungsi Left2Right berfungsi untuk mengecek dari sisi kiri ke kanan dan untuk mendapatkan nilai x paling kiri untuk normalisasi.
Function Left2Right{ Initialisasi a,b,x
For b = 0 To lebarCitra-1{
For a = 0 To tinggiCitra – 1{
x = b
FirstFoundBool = true }
} }
FirstFoundBool = false Return x
}
Fungsi Right2Left berfungsi untuk mengecek dari sisi kanan ke kiri dan mendapatkan nilai x paling kanan untuk normalisasi
Function Right2Left{ Initialisasi a,b,x
For b = lebarCitra-1 To 0{
For a = tinggiCitra – 1 To 0{
If (BinaryData[a,b] = 1 && FirstFoundBool = false){ x = b
FirstFoundBool = true }
} }
FirstFoundBool = false Return x
}
Fungsi Up2Down berfungsi untuk mengecek dari sisi atas ke bawah dan mendapatkan nilai y paling atas untuk normalisasi
Function Up2Down{ Initialisasi a,b,x
For b = 0 To lebarCitra-1{
If (BinaryData[a,b] = 1 && FirstFoundBool = false){ y = a
FirstFoundBool = true }
} }
FirstFoundBool = false Return y
}
Fungsi Down2Up berfungsi untuk mengecek sisi bawah ke atas dan mendapatkan y paling bawah untuk normalisasi
Function Down2Up{ Initialisasi a,b,x
For a = tinggiCitra – 1 To 0{ For b = lebarCitra-1 To 0{
If (BinaryData[a,b] = 1 && FirstFoundBool = false){ y = a
FirstFoundBool = true }
} }
FirstFoundBool = false Return y
}
Langkah 2 : Proses normalisasi membutuhkan empat titik yaitu x paling kiri, x paling kanan, y paling atas dan y paling bawah untuk proses cropping selanjutnya. Berikut pseudocode proses cropping pada tahap normalisasi citra.
Intialisasi PosY Initialisasi WidthCrop Initialisasi HeightCrop Function Cropping(){
PosX = x paling kiri PosY = y paling atas
WidthCrop = (x paling kanan – x paling kiri) + 1 HeightCrop = (y paling bawah – y paling atas) + 1
Initialisasi BitmapNormalisasi dengan lebar = WidthCrop dan tinggi = HeightCrop
Using( Grafikdari BitmapNormalisasi ){
srcRect = new Rectangle(PosX, PosY, lebar WidthCrop, tinggi HeightCrop)
destRect = new Rectangle( 0, 0, lebar WidthCrop, tinggi HeightCrop) graphic.DrawImage(Citra Grayscale, destRect, srcRect, UnitGrafik Pixel)
} }
Langkah 3 : Pertama sekali memanggil ke empat fungsi pengecekan sisi dan pada akhirnya memanggil fungsi Cropping.
Function Normalization{
Panggil Function Left2Right Panggil Function Right2Left Panggil Function Up2Down Panggil Function Down2Up Panggil Function Cropping }
Gambar 3.6 Citra hasil normalisasi dengan ukuran yang bervariasi 3.2.8. Resizing Image
Setelah citra mengalami normalisasi dengan ukuran yang bervariasi, penulis melakukan proses resize citra supaya proses selanjutnya dapat berjalan lebih stabil dan efisien. Citra hasil normalisasi yang memiliki ukuran yang bervariasi akan diubah menjadi 24x24 pixel. Proses pengecilan tersebut menyebabkan bentuk maupun intensitas pixel menjadi berkurang. Oleh sebab itu, penulis menggunakan fungsi
smoothing dan interpolation dalam library C#.Net. Peniliti juga memperbaiki kualitas
citra pada proses selanjutnya. Berikut penggunaan fungsi smoothing dan interpolation dalam pseudocode resizing image.
Initialisasi BitmapAsli
Initialiasasi BitmapCitraResize = Bitmap dengan ukuran 24x24 Intialisasi Graphic = Graphic Dari BitmapCitraResize
Set Graphic.SmoothingMode menjadi HighQuality
Set Graphic.InterpolationMode menjadi HighQualityBicubic Set Graphic.PixelOffSetMode menjadi HighQuality
Graphic.DrawImage(BitmapAsli, 0, 0, lebarBitmapCitraResize + 1, tinggiBitmapCitraResize + 1)
CitraResize = AutoSize Citra Resize = BitmapCitraResize
Hasil proses resizing citra dengan ukuran 24x24 pixel ditunjukkan oleh gambar 3.7 di bawah ini.
3.2.9. Min-Max Linear Contrast Stretching
Pada tahap ini, citra yang telah mengalami proses resize masih memiliki pixel-pixel dengan intensitas yang tidak begitu kontras. Oleh sebab itu, peneliti menggunakan MinMax Linear Contrast Stretching dengan menggunakan persamaan 2.3. Di dalam melaksanakan proses ini, pixel yang berdominan atau hampir berwarna hitam akan memiliki intensitas warna keabuaan yang tetap yaitu 0 dan pixel yang berdominan atau hampir berwarna putih akan memiliki intensitas warna keabuaan yang tetap yaitu 255. Tujuan dari proses ini adalah untuk mendapatkan hasil yang baik pada proses selanjutnya yaitu proses thinning. Berikut pseudocode proses MinMax Linear Contrast Stretching pada citra berukuran 24x24 pixel hasil resize pada proses sebelumnya. Intitialisasi x, y
Initialisasi NilaiAbu
Initialisasi NilaiThreshold = 250 For y = 0 To TinggiCitra – 1{
For x = 0 To LebarCitra – 1{
NilaiAbu = Nilai grayscale pada citra dengan matriks(x,y) If (NilaiAbu >= NilaiThreshold){
CitraKontras pada matriks(x,y) = 255 }Else If(NilaiAbu < NilaiThreshold){
CitraKontras pada matriks(x,y) = 0 }
} }
Hasil dari MinMax Linear Contrast Stretching ditunjukkkan pada gambar 3.8 di bawah ini memiliki perbedaan kontras dengan gambar 3.7.
3.2.10. Thinning
Pada tahap ini, citra yang telah mengalami perubahan kontras dengan pixel yang berketebalan lebih dari satu pixel tidak dapat di proses oleh ekstraksi fitur yang memerlukan citra dengan ketebalan satu pixel. Oleh sebab itu, penulis menggunakan algoritma Thinning. Algoritma Thinning yang digunakan dalam penelitian ini adalah algoritma Thinning Zhang Suen. Alasan penulis menggunakan algoritma Thinning
Zhang Suen adalah hasil dari Thinning yang bersifat baik dan pola yang tidak berubah
secara signifikan dari citra awal. Berikut pseudocode algoritma Thinning Zhang Suen yang digunakan di dalam penelitian ini.
Langkah 1 : Menggubah citra asli menjadi matriks boolean yang menggantikan peran matriks biner. Pengubahan ini bertujuan untuk mempermudah proses perhitungan nantinya.
Function ImageConvertToBoolean(){ For y = 0 To TinggiCitra – 1{
For x = 0 To LebarCitra – 1{
MatriksBool[x,y] adalah ( Jika Citra[x,y] = 0 maka true : Jika bukan maka false)
} } }
Langkah 2 : Mengcopy MatriksBool ke dalam MatriksTemp dimana kedua matriks memiliki tipe data yang sama, yaitu Boolean.
Function CopyArray(){
For y = 0 To TinggiCitra – 1{ For x = 0 To LebarCitra – 1{
MatriksTemp pada elemen(x,y) = MatriksBool pada elemen(x,y)
Langkah 3 : Melakukan proses utama yang berulang selama masih dapat ditemukan matriks yang masih bersebelahan atau memiliki neighbour yang lebih dari 1 pixel. Intialisasi Hitung = 0
Lakukan
Hitung = nilai dari fungsi Langkah(1, Pembanding = Matriks Temp, MatriksBool mengalami modifikasi)
MatriksTemp = CopyArray( dari MatriksBool yang telah termodif di Langkah(1))
Hitung = nilai dari fungsi Langkah(2, Pembanding = MatriksTemp dari Langkah(1), MatriksBool mengalami modifikasi)
MatriksTemp = CopyArray( dari MatriksBool yang telah termodif di Langkah(2))
Selama (Masih ditemukan neighbour lebih dari 1 pixel atau Hitung masih lebih besar dari 1)
Langkah 4 : Menggunakan fungsi Langkah untuk menggembalikan nilai hitung dari pixel yang masih bertetanggaan atau berpixel lebih dari 1 dari Matriks.
Function Langkah(Angka, MatriksTemp, MatriksBool){ For y = 0 To TinggiMatriksTemp – 1{
For x = 0 To LebarMatriksTemp – 1{ If ( Angka = 1) maka Genap = false Else if(Angka = 2) maka Genap = true
If( Nilai Balik dari Function AlgoritmaThinning() adalah true dengan paramter x,y,MatriksTemp dan nilai bool Genap){
Maka di cek
If( Nilai pada MatriksBool pada elemen(x,y) adalah true) maka
Hitung++. Dimana masih terdapat pixel tetangga > 1. Nilai MatriksBool(x,y) diSet menjadi false.
} }
}
Langkah 5 : Memanggil Algoritma Thinning untuk mengecek tetangga pada pixel di elemen x dan y dari perulangan pada fungsi Langkah() dengan sembilan pengecekan yaitu, sudut kiri atas, sudut kiri bawah, sudut kanan atas, sudutu kanan bawah, sisi kiri, sisi kanan, sisi atas, sisi bawah, seluruh pixel yang bukan sudut maupun sisi dari matriks. Adapun urutan pixel di dalam matriks yang akan dicek ditunjukkan oleh tabel 3.3 untuk memperjelas pseudocode algoritma Thinning.
X9 X2 X3
X8 O X4
X7 X6 X5
Tabel 3.3 Urutan elemen pixel tetangga pada matriks boolean Function AlgoritmaThinning(){
Intialiasai X2 sampai X9 sebagai boolean X2 = MatriksBool posisi(x, y - 1) X3 = MatriksBool posisi(x+1, y- 1) X4 = MatriksBool posisi(x+1, y) X5 = MatriksBool posisi(x+1, y+1) X6 = MatriksBool posisi(x, y+1) X7 = MatriksBool posisi(x-1, y+1) X8 = MatriksBool posisi(x-1, y) X9 = MatriksBool posisi(x-1, y-1)
CekNol = Nilai return dengan mengecek elemen MatriksBool pada elemen x dan y dengan fungsi CekTetanggaBukanNol() dengan parameter = x, y dan MatriksBool sendiri
If (CekNol diantara 2 dan 6){
If(Nilai Return Fungsi TransisiNolkeSatu(di posisi x, y, pada MatriksBool) adalah 1){
If( !(X2 & X6) & X8){
Nilai Balik fungsi Algoritmathinning =
true
}
}
Apabila Genap = false maka If( !(X2 & X4) & X6){
If( !(X4 & X6) & X8){
Nilai Balik fungsi Algoritmathinning = true
} }
} }
Apabila CekNilaiNol bukan di antara 2 sampai 6, maka Nilai Balik fungsi Algoritmathinning adalah false
}
Langkah 6: Mengecek apakah masih terdapat tetangga yang bernilai bukan nol dengan mengecek nilai true pada tetangga.
Function CekNilaiBukanNol(){
If (Sudut kanan bawah dari MatriksBool true) Hitung++ If(Sudut kanan atas dari MatriksBool true) Hitung++ If(Sudut kiri atas dari MatriksBool true) Hitung++ If(Sudut kiri bawah dari MatriksBool true) Hitung++ If(Sisi kiri dari MatriksBool true) Hitung++
If(Sisi kanan dari MatriksBool true) Hitung++ If(Sisi atas dari MatriksBool true) Hitung++ If(Sisi bawah dari MatriksBool true) Hitung++
Nilai Balik Hitung }
Langkah 7 : Menghitung Angka transisi dari nol menuju satu pada MatriksBool. Apabila matriks tetangga yang mengelilingi elemen matriks sekarang masih memiliki transisi atau perbedaan true-false atau false-true dan apabila true-true maka akan mengembalikan bilangan 1. Apabila transisi menciptakan bilangan 1 lebih dari satu maka nilai return berjumlah lebih besar dari 1. Fungsi akan mengembalikan nilai balik 1 apabila pada matriks(x,y) tidak memiliki tetangga bersebelahan lebih dari satu buah. Function TransisiNolKeSatu(){
X2 = MatriksBool posisi(x, y - 1) X3 = MatriksBool posisi(x+1, y- 1) X4 = MatriksBool posisi(x+1, y) X5 = MatriksBool posisi(x+1, y+1) X6 = MatriksBool posisi(x, y+1) X7 = MatriksBool posisi(x-1, y+1) X8 = MatriksBool posisi(x-1, y) X9 = MatriksBool posisi(x-1, y-1) Intialisasi HasilTransisiNolKeSatu
HasilTransisNolKeSatu = Konversi Bool ke Bilangan Bulat(
(! X2 && X3) + (! X3 && X4) + (!X4 && X5) + ... + (!X9 && X2)) Nilai Balik HasilTransisiNolKeSatu
}
Langkah 8 : Setelah melakukan langkah 1-7 maka proses selanjutnya adalah menggubah MatriksBool menjadi pixel kembali dan menjadi citra thinning. Citra thinning yang dihasilkan memiliki ketebalan satu pixel pada citra foreground.
Function BooleanConvertToImage(){ For y = 0 To TinggiCitra – 1{
CitraThin[x,y] adalah ( Jika MatriksBool [x,y]=true maka nilai pixel : Jika bukan maka 255)
} } }
Hasil citra thinning ditunjukkan pada gambar 3.9 di bawah ini.
Gambar 3.9 Citra thinning berukuran 24x24 pixel 3.2.11. Binerization
Proses selanjutnya adalah proses binerisasi citra thinning menjadi nilai biner yang memiliki ukuran matriks sesuai dengan ukuran dari citra thinning yaitu 24x24 pixel. Proses binerisasi ini berfungsi sebagai input ke dalam ekstraksi fitur yang akan digunakan dalam penelitian ini. Berikut pseudocode proses bineriasasi citra thinning menjadi matriks biner di bawah ini.
y = 0
While( y <= Citra Thinning.Tinggi -1 ){ x = 0
While( x <= Citra Thinning.Lebar - 1 ){ r = Citra Thinning.NilaiRed
g = Citra Thinning.NilaiGreen b = Citra Thinning.NilaiBlue AveRGB = (r + g + b) / 3
If(AveRGB > = 0 && AveRGB<= ThresholdValue ){ BinaryValue[x,y] = 1
BinaryValue[x,y] = 0 }
x++ } y++ }
Write(BinaryValue) proses akhir adalah melakukan filestream untuk menyimpan data biner
Hasil dari proses binerisasi dari citra thinning pada gambar 3.8 ditunjukkan oleh gambar 3.10.
Gambar 3.10 Gambar hasil konversi citra thinning menjadi file matriks biner 3.2.12. Feature Extraction
Direction Feature Extraction untuk mengklasifikasi karakter mandarin yang terdapat
pada citra biji catur cina.
3.2.12.1. Direction Feature Extraction
Direction Feature Extraction bekerja dengan mengubah matriks biner dari sebuah
citra menjadi nilai arah dan menghasilkan nilai fitur arah pada akhir proses. Direction
Feature Extraction bekerja secara baik apabila citra dari matriks biner yang
dikonversikan hanya memiliki ketebalan foreground sebesar satu pixel. Hal ini dikarenakan adanya proses transisi yang digunakan oleh ekstraksi fitur ini sehingga dengan ketebalan satu pixel maka transisi yang diperoleh adalah benar. Apabila proses tidak mengubah citra menjadi matriks biner dengan ketebalan satu pixel maka nilai arah akan menjadi ambigu. Oleh sebab itu, ekstraksi fitur berpotensi mencetak nilai arah yang salah. Berikut langkah-langkah beserta pseudocode dari Direction Feature
Extraction yang digunakan pada penelitian ini.
Langkah 1 : Merubah nilai pixel pada posisi (x,y) secara raster sesuai dengan tabel 2.2.
Initialisasi x,y Function Direction{
For y = 0 To TinggiMatriks – 1{ For x = 0 To LebarMatriks – 1{
If(x dan y pada Sudut Kiri Atas){ Cek Arah pada P5, P6, P4
}Else If(x dan y pada Sudut Kiri Bawah){ Cek Arah pada P2, P3, P4
}Else If(x dan y pada Sudut Kanan Atas){ Cek Arah pada P6, P7, P8
}Else If(x dan y pada Sudut Kanan Bawah){ Cek Arah pada P1, P2, P8
}Else If(x dan y pada Sisi Atas dan Bukan Sudut){ Cek Arah pada P5, P6, P7, P4, P8
Cek Arah pada P1, P2, P3, P4, P8
}Else If(x dan y pada Sisi Kiri dan Bukan Sudut){ Cek Arah pada P5, P2, P6, P3, P4
}Else If(x dan y pada Sisi Kanan dan Bukan Sudut){ Cek Arah pada P1, P2, P6, P7, P8
}Else If(x dan y tidak berada pada Sisi atau Sudut){
Cek Arah pada P1, P5, P2, P6, P3, P7, P4, P8 }
} }
}
[image:30.595.240.391.390.551.2]Hasil dari fungsi Direction ditunjukkan pada gambar 3.11 dibawah ini.
Gambar 3.11 Matriks Direction 24x24 yang mengandung nilai arah 2-5 Langkah 2 : Melakukan pencarian nilai arah dengan transisi sebanyak 4 kali secara
raster dari empat arah yaitu: sisi kiri ke sisi kanan, sisi kanan ke sisi kiri, sisi atas ke
sisi bawah, sisi bawah ke sisi atas. Ukuran dari setiap matriks arah adalah Jumlah transisi x (Lebar Matriks atau Tinggi Matriks) yaitu 4 x 24.
Function Left2Right(){
If(MatriksArah bukan 1 atau 0){
Selama i tidak lebih besar dari Transisi maka
Direction Transition bernilai MatriksArah dikali dengan 10-1. i++
} }
} }
Function Right2Left(){
For y = TinggiMatriks – 1 To 0{ For x = LebarMatriks – 1 To 0{
If(MatriksArah bukan 1 atau 0){
Jika i tidak lebih besar dari Transisi maka
Direction Transition bernilai MatriksArah dikali dengan 10-1.
i++ }
} } }
Function Up2Down(){
For x = 0 To LebarMatriks – 1{ For y = 0 To TinggiMatriks – 1{
If(MatriksArah bukan 1 atau 0){
Selama i tidak lebih besar dari Transisi maka
Direction Transition bernilai MatriksArah dikali dengan 10-1. i++
} }
Function Down2Up(){
For x = LebarMatriks – 1 To 0{ For y = TinggiMatriks – 1 To 0{
If(MatriksArah bukan 1 atau 0){
Jika i tidak lebih besar dari Transisi maka
Direction Transition bernilai MatriksArah dikali dengan 10-1.
i++ }
} } }
Call Function Direction, Left2Rigth, Rigth2Left, Up2Down, Down2Up
Hasil dari fungsi Direction yang mengalami transisi secara raster dari keempat sisi yaitu sisi kiri ke sisi kanan, sisi kanan ke sisi kiri, sisi atas ke sisi bawah, sisi bawah ke sisi atas dapat dilihat pada gambar 3.12 di bawah ini.
(c)Transisi atas ke bawah (d)Transisi bawah ke atas
Gambar 3.12 Transisi nilai keempat arah berukuran 4x24 pada masing-masing arah
Langkah 3 : Melakukan normalisasi nilai transisi yang berukuran 4x24 sebesar nilai transisi x (Lebar atau Tinggi Matriks / nilai transisi). Oleh sebab itu, ukuran matriks normalisasi adalah 4x6. Berikut pseudocode untuk mendapatkan matriks normalisasi dari matriks direction.
Function N_Left2Right(){ Initialisasi x, y, sum, a, b
While(y < TinggiMatriks){
For x = 0 To JumlahTransisi-1 b = y + JumlahTransisi For a = y To b-1
sum += Matriks(x,y) }
}
Function N_Right2Left(){ Initialisasi x, y, sum, a, b
While(y < TinggiMatriks){
For x = 0 To JumlahTransisi-1{ b = y + JumlahTransisi For a = y To b-1{
sum += Matriks(x,y) }
} y++ }
}
Function N_Up2Down(){
Initialisasi x, y, sum, a, b
While(x < LebarMatriks){
For y = 0 To JumlahTransisi-1{ b = x + JumlahTransisi For a = x To b-1{
sum += Matriks(x,y) }
} x++ }
}
Function N_Down2Up(){
Initialisasi x, y, sum, a, b
While(x < LebarMatriks){
b = x + JumlahTransisi For a = x To b-1{
sum += Matriks(x,y) }
} x++ }
}
Hasil dari normalisasi matriks dengan ukuran 4x6 ditunjukkan pada gambar 3.13 di bawah ini.
(a)Normalisasi transisi kiri ke kanan (b)Normalisasi transisi kanan ke kiri
(c)Normalisasi transisi atas ke bawah (d) Normalisasi transisi bawah ke atas
Gambar 3.13 Matriks normalisasi transisi keempat sisi berukuran 4x6 Langkah 4 : Langkah terakhir yaitu menggambungkan keempat matriks normalisasi menjadi sebuah matriks berukuran empat kali dari matriks normalisasi yaitu 4x24. Berikut pseudocode pengabungan keempat matriks menjadi matriks nilai keluaran dari
Direction Feature yang selanjutnya menjadi input di dalam jaringan saraf tiruan
Initialisasi x, y, z
For y = 0 To (TinggiMatriksAwal/4) – 1{ z = 0, Transisi = 4
For x = 0 To (Transisi*4) -1{
Apabila z = Transisi -1, maka z = 0
Apabila x >= 0 dan x < Transisi, maka ElemenMatriksDF = ElemenMatriksN
Apabila x >=Transisi dan x<Transisi*2, maka ElemenMatriksDF = ElemenMatriksN
Apabila x >=Transisi*2 dan x<Transisi*3, maka ElemenMatriksDF = ElemenMatriksN
Apabila x >=Transisi*3 dan x<Transisi*4, maka ElemenMatriksDF = ElemenMatriksN
} }
Hasil akhir dari proses ekstraksi fitur dapat dilihat pada gambar 3.14 di bawah ini.
Gambar 3.14 Matriks Direction Feature Extraction berdimensi 4x24 3.2.13. Backpropagation
Proses akhir dari penelitian ini adalah mengklasifikasi citra biji catur cina setelah melalui proses awal hingga proses fitur ekstraksi. Nilai input dari metode Backpropagation di dalam penelitian ini adalah nilai output dari Direction Feature Extraction yang berdimensi 4x24. Metode Backpropagation bersifat feedforward sehingga proses pelatihan mesin dapat dilakukan pada proses pengklasifikasian citra biji catur cina.
hasil perkalian dari dimensi output fitur ekstraksi yang digunakan, yaitu 96 nodes.
Hidden Layer memiliki jumlah nodes sebesar 70% dari jumlah Input nodes dengan
Hidden nodes. Output Layer yang memiliki nodes yang berjumlah sesuai dengan
Target yang akan diklasifikasi yaitu masing-masing delapan buah jenis tulisan catur
cina berdasarkan warna merah atau warna hitam dan dikalikan dengan jumlah transisi sudut.
Besar jumlah epoch atau iterasi pelatihan juga mempengaruhi hasil klasifikasi. Oleh sebab itu, penulis melakukan pelatihan sebanyak 10.000 epoch. Untuk mengubungkan antar node-node pada setiap lapisan maka digunakan
weight(bobot). Weight juga dapat ditingkatkan nilai pembelajarannya. Di dalam
penelitian ini, weight yang digunakan ada dua, yaitu, weight penghubung
Input-Hidden Layer dan Input-Hidden-Output Layer. Adapun dimensi dari weight Input-Input-Hidden
Layer adalah jumlah node Input Layer ditambah satu node bias kemudian dikalikan
dengan jumlah node Hidden Layer. Sedangkan, dimensi dari weight penghubung
Hidden-Output Layer adalah jumlah node Hidden Layer ditambah satu node bias
kemudian dikalikan dengan jumlah node Output Layer. Semakin besar epoch yang dilakukan, semakin teliti nilai weight yang digunakan dalam mengklasifikasi. Berikut langkah-langkah penerapan Algoritma Backpropagation untuk mengklasifikasi pola karakter cina pada biji catur cina beserta pseudocode.
Langkah 1 : Melakukan initialisasi terhadap variabel-variabel yang digunakan beserta penjelasan.
Intialisasi InputNeuron, HiddenNeuron, OutputNeuron.
//Pada penelitian ini digunakan Input = 96, Hidden = 70 dan Output = 8. Initialisasi ArrayInput, ArrayHidden, ArrayOutput, ArrayAnswer
//Pada penelitian ini digunakan ukuran ArrayInput, ArrayHidden dan ArrayOutput sama seperti jumlah neuron pada Input, Hidden dan Output. ArrayAnswer adalah array yang menyimpan nilai untuk membandingkan output pada training.
Intialisasi WeightInHid, WeightHidOut
//Pada penelitian ini digunakan nilai bias = 1 dan ukuran matriks WeightInHid adalah (ukuran ArrayInput + bias)* (ukuran ArrayHidden). Sedangkan, ukuran matriks WeightHidOut adalah (ukuran ArrayHidden +bias) * (ukuran ArrayOutput).
//Pada penelitian ini digunakan ukuran dari array ErrorOutput sebesar ukuran ArrayOutput dan ukuran dari array ErrorHidden sebesar ukuran ArrayHidden.
Initialisasi JumlahSampelTraining, JumlahTargetTesting
//Pada penelitian ini digunakan 32 sampel training dan 8 buah sampel testing hanya untuk proses training saja.
Initialisasi LearningRate, EpochNumber
//Pada penelitian ini digunakan LearningRate adalah 0.2 dan EpochNumber adalah 10.000 kali.
Initialisasi OutputTarget
//Hasil dari training akan diurut sesuai dengan urutan klasifikasi masing-masing. Misal, pada pseudocode akan diurutkan Raja sebagai 0, Penasehat Raja Huruf Baru = 1, Penasehat Raja Huruf Lama = 2, Gajah = 3, Kereta Kuda = 4, Kuda = 5, Meriam = 6, Pasukan = 7.
Langkah 2 : Melakukan pendeklrasian Matriks Input Training dan Testing beserta OutputTarget yang diperlukan
Function Deklarasi(){
MatriksInputTraining = MatriksDirectionFeature(berjumlah 32 buah) MatriksInputTesting = MatriksDirectionFeature(berjumlah 8 buah) For i = 0 To (JumlahSampelTraining / JumlahTargetTesting) – 1{
k= 0
For j = (i * 8) To ((i+1)*JumlahTargetTesting) – 1{ OutputTarget(j) = k
k++ }
} }
Langkah 3 : Memberikan nilai awal berupa nilai acak atau random antara 0.5 atau -0.5. Pemberian nilai acak ini ditujukan kepada weight Input-Hidden Layer dan weight
Hidden-Output Layer.
For i = 0 To InputNeuron{
For j = 0 To HiddenNeuron – 1{
WeightInHid posisi (i,j) = GetRandom 0.5 atau -0.5 }
}
For i = 0 To HiddenNeuron{
For j = 0 To OutputNeuron – 1{
WeightHidOut posisi (i,j) = GetRandom 0.5 atau -0.5 }
} }
Langkah 4 : Menjalankan fungsi utama dimana fungsi ini akan menjalankan proses pengacakan nilai weight, proses feedforward, proses backpropagate, proses training dan proses testing yang terdapat pada langkah-langkah berikutnya.
Function MainNetworkActivity(){ Lakukan Deklarasi Lakukan WeightAcak
For i = 0 To EpochNumber – 1{ J = 0
J=(J==JumlahSampelTrainig? 0 : J) dan J++
For a = 0 To OutputNeuron – 1 maka ArrayTarget indeks (a) = OutputTarget posisi (J, a)
For b = 0 To InputNeuron – 1 maka ArrayInput indeks (b) = MatriksInputTraining posisi (J, b)
Lakukan FeedForward Lakukan Backpropagate
}
Lakukan Training
Langkah 5 : Melakukan proses feedforward yaitu proses yang dilakukan untuk penghitungan jaringan saraf tiruan menuju arah ke depan dari Input ke Hidden Layer dan dari Hidden ke Output Layer.
Function FeedForward{
For a = 0 To HiddenNeuron-1{
Set JumlahweightInputHidden = 0 For b = 0 To InputNeuron-1{
Sum (ArrayInput pada indeks(b) *WeightInHid pada posisi (b,a ) InTo (JumlahweightInputHidden)
}
Sum (WeightInHid pada posisi (InputNeuron ,a ) InTo (JumlahweightInputHidden)
Set ArrayHidden indeks a = 1 / 1 + Exponen(JumlahweightInputHidden* -1) }
For a = 0 To OutputNeuron-1{
Set JumlahweightHiddenOutput = 0 For b = 0 To HiddenNeuron-1{
Sum (ArrayHidden pada indeks(b) *WeightHidOut pada posisi (b,a ) InTo (JumlahweightHiddenOutput)
}
Sum (WeightHidOut pada posisi (HiddenNeuron ,a ) InTo(JumlahweightHiddenOutput)
Set ArrayAnswer indeks (a) = 1 / 1 + Exponen(JumlahweightHiddenOutput*-1) }
}
Langkah 6 : Melakukan proses backpropagate. Proses backpropagate adalah proses untuk mengecek kesalahan yang dihasilkan pada lapisan Hidden dan layer Output. Setelah mendapatkan error atau kesalahan, setiap bobot pada lapisan Hidden dan
Function Backpropagate{
//Hitung Error di Layer Output
For i = 0 To OutputNeuron – 1 maka ErrorOutput(i) = (ArrayTarget() – ArrayAnswer(i)) * (ArrayAnswer(i) – ArrayAnswer(i)2)
//Hitung Error di Layer Hidden For i = 0 To HiddenNeuron – 1 ErrorHidden(i) Set 0
For j = 0 To OutputNeuron – 1{
Sum (ErrorOutput(j) * WeightHidOut(i,j)) To(ErrorHidden(i)) }
Multiple(ArrayHidden(i) –ArrayHidden(i)2) To (ErrorHidden(i)) }
//Update Weight Hidden Output For i = 0 To OutputNeuron – 1{
For j = 0 To HiddenNeuron – 1{
Sum(LearningRate*ErrorOutput(i)*ArrayHidden(j))To(Weight HidOut posisi (j,i))
}
Sum(LearningRate*ErrorOutput(i))To(WeightHidOut posisi (HiddenNeuron,i))
}
//Update Weight Input Hidden For i = 0 To HiddenNeuron – 1{
For j = 0 To InputNeuron – 1{
Sum(LearningRate*ErrorHidden(i)*ArrayInput(j))To(WeightIn Hid posisi (j,i))
}
Sum(LearningRate*ErrorHidden(i))To(WeightInHid posisi (InputNeuron,i))
}
Langkah 7 : Melakukan proses training. Dimana terdapat JumlahSampelTraining= 32 sampel yang akan ditraining.
Function Training{
For a = 0 To JumlahSampelTraining-1{
For b = 0 To InputNeuron – 1 maka ArrayInput(b) = MatriksInputTraining(b,a)
For b = 0 To OutputNeuron -1 maka ArrayTarget(b) = OutputTarget(a,b)
Panggil FeedForward }
}
Langkah 8 : Melakukan pengecekan hasil training terhadap data training Function CekTraining{
For i = 0 To JumlahSampelTraining – 1{ For j = 0 To InputNeuron-1{
ArrayInput pada indeks (j) = MatriksInputTraining posisi (j,i) }
Panggil FeedForward
Print “Output” adalalah Panggil CekMaksimum(ArrayAnswer) }
}
Langkah 9 : Melakukan pengecekan hasil testing terhadap data asing Function CekTesting{
For i = 0 To JumlahTargetTesting – 1{ For j = 0 To InputNeuron-1{
ArrayInput pada indeks (j) = MatriksInputTesting posisi (j,i) }
Print “Output” adalalah Panggil CekMaksimum(ArrayAnswer) }
}
Langkah 10 : Melakukan pengembalian nilai maksimum. Function Maximum (ArrayMax){
P = 0
Maksimum = ArrayMax indeks P For i = 0 To OutputNeuron – 1{
Apabila ArrayMax pada indeks i > Maksimum pada indeks j maka Maksimum =ArrayMax indeks i
Set P To i }
}
3.3. Perancangan Sistem
Pada tahap ini, perancaangan sistem akan dilakukan tahap perancangan
interface(antarmuka) dari sistem pengenalan pola pada karakter cina biji catur cina.
3.3.1. Perancangan Antarmuka
Dalam membangun aplikasi pada penelitian ini, diperlukan adanya perancangan antarmuka (interface), yaitu sebuah gambaram umum yang merepresentasikan setiap tampilan pada aplikasi yang dibangun. Rancangan antarmuka yang dilakukan di dala penelitian ini diharapkan dapat memberikan kemudahan bagi pengguna dalam membuat aplikasi ini. Adapaun 3 halaman yang akan dirancang pada aplikasi ini, yaitu halaman menu utama, halaman image preprocessing, halaman implementasi.
3.3.1.1. Rancangan Tampilan Halaman Menu Utama
Gambar 3.15 Tampilan Halaman Menu Utama Keterangan :
a. Menu File yang terdapat pada deretan tampilan halaman menu utama. b. Menu Image processing yang terdapat pada deretan tampilan menu utama. c. Menu About yang terdapat pada deretan tampilan menu utama.
3.3.1.2 Rancangan Tampilan Halaman Image Preprocessing
Pada halaman image preprocessing merupakan halaman yang memiliki frame yang akan mengambil citra biji catur yang akan diproses untuk mendapatkan nilai fitur dari citra tersebut. Gambaran rancangan tampilan halaman image preprocessing dapat dilihat pada gambar 3.16.
[image:44.595.151.480.523.706.2]a. Frame live dari webcam untuk mengambil citra biji catur cina. b. Frame grayscale untuk memproses citra RGB.
c. Trackbar untuk mendapatkan nilai threshold citra minimum.
d. Trackbar untuk mendapatkan nilai threshold citra maximum.
e. Combobox untuk mengeset Set dari citra.
f. Combobox untuk mengeset Colour dari citra.
g. Combobox untuk mengeset nama Chess dari citra.
h. Button Capture untuk menangkap citra rgb dari citra biji catur cina.
i. Button Grayscale untuk menangkap citra grayscale dari citra biji catur cina.
j. Button Cropping untuk mengcrop citra biji catur yang digunakan.
k. Button Processing untuk memproses citra biji catur hingga hasil ekstraksi fitur. l. Button untuk memulai atau menghentikan frame live dari webcam.
3.3.1.3. Rancangan Tampilan Halaman Implentasi
Halaman Implentasi adalah halaman untuk melakukan proses testing dan proses training pada data citra catur cina. Halaman ini melakukan proses klasifikasi citra biji catur cina dengan melakukan testing pada citra baru dari live webcam. Gambar 3.17 menunjukkan tampilan halaman implementasi.
Keterangan :
a. Frame live dari webcam untuk mengambil citra testing biji catur cina. b. Frame grayscale untuk memproses citra RGB.
c. Trackbar untuk mendapatkan nilai threshold citra minimum.
d. Trackbar untuk mendapatkan nilai threshold citra maximum.
e. Combobox untuk mengeset Set dari citra.
f. Button untuk mengload data training dan melakukan training.
g. Textbox untuk menampilkan hasil klasifikasi.
h. Button untuk mengeksekusi atua menjalankan klasifikasi pada citra testing.
BAB 4
IMPLEMENTASI DAN PENGUJIAN SISTEM
Bab ini akan membahas tentang hasil yang diperoleh dari implementasi metode yang digunakan untuk mengidentifikasi citra biji catur cina dan pengujian sistem sesuai dengan analisis dan perancangan sistem yang telah dibahas pada Bab 3.
4.1. Implementasi Sistem
Dalam penelitian ini, seluruh metode yang digunakan akan diimplementasikan ke dalam sistem dengan menggunakan bahasa pemograman Visual C#.Net sesuai dengan perancangan yang telah dilakukan.
4.1.1. Spesifikasi perangkat keras dan perangkat lunak yang digunakan
Spesifikasi perangkat keras dan perangkat lunak yang digunakan untuk membangun sistem ini adalah sebagai berikut :
1. Processor Intel ® CoreTM i3-3217U CPU 1.80GHz 2. Kapasitas harddisk 500GB
3. Memory RAM yang digunakan 2GB DDR3
4. Sistem operasi yang digunakan adalah Microsoft Windows 7 Home 5. Kamera webcam 15 MP dengan resolusi HD
6. Library yang digunakan EmguCV 2.4.0.1717
4.1.2. Implementasi perancangan antarmuka
Adapun implementasi perancangan antarmuka yang telah dilakukan pada Bab 3 adalah sebagai berikut :
Halaman utama merupakan halaman yang menampung seluruh proses utama dari sistem pengenalan pola tulisan citra biji catur cina. Halaman ini menampilkan menu utama yaitu File, Image processing, About. Tampilan halaman utama yang dibangun pada sistem dapat dilihat pada gambar 4.1.
Gambar 4.1 Tampilan Halaman Utama 2. Tampilan Halaman input character
[image:48.595.140.494.486.691.2]Halaman input character merupakan halaman yang digunakan untuk menginput field-field berupa nama, warna dan jumlah dari setiap biji catur cina. Tampilan halaman input character yang dibangun pada sistem dapat dilihat pada gambar 4.2.
Halaman input set merupakan halaman yang digunakan untuk menginput parameter yang digunakan pada tahap pre-processing image. Parameter dari setiap set biji catur cina yang dimaksud adalah Total, MaxRadius, MinRadius, ThresholdRed,
ThresholdBlack, Dilate Loop. Parameter Total menyimpan jumlah biji catur cina pada
setiap set catur. MaxRadius dan MinRadius menyimpan nilai maksimum dan minimum dari cincin biji catur. ThresholdRed dan ThresholdBlack menyimpan nilai
threshold pada biji catur merah dan biji catur hitam. Dilate Loop menyimpan nilai
iterasi dari operator dilasi pada citra yang bertujuan untuk memperbaiki citra (Image
Enhancement). Tampilan halaman input set yang dibangun pada sistem dapat dilihat
[image:49.595.133.499.292.498.2]pada gambar 4.3.
Gambar 4.3 Tampilan Halaman Input Set 4. Tampilan Halaman capture chess image
Gambar 4.4 Tampilan Halaman capture chess image 5. Tampilan Halaman binerization300x300
Halaman binerization300x300 merupakan halaman yang digunakan untuk melakukan proses membinerisasikan citra keabuan. Pada halaman binerization300x300 dilakukan penyimpanan data biner berupa matriks dengan ukuran 300x300. Tampilan halaman binerization300x300 dibangun pada sistem dapat dilihat pada gambar 4.5.
Gambar 4.5 Tampilan Halaman binerization300x300 6. Tampilan Halaman normalization300to24
Gambar 4.6 Tampilan Halaman normalization300to24 7. Tampilan Halaman Pixelization24x24
Halaman pixelization24x24 merupakan halaman yang digunakan untuk melakukan proses perubahan kontras pada pixel. Halaman ini berfungsi untuk mengubah citra asli hasil resized dari normalisasi menjadi citra yang memiliki nilai pixel yang lebih kontras antara foreground dengan background. Tampilan halaman pixelization 24x24 dibangun pada sistem dapat dilihat pada gambar 4.7.
Gambar 4.7 Tampilan Halaman pixelization24x24 8. Tampilan Halaman Thinning 24x24
[image:51.595.119.502.431.678.2]ketebalan sebesar satu pixel. Tampilan halaman thinning 24x24 dibangun pada sistem dapat dilihat pada gambar 4.8.
Gambar 4.8 Tampilan Halaman thinning 24x24 9. Tampilan Halaman Binerization24x24
[image:52.595.116.488.461.674.2]Halaman Binerization 24x24 merupakan halaman yang digunakan untuk melakukan proses pengkorvesian dari citra menjadi matriks biner kembali dengan ukuran 24x24. Tampilan halaman binerization24x24 dibangun pada sistem dapat dilihat pada gambar 4.9.
Gambar 4.9 Tampilan Halaman binerization24x24 10. Tampilan Halaman Direction Feature Extraction
binerization24x24. Tampilan halaman direction feature extraction dibangun pada sistem dapat dilihat pada gambar 4.10.
Gambar 4.10 Tampilan Halaman Direction Feature Extraction 11. Tampilan Halaman Training using Backpropagation
Gambar 4.11 Tampilan Halaman Training using Backpropagation 12. Tampilan Halaman Implementation
Halaman Implementation merupakan halaman yang digunakan untuk mengimplementasikan proses dari awal yaitu pre-processing citra dan ekstrasi fitur sampai kalsifikasi pada data dari citra asing pada akhirnya. Halaman ini akan menunjukkan hasil klasifikasi pada setiap citra biji catur yang ditangkap. Halaman ini bertujuan untuk mencatat dan menghitung jumlah biji catur merah dan hitam yang telah terklasifikasi. Tampilan halaman implementation dibangun pada sistem dapat dilihat pada gambar 4.12.
[image:54.595.105.504.490.719.2]4.2. Pengujian Sistem
Pada tahap pengujian sistem akan dilakukan evaluasi kinerja hasil proses pada sistem. Standar yang digunakan dalam mengevaluasi kinerja hasil proses sistem adalah Gold
Standard dimana penilaian didasari atas True Positive (TP), False Posotive (FP), True
Negative (TN) dan False Negative (FN). Dalam penelitian ini akan dilakukan dua pengujian tahap utama yaitu : pengujian hasil terhadap dataset biji catur cina dengan orientasi sudut 90◦ dan pengujian hasil terhadap dataset biji catur cina dengan sudut 60◦ sampai 120◦.
4.2.1. Pengujian terhadap Dataset Biji Catur Cina dengan Orientasi Sudut 90◦
Pengujian terhadap biji catur cina yang memiliki orientasi sudut 90◦ dan font yang berbeda sangat mempengaruhi tingkat keberhasilan identifikasi citra biji catur. Pada penelitian ini, peneliti menggunakan lima (5) set biji catur cina yang memiliki jumlah delapan puluh (80) biji catur cina secara keseluruhan. Setiap biji catur cina memiliki karakter yang berbeda dan setiap set biji catur cina memiliki font yang berbeda. Pengujian dilakukan dengan menggunakan citra training biji catur yang diambil secara tegak lurus sebanyak empat (4) set dan dilakukan pengujian terhadap citra asing biji catur cina yang sebanyak satu (1) set.
Berdasarkan standar yang digunakan untuk pengujian ini, penilaian True
Positive (TP) pada pengidentifikasian citra biji catur cina dimana pola tulisan biji
catur cina dapat dikenali dan False Negative (FN) dimana pola tulisan biji catur cina tidak dapat dikenali. Ukuran kinerja hasil pengujian ditunjukkan pada tabel 4.1.
Tabel 4.1 Ukuran Kinerja Hasil Pengujian
No. Indeks Keterangan Formula
1 TP Red
rate
Kemampuan untuk mengidentifikasi citra biji catur cina warna merah
x 100%
2 FN Red
rate
Ketidakmampuan untuk
mengidentifikasi citra biji catur cina
warna merah
3 TP Black
rate
Kemampuan untuk mengidentifikasi citra biji catur cina warna hitam
x 100%
4 FN Black
rate
Ketidakmampuan untuk
mengidentifikasi citra biji catur cina warna hitam
x 100%
3 Over all
accuracy
Keandalan secara keseluruhan
4 Error ratio Kesalahan secara
keseluruhan
Dalam penelitian ini, pengujian dilakukan dengan menggunakan 2 kondisi pada dataset citra dengan pengujian yang berbeda. Berikut ini adalah rincian dataset yang digunakan.
Dataset yang digunakan adalah hasil pengumpulan sampel oleh peneliti yang berjumlah 5 set catur cina. Dataset ini terdiri dari 3 macam data untuk pengidentifikasian pola karakter cina pada citra biji catur cina dengan kondisi yang berbeda, yaitu :
a. Dataset biji catur cina hasil pengumpulan peneliti.
Dataset biji catur yang telah dikumpulkan oleh peneliti memilki 2 kondisi pengujian yang berbeda. Kedua kondisi yang dimaksud adalah sebagai berikut.
1. Kondisi I
- Jumlah citra training : 320 citra
- Jumlah citra testing : 80 citra
- Sudut citra : 90◦ (citra berada pada posisi tegak lurus)
- Ukuran citra : 24 x 24 pixel
2. Kondisi II
- Jumlah citra training : 320 citra
- Jumlah citra testing : 240 citra
- Sudut citra : 90◦ ± 5◦ (citra berada pada posisi tegak lurus dengan sudut kurang lebih 5◦ searah jarum jam atau berlawanan jarum jam)
- Ukuran citra : 24 x 24 pixel
- Iterasi pelatihan (epoch) : 10.000 epoch b. Dataset font digital mandarin.
Dataset font digital mandarin yang diujikan merupakan font standar yaitu: DFB,
FangSong, Simsum, VTMei. Font digital yang diujikan akan dijabarkan pada kondisi
sebagai berikut.
- Dataset training : citra biji catur hasil pengumpulan peneliti
- Dataset testing : citra font DFB, FangSong, Simsum,
VTMei
- Jumlah citra training : 400 citra
- Jumlah citra testing : 80 citra
- Sudut citra : 90◦ (citra berada pada posisi tegak lurus)
- Ukuran citra : 24x24 pixel
- Iterasi pelatihan (epoch) : 10.000 epoch
Tabel 4.2 Persentase Hasil Pengujian Pengidentifikasian Dataset Citra Biji Catur Cina Peneliti Kondisi I
Persentase Hasil Testing (%) Kondisi I
No
Dataset Training
(Set)
Dataset Testing (Set)
TPRed FN
Red
TP Black
FN Black
Over all
accuracy Error
1 II, III, IV, V I 100% 0% 75% 25% 87.5% 12.5%
2 I, III, IV, V II 100% 0% 100% 0% 100% 0%
3 I, II, IV, V III 100% 0% 100% 0% 100% 0%
4 I, II, III, V IV 75% 25% 100% 0% 87.5% 12.5%
5 I, II, III, IV V 100% 0% 100% 0% 100% 0%
Jumlah Persentase Over all 95% 5%
[image:58.595.209.424.441.694.2]Gambaran hasil pengujian dari tabel 4.2 pada kondisi I dengan orientasi sudut 90◦ dan dataset pelatihan dan pengujian yang berasal dari peneliti dapat dilihat pada gambar 4.13 di bawah ini.
b. Hasil training dan testing dataset training (I, III, IV, V) terhadap dataset testing (II)
d. Hasil training dan testing dataset training (I, II, III, V) terhadap dataset testing (IV)
[image:60.595.207.426.84.340.2]e. Hasil training dan testing dataset training (I, II, III, IV) terhadap dataset testing (V)
Gambar 4.13 Hasil pengujian terhadap biji catur merah dan hitam dengan orientasi sudut 90◦ dan font yang berbeda
pengujian data yang digunakan masih berada pada posisi 90◦ (citra berada pada posisi tegak lurus) dari semua set biji catur yang dilakukan proses training-testing dan proses pelatihan pada dataset di dalam jaringan saraf tiruan Backpropagation sebanyak 10.000 epoch. Akantetapi, keberagaman jenis font yang digunakan masih belum memberikan tingkat persentase error yang tinggi. Jumlah citra biji catur yang diujikan sebanyak 80 citra, dimana terdapat 76 citra biji catur yang berhasil teridentifikasi dan 4 citra biji catur yang tidak berhasil teridentifikasi. Adapun gambar sampel biji catur cina yang digunakan oleh peneliti dalam mendapatkan hasil pengujian kondisi I ditunjukkan pada gambar 4.14 di bawah ini.
a.Gambar dataset font tipe I b.Gambar dataset font tipe II
c.Gambar dataset font tipe III d. Gambar dataset font tipe IV
e.Gambar dataset font tipe V
Gambar 4.14 Gambar dataset font biji catur cina pada posisi 90◦
sebanyak 5◦ searah maupun berlawanan arah jarum jam. Tabel 4.3 di bawah ini menunjukkan hasil pengujian terhadap kondisi II.
Tabel 4.3 Persentase Hasil Pengujian Pengidentifikasian Dataset Citra Biji Catur Cina Peneliti Kondisi II
Persentase Hasil Testing (%) Kondisi II
No Dataset Training (Set) Dataset Testing (Set) TP Red FN
Red TP Black
FN Black
Over all
accuracy Error
1 II, III,
IV, V I 100% 0% 95.83% 4.17% 97.92% 2.08%
2 I, III, IV,
V II
70,83 %
29.17
% 87.5% 12.5% 79.17% 20.83%
3 I, II, IV,
V III
91.67
% 8.33% 100% 0% 95.84% 4.16%
4 I, II, III,
V IV
66.67 %
33.33
% 79.17%
20.83
% 72.92% 27.08%
5 I, II, III,
IV V 75% 25% 91.67% 8