PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
TUGAS AKHIR PENGENALAN PERALATAN BENGKEL MOTOR SECARA REAL TIME MENGGUNAKAN WEBCAM BERBASIS EKSTRAKSI CIRI DISCRETE COSINE TRANSFORM DAN COSINE SIMILARITY Diajukan Untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Teknik Program Studi Teknik Elektro
NILAWATI SEKARSUCI NIM : 125114019
PROGRAM STUDI TEKNIK ELEKTRO JURUSAN TEKNIK ELEKTRO FAKULTAS SAINS DAN TEKNOLOGI UNIVERSITAS SANATA DHARMA YOGYAKARTA
2016 i
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
FINAL PROJECT
RECOGNITION OF MOTORCYCLE WORKSHOP EQUIPMENT AND TOOLS IN REAL TIME USING WEBCAM BASED ON DISCRETE COSINE TRANSFORM FEATURE EXTRACTION AND COSINE SIMILARITY Presented as Partial Fullfillment of Requirements To Obtain the Sarjana Teknik Degree In Electrical Engineering Study Program
NILAWATI SEKARSUCI NIM :125114019
ELECTRICAL ENGINEERING STUDY PROGRAM DEPARTMENT OF ELECTRICAL ENGINEERING FACULTY OF SCIENCE AND TECHNOLOGY SANATA DHARMA UNIVERSITY YOGYAKARTA
2016 ii
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
iii
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
iv
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
v
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
HALAMAN PERSEMBAHAN DAN MOTTO HIDUP MOTTO: “ A pessimist sees the difficulty in every opportunity, An optimist sees the opportunity in every difficulty “
Dengan ini kupersembahkan karya tulis ini kepada : Tuhan Yang Maha Esa, Keluargaku Tercinta, Teman – teman yang terkasih,
Terima kasih untuk semuanya………
vi
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
INTISARI Perkembangan teknologi yang semakin cepat diberbagai bidang termasuk bidang elektronik, sehingga banyak perusahaan yang bergerak dibidang elektronik saling bersaing untuk menciptakan inovasi yang baru dalam produk elektronik yang diciptakan.Untuk itu para teknisi yang bekerja di perusahaan tersebut harus mampu menggunakan dan mengambil berbagai peralatan untuk melakukan pekerjaannya, sehingga tenaga dan waktu menjadi tidak efisien. Sistem yang akan dibuat meniru kemampuan mata manusia untuk mengenali objek berupa peralatan bengkel motor. Sistem ini akan secara otomatis membandingkan objek berupa macam-macam peralatan bengkel motor dengan gambar yang telah di capture oleh user melalui webcam. Sistem pengenalan peralatan bengkel motor secara real time pada tugas akhir ini menggunakan webcam dan komputer. Secara garis besar, sistem pengenalan perangkat elektronika secara real time yang dibuat dapat dideskripsikan bedasarkan urutan berikut: citra peraalatan bengkel motor dari webcam, grayscaling, cropping, resizing, ekstaksi ciri dengan DCT 2-D (Discrete Cosine Transform two Dimension), dan similaritas kosinus. Sistem pengenalan peralatan bengkel motor secara real time menggunakan webcam berbasis ekstraksi ciri DCT berhasil dibuat dan bekerja dengan baik. Berdasarkan hasil pengujian variasi jumlah koefisien DCT dengan perangkat elektronika, sistem pengenalan peralatan bengkel motor secara real time yang dibuat mampu menghasilkan tingkat pengenalan hingga 100%. Parameter minimum untuk mendapatkan tingkat pengenalan hingga 100% tersebut adalah jumlah koefisien DCT 171. Kata kunci: Webcam, DCT 2-D (Discrete Cosine Transform two Dimension), Similaritas Kosinus.
viii
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
ABSTRACT The increasingly rapid technological development in various fields, including the fields of electronics, so a lot of companies engaged in competing electronics to create new innovations in electronic products created. Therefore technicians who works in the company was to use and taking various equipment for doing the work, so the energy and time of being inefficient. The system will be made imitate the human eye‟s ability to recognize object of motorcycle shap devices. The system will be automatically comparing object in the form of various motorcycle shap devices with images that have been captured by the user via webcam. Recognition system of motorcycle workshop equipment and tools in real time on this final project using a webcam and the computer. In outline, recognition system electronic devices in real time will be made can ben descibed based on the following order: The image of a device electronics from the webcam, , grayscaling, cropping, resizing, feature extraction with DCT 2-D (Discrete Cosine Transform two Dimension), and the calculation of the distance to the cosinus similarity. Recognition system of motorcycle workshop equipment and tools in real time use webcam based on DCT feature extraction successfully made and works well. Based on the testing number variation coefficient DCT with electronic device, Recognition system of motorcycle workshop equipment and tools in real time made, capable resulted in recognition rate up to 100%. The minimum parameters to obtain up to 100% recognition rate is the number of DCT coefficients 171. resulted in recognition rate up to 100%. Key word: Webcam, DCT 2-D (Discrete Cosine Transform two Dimension), cosine similarity.
ix
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
KATA PENGANTAR Puji dan Syukur penulis panjatkan kepada Tuhan Yesus Kristus karena telah memberikan berkat-Nya sehingga penulis dapat menyelesaikan tugas akhir ini dengan baik.Penulis menyadari bahwa keberhasilan menyelesaikan tugas akhir ini tidak lepas dari bantuan dan bimbingan dari berbagai pihak. Oleh karena itu, pada kesempatan ini penulis mengucapkan terima kasih kepada: 1. Bapak Sudi Mungkasi, S.Si., M.Math.Sc., Ph.D., selaku Dekan Fakultas Sains dan Teknologi Universitas Sanata Dharma Yogyakarta. 2. Bapak Petrus Setyo Prabowo, S.T.,M.T., selaku Ketua Program Studi Teknik Elektro Universitas Sanata Dharma Yogyakarta. 3. Ibu Bernadetta Wuri Handayani, S.T.,M.T., selaku dosen pembimbing akademik yang telah mendampingi dan membimbing penulis selama studi. 4. Bapak Dr.M.Linggo Sumarno, M.T., selaku dosen pembimbing yang dengan penuh pengertian dan ketulusan hati memberi bimbingan, kritik, saran, serta motivasi dalam penulisan sekripsi ini. 5. Ibu Rita dan Bapak B. Djoko Untoro Suwarno, S.Si., M.T., selaku dosen penguji yang telah memberikan masukan, bimbingan, dan saran dalam merevisi sekripsi ini. 6. Bapak/ Ibu dosen yang telah mengajarkan banyak hal memberikan perhatian dan ilmu yang tak ternilai harganya selama penulis menempuh pendidikan di Program Studi Teknik Elektro, Fakultas Sains dan Teknologi, Universitas Sanata Dharma. 7. Keluargaku tercinta atas kasih sayang, dukungan dan doa yang tiada henti.
x
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
8. Teman - teman saya yang telah membimbing dalam penulisan sekripsi. 9. Laboran Teknik Elektro dan Staff Sekretariat ( Akademika ) Fakultas Sains dan Teknologi Universitas Sanata Dharma yang telah membantu dalam hal administrasi. 10. Semua pihak yang tidak dapat disebutkan satu per satu atas semua dukungan yang telah diberikan dalam penyelesaian tugas akhir ini. Dengan segala kerendahan hati Penulis menyadari bahwa dalam penyusunan tugas akhir ini masih mengalami kesulitan dan tidak lepas dari kesalahan.Oleh karena itu, penulis mengharapkan masukan, kritik dan saran yang membangun agar tugas akhir ini menjadi lebih baik.Dan semoga tugas akhir ini dapat bermanfaat sebagaimana mestinya.
Yogyakarta, 12 September 2016 Penulis,
Nilawati Sekarsuci
xi
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
DAFTAR ISI HALAMAN JUDUL .........................................................................i-ii HALAMAN PERSETUJUAN .......................................................... iii HALAMAN PENGESAHAN ............................................................ iv PERNYATAAN KEASLIAN KARYA ............................................. v HALAMAN PERSEMBAHAN DAN MOTTO HIDUP ................. vi LEMBAR PERNYATAAN PERSETUJUAN PUBLIKASI KARYA ILMIAH UNTUK KEPENTINGAN AKADEMIK ........................ vii INTISARI .......................................................................................... viii ABSTRACT ......................................................................................... ix KATA PENGANTAR .......................................................................x-xi DAFTAR ISI ..................................................................................xii-xiv DAFTAR GAMBAR .....................................................................xv-xvi DAFTAR TABEL ..............................................................................xvi
BAB I PENDAHULUAN 1.1 Latar Belakang ..................................................................................1-3 1.2 Tujuan dan Manfaat ...............................................................................3
1.3 Batasan Masalah .................................................................................. 4 1.4 Metodologi Penelitian ............................................................................5
BAB II DASAR TEORI 2.1 Pengenalan Pola.................................................................................6-8 2.2 Citra...................................................................................................7 2.2.1 Definisi Citra ...........................................................................8-10 2.3 Preprocessing Citra..............................................................................10 2.3.1 Cropping...................................................................................10 xii
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
2.3.2 Resizing..........................................................................................11-12 2.3.3 Citra Grayscale...............................................................................12-14 A Citra RGB ......................................................................................14-15 B Model Sistem Ruang Warna RGB............................................................15
2.3.4 Thresholding............................................................................16 2.3.5 Transformasi Geometris Spasial ..............................................16-17 2.4 Discrete Cosine Transform Dua Dimensi ( DCT 2-D) ..........................18-19 2.5 Zigzag Scanning ..........................................................................19-20 2.6 Fungsi Cosine Similarity.....................................................................21 2.6 Template Matching.......................................................................21-22
BAB III PERANCANGAN 3.1 Perancangan Sistem Hardware............................................................23 3.1.1 Webcam.............................................................................24-25 3.1.2 Lampu LED.......................................................................25-26 3.2 Microsoft Visual Studio Express 2012 Aplikas C++................................26 3.3 Alat - Alat Bengkel Motor ................................................................27 3.4 Perancangan Sistem Pengenalan Peralatan Bengkel Motor ......................28 3.4.1 Pengenalan Peralatan Bengkel Motor dengan menggunakan Ekstraksi Ciri.........................................................28-31 A Perancangan Database Citra Peralatan Bengkel Motor......................................................32 3.4.2 Pengenalan Peralatan Bengkel Motor tanpa menggunakan Ekstraksi Ciri..............................................................33 3.5 Aplikasi Sistem Peralatan Bengkel Motor...........................................34
xiii
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
BAB IV HASIL DAN PEMBAHASAN 4.1 Antarmuka Program Pengenalan Peralatan Bengkel Motor
secara Real Time menggunakan Webcam berbasis Ekstrasi Ciri Discrete Cosine Transform dan Cosine Similarity.....................................................35-38 4.1.1 Tampilan Software Peralatan Bengkel Motor secara Real Time........................................................................39 4.1.2 Coding User Interface Aplikasi Pengenalan Alat Bengkel Motor..........40 4.2 Coding Program Pengenalan Alat Bengkel Motor.....................................41 4.2.1 Inisialisasi Webcam...............................................................................41 4.2.2 Pembuatan Database Citra Training.............................................41-42 4.2.3 Preprocessing...............................................................................43-46
A Grayscale...........................................................................................43 B Threshold...........................................................................................43 C Cropping.......................................................................................44-46 D Resizing.............................................................................................46 4.2.4 Program Ekstraksi Ciri Discrete Cosine Transform.......................47-48 4.2.5 Fungsi Similaritas Kosinus......................................................48-49 4.2.6 Tanpa Ekstraksi Ciri.....................................................................49-50 4.3 Pengujian Software Aplikasi Peralatan Bengkel Motor secara Real Time...50-51 4.3.1 Tabel Validasi..............................................................................51-53 4.3.2 Hasil Testing.............................................................................54-55
BAB V KESIMPULAN DAN SARAN Kesimpulan ........................................................................................56 Saran ................................................................................................56
DAFTAR PUSTAKA ..............................................................57-59 LAMPIRAN
xiv
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
DAFTAR GAMBAR Gambar 2.1. Sistem Pengenalan Pola dengan Pendekatan Statistik..........................6 Gambar 2.1. Sistem Pengenalan Pola dengan Pendekatan Struktural........................8 Gambar 2.3.1.Proses Pemotongan Citra...........................................................11 Gambar 2.3.2.(a) Citra Grayscale sebelum diresizing..........................................12 Gambar 2.3.2.(b) Citra hasil resizing...............................................................12 Gambar 2.2.3. Intesitas Grayscale..................................................................13 Gambar 2.2. Citra Grayscale yang diubah menjadi nilai matriks ..........................13 Gambar 2.3.3.(a) Citra RGB.........................................................................................14 Gambar 2.3.3.(a) Citra Grayscale ................................................................................14 Gambar 2.3.3. Pengaturan Citra RGB..........................................................................15 Gambar 2.3.3. Skema Warna RGB dalam kubus.........................................................15 Gambar 2.3.3. Citra Warna RGB.................................................................................15 Gambar 2.3.5. Transformasi Spasial .............................................................16 Gambar 2.4.(a) Citra Grayscale..........................................................................19 Gambar 2.4.(b) Citra Hasil Proses DCT..............................................................19
Gambar 2.5. Urutan Zigzag Scanning DCT Blocks..........................................20 Gambar 2.5. Path Zigzag Scanning..............................................................20 Gambar 3.1. Block System................................................................................23 Gambar 3.1.1. Webcam M-Tech.........................................................................24 Gambar 3.1.2. Lampu LED................................................................................26
Gambar 3.2. kunci inggris, kunci soket, obeng plus, senter, kunci ring, kunci
L, kunci pass, palu, tang, penggaris..........................................27 Gambar 3.4.1. Diagram Alir Program Keseluruhan.........................................28 Gambar 3.4.1.(a) Diagram Alir Preprocessing.........................................................30 Gambar 3.4.1.(b) Diagram Alir Ekstraksi Ciri...................................................30
Gambar 3.4.1.(a) Diagram Alir Fungsi Jarak...........................................................31 Gambar 3.4.1.(b) Diagram Alir Penentuan Hasil Pengenalan...............................31
Gambar 3.4.1. Model Pembuatan Database Peralatan Bengkel Motor.................32 xv
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
Gambar 3.6. Diagram Alir Pengenalan Tanpa Ekstraksi Ciri................................33 Gambar 3.5. Tampilan Utama Program Pengenalan Bengkel Motor......................34
Gambar 4.1. Ikon Microsoft Visual Studio Express 2012......................................37 Gambar 4.2. Microsoft Visual Studio Express 2012..............................................37 Gambar 4.3. Tampilan Coding Test.......................................................................38 Gambar 4.4. Tampilan User Interface................................................................38 Gambar 4.5. Tampilan Testing Alat Bengkel Motor.........................................39 Gambar 4.6. Tampilan Hasil Nilai DCT dan Tanpa Ekstraksi Ciri......................39 Gambar 4.7. Tampilan Output Alat Bengkel Motor..........................................40
DAFTAR TABEL
Tabel 2.3.3. Jenis-jenis Transformasi Affine ......................................................17 Tabel 3.1.2. Spesifikasi Webcam M-Tech WB-200............................................24 Tabel 3.5. Keterangan Tampilan Utama Program..............................................34 Tabel 4.8. Tabel Validasi Testing...............................................…………. 51-53
xvi
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
BAB I PENDAHULUAN 1.1 . Latar Belakang Perkembangan teknologi yang semakin pesat dan maju diberbagai bidang termasuk bidang elektronika, sehingga banyak perusahaan yang bergerak dibidang elektronika saling bersaing untuk menciptakan inovasi yang baru dalam produk elektronika. Oleh karena itu, para teknisi yang bekerja di perusahaan tersebut harus mampu menggunakan dan mengambil berbagai peralatan untuk melakukan pekerjaannya, sehingga tenaga dan waktu menjadi tidak efisien. Alat yang bisa menggantikan tugas seorang teknisi dalam mengambil peralatan sangat dibutuhkan untuk mengatasi hal tersebut adalah sebuah robot seperti robot visual. Robot visual adalah robot yang mampu melihat obyek disekitarnya dan dilengkapi dengan lengan yang mampu mengambil obyek tersebut. Robot visual dilengkapi sebuah sensor yang mampu melihat obyek. Sensor tersebut diharapkan mampu bekerja seperti mata pada manusia. Untuk itu dibutuhkan piranti keras dan piranti lunak untuk mengatasi persoalan tersebut. Berdasarkan pernyataan di atas, penulis ingin membuat bagian dari suatu robot visual yang mampu melihat seperti indera manusia yaitu mata manusia yang mampu melihat dan mengenali suatu peralatan bengkel motor. Indera penglihatan manusia memiliki kemampuan mengidentifikasi bentuk atau obyek yang memiliki kemiripan tidak sempurna memiliki ketidakpresisian, mata manusia akan mengumpulkan benda atau obyek yang dilihatnya sesuai dengan kategori yang telah ditentukan oleh manusia ke dalam kelompok sejenis. Contoh kemampuan indera penglihatan manusia dalam membedakan atau mengklasifikasikan bentuk atau obyek yang dilihatnya misalkan meja. Melihat dari fungsi, ciri dan karakterisktik meja yang pernah dilihat akan disimpan dalam otak manusia. Meskipun indera penglihatan manusia tidak melihat segala jenis dan bentuk meja yang ada, namun indera penglihatan manusia dapat mengidentifikasi suatu obyek yang sejenis.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 2
Indera penglihatan manusia yang mampu mengidentifikasi suatu obyek telah mengembangkan akal dan pikiran manusia dalam menciptakan penemuan–penemuan yangsangat penting dan dapat diterima secara luas oleh masyarakat umum dari berbagai lapisan untuk mengurangi ketertinggalan dalam proses kehidupan bermasyarakat. Salah satu penemuan hebat manusia adalah terciptanya suatu alat yang dapat membantu aktivitas manusia seperti komputer. Komputer dari tahun ke tahun selalu berkembang, mulai dari kegunaan maupun bentuknya. Dulu komputer hanya berfungi untuk alat bantu menghitung saja, namun seiring perkembangan zaman yang semakin maju, berkembang pesat, serba modern dan praktis yang disertai dengan kemajuan ilmu pengetahuan dan teknologi yang sangat pesat telah mendatangkan banyak manfaat bagi peningkatan taraf hidup, peradaban, serta martabat manusia. Kini komputer tidak hanya digunakan untuk alat bantu hitung semata namun telah membantu manusia dalam bekerja. Kini komputer telah dapat digunakan untuk mengidentifikasi pola golongan darah, pengenalan jenis ikan, tulisan/abjad, angka, alat, tanda tangan seseorang, sidik jari, iris mata, bahkan wajah manusia sekalipun. Dalam mengidentifikasi pengenalan pola–pola seperti yang telah disebutkan diatas banyak metode yang dapat digunakan seperti menggunakan Fast FourierTransform (FFT), Metode Hidden Markov, Discrete Cosine Transform (DCT)[1], Transformasi Wavelet Diskrit[1], Transformasi Walsh, Metode Korelasi[9], Jaringan Syaraf Tiruan (JST)[8], dan masih banyak lainnya. Saat sekarang perkembangan ilmu dan teknologi bidang otomatisasi yang cenderung meningkat adalah kebutuhan akansoftware pengenalan atau pengolahan citra, sebagai salah satu sarana pengidentifikasian suatu alat dalam rupa gambar yangdigunakan dalam kegiatan belajar sehari–hari dan bekerja. Alat yang digunakan berupa peralatan tulis–menulis maupun peralatan kantor atau kerja. Banyak penelitian–penelitian yang telah dilakukan tentang pengenalan obyek. Contoh pengenalan obyek yang pernah dilakukan antara lain pengenalan pola sidik jari menggunakan Jaringan Syaraf Tiruan dengan metode pembelajaran Backpropogation[16], Pengenalan
pola
golongan
darah
menggunakan
jaringan
syaraf
tiruan
(JST)
backpropogation, Pengenalan Wajah Menggunakan Alih Ragam Wavelet Haar dan Jarak Euclidean, Pengenalan rumput laut menggunakan Euclidean distance berbasis ekstraksi fitur, Pengenalan sidik jari manusia dengan matriks kookurensi aras keabuan (Gray Level Co-ocurrence Matrix)[12].
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 3
Sistem yang akan dibuat hanya pengenalan peralatan bengkel motor secara real time menggunakan webcam. Penulis menemukan penelitian – penelitian sebelumnya yang berkaitan dengan pengenalan suatu obyek, diantaranya pernah diteliti oleh Khrisna [1] tentang indentifikasi obyek berdasarkan bentuk dan ukuran dengan metode pengenalan pola secara statistik menggunakan teori peluang dengan obyek-obyek yang dapat dikenali adalah lingkaran, bujur sangkar, persegi panjang. Selain itu, penulis juga menemukan penelitian lain oleh Amrullah [2] yang melakukan penelitian tentang pengenalan benda (mobil) di jalan raya dengan metode Kalman Filter. Sistem yang akan dibuat meniru kemampuan mata manusia untuk mengenali obyek berupa peralatan bengkel motor. Sistem ini akan secara otomatis membandingkan obyek berupa macam-macam peralatan bengkel motor dengan gambar yang telah di capture oleh user melalui webcam, sehingga akan dihasilkan perbandingan jarak terkecil. Obyek peralatan bengkel motor diproses terlebih dahulu melalui preprocessing. Selanjutnya diproses dengan menggunakan ekstraksi ciri Discrete Cosine Transform (DCT) kemudian digunakan sebagai database. Karakter yang telah dicapture dibandingkan dengan database dengan menggunakan fungsi similaritas kosinus dan hasil perbandingannya terkecil merupakan obyek yang telah dicapture. Semua proses dilakukan menggunakan software Microsoft Visual Studio Express 2012 Aplikasi C++ baik dalam pemrogramannya maupun visualisasi pengambilan gambarnya. Jika proses pengambilan gambar telah sesuai dengan database, maka user dapat melihat hasil yang telah dicapture berupa teks pada layar monitor.
1.2. Tujuan dan Manfaat Penelitian Tujuan dari penulisan tugas akhir ini adalah membuat sebuah sistem yang dapat mengenali berbagai macam peralatan bengkel motor secara real time menggunakan ekstraksi ciri Discrete Cosine Transform (DCT) dan similaritas kosinus. Manfaat penelitian ini adalah membantu pengguna aplikasi dalam mengenali jenis-jenis peralatan bengkel motor dan sebagai dasar dalam penelitian selanjutnya untuk membuat sebuah sistem yang dapat mengenali dan mengambil suatu obyek.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 4
1.3. Batasan Masalah Sistem pengenalan peralatan bengkel motor terdiri dari perangkat keras (hardware) dan perangkat lunak (software). Hardware berupa webcam dan Fixture Software yang digunakan adalah Microsoft Visual Studio Express 2012 Aplikasi C++. Microsoft Visual Studio Express 2012 Aplikasi C++ digunakan untuk mengatur seluruh proses pengolahan data yang dicapture oleh webcam. Pada perancangan sistem ini, penulis fokus pada pembuatan software komputer untuk memproses pengenalan peralatan bengkel motor sedangkan untuk hardware berupa webcam dengan merk “M-Tech WB-200” dan fixture. Penulis menetapkan beberapa batasan masalah pada perancangan ini, yaitu sebagai berikut : a. Masukkan citra berupa 10 peralatan bengkel motor meliputi Kunci L, obeng plus, Senter, kunci ring, kunci soket, kunci pas, palu, tang, Penggaris. b. Pada fixture sudah disediakan tempat berupa foam / busa cat warna hitam dop untuk meletakkan peralatan bengkel motor. c. Pengambilan citra menggunakan webcam M-Tech WB-200 yang diletakkan tegak lurus diatas peralatan bengkel motor dengan jarak ± 50 cm. d. Posisi kamera untuk pengambilan citra fix (terkunci) e. Rotasi pengambilan citra 0º, 90º, 180º dan 270º f. Posisi peletakkan peralatan bengkel motor tetap, yaitu dengan cara menempelkan peralatan bengkel motor dengan kayu yang sudah diberi foam cat hitam dop dibentuk sesuai dengan ukuran 20cm x 25cm . g. Intensitas cahaya diberi lampu LED pada alat tersebut h. Menggunakan fungsi similaritas kosinus sebagai metode perbandingan untuk mengenali peralatan bengkel motor. i. Pengenalan peralatan bengkel motor ini dibuat dengan menggunakan software pemrograman Microsoft Visual Studio Express 2012 aplikasi C++. j. Ditambahkan dalam tahap preprocessing threshold. k. Citra untuk masukkan DCT berupa citra grayscale yang kemudian diberi threshold untuk memperjelas batas hitam dan putih . l. Ukuran citra masukan DCT adalah 256 x 256 pixel. m. Keluaran berupa teks yang akan ditampilkan di layar monitor.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 5
1.4. Metodologi Penelitian 1.4.1. Metode Studi Pustaka Melakukan studi pustaka yaitu membaca dan mempelajari buku-buku dan jurnal ilmiah mengenai pengenalan suatu objek serta informasi dari website, pemograman Visual Basic, Image Processing, Discrete Cosine Transform, Cosine Similarity, Threshold dan media-media lain yang berkaitan dengan topik yang diambil.
1.4.2. Langkah - langkah dalam Pengerjaan Tugas Akhir a. Pengumpulan bahan-bahan referensi berupa buku-buku dan jurnal-jurnal ilmiah mengenai pengenalan suatu obyek, pemograman Microsoft Visual Studio Express 2012 Aplikasi C++, Image Processing, Discrete Cosine Transform, Cosine Similarity, Threshold. b. Perancangan subsistem software dan hardware Tahap ini bertujuan untuk mencari bentuk model yang optimal dari sistem yang akan dibuat dengan mempertimbangkan berbagai faktor-faktor permasalahan dan kebutuhan-kebutuhan yang ditentukan. c. Pembuatan subsistem software dan hardware Sistem akan bekerja apabila user menekan tombol push button yang ditampilkan dalam tampilan visual yang disediakan dalam software. Kemudian sistem akan mengolah data yang diterima dari webcam dan mulai menampilkan proses menampilkan video (record) sampai user memberikan perintah untuk pengambilan gambar (capture). Kemudian user memberikan interupsi untuk memulai pengenalan peralatan bengkel motor. Setelah itu, Microsoft Visual Studio Express 2012 Aplikasi C++ akan melakukan proses pengolahan gambar peralatan bengkel motor yang sudah di capture oleh webcam dan ditampilkan berupa teks pada layar monitor. d. Analisa data Dilakukan dengan menyelidiki pengaruh variasi jumlah koefisien DCT dengan 5 kali percobaan (10 peralatan bengkel motor x5) terhadap tingkat pengenalan. Penyimpulan hasil dilakukan dengan mencari jumlah koefisien DCT yang menghasilkan tingkat pengenalan yang terbaik.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
BAB II DASAR TEORI 2.1 Pengenalan Pola Pengenalan pola adalah suatu ilmu untuk mengklasifikasikan atau menggambarkan sesuatu berdasarkan kuantisasi fitur (ciri) atau sifat utama dari suatu obyek. Ciri – ciri tersebut digunakan untuk membedakan suatu pola yang lainnya. Ciri yang baik adalah ciri yang memiliki daya pembeda yang tinggi, sehingga pengelompokkan pola berdasarkan ciri yang dimiliki dapat dilakukan dengan tingkat keakuratan yang tinggi. Pengenalan pola bertujuan menentukan kelompok atau kategori pola berdasarkan ciri – ciri yang dimiliki oleh pola tersebut. Terdapat dua pendekatan dalam pengenalan pola yaitu pendekatan statistik dan pendekatan struktural[19].
a. Pendekatan Statistik Pendekatan ini menggunakan teori-teori ilmu peluang dan statistik. Ciri-ciri yang dimiliki oleh suatu pola ditentukan distribusi statistiknya. Pola yang berbeda memiliki distribusi yang berbeda pula. Dengan menggunakan teori keputusan di statistik menggunakan distribusi ciri untuk mengklasifikasikan pola. Sistem pengenalan pola dengan pendekatan statistik ditunjukkkan oleh diagram pada Gambar 2.1. Preprocessing
Gambar
Feature extraction
Pola
Clasification
Pengenalan ( recognition )
Pelatihan ( training )
Pola terokan
Feature selection
Learning
Gambar 2.1. Sistem Pengenalan Pola dengan Pendekatan Statistik[4] 6
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 7
Ada dua fase dalam sistem pengenalan pola: (i) fase pelatihan dan (ii) fase pengenalan. Pada fase pelatihan, beberapa contoh citra dipelajari untuk menentukan ciri yang akan digunakan dalam proses pengenalan serta prosedur klasifikasinya. Pada fase pengenalan, citra diambil cirinya kemudian ditentukan kelas kelompoknya. Preprocessing Proses awal yang dilakukan untuk memperbaiki kualitas citra (edge enhancement) dengan menggunakan teknik-teknik pengolahan citra yang sudah diejelaskan pada bab-bab sebelum ini. Feature Extraction Proses mengambil ciri-ciri yang terdapat pada objek di dalam citra. Pada proses ini objek di dalam citra mungkin perlu dideteksi seluruh tepinya, lalu menghitung properti-properti objek yang berkaitan sebagai ciri. Beberapa proses ekstraksi ciri mungkin perlu mengubah citra masukan sebagai citra biner, melakukan penipisan pola, dan sebagainya. Classification Proses mengelompokkan objek ke dalam kelas yang sesuai. Feature Selection Proses memilih ciri pada suatu objek agar diperoleh ciri yang optimum, yaitu ciri yang dapat digunakan untuk membedakan suatu objek dengan objek lainnya. Learning Proses belajar membuat aturan klasifikasi sehingga jumlah kelas yang tumpang tindih dibuat sekecil mungkin.
b. Pendekatan Struktural Pendekatan ini menggunakan teori bahasa formal. Ciri-ciri yang terdapat pada suatu pola ditentukan primitif dan hubungan struktural antara primitif kemudian menyusun tata bahasanya. Dari aturan produksi pada tata bahasa tersebut dapat menentukan kelompok pola. Gambar 2.1. memperlihatkan sistem pengenalan pola dengan pendekatan struktural. Pengenalan pola secara struktural lebih dekat ke strategi pengenalan pola yang
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 8
dilakukan manusia, namun secara praktek penerapannya relatif sulit dibandingkan pengenalan pola secara statistik.
Gambar
Preprocessing
Primitive extraction
Pola
Clasification
Pengenalan ( recognition )
Pelatihan ( training )
Pola terokan
Primitive selection
Learning
Gambar 2.1. Sistem Pengenalan Pola dengan Pendekatan Struktural[4]
Pendekatan yang digunakan dalam membentuk tata bahasa untuk mengenali pola adalah mengikuti kontur (tepi batas) objek dengan sejumlah segmen garis terhubung satu sama lain, lalu mengkodekan setiap garis tersebut (misalnya dengan kode rantai). Setiap segmen garis merepresentasikan primitif pembentuk objek.
2.2 Citra 2.2.1 Definisi Citra Citra adalah gambar dua dimensi yang dihasilkan dari gambar digital dua dimensi yang kontinus menjadi gambar diskrit melalui proses sampling. Gambar analog dibagi menjadi N baris dan M kolom sehingga menjadi gambar diskrit. Persilangan antara baris dan kolom tertentu disebut dengan piksel.Contohnya adalah gambar/titik diskrit pada baris n dan kolom m disebut dengan piksel[n,m] [10]. Definisi lain dari citra menurut
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 9
Kamus Webster adalah “suatu representasi, kemiripan, atau imitasi dari suatu obyek atau benda”. Secara harafiah, citra (image) adalah gambar pada bidang dwimatra (dua dimensi). Sedangkan ditinjau dari sudut pandang matematis, citra merupakan fungsi kontinu (continue) dari intensitas cahaya pada bidang dwimatra. Sumber cahaya menerangi obyek, obyek memantulkan kembali sebagian dari berkas cahaya tersebut. Pantulan cahaya ini ditangkap oleh alat-alat optik, misalnya mata pada manusia, kamera pemindai (scanner), dan sebaginya, sehingga bayangan obyek yang disebut citra tersebut terekam [11]. Citra (image) merupakan istilah lain untuk gambar, salah satu komponen multimedia yang memegang peranan sangat penting sebagai bentuk informasi visual. Citra mempunyai karakteristik yang tidak dimiliki oleh data teks dan kaya dengan informasi. Citra dapat diartikan sebagai gambar pada bidang dwimatra (dua dimensi). Bila ditinjau dari sudut pandang matematis, maka citra merupakan fungsi kontinu (continue) dari intensitas cahaya pada bidang dwimatra. Sumber cahaya yang menerangi suatu obyek dan obyek akan memantulkan kembali sebagian dari berkas cahaya yang menerangi obyek tersebut. Pantulan cahaya ini ditangkap oleh alat–alat optic misalnya mata pada manusia, kamera, pemindai (scanner), dan sebagainya sehingga bayangan obyek yang disebut citra tersebut terekam[20]. Citra dibedakan menjadi dua: a. Citra diam (still images) Citra diam adalah citra tunggal yang tidak bergerak sering di sebut citra saja. b. Citra bergerak (moving images) Citra bergerak ialah rangkaian citra diam yang ditampilkan secara beruntun yang memberi kesan pada mata sebagai gambar bergerak.Setiap citra dalam rangkaiandisebut frame. Digitalisasi citra merupakan suatu representasi citra secara numerik dengan nilai–nilai diskrit. Digitalisasi adalah representasi citra dari fungsi malar (kontinu) menjadi nilai–nilai diskrit sehingga citra yang dihasilkan dari proses ini disebut citra digital (digitalimage)[11]. Derau (noise) merupakan suatu masalah yang terjadi pada proses pengolahan citra. Derau adalah gambar atau piksel yang mengganggu kualitas citra. Derau dapat disebabkan oleh gangguan fisis (optik) pada alat akuisisi maupun secara
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 10
disengaja akibat proses pengolahan yang tidak sesuai. Contoh terdapat bintik hitam atau putih yang muncul secara acak yang tidak diinginkan dalam citra, bintik acak ini disebut derau salt and pepper[9]. Salah satu proses awal pengolahan citra yaitu memperbaiki kualitas citra yang mengalami masalah atau gangguan. Perbaikan kualitas citra sangat diperlukan karena citra yang dijadikan obyek pembahasan, mempunyai kualitas yang buruk, misal citra mengalami derau pada saat pengiriman melalui saluran transmisi, citra terlalu terang atau gelap, kurang tajam, kabur, dan sebagainya. Melalui operasi pemrosesan awal inilah kualitas citra[10].
2.3 Preprocessing Citra Proses preprocessing citra dilakukan untuk mendapatkan citra yang kualitas lebih baik dari pada citra sebelumnya dengan cara memanipulasi parameter-parameter citra, sehingga menghasilkan bentuk yang lebih cocok terhadap nilai-nilai piksel citra tersebut untuk proses selanjutnya. Proses preprocessing terdiri dari cropping, resizing, grayscale, dan threshold. Proses ini juga bertujuan untuk mempersiapkan citra yang akan diekstraksi ciri agar dapat dilanjutkan ke proses selanjutnya.
2.3.1 Cropping Cropping adalah proses pemotongan citra pada koordinat tertentu pada area citra[24]. Untuk memotong bagian dari citra digunakan dua koordinat, yaitu koordinat awal merupakan awal koordinat bagi citra hasil pemotongan dan koordinat akhir merupakan titik koordinat akhir dari citra hasil pemotongan. Sehingga akan membentuk bangun segi empat yang mana tiap-tiap pixel yang ada pada area koordinat tertentu akan disimpan dalam citra yang baru.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 11
Citra asli
Hasil Cropping
Gambar 2.3.1 Gambar Proses Pemotongan Citra
Dari gambar 2.4. dijelaskan bahwa terjadi proses pemotongan citra. Ukuran pixel awal citra asli adalah 5×5 pixel, setelah dilakukan proses pemotongan koordinat awal (1,1)dan koordinat akhir (3,3) dengan lebar 3 pixel dan tinggi 3 pixel akan terbentuk citra barudengan ukuran 3×3 pixel. Citra baru berisi nilai pixel dari koordinat (1,1) sampai koordinat(3,3).
2.3.2 Resizing Resizing adalah suatu proses mengubah besarnya ukuran suatu citra dalam piksel.Proses yang dilakukan pada resizing ini dengan cara mengurangi atau menambah jumlah piksel yang menyusun dalam suatu citra. Contoh hasil Resizing yang dilakukan dapat dilihat pada gambar 2.3.2
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 12
(a)
(b) Gambar 2.3.2 (a) Citra Grayscale sebelum di resizing (b) Citra hasil resizing
2.3.3 Citra Grayscale Citra dikatakan sebagai citra grayscale apabila sebuah citra tidak memiliki warna RGB atau dapat dikatakan sebuah citra yang memiliki nilai dari putih yang memiliki intensitas paling besar sampai hitam yang memiliki intensitas paling rendah seperti yang dapat dilihat pada gambar 2.2. Citra Grayscale terdiri dari x dan y dalam spasial koordinat dan memiliki nilai intensitasnya masing–masing. Pada citra grayscale setiap gambar memiliki intensitas antara 0 (hitam) hingga 255 (putih) dalam citra 8 bitnya[9].
Gambar 2.3.3 Intensitas grayscale [9]
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 13
Gambar 2.2. citra grayscale yang diubah menjadi nilai matriks[12]. Dengan algoritma perhitungan tingkat keabuan, piksel dari suatu citra yang mengandung warna–warna RGB (red, green and blue) diubah menjadi warna dalam berbagai tingkat keabuan (I) dengan menjumlahkan nilai warna red, green, and blue kemudian dibagi tiga sehingga didapatkan nilai rata–rata dari ketiga warna[10].
Proses awal yang banyak dilakukan dalam image processing adalah mengubah citra berwarna menjadi citra grayscale, hal ini digunakan untuk menyederhanakan model citra. Seperti telah dijelaskan di depan, citra berwarna terdiri dari 3 layer matrik yaitu Rlayer, G-layer dan B-layer. Sehingga untuk melakukan proses - proses selanjutnya tetap diperhatikan tiga layer di atas. Bila setiap proses perhitungan dilakukan menggunakan tiga layer, berarti dilakukan tiga perhitungan yang sama. Sehingga konsep itu diubah dengan mengubah 3 layer di atas menjadi 1 layer matrik grayscale dan hasilnya adalah citra grayscale. Dalam citra ini tidak ada lagi warna, yang ada adalah derajat keabuan. [10] Salah satu cara untuk melakukan konversi gambar ke grayscale adalah dengan menggunakan sistem warna YUV, yaitu dengan mengkonversi RGB ke YUV lalu mengambil komponen Y ( iluminasi ). Hal ini dilakukan menggunakan persamaan sebagai berikut : Gray = Y = ( 0.2989 x R ) + ( 0.5870 x G ) + ( 0.1140 x B ) (2.1) Untuk mencoba proses konversi citra berwarna menjadi citra grayscale ini dapat dibuat program seperti gambar 2.2.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 14
Gambar 2.3.3 (a) Citra RGB. (b) Citra Grayscale
A. Citra Red Green Blue ( RGB ) Suatu citra biasanya mengacu ke citra RGB. Sebenarnya bagaimana citra disimpan dan dimanipulasi dalam komputer diturunkan dari teknologi televisi, yang pertama kali mengaplikasikannya untuk tampilan grafis komputer. Jika dilihat dengan kaca pembesar, tampilan monitor komputer akan terdiri dari sejumlah triplet titik warna merah (RED), hijau (GREEN) dan biru (BLUE). Tergantung pada pabrik monitornya untuk menentukan apak titik tersebut merupakan titik bulat atau kotak kecil, tetapi akan selalu terdiri dari 3 triplet red, green dan blue. Citra dalam komputer tidak lebih dari sekumpulan sejumlah triplet dimana setiap triplet terdiri atas variasi tingkat keterangan (brightness) dari elemen red, green dan blue. Representasinya dalam citra, triplet akan terdiri dari 3 angka yang mengatur intensitas dari Red (R), Green (G) dan Blue (Blue) dari suatu triplet. Setiap triplet akan merepresentasikan 1 pixel (picture element). Suatu triplet dengan nilai 67, 228 dan 180 berarti akan mengeset nilai R ke nilai 67, G ke nilai 228 dan B ke nilai 180. Angka-angka RGB ini yang seringkali disebut dengan color values. Pada format .bmp, citra setiap pixel pada citra direpresentasikan dengan dengan 24 bit, 8 bit untuk R, 8 bit untuk G dan 8 bit untuk B. Pengaturan citra RGB dapat dilihat pada gambar 2.2.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 15
Gambar 2.3.3 Pengaturan citra RGB[11]
B. Model Sistem Ruang Warna RGB Dalam model RGB, setiap warna memperlihatkan komponen spectral primary red, green dan blue. Model ini didasarkan pada sistem koordinat kartesian. Sub space warna yang dicari adalah kubus yang ditunjukkan pada Gambar 2.2. Nilai RGB pada tiga sudut adalah cyan, magenta dan yellow. Perbedaan warna dalam model ini adalah titik yang berada di dalam kubus dan didefinisikan oleh penyebarannya dari faktor origin.
Gambar 2.3.3 Skema Warna RGB Dalam Kubus Jumlah bit yang digunakan untuk mempresentasikan setiap piksel dalam space RGB disebut pixel dept, jumlah bit dalam citra RGB dimana setiap citra red, green dan blue adalah citra 8 bit. Dalam kondisi setiap warna piksel RGB mempunyai 24 bit. Citra full color sering digunakan untuk menyatakan citra berwarna RGB 24 bit. Total jumlah warna dalam citra 24 bit adalah (224 ) = 16.777.216.
Gambar 2.3.3 Citra Warna RGB[10]
2.3.4 Thresholding
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 16
Thresholding digunakan untuk mengatur derajat keabuan yang ada pada citra, thresholding juga untuk memisahkan bagian citra yang sesuai dengan objek (foreground) dan latar belakangnya (background), serta mengkonversi data citra menjadi data biner (binerisasi), dengan tujuan agar proses selanjutnya menjadi mudah. Setiap citra meskipun mengandung objek yang sama, tentunya memiliki karakteristik yang berbeda dalam sifat-sifat pencahayaannya. Hal ini menyebabkan sulitnya menentukan nilai threshold yang cocok untuk diterapkan ke semua kondisi citra. Oleh karena setiap citra mempunyai nilai threshold masing-masing, maka dapat dilakukan pembelajaran berupa pengetahuan sifat-sifat dari masing - masing citra yang akan diproses sebelum menentukan nilai threshold yang cocok. Dengan demikian, setelah melalui trial and error akan ditemukan nilai threshold
yang kurang lebih cocok diterapkan untuk semua citra.
2.3.5 Transformasi Geometris Spasial Citra f didefinisikan sebagai sistem koordinat a(w,z), yang mengalami distorsi geometris yang menghasilkan citra g dengan sistem koordinat (x,y) maka transformasi dapat dinyatakan dengan (x,y) = T{(w,z)}[25]. Contoh dalam trasnformasi spasial sebagai berikut: Jika (x,y) =T{(w,z)} = (w/2, z/2), distrosi adalah penyusutan f dengan setengah dimensi spasial seperti ditunjukkan pada gambar 2.6.
Gambar 2.3.5 Transformasi Spasial[11]
Bentuk umum yang digunakan pada transformasi spasial adalah affine transform (Wolberg [1990] ). Transformasi affine dapat ditulis dalam bentuk matrik
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 17
Transformasi ini dapat menskalakan , men-translate, atau menggunting sejumlah titik, tergantung pada pilihan nilai T. Jenis-jenis transformasi affine terdapat pada tabel 2.1.
Tabel 2.3.3 Jenis-jenis Transformasi Affine[11]
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 18
2.4 Discrete Cosine Transform Dua Dimensi ( DCT 2-D) DCT dimensi satu untuk mengolah sinyal-sinyal dimensi satu seperti bentuk gelombang suara. Sedangkan untuk citra sinyal dua dimensi, diperlukan versi dua dimensi dari DCT.. Rumus DCT 2-D adalah:
Rumus DCT 2-D diatas sering juga disebut sebagai Forward Discrete Cosine Transform (FDCT). DCT 2-D dihitung dengan menerapkan transformasi 1-D secara terpisah pada baris dan kolomnya, sehingga dapat dikatakan bahwa 2-D DCT sparable dalam dua dimensi. Seperti kasus satu-dimensi, setiap elemen dari transformasi merupakan inner product dari masukan dan basis fungsinya, dalam kasus ini, basis fungsinya adalah matriks n x m. Setiap dua dimensi basis matriks merupakan outer product dua basis vektor satu-dimensinya. Setiap basis matriks dikarakterisasikan frekuensi spasial horizontal dan vertikal. Frekuensi horizontal meningkat dari kiri ke kanan, dan dari atas ke bawah secara vertikal.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 19
Ini menunjukkan tingkat signifikansi secara perceptual artinya basis fungsi dengan frekuensi rendah memiliki sumbangan lebih besar bagi perubahan penampakan citra dibandingkan basis fungsi yang memiliki frekuensi tinggi. Nilai konstanta basis fungsi terletak di bagian kiri atas sering disebut sebagai basis fungsi DC, dan DCT koefisien yang bersesuaian disebut koefisien DC (DC coefficient) [16]
Gambar 2.4. (a) Citra Grayscale. (b) Citra hasil proses DCT
2.5 Zig Zag Scanning ZigZag scanning berfungsi untuk merepresentasikan Matriks 2-D dari koefisien DCT terkuantisasi dalam bentuk vektor satu dimensi. Setelah kuantisasi, sebagian besar koefisien frekuensi rendah (pojok kiri atas) adalah nol. Dengan memanfaatkan (menghilangkan) nilai frekunsi rendah hasil dari zig-zag scanning. ZigZag scanning mumungkinkan semua koefisien DC (Direct Current) dan AC (Alternanting Current) dengan nilai yang terendah akan diproses terlebih dahulu. Gambar 2.5 menunjukkan urutan zigzag scanning [11].
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 20
Gambar 2.5 Urutan zigzag scanning DCT Blocks Proses yang merubah matriks 8 x 8 hasil proses kuantisasi kedalam vektor 1 x 2 8 , dengan pembacaan secara zig-zag scanning. Pada proses zig-zag scanning ini nilai nol pada frekuensi tinggi cenderung terbaca secara berurutan. Contoh hasil proses zig-zag scanning yang merubah matrks 8 x 8 hasil proses kuantisasi ke dalam vector 1 x 64.
Gambar 2.5 Path zigzag scanning
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 21
2.6 Fungsi Cosine Similarity Proses ini membandingkan peralatan bengkel motor yang dicapture dengan database. Hasil dari perbandingan adalah jarak minimum yang kemudian akan digunakan dalam proses selanjutnya. Dalam sistem ini yang digunakan adalah fungsi similaritas kosinus ( Cosine Similarity ). Cosine similarity adalah salah satu metode perhitungan similarity yang paling populer untuk diterapkan pada dokumen teks.
Keterangan : Jika A == B Maka Similaritas Kosinus adalah 1 Jika A == - B Maka Similaritas Kosinus adalah - 1
2.7 Template Matching Template matching adalah sebuah teknik dalam pengolahan citra digital untuk menemukan bagian-bagian kecil dari gambar yang cocok dengan template gambar. Template matching merupakan salah satu ide yang digunakan untuk menjelaskan bagaimana otak kita mengenali kembali bentuk-bentuk atau pola-pola. Template dalam konteks rekognisi pola menunjuk pada konstruk internal yang jika cocok (match ) dengan stimulus penginderaan mengantar pada rekognisi suatu obyek. Atau pengenalan pola terjadi jika terjadi kesesuaian antara stimulus indera dengan bentuk mental internal.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 22
Gagasan ini mendukung bahwa sejumlah besar template telah tercipta melalui pengalaman hidup kita. Tiap-tiap template berhubungan dengan suatu makna tertentu. Kenggulan Template Matching yaitu : a. Untuk mengenal bentuk, huruf, maupun bentuk visual lainnya diperlukan kontak dengan bentuk internal. b. Template
matching
didasarkan
pada
ketepatan
konfigurasi
informasi
penginderaan misalnya barcode.
Kelemahan Template Matching yaitu : Jika perbandingan eksternal obyek dgn internal obyek 1:1, maka obyek yang berbeda sedikit saja dengan template tidak akan dikenali. Oleh karena itu, jutaan template yang spesifik perlu dibuat agar cocok dengan berbagai bentuk geometri yang kita lihat dan kenal. Jika memang penyimpanan memori di otak seperti ini, otak tentu seharusnya sangat kewalahan dan pencarian informasi akan memakan waktu, padahal pada kenyataannya tidak demikian. Template Matching dapat dibagi antara dua pendekatan, yaitu : pendekatan berbasis fitur dan pendekatan berbasis template. Pendekatan berbasis fitur menggunakan fitur pencarian dan template gambar seperti tepi atau sudut, sebagai pembanding pengukuran matrik untuk menemukan lokasi template matching yang terbagus di sumber gambar[9].
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
BAB III PERANCANGAN 3.1 Perancangan Sistem Hardware Unit Perekam
Unit Pengenalan dan Penampil
Proses pengenalan peralatan bengkel motor
Input citra peralatan
Output citra peralatan
bengkel motor
bengkel motor
Deteksi Alat (DCT + Similaritas kosinus dan Template Matching
Preprocessing
Gambar 3.1. Block System
23
Kunci Inggris
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 24
3.1.1 WebCam Webcam atau web camera adalah sebuah kamera video digital kecil yang dihubungkan ke computer melalui (biasanya) USB port. Banyak merk webcam yang tersedia, misalnya Logitech, SunFlower, dan lainnya. Resolusi dari webcam biasanya sama berkisar antara 352×288 atau 640×480 piksel atau bahkan lebih besar, ada yang kualitasnya hingga 5 Megapiksel. Webcam sebuah kamera video digital berukuran kecil dihubungkan ke komputer melalui port USB atau port COM.[5].Contoh gambar webcam dapat dilihat pada gambar 3.1.1
Gambar 3.1.1 Webcam M-Tech[5]
Tabel 3.1.2 Spesifikasi Webcam M-Tech WB-200
Interface to PC
High Speed USB 2.0
Sensor Type
CMOS Color Sensor
Resolution
Up to 5.0 Mega Pixel (Software Interpolation)
Lens Features
F/2.0 (F=4.8mm - Infinity )
Frame Rate
640 x 480 @30fps (VGA)
Picture Control
Auto White Balance, Auto Colour Control
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 25
Focus Type
Adjustable Manual Focus Ring
Built-In Microphone
Available, with 3.5mm Audio Plug
Face Tracking
Not Available
Still Image Capture
By Software / OS Application
Night Vision Support
Not Available
LED Lightning Support
Not Available
Pan / Tilt Model
Yes (All Direction with Tilt and Swivel Base)
Operating System Support
Windows XP SP2 / Linux
Dimension (WHD)
Weight
(53.5 x 53.2 x 24.4) mm Folding, Cable Length : 125 cm
70 gram
3.1.2 Lampu LED Lampu LED atau kepanjangannya Light Emitting Diode adalah suatu lampu indikator dalam perangkat elektronika yang biasanya memiliki fungsi untuk menunjukkan status dariperangkat elektronika tersebut.Misalnya pada sebuah komputer, terdapat lampu LED power dan LED indikator untuk processor, atau dalam monitor terdapat juga lampu LED power dan power saving. Lampu LED terbuat dari plastik dan dioda semikonduktor yang dapat menyala apabila dialiri tegangan listrik rendah (sekitar 1.5 volt DC). Bermacam-macam warna dan bentuk dari lampu LED, disesuaikan dengan kebutuhan dan fungsinya.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 26
Fungsi Lampu LED LED (Light Emitting Diode) merupakan sejenis lampu yang akhir-akhir ini muncul dalam kehidupan kita. LED dulu umumnya digunakan pada gadget seperti ponsel atau PDA serta komputer. Sebagai pesaing lampu bohlam dan neon, saat ini aplikasinya mulai meluas dan bahkan bisa kita temukan pada korek api yang kita gunakan, lampu emergency dan sebagainya.
Gambar 3.1.2 Lampu LED
3.2 Microsoft Visual Studio Express 2012 Aplikasi C++ Visual C++ adalah sebuah produk Integrated Development Environment (IDE) untuk bahasa pemrograman C dan C++ yang dikembangkan Microsoft. Visual C++ merupakan salah satu bagian dari paket Microsoft Visual Studio. Bahasa ini merupakan bahasa pemrograman tingkat tinggi (kompleks). Visual C++ adalah bahasa pemrograman yang cukup populer. Hampir semua file DLL pada sistem operasi Windows dibuat menggunakan bahasa ini. Visual C++ dapat berjalan lebih cepat pada windows karena hanya memerlukan memori yang kecil. Dalam hal ini, Ms. Visual C++ lebih unggul jika dibandingkan dengan Ms. Visual Basic. Ini menjadi salah satu alasan Microsoft Visual C++ lebih dipilih programmer untuk membuat berbagai aplikasi desktop maupun antivirus.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 27
3.3 Alat-Alat Bengkel Motor Alat – alat bengkel motor digunakan sesuai dengan alat-alat bengkel motor yang sering digunakan pada umumnya oleh para teknisi di bengkel motor. Dari berbagai macam alat- alat bengkel motor dipilih 10 alat yang meliputi kunci inggris, kunci soket, obeng plus, Senter, kunci ring, kunci L,kunci pas, palu, tang, dan penggaris dapat dilihat pada gambar 3.3
1. Kunci inggris
5. Kunci Ring
8. Palu
2. kunci soket
6. Kunci L
9. Tang
3.Obeng Plus
4. Senter
7. kunci pas
10. Penggaris
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 28
3.4 Perancangan Sistem Pengenalan Alat Bengkel Motor 3.4.1 Pengenalan Peralatan Bengkel Motor dengan Menggunakan Ekstraksi Ciri Start
Masukkan : Peralatan Bengkel Motor
Perekaman dan Pengambilan Citra Peralatan Bengkel Motor
Pemrosesan Citra (Preprocessing )
Ekstraksi Ciri (DCT – 2D)
Fungsi Similaritas Kosinus
Database training
Penentuan Keluaran
Keluaran : Teks
Stop
Gambar 3.4.1
Diagram Alir Program Keseluruhan
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 29
Program pengenalan peralatan bengkel motor secara real time akan dieksekusi saat user menjalakan program ini. Setelah tampilan utama terlihat, proses pengenalan sudah dapat dilakukan.User pertama kali menekan tombol “Camera ON” maka program akan mulai melakukan proses perekaman dari webcam. Jika citra peralatan bengkel motor sudah terekam, proses pengenalan peralatan bengkel motor dapat dilakukan dengan menekan tombol “Proses”, “Ekstraksi Ciri”, “Pengenala”. Proses pengenalan akan berhenti apabila user menekan tombol “Selesai”. Alur keseluruhan pengenalan peralatan bengkel motor secara real time diperlihatkan pada gambar 3.6 . Alur program keseluruhan meliputi perekaman dan pengambilan citra peralatan bengkel motor dengan menggunakan webcam, setelah melakukan proses pengambilan citra (capture) kemudian citra diproses melalui pemrosesan citra (preprocessing) setelah itu kemudian diekstraksi ciri menggunakan ekstraksi ciri (DCT) Discrete Cosine Transform. Kemudian citra uji tersebut dibandingkan dengan citra database menggunakan fungsi similaritas kosinus. Setelah dibandingkan dengan menggunakan fungsi similaritas kosinus maka akan didapat hasil yang mendekati dan hasil yang mendekati tersebut kemudian ditampilkan dalam text box. Setelah hasil pengenalan diperoleh maka user dapat menekan tombol “Selesai”. Alur program perekaman dan pengambilan citra peralatan bengkel motor dapat dilihat pada Gambar 3.7. Pada saat user menekan tombol camera on maka webcam akan berstatus on / terkoneksi dengan program. Setelah camera on maka peralatan bengkel motor disiapkan pada tempat yang telah disediakan untuk proses pengambilan citra. Kemudian untuk mengambil citra peralatan bengkel motor maka user dapat menekan tombol capture. Setelah user melakukan proses pengambilan citra (capture), kemudian citra peralatan bengkel motor tersebut memasuki tahap pemrosesan citra (preprocessing). Preprocessing yang dilakukan meliputi proses cropping dan resizing dengan ukuran piksel 256 x 256. Alur program pemrosesan citra dapat dilihat pada gambar 3.8a. Setelah proses pemrosesan citra (preprocessing) selesai, maka proses yang dilakukan sselanjutnya adalah proses ekstraksi ciri Discrete Cosine Transform two dimesion (DCT 2-D) yang mengacu pada persamaan (2.3) dengan tujuan untuk membagi citra dengan piksel 256 x 256 ke dalam blok-blok kecil dengan ukuran tetap yang kemudian dikonveriskan dari domain spasial ke domain DCT dan membentuk lapisan DCT.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 30
Setelah memperoleh nilai jarak minimun antara nilai ekstraksi ciri citra input dengan nilai ekstraksi ciri pada database. Kemudian hasil dari nilai jarak minimum tersebut akan ditampilkan berupa teks (Kunci L, Kunci Inggris , Obeng plus, Senter, Kunci ring, Kunci soket, Kunci pas, Palu, Tang, Penggaris). Alur program penentuan hasil pengenalan dapat dilihat pada gambar 3.9b. Start
Masukkan : Peralatan Bengkel Motor
Grayscalling, Thresholding
Start
Masukkan : Citra Hasil Preprocessing
DCT – 2D
Hitung Nilai Absolut DCT – 2D Cropping
Zigzag Scanning Resizing
Keluaran : Citra Hasil Preprocessing
Stop (a)
Gambar 3.4.1. (a) Diagram Alir Preprocessing
Keluaran : Matriks Citra Terekstraksi
Stop (b)
(b) Diagram Alir Ekstraksi Ciri
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 31
Start
Masukkan :
Start
Masukkan :
Matrik citra terekstraksi Matrik citra database
Hitung Similaritas : r = sqrt (matrik citra terekstraksi – matrik citra database)^2
Keluaran : Hasil perhitungan Similaritas (r1……...r7)
Stop
Matrik perhitungan Similaritas (r1……...r7)
Penginisialisaikan (r1……...r7) dengan nama : Kunci L, Kunci Inggris , Obeng plus,Senter, Kunci ring, Kunci inggris, Kunci pas, Palu, Tang, Penggaris
Citra keluaran = Similaritas maksimum (r1……...r7)
Keluaran teks
Stop
(a)
(b)
Gambar 3.4.1 (a) Diagram Alir Fungsi Jarak (b) Diagram Alir Penentuan Hasil Pengenalan
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 32
A. Perancangan Database Citra Peralatan Bengkel Motor Sebagai penentuan pengenalan peralatan bengkel motor, dibutuhkan citra acuan yang disebut database. Database hendaknya memiliki ciri yang sudah diketahui oleh sistem. Untuk memperoleh database pada setiap peralatan bengkel motor yang akan dikenali pada sistem pengenalan peralatan bengkel motor, penulis mengambil 10 jenis peralatan bengkel motor (Kunci L, Kunci Inggris, Obeng plus, Senter, Kunci ring, Kunci soket, Kunci pas, Palu, Tang, Penggaris). Proses pembuatan database peralatan bengkel motor harus melalui proses dari input citra peralatan bengkel motor, preprocessing dan ekstraksi ciri Discrete Cosine Transform two dimension (DCT-2D) dapat dilihat pada Gambar 3.2 Dalam pemrosesan citra training seharusnya tidak perlu fungsi ini (Fungsi SK)
Citra Training
Citra Testing
Preprocessing (Cropping,Resizing, Grayscale,dan Threshold )
Preprocessing (Cropping,Resi zing,Grayscale, dan Threshold)
Gambar 3.4.1
Ekstraksi ciri DCT (Zig-zag scanning)
Ekstraksi ciri DCT (Zig-zag scanning)
Database Training (peralatan bengkel motor)
Fungsi similaritas kosinus
Output
Model pembuatan database peralatan bengkel motor
Proses pengambilan citra peralatan bengkel motor terdiri dari 10 peralatan bengkel motor yaitu Kunci L, Kunci Inggris , obeng plus, Senter, kunci ring, kunci soket, kunci pas, palu, tang, Penggaris. Kemudian citra peralatan bengkel motor akan di proses melalui preprocessing yang terdiri dari grayscale, threshold, cropping, resizing, setelah citra peralatan bengkel motor diproses melalui preprocessing, selanjutnya citra peralatan bengkel motor hasil preprocessing masuk ke dalam proses ekstraksi ciri DCT-2D untuk diambil data matriknya, kemudian data matrik tersebut disimpan dalam format .mat yang digunakan sebagai database.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 33
3.4.2 Pengenalan Peralatan Bengkel Tanpa Ekstraksi Ciri
Start
Masukkan :Peralatan Bengkel Motor
Perekaman dan Pengambilan Citra Peralatan Bengkel Motor
Pemrosesan Citra (Preprocessing )
Template Matching
Database training (tanpa DCT)
Penentuan Keluaran
Keluaran : Teks
Stop
Gambar 3.4.2 Diagram Alir Pengenalan Tanpa Ekstraksi Ciri
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 34
3.5 Aplikasi Sistem Pengenalan Peralatan Bengkel Motor Tampilan utama program pada Microsoft Visual Studio Express 2012 Aplikasi C++ yang digunakan dalam penelitian ini diperlihatkan pada Gambar 3.5
Gambar 3.5. Tampilan utama program pengenalan peralatan bengkel motor
Tampilan ini dibuat agar user dapat dengan mudah mengoperasikan program ini serta mengerti hasil dari sistem pengenalan peralatan bengkel motor. Beberapa keterangan dari tampilan program dijelaskan pada tabel 3.5
Tabel 3.5 Keterangan Tampilan Utama Program Nama Bagian
Deskripsi
Window tampilan citra
Bidang tampilan citra untuk menampilakan streaming
kamera
yang
digunakan
untuk
mengambil data citra testing
[Push Button] Output
[Push Button] Output untuk mengeksekusi hasil tampilan
citra
pada
bidang
no.1
sehingga menghasilkan teks berupa hasil Ektraksi Ciri dan Tanpa Ekstraksi Ciri Teks Output Ektraksi Ciri Teks Output Tanpa Ekstraksi Ciri Pilihan resizing
Untuk memilih resizing 256,128,64,32,16 dan 8
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
BAB IV PEMBAHASAN Pada bab ini akan dibahas tentang hasil dari program aplikasi Pengenalan Peralatan Bengkel Motor Secara Real Time. Uji coba dilakukan untuk mengetahui ketepatan program untuk dapat mengenali beberapa peralatan bengkel dengan menggunakan metode DCT (Discrete Cosine Transform). Uji coba dilakukan dengan menggunakan 10 peralatan bengkel yang digunakan sebagai citra training dan juga citra uji serta alat bengkel lain yang juga digunakan sebagai alat uji.
4.1. Antarmuka Program Pengenalan Peralatan Bengkel Motor secara Real Time menggunakan webcam berbasis Ekstrasi Ciri Discrete cosine Transfrom dan Cosine Similarity. Perancangan program menggunakan Microsoft Visual Studio Express 2012 Pada pengujian program menggunakan laptop dengan spesifikasi: Prosesor
: Intel (R) Core(TM) Duo CPU P8600 @ 2.40GHz 2.40 GHz
RAM
: 3.00 GB
Tipe sistem
: 64-bit Operating System
Dalam tampilan antarmuka Program “PENGENALAN PERALATAN BENGKEL” terdapat tombol “Deteksi Alat” yang akan memproses DCT (Discrete Cosine Transfrom) dan Tanpa Ekstraksi Ciriberupa nilai kemiripan untuk mendeteksi alat bengkel pada saat melakukan testing . Proses menjalankan program untuk pengenalan alat bengkel dapat dilakukan dengan menjalankan langkah-langkah di bawah ini: 1. Mengklik dua kali ikon Microsoft Visual Studio Express 2012 Aplikasi C++ pada layar desktop dengan gambar ikon seperti Gambar 4.1.
35
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 36
Gambar 4.1. Ikon Microsoft Visual Studio Express 2012
2. Setelah melakukan langkah 1, akan tampil tampilan utama software Microsoft Visual Studio Express 2012 seperti Gambar 4.2.
Gambar 4.2 Microsoft Visual Studio Express 2012 3. Sebelum membuka tampilan program utama dari software Microsoft Visual Studio Express 2012, perlu memastikan terlebih dahulu pada Current Directory (1) sudah sesuai dengan tempat penyimpanan program yang telah dirancang.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 37
4. Pilih “Solution Explorer” lalu buka file coding “test.cpp” seperti gambar 4.3
Gambar 4.3 Tampilan Coding Test
5. Dari hasil diatas akan muncul coding program test.cpp lalu “klik” tombol “Local Windows Debugger” akan muncul tampilan antarmuka / User Interface
Gambar 4.4 Tampilan User Interface
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 38
6. Setelah langkah ke 5 selesai, lakukan testing alat bengkel motor, kemudian letakkan alat bengkel motor sample “Palu” ke dalam foam yang sudah dibentuk seperti pola “palu” yang terdapat di alat pengetesan. Seperti gambar 4.5
Gambar 4.5 Tampilan Testing Alat Bengkel Motor
7. Setelah langkah ke 6 klik tombol “deteksi alat” , maka akan muncul hasil DCT dan Template Matching, dan nilai jarak / batas testing dan training. Seperti gambar 4.6
Gambar 4.6 Tampilan hasil nilai DCT dan Tanpa Ekstraksi Ciri
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 39
4.1.1Tampilan Software Aplikasi Pengenalan Peralatan Bengkel Secara Real Time.
Gambar 4.7 Tampilan Output Alat Bengkel Motor
1. Bidang tampilan citra : Untuk menampilakan streaming kamera yang digunakan untuk mengambil data citra testing 2. [Push Button] Deteksi Alat : Untuk mengeksekusi hasil tampilan citra pada bidang no.1 sehingga menghasilkan teks berupa hasil DCT dan Template matching 3. Teks Output Ektraksi Ciri 4. Teks Output Tanpa Ekstraksi Ciri 5. Pilihan resizing
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 40
4.1.2 Coding User Interface Aplikasi Pengenalan Alat Bengkel Motor std::vector
tombol; tombol.emplace_back(cv::Point(length+margin, margin)); tombol.emplace_back(cv::Point(length+panel-margin, margin)); tombol.emplace_back(cv::Point(length+panel-margin, margin+thickness)); tombol.emplace_back(cv::Point(length+margin, margin+thickness)); cv::polylines(canvas, tombol, true, cv::Scalar(50), 1); cv::putText(canvas, "deteksi alat", cv::Point(length+margin+30, margin+13), CV_FONT_NORMAL, 0.5, cv::Scalar(0), 1); std::vector blank; blank.emplace_back(cv::Point(length+margin, margin+thickness+1)); blank.emplace_back(cv::Point(length+panel-margin, margin+thickness+1)); blank.emplace_back(cv::Point(length+panel-margin, length-margin)); blank.emplace_back(cv::Point(length+margin, length-margin)); std::vector< std::vector > blanks; blanks.push_back(blank); cv::Rect viewPort(0,0 , length, length); while (key != 27) { HWND hwnd = (HWND)cvGetWindowHandle(nameWindow.c_str()); key = cv::waitKey(50); if (hwnd == 0 || !IsWindowVisible(hwnd)) { key = 27; break; } vc >> frame; cv::Mat bin = frame(crop); cv::cvtColor(bin, bin, CV_RGB2GRAY); cv::resize(bin, bin, cv::Size(length, length)); cv::Mat feed = canvas(viewPort); bin.copyTo(feed); switch(mouse) { case 67: // (C)heck key = mouse; mouse = 0; break;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 41
4.2 Coding Program Pengenalan Peralatan Bengkel Motor 4.2.1 Inisialisasi Webcam int idCamera = -1; // cek di aplikasi camera (index mulai dari 0 config cfg("..\\..\\sample\\dct.xml"); // TO_DO: get cameraid idCamera = 1; cv::VideoCapture vc(idCamera); std::string nameWindow = "DCT - CS"; cv::namedWindow( nameWindow, cv::WINDOW_AUTOSIZE ); cv::Mat frame; cv::Rect crop(0,0 // ujung kiri atas , 479, 479); // ukuran crop
4.2.2 Pembuatan Database Citra Training Pembuatan Database citra training dilakukan dengan terlebih dahulu menentukan jumlah dan jenis tool yang akan digunakan. Tool yang digunakan disini berjumlah 10 dengan jenis sebagai berikut: Kunci Soket Kunci Inggris kunci L Kunci Ring Senter Obeng Plus Penggaris Palu Tang Kunci Pas Masing-masing tool akan diambil data citra nya dengan dilakukan rotasi 0o, 90o, 180o, dan 270. Sehingga total citra dari tool yang digunakan untuk database berjumlah 40buah.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 42
Coding pembuatan database training : 100{ ..\..\sample\kunci_ring.png ..\..\sample\kunci_ring_90.png ..\..\sample\kunci_ring_180.png ..\..\sample\kunci_ring_270.png ..\..\sample\palu.png ..\..\sample\palu_90.png ..\..\sample\palu_180.png ..\..\sample\palu_270.png ..\..\sample\senter.png ..\..\sample\senter_90.png ..\..\sample\senter_180.png ..\..\sample\senter_270.png ..\..\sample\kunci_L.png ..\..\sample\kunci_L_90.png ..\..\sample\kunci_L_180.png ..\..\sample\kunci_L_270.png ..\..\sample\kunci_inggris.png ..\..\sample\kunci_inggris_90.png ..\..\sample\kunci_inggris_180.png ..\..\sample\kunci_inggris_270.png ..\..\sample\obeng_plus.png ..\..\sample\obeng_plus_90.png ..\..\sample\obeng_plus_180.png ..\..\sample\obeng_plus_270.png ..\..\sample\tank.png ..\..\sample\tank_90.png ..\..\sample\tank_180.png ..\..\sample\tank_270.png ..\..\sample\kunci_pas.png ..\..\sample\kunci_pas_90.png ..\..\sample\kunci_pas_180.png ..\..\sample\kunci_pas_270.png ..\..\sample\kunci_soket.png ..\..\sample\kunci_soket_90.png ..\..\sample\kunci_soket_180.png ..\..\sample\kunci_soket_270.png ..\..\sample\penggaris.png ..\..\sample\penggaris_90.png ..\..\sample\penggaris_180.png ..\..\sample\penggaris_270.png
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 43
4.2.3 Preprocessing Proses preprocessing terdiri dari grayscale, threshold, cropping, dan resizing sebagai berikut :
A. Grayscale cv::Rect viewPort(0,0 , length, length); while (key != 27) { HWND hwnd = (HWND)cvGetWindowHandle(nameWindow.c_str()); key = cv::waitKey(50); if (hwnd == 0 || !IsWindowVisible(hwnd)) { key = 27; break; } vc >> frame; cv::Mat bin = frame(crop); cv::cvtColor(bin, bin, CV_RGB2GRAY); cv::resize(bin, bin, cv::Size(length, length)); cv::Mat feed = canvas(viewPort); bin.copyTo(feed); switch(mouse) { case 67: // (C)heck key = mouse; mouse = 0; break; }
B. Threshold cv::Mat dTrain; if (cfg.toApply) { cv::Mat temp; if (cfg.method == 0) { cv::threshold(training, temp, cfg.param1, 225,CV_THRESH_BINARY); } else { cv::threshold(training, temp, 0, 225,CV_THRESH_BINARYCV_THRESH_OTSU); } res = dct::FastDct(temp, dTrain); } else { res = dct::FastDct(training, dTrain); }
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 44
C. Cropping static void onMouse( int event, int x, int y, int flag, void *data ) { if( event != CV_EVENT_LBUTTONDOWN ) return; if (data == 0) return; int length = 256; int panel = 200; int margin = 10; int thickness = 23; if ( (length+margin) > x || x > (length+panel-margin)) return; if ( (margin) > y || y > (panel-margin)) return; unsigned char temp = 0; if ( (margin) <= y && y <= (thickness+margin)) { temp = 67; // "C" } if (temp == 0) return; unsigned char *sel; try { sel = static_cast(data); } catch(...) { return; } *sel = temp; } int TestCroppedStreaming() { int idCamera = -1; // cek di aplikasi camera (index mulai dari 0 config cfg("..\\..\\sample\\dct.xml"); // TO_DO: get cameraid idCamera = 1; cv::VideoCapture vc(idCamera); std::string nameWindow = "DCT - CS"; cv::namedWindow( nameWindow, cv::WINDOW_AUTOSIZE ); cv::Mat frame; cv::Rect crop(0,0 // ujung kiri atas , 479, 479); // ukuran crop unsigned char key = 0; unsigned char mouse = 0; detection det(cfg); cv::setMouseCallback( nameWindow, onMouse, static_cast(&mouse) ); unsigned int i = 0; int length = 256; int panel = 200;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 45
int margin = 10; int lenZigzag = 35; int thickness = 23; cv::Mat canvas(cv::Size(length+panel, length+thickness+margin), CV_8UC1, cv::Scalar(200));
Tombol utama(cv::Point(length+margin+40, margin+13), 'C', "Deteksi Alat", false); utama.sudut.emplace_back(cv::Point(length+margin, margin)); utama.sudut.emplace_back(cv::Point(length+panel-margin, margin)); utama.sudut.emplace_back(cv::Point(length+panel-margin, margin+thickness)); utama.sudut.emplace_back(cv::Point(length+margin, margin+thickness)); Tombol dct256(cv::Point(margin/2+3, length+margin/2+15), '8', "256", true); dct256.sudut.emplace_back(cv::Point(margin/2, length+margin/2)); dct256.sudut.emplace_back(cv::Point(margin/2 + lenZigzag, length+margin/2)); dct256.sudut.emplace_back(cv::Point(margin/2 + lenZigzag,length+thickness+margin/2)); dct256.sudut.emplace_back(cv::Point(margin/2 , length+thickness+margin/2)); Tombol dct128(cv::Point(margin/2+52, length+margin/2+15), '7', "128", true); dct128.sudut.emplace_back(cv::Point(margin/2+50, length+margin/2)); dct128.sudut.emplace_back(cv::Point(margin/2+50 + lenZigzag, length+margin/2)); dct128.sudut.emplace_back(cv::Point(margin/2+50lenZigzag,length+thickness+margin/2)); dct128.sudut.emplace_back(cv::Point(margin/2+50 , length+thickness+margin/2)); Tombol dct64(cv::Point(margin/2+108, length+margin/2+15), '6', "64", true); dct64.sudut.emplace_back(cv::Point(margin/2+100, length+margin/2)); dct64.sudut.emplace_back(cv::Point(margin/2+100 + lenZigzag, length+margin/2)); dct64.sudut.emplace_back(cv::Point(margin/2+100lenZigzag,length+thickness+margin/2)); dct64.sudut.emplace_back(cv::Point(margin/2+100 , length+thickness+margin/2)); Tombol dct32(cv::Point(margin/2+157, length+margin/2+15), '5', "32", true); dct32.sudut.emplace_back(cv::Point(margin/2+150, length+margin/2)); dct32.sudut.emplace_back(cv::Point(margin/2+150 + lenZigzag, length+margin/2)); dct32.sudut.emplace_back(cv::Point(margin/2+150lenZigzag,length+thickness+margin/2)); dct32.sudut.emplace_back(cv::Point(margin/2+150 , length+thickness+margin/2)); Tombol dct16(cv::Point(margin/2+206, length+margin/2+15), '4', "16", true); dct16.sudut.emplace_back(cv::Point(margin/2+200, length+margin/2)); dct16.sudut.emplace_back(cv::Point(margin/2+200 + lenZigzag, length+margin/2)); dct16.sudut.emplace_back(cv::Point(margin/2+200 +lenZigzag, length+thickness+margin/2)); dct16.sudut.emplace_back(cv::Point(margin/2+200 , length+thickness+margin/2)); Tombol dct8(cv::Point(margin/2+262, length+margin/2+15), '3', "8", true); dct8.sudut.emplace_back(cv::Point(margin/2+250, length+margin/2)); dct8.sudut.emplace_back(cv::Point(margin/2+250 + lenZigzag, length+margin/2)); dct8.sudut.emplace_back(cv::Point(margin/2+250 + lenZigzag, length+thickness+margin/2)); dct8.sudut.emplace_back(cv::Point(margin/2+250 , length+thickness+margin/2)); TombolPlus kontrolUi; kontrolUi.tombols.emplace_back(utama); kontrolUi.tombols.emplace_back(dct256); kontrolUi.tombols.emplace_back(dct128); kontrolUi.tombols.emplace_back(dct64);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 46
kontrolUi.tombols.emplace_back(dct32); kontrolUi.tombols.emplace_back(dct16); kontrolUi.tombols.emplace_back(dct8); cv::setMouseCallback( nameWindow, onMouse, static_cast(&kontrolUi) ); std::vector blank; blank.emplace_back(cv::Point(length+margin, margin+thickness+1)); blank.emplace_back(cv::Point(length+panel-margin, margin+thickness+1)); blank.emplace_back(cv::Point(length+panel-margin, length-margin)); blank.emplace_back(cv::Point(length+margin, length-margin)); std::vector< std::vector > blanks; blanks.push_back(blank); cv::Rect viewPort(0,0 , length, length); while (key != 27) { GambarTombol(canvas, kontrolUi.tombols, key); HWND hwnd = (HWND)cvGetWindowHandle(nameWindow.c_str()); key = cv::waitKey(50); if (hwnd == 0 || !IsWindowVisible(hwnd)) { key = 27; break; }
D. Resizing vc >> frame; cv::Mat bin = frame(crop); cv::cvtColor(bin, bin, CV_RGB2GRAY); cv::resize(bin, bin, cv::Size(length, length)); cv::Mat feed = canvas(viewPort); feed.setTo(cv::Scalar(0)); // set item semua cv::Rect viewSelected(0,0 , length, length); feed = canvas(viewSelected); bin.copyTo(feed); switch(kontrolUi.terpilih) { case '8': length = 256; break; case '7': length = 128; break; case '6': length = 64; break; case '5': length = 32; break; case '4': length = 16; break; case '3': length = 8; break; case 67: // (C)heck key = kontrolUi.terpilih; kontrolUi.terpilih = 1; // reset break; }
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 47
4.2.4 Program Ekstraksi Ciri (Discrete Cosine Transform) #include #include #include #include
"stdafx.h" "dct.h" "error.h"
namespace dct { int ConvertToDct(const cv::Mat &src, cv::Mat &dst) { if (src.data == 0) return ErrorCode::ARG_ZERO_SIZED_IMAGE; if (src.rows != src.cols) return ErrorCode::ARG_IMAGE_NOT_SQUARE; cv::Mat tmp1, tmp2; src.convertTo(tmp1, CV_32FC1, 1.0/255); // , 1.0/255 cv::dct(tmp1, tmp2); tmp2.convertTo(dst, CV_8UC1, 255); return 0; } int InverseDct(const cv::Mat &src, cv::Mat &dst) { if (src.data == 0) return ErrorCode::ARG_ZERO_SIZED_IMAGE; if (src.rows != src.cols) return ErrorCode::ARG_IMAGE_NOT_SQUARE; cv::Mat tmp1, tmp2; src.convertTo(tmp1, CV_32FC1); // , 1.0/255 cv::idct(tmp1, tmp2); tmp2.convertTo(dst, CV_8UC1); return 0; } // TO_DO: optimize this const cv::Mat GenerateDctMatrix(unsigned int order) { // TO_DO: make sure order is the power of 2 cv::Mat kernel(order, order, CV_64F); double valRow0 = sqrt(1.0 / static_cast<double>(order)); double alpha = sqrt(2.0 / static_cast<double>(order)); double denominator = static_cast<double>(2*order); for (unsigned int j = 0; j < order; j++) { kernel.at<double>(0, j) = valRow0; for (unsigned int i = 1; i < order; i++) { double numerator = CV_PI * static_cast<double>(i * (2*j + 1)); kernel.at<double>(i, j) = alpha * cos(numerator / denominator); } } return kernel; } int FastDct(const cv::Mat &src, cv::Mat &dst) { if (src.data == 0) return ErrorCode::ARG_ZERO_SIZED_IMAGE; if (src.rows != src.cols) return ErrorCode::ARG_IMAGE_NOT_SQUARE; // TO_DO: make sure order is the power of 2 cv::Mat tmp1; src.convertTo(tmp1, CV_64F); cv::Mat kernel = GenerateDctMatrix(src.rows); dst = kernel * tmp1 * kernel.t();
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 48
return 0; } int FastInverseDct(const cv::Mat &src, cv::Mat &dst) { if (src.data == 0) return ErrorCode::ARG_ZERO_SIZED_IMAGE; if (src.rows != src.cols) return ErrorCode::ARG_IMAGE_NOT_SQUARE; if (src.type() != CV_64F) return ErrorCode::ARG_IMAGE_HAS_INVALID_TYPE; // TO_DO: make sure order is the power of 2 cv::Mat tmp1; src.convertTo(tmp1, CV_64F); cv::Mat kernel = GenerateDctMatrix(src.rows); cv::Mat tmp2 = kernel.t() * tmp1 * kernel; tmp2.convertTo(dst, CV_8U); return 0; }
Zig Zag Scanning int zigzag(const cv::Mat &src, cv::Mat &dst) { if (src.data == 0) return ErrorCode::ARG_ZERO_SIZED_IMAGE; if (src.rows != src.cols) return ErrorCode::ARG_IMAGE_NOT_SQUARE; unsigned int size = src.rows; unsigned int totalData = size * size; dst = cv::Mat(1, totalData, src.type()); unsigned int i, j, n; for (i = n = 0; i < size * 2; i++) { for (j = ((i < size) ? 0 : i-size+1); j <= i && j < size; j++) { int idx = (i&1)? j*(size-1)+i : (i-j)*size+j; //s[idx] = n++; int row = idx / size; int col = idx % size; dst.at<double>(0, n++) = src.at<double>(row, col); //s[n++] = static_cast(m.at(row, col)); } } return 0; }
4.2.5 Fungsi Similaritas Kosinus double CheckSimilarity(const cv::Mat &m1, const cv::Mat &m2, unsigned int persentase){ cv::Mat z1, z2; unsigned int size; if (persentase <= 0 || persentase >= 100) { pixelscanning(m1, z1); pixelscanning(m2, z2); size = z1.cols; unsigned int size = z1.cols; } else {
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 49
cv::Mat t1, t2; pixelscanning(m1, t1); pixelscanning(m2, t2); size = t1.cols * persentase/100; cv::Rect window(t1.cols - size - 1 ,0, size, 1); z1 = t1(window); z2 = t2(window); } double magnitude1 = 0.0; double magnitude2 = 0.0; //double dotProduct = 0.0; for (unsigned int i = 0; i < size; i++) { double v1 = z1.at<double>(0, i); double v2 = z2.at<double>(0, i); magnitude1 += v1*v1; magnitude2 += v2*v2; //dotProduct += v1*v2; } cv::Mat dot = z1 * z2.t(); double numerator = dot.at<double>(0, 0); double denumerator = sqrt(magnitude1) * sqrt(magnitude2); //std::cout << "dot, num, denum " << numerator // << "\t" << dotProduct // << "\t" << magnitude1 // << "\t" << magnitude2 // << "\t" << denumerator // << "\n"; return numerator / denumerator; } };
4.2.6 Tanpa Ekstraksi Ciri // TEMPLATE MATCHING std::string ok = "[N] "; cv::Mat chkTemplate; #if 1 cv::matchTemplate(fTemplate, test1, chkTemplate, CV_TM_CCOEFF_NORMED); double minval, maxval, threshold = 0.6; cv::Point minloc, maxloc; cv::minMaxLoc(chkTemplate, &minval, &maxval, &minloc, &maxloc); if(maxval >= threshold) { ok = "[Y] "; } #else int match_method = 0; cv::matchTemplate(fTemplate, test1, chkTemplate, match_method); //cv::normalize( chkTemplate, chkTemplate, 0, 1, cv::NORM_MINMAX, -1, cv::Mat() );
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 50
/// Localizing the best match with minMaxLoc double minVal; double maxVal; cv::Point minLoc; cv::Point maxLoc; cv::minMaxLoc( chkTemplate, &minVal, &maxVal, &minLoc, &maxLoc, cv::Mat() ); //cv::Point matchLoc; //matchLoc = ( match_method == CV_TM_SQDIFF || match_method== CV_TM_SQDIFF_NORMED ) // ? minLoc : maxLoc; // TO_DO: check how to get this if (minVal < 255) { ok = "[Y] "; } #endif
4.3 Pengujian Software Aplikasi Pengenalan Peralatan Bengkel Motor Secara Real Time Sebelum memulai pengetesan, terlebih dahulu menentukan nilai “batas” dan nilai persentase windowing. Nilai batas dipakai untuk menentukan nilai atas dan bawah hasil DCT dan Tanpa Ekstraksi Cirihasil pengetesan terhadap data training. Sedangkan nilai persentase windowing adalah untuk menentukan area windowing yang ingin dipakai. Nilai 100% pada nilai persentase windowing mempunyai arti bahwa scanning yang dilakukan adalah untuk setiap pixel. Windowing 100% memiliki waktu eksekusi program lebih lama daripada persentase dibawahnya. Setelah persiapan selesai, maka selanjutnya masuk ke pendeteksian alat. Deteksi alat ini akan memunculkan hasil berupa text pengenalan DCT dan Template Matching.
int DeteksiAlat() { config cfg("..\\..\\sample\\dct.xml"); //BasisData db("..\\..\\sample\\basisdata.xml"); BasisData db(cfg.basisData); if (!db.IsValid()) { std::cout << "Config tidak bisa dibaca." << "\n"; return -1; }
std::vector templates; for (unsigned int i = 0; i < db.Data().size(); i++) { cv::Mat training= cv::imread(db.Data()[i].lokasiGambar, CV_LOAD_IMAGE_GRAYSCALE);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 51
if (training.data == 0) { std::cout << "Database untuk alat '" << db.Data()[i].namaAlat << "' tidak bisa dibaca." << "\n" << "Pastikan gambar '" << db.Data()[i].lokasiGambar << "' tersedia." << "\n"; return -1; } cv::Mat dTrain; int res = dct::FastDct(training, dTrain); templates.emplace_back(dTrain); } for (unsigned int i = 0; i < cfg.pathTestCases.size(); i++) { cv::Mat test1 = cv::imread(cfg.pathTestCases[i],CV_LOAD_IMAGE_GRAYSCALE); double nilaiKemiripanMaksimal = -2.0; unsigned int indexMirip = 0; cv::Mat d2; int res = dct::FastDct(test1 , d2); for (unsigned int j = 0; j < templates.size(); j++) { double cs = dct::CheckSimilarity(templates[j], d2, db.Persentase()); if (cs < db.Data()[j].batasMinimum) continue; if (cs > nilaiKemiripanMaksimal) { nilaiKemiripanMaksimal = cs; indexMirip = j; } } if (nilaiKemiripanMaksimal > 0.0f) { std::cout << "Gambar '" << cfg.pathTestCases[i] << "' kemungkinan adalah '" << db.Data()[indexMirip].namaAlat << "' dengan tingkat kimiripan: " << nilaiKemiripanMaksimal << "\n"; } else { std::cout << "Gambar '" << cfg.pathTestCases[i] << "' tidak dikenali" << "\n"; } } return 0; }
4.3.1 Tabel Validasi Testing 1
Testing 2
Testing 3
Testing 4
Testing 5
A
B
A
B
A
B
A
B
A
B
Kunci Ring 0º
1
1
1
1
1
1
1
0
0
0
Kunci Ring 90º
1
1
1
0
1
1
1
1
0
0
Training
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 52
Kunci Ring 180º
1
1
1
0
1
1
1
0
0
0
Kunci Ring 270º
1
1
0
0
1
1
0
0
0
0
Palu 0º
1
1
1
1
1
1
1
0
0
0
Palu 90º
1
1
1
1
1
1
1
1
0
0
Palu 180º
1
1
1
0
1
1
1
0
0
0
Palu 270º
1
1
1
1
1
1
1
0
0
0
Senter 0º
1
1
1
0
1
1
1
1
0
0
Senter 90º
1
1
1
1
1
0
1
1
0
0
Senter 180º
1
1
1
1
1
1
1
0
0
0
Senter 270º
1
1
1
1
1
1
1
1
0
0
Kunci L 0º
1
1
1
1
1
1
1
1
1
1
Kunci L 90º
0
0
0
0
0
0
0
0
0
0
Kunci L 180º
1
1
1
0
1
1
0
0
1
1
Kunci L 270º
1
1
1
1
1
1
1
1
1
1
Kunci soket 0º
1
1
1
0
1
1
1
0
0
0
Kunci soket 90º
1
1
1
1
1
1
1
1
0
0
Kunci soket 180º
1
1
1
1
1
1
1
0
0
0
Kunci soket 270º
1
1
1
1
1
1
1
0
0
0
Obeng Plus 0º
1
1
1
1
1
1
1
0
1
1
Obeng Plus 90º
1
1
1
0
1
1
1
0
1
0
Obeng Plus 180º
1
1
1
0
1
1
1
0
1
0
Obeng Plus 270º
1
1
1
0
1
0
1
0
1
0
Tang 0º
1
1
1
0
1
0
1
0
0
0
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 53
Tang 90º
1
1
1
0
1
0
1
0
0
0
Tang 180º
1
1
1
1
1
0
1
0
1
0
Tang 270º
1
1
1
0
1
0
0
0
0
0
Kunci pas 0º
1
1
1
0
1
1
0
0
0
0
Kunci pas 90º
1
1
0
0
1
0
0
0
0
0
Kunci pas 180º
1
1
1
0
1
1
1
0
1
0
Kunci pas 270º
1
1
1
0
1
0
0
0
0
0
Kunci inggris 0º
1
1
1
0
1
0
1
0
0
0
Kunci inggris 90º
1
1
1
0
1
0
1
0
0
0
Kunci inggris 180º
1
1
1
0
1
0
1
0
0
0
Kunci inggris 270º
1
1
1
0
1
0
1
0
0
0
Penggaris 0º
1
1
1
1
1
1
1
1
0
0
Penggaris 90º
1
1
1
1
1
1
1
1
0
0
Penggaris 180º
1
1
1
1
1
1
1
0
0
0
Penggaris 270º
1
1
1
1
1
1
1
1
0
0
SUM
39
39
PERSEN
97,5% 97,5%
37
18
39
27
33
11
9
4
92,5% 45,0% 97,5% 67,5% 82,5% 27,5% 22,5% 10,0%
Ekstraksi Ciri
79%
Tanpa Ekstraksi Ciri
50%
Tabel 4.8 Tabel Validasi Testing
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 54
Keterangan: A : Hasil percobaan “dengan” menggunakan Ekstraksi Ciri B : Hasil percobaan “tanpa” menggunakan Ekstraksi Ciri Angka 1 : Alat dikenali Angka 0 : Alat tidak dikenali Testing 1 : Posisi alat sama “testing” dengan “training” Testing 2 : Posisi alat dirotasi 20 derajat Testing 3 : Posisi alat digeser jarak sampai dengan “1 cm” keatas dan kebawah Testing 4 : Posisi alat digeser jarak sampai dengan “1 cm” dan dirotasi 20 derajat Testing 5 : Posisi alat jarak lebih dari “1 cm” dan rotasi 50 derajat
4.3.2 Hasil Testing Testing 1
: (10 alat bengkel dan dirotasi 0º - 270º ) mendapat hasil yang sama nilai Ekstraksi Ciri 97.5% dan Tanpa Ekstraksi Ciri 97.5% (Ekstraksi Ciri = Tanpa Ekstraksi Ciri)
Testing 2
: (10 alat bengkel dan dirotasi 0º - 270º ) mendapat hasil lebih besar nilai Ekstraksi Ciri 95 % dan Tanpa Ekstraksi Ciri) 25% (Ekstraksi Ciri > Tanpa Ekstraksi Ciri)
Testing 3
: (10 alat bengkel dan dirotasi 0º - 270º ) mendapat hasil lebih besar nilai Tanpa Ekstraksi Ciri 85% dan Ekstraksi Ciri 97 % (Tanpa Ekstraksi Ciri > Ekstraksi Ciri)
Testing 4
: (10 alat bengkel dan dirotasi 0º - 270º ) mendapat hasil lebih besar nilai Ekstraksi Ciri 72.5 % dan Tanpa Ekstraksi Ciri 25% (Ekstraksi Ciri > Tanpa Ekstraksi Ciri)
Testing 5
: (10 alat bengkel dan dirotasi 0º - 270º ) mendapat hasil lebih besar nilai Ekstraksi Ciri 10% dan Tanpa Ekstraksi 7.5% (Ekstraksi Ciri > Tanpa Ekstraksi Ciri)
Total Testing : (10 alat bengkel dan dirotasi 0º - 270º ) mendapat hasil lebih besar nilai Ekstaksi Ciri 70% dan Tanpa Ekstraksi Ciri 50% (Ekstaksi Ciri > Tanpa Ekstraksi Ciri)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 55
Ekstraksi Ciri DCT dan Similaritas Kosinus merupakan salah satu metode yang sudah umum digunakan sebagai metode pengenalan citra. Sebagai pembanding, penulis menggunakan metode pengenalan citra “Tanpa Ekstraksi Ciri”. Penulis memilih metode klasifikasi Tanpa Ekstraksi Ciripada metode pengenalan citra “Tanpa Ekstraksi Ciri”. Tanpa Ekstraksi Ciri dipilih penulis sebagai metode pembanding karena Tanpa Ekstraksi Cirimerupakan metode yang paling sederhana yang sering digunakan sebagai metode klasifikasi. Perbedaan mendasar antara metode pengenalan citra dengan Ekstraksi Ciri Tanpa Ekstraksi Ciri adalah sebagai berikut : Metode pengenalan citra dengan Ekstraksi Ciri menggunakan DCT sebagai Feature Ekstraction dan fungsi Similaritas kosinus. Metode pengenalan citra tanpa Ekstraksi Ciri menggunakan Tanpa Ekstraksi Ciri sebagai metode klasifikasi Dari tabel diatas, diketahui bahwa pengenalan dengan Ekstraksi Ciri memiliki persentase tingkat keberhasilan yang lebih tinggi daripada metode Tanpa Ekstraksi Ciri. Hal ini membuktikan bahwa metode dengan Ekstraksi Ciri jauh lebih robust / tahan. Metode dengan Ekstraksi Ciri lebih tahan terhadap rotasi dan pergeseran. Semakin jauh pergeseran dan rotasi yang di tes, metode Tanpa Ekstraksi Ciri semakin tidak dapat mengenali “tools” dengan benar.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
BAB V KESIMPULAN Dari percobaan dan pengujian sistem pengenalan alat bengkel disimpulkan sebagai berikut : 1. Implementasi dari sistem pengenalan alat bengkel pada dasarnya dapat bekerja sesuai dengan perancangan. Program pengenalan alat bengkel sudah mampu untuk mengenali alat bengkel dari penulis meliputi tang dan sebagainya. 2. Penentuan nilai ambang batas 0.5 dan windowing 100% adalah untuk menguji kestabilan metode Ekstraksi Ciri bila dibandingkan dengan metode Tanpa Ekstraksi Ciri. Karena pada kondisi yang ideal (misal batas ambang “0.5” dan windowing “100” %) hasil Ekstraksi Ciri dan Tanpa Ekstraksi Ciri saling mendekati. 3. Pembagian data ke dalam ukuran data yang lebih kecil dengan mengurangi jumlah koefisien elemen ekstraksi ciri, akan mempercepat proses Ekstraksi Ciri dan Tanpa Ekstraksi Ciri. 4. Berdasarakan tabel hasil validasi, hasil testing Ekstraksi Ciri mendapat nilai 79 % dan Tanpa Ekstraksi Ciri 50 %. Jadi metode DCT lebih unggul dibandingkan Tanpa Ekstraksi Ciri.
SARAN Beberapa saran untuk pengembangan Aplikasi Pengenalan Alat Bengkel dari penulis adalah sebagai berikut: 1. Metode DCT dapat mengenali tools / alat bengkel untuk semua posisi (rotasi dan pergeseran) tanpa perlu menggunakan modul. 2. Pengenalan alat bengkel dapat dilakukan pada kondisi lingkungan (penerangan) apapun.
56
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
DAFTAR PUSTAKA [1]
Anonim, 2010, Perbedaan Discrete Cosine Transform dan Discrete Wavelet Transform http://anoa5.wordpress.com/2010/05/08/perbedaan-discrete-cosinetransform-dct-dan discrete-wavelet-transform-dwt/ diakses 12 September 2014.
[2]
Anonim, Tanpa Tahun, Modul KLT, http://www.planetsourcecode.com/ diakses 16 Juni 2014.
[3]
Anonim, Tanpa Tahun, Discrete Cosine Transform, http://en.wikipedia.org/wiki/Discrete_cosine_transform/ diakses 28 September 2014.
[4]
Munir, Rinaldi, Tanpa Tahun, Pengenalan Pola , http://informatika.stei.itb.ac.id/rinaldi.munir/Buku/Pengolahan/Bab-15_Pengenalan Pola.pdf/ diakses 20 Juni 2015.
[5]
Laksmito, B., 2010,
Pengertian Webcam dan Jenis-Jenisnya,
http://en.wikipedia.org/wiki/Pengertian Webcam dan Jenis-Jenisnya/ diakses 28 September 2014 [6]
Putra, R. The Best Source Code Visual Basic. Jakarta: PT Gramedia. 2006.
[7]
Sumarno, Linggo. Pengenalan Nada Pianika Menggunakan Jendela Gaussian DCT dan Jarak Kosinus. Program Studi Teknik Elektro Fakultas Teknik Universitas Sanata Dharma. Yogyakarta. 2013; SIGMA, Vol.17(1): 8-10.
[8]
Novariyanto, Irwan. Pengenalan Nada Alat Musik Belira secara Real Time dengan Ekstraksi Ciri DCT dan Similaritas Kosinus. Skripsi. Yogyakarta : Universitas Sanata Dharma; 2014.
57
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
58
[9]
Wardhana, Wisnu A, Yudi P. Penggunaan Metode Templete Matching untuk Identifikasi Kecacatan pada PCB. Seminar Nasional Aplikasi Teknologi Informasi. Yogyakarta; 2008.
[10]
Putra, Dharma. Pengolahan Citra Digital. Yogyakarta: Andi Offset. 2010.
[11]
Kadir A, Susanto A. Teori dan Aplikasi Pengolahan Citra. Yogyakarta: Andi Offset. 2013.
[12]
Alfatah, Hanif. Konversi Format Citra RGB ke Graysacle Menggunakan Visual Basic. Thesis. Yogyakarta: STMIK AMIKOM; 2007.
[13]
Mesran. Visual Basic. Jakarta: Mitra Wacana Media. 2009.
[14]
Pearson, Don. Editors. Image Processing. New York: McGraw- Hill. 1991.
[15]
Sklar, Bernard, 1988, Digital Communications Fundamental and Application, New Jersey: P T R Prentice Hall.
[16]
Sumarno, Linggo. Pengenalan Huruf Tulisan Tangan Berderau Dan Terskala Berbasis
Ekstraksi
Ciri
DCT
Dengan
Menggunakan
Jaringan
Syaraf
Probabilistik. Program Studi Teknik Elektro Fakultas Teknik Universitas Sanata Dharma. Yogyakarta. 2007; SIGMA,Vol.10(2): 185-197. [17]
Banks, Stephen. Signal Processing, Image Processing, and Pattern Recognition. New York: Prentice Hall. 1990.
[18]
Bow, S. Pattern Recognition and Image Processing. Basel: Marcel Dekker, Inc. 2002.
[19]
Andrew, R.Webb. Statistical Pattern Recognition. Second Edition. West Susse: JohnWiley and Sons, Ltd. 2002.
[20]
Gonzales, Rafael C., Woods, Richard E., 2004.Digital Image Processing. Third Edition. New Jersey: Pearson Education, Inc. 2008.
[21]
Schalkoff, J. Robert. Digital Image Processing and Computer Vision. New York: John Wiley and Sons, Inc. 1989.
[22]
Kadir,
Abdul.
Pemampatan
Data
Citra
Menggunakan
Alihragam
Gelombang Singkat . Thesis. Yogyakarta: Universitas Gajah Mada; 1998.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
59
[23] J. Xiao-Yuan, D. Zhang. A Face and Palmprint Recognition Approach Based on Discriminant DCT Feature Extraction. IEEE Transactions On Systems Man Cybern B.December 2004; VOL. 34(6). [24]
https://en.wikipedia.org/wiki/JPEG#Discrete_cosine_transform
[25]
http://stackoverflow.com/questions/7013309/visual-studio-debugger-error-unableto-start-program-specified-file-cannot-be-f
[26]
https://en.wikipedia.org/wiki/JPEG#Discrete_cosine_transform
[27]
http://stackoverflow.com/questions/7013309/visual-studio-debugger-error-unableto- start-program-specified-file-cannot-be-f
[28]
http://stackoverflow.com/questions/5864520/error-while-trying-to-run-projectunable-
to-start-program-cannot-find-the-file\
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
LAMPIRAN I Coding Basisdata 100{ ..\..\sample\obeng_plus.png ..\..\sample\obeng_plus_90.png ..\..\sample\obeng_plus_180.png ..\..\sample\obeng_plus_270.png ..\..\sample\tang.png ..\..\sample\tang_90.png ..\..\sample\tang_180.png ..\..\sample\tang_270.png ..\..\sample\kunci_pas.png ..\..\sample\kunci_pas_90.png ..\..\sample\kunci_pas_180.png ..\..\sample\kunci_pas_270.png ..\..\sample\kunci_inggris.png ..\..\sample\kunci_inggris_90.png ..\..\sample\kunci_inggris_180.png ..\..\sample\kunci_inggris_270.png ..\..\sample\kunci_ring.png ..\..\sample\kunci_ring_90.png ..\..\sample\kunci_ring_180.png ..\..\sample\kunci_ring_270.png ..\..\sample\kunci_soket.png ..\..\sample\kunci_soket_90.png ..\..\sample\kunci_soket_180.png ..\..\sample\kunci_soket_270.png ..\..\sample\palu.png ..\..\sample\palu_90.png ..\..\sample\palu_180.png ..\..\sample\palu_270.png ..\..\sample\penggaris.png ..\..\sample\penggaris_90.png ..\..\sample\penggaris_180.png ..\..\sample\penggaris_270.png ..\..\sample\senter.png ..\..\sample\senter_90.png ..\..\sample\senter_180.png ..\..\sample\senter_270.png ..\..\sample\kunci_L.png ..\..\sample\kunci_L_180.png ..\..\sample\kunci_L_180.png ..\..\sample\kunci_L_270.png \
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
Coding Testing // test.cpp : Defines the entry point for the console application. // #include #include #include #include #include #include #include #include #include #include #include
"stdafx.h" "../dct/config.h" "../dct/dct.h" "../dct/error.h" "../dct/basisdata.h" "detection.h" <Windows.h>
//Just to test DCT & IDCT int TestDctIDct() { int res = ErrorCode::NATIVE_UNEXPECTED_EXCEPTION; cv::Mat src = cv::imread("D:\TA\20160210\sample\\f_double.png", CV_LOAD_IMAGE_GRAYSCALE); cv::Mat d1, d2; //res = dct::ConvertToDct(src, d1); //res = dct::InverseDct(d1, d2); res = dct::FastDct(src, d1); res = dct::FastInverseDct(d1, d2); cv::Mat debug(src.rows * 2, src.cols * 2, CV_8U, cv::Scalar(0)); cv::Rect window(0, 0, src.rows, src.cols); cv::Mat w1 = debug(window); src.copyTo(w1); window = cv::Rect(src.rows, 0, src.rows, src.cols); w1 = debug(window); cv::Mat plot; d1.convertTo(plot, CV_8U); plot.copyTo(w1); window = cv::Rect(0, src.cols, src.rows, src.cols); w1 = debug(window); d2.copyTo(w1); cv::imwrite("D:\TA\20160210\sample\\f_double.x.png", debug); }
return 0;
int TestCosineSimilarity() { int res = ErrorCode::NATIVE_UNEXPECTED_EXCEPTION; config cfg("..\\..\\sample\\dct.xml"); cv::Mat training = cv::imread(cfg.pathTraining, CV_LOAD_IMAGE_GRAYSCALE); if (training.data == 0) { std:: cout << "Gambar tidak ada! cari dahulu " << cfg.pathTraining << "\n"; return -1; } cv::Mat dTrain;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
if (cfg.toApply) { cv::Mat temp; if (cfg.method == 0) { cv::threshold(training, temp, cfg.param1, 225, CV_THRESH_BINARY); } else { cv::threshold(training, temp, 0, 225, CV_THRESH_BINARY | CV_THRESH_OTSU); } res = dct::FastDct(temp, dTrain); } else { res = dct::FastDct(training, dTrain); } cv::Mat fTemplate = cv::imread(cfg.pathTemplate, CV_LOAD_IMAGE_GRAYSCALE); cv::Mat debug(training.rows * cfg.pathTestCases.size(), training.cols * 2, CV_8U, cv::Scalar(0)); int topLeft = 0; for (unsigned int i = 0; i < cfg.pathTestCases.size(); i++) { cv::Mat test1 = cv::imread(cfg.pathTestCases[i], CV_LOAD_IMAGE_GRAYSCALE); if (test1.data == 0) { std:: cout << "Gambar tidak ada! cari dahulu " << cfg.pathTestCases[i] << "\n"; continue; } cv::Mat d2; cv::Mat bin; if (cfg.toApply) { if (cfg.method == 0) { cv::threshold(test1, bin, cfg.param1, 400, CV_THRESH_BINARY); } else { cv::threshold(test1, bin, 0, 400, CV_THRESH_BINARY | CV_THRESH_OTSU); } } else { bin = test1; } res = dct::FastDct(bin, d2); double cs = dct::CheckSimilarity(dTrain, d2, static_cast(cfg.persentase)); cv::Rect window(0, topLeft, test1.rows, test1.cols); topLeft += test1.cols; cv::Mat crop = debug(window); bin.copyTo(crop); // TEMPLATE MATCHING std::string ok = "[N] "; cv::Mat chkTemplate; #if 1
#else
cv::matchTemplate(fTemplate, test1, chkTemplate, CV_TM_CCOEFF_NORMED); double minval, maxval, threshold = 0.6; cv::Point minloc, maxloc; cv::minMaxLoc(chkTemplate, &minval, &maxval, &minloc, &maxloc); if(maxval >= threshold) { ok = "[Y] "; } int match_method = 0; cv::matchTemplate(fTemplate, test1, chkTemplate, match_method);
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
//cv::normalize( chkTemplate, chkTemplate, 0, 1, cv::NORM_MINMAX, -1, cv::Mat() ); /// Localizing the best match with minMaxLoc double minVal; double maxVal; cv::Point minLoc; cv::Point maxLoc; cv::minMaxLoc( chkTemplate, &minVal, &maxVal, &minLoc, &maxLoc, cv::Mat() ); //cv::Point matchLoc; //matchLoc = ( match_method == CV_TM_SQDIFF || match_method == CV_TM_SQDIFF_NORMED ) // ? minLoc : maxLoc; // TO_DO: check how to get this if (minVal < 255) { ok = "[Y] "; } #endif // TULIS HASIL cv::putText(debug, ok + std::to_string(cs) , cv::Point( (test1.cols + 10), (topLeft-test1.rows/2) ) , CV_FONT_HERSHEY_PLAIN, 1, cv::Scalar(255)); } cv::imwrite(cfg.pathResult, debug); return 0; } // This function should be called just once; to help creating the config file int CreateConfig() { cv::FileStorage fs("..\\samples\\config.xml", cv::FileStorage::WRITE); std::vector<std::string> sampleCases; sampleCases.emplace_back("..\\samples\\f_training.png"); sampleCases.emplace_back("..\\samples\\f_n1n1.png"); sampleCases.emplace_back("..\\samples\\f_topleft.png"); sampleCases.emplace_back("..\\samples\\f_bottomright.png"); sampleCases.emplace_back("..\\samples\\f_double.png"); sampleCases.emplace_back("..\\samples\\f_rotate1.png"); sampleCases.emplace_back("..\\samples\\f_rotate.png"); sampleCases.emplace_back("..\\samples\\f_flip_h.png"); sampleCases.emplace_back("..\\samples\\f_flip_v.png"); fs << "test_cases" << sampleCases; fs << "training" << "..\\samples\\f_training.png"; fs << "training" << "..\\samples\\f_training.png"; fs << "template" << "..\\samples\\f_template.png"; fs << "result" << "..\\samples\\f_result.png"; fs << "toApply" << true; fs << "method" << CV_THRESH_BINARY; fs << "param1" << 127; return 0; } static void onMouse( int event, int x, int y, int flag, void *data ) { if( event != CV_EVENT_LBUTTONDOWN ) return; if (data == 0) return; int length = 256; int panel = 200;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
int margin = 10; int thickness = 23; if ( (length+margin) > x || x > (length+panel-margin)) return; if ( (margin) > y || y > (panel-margin)) return; unsigned char temp = 0; if ( (margin) <= y && y <= (thickness+margin)) { temp = 67; // "C" } if (temp == 0) return;
}
unsigned char *sel; try { sel = static_cast(data); } catch(...) { return; } *sel = temp;
int TestCroppedStreaming() { int idCamera = -1; // cek di aplikasi camera (index mulai dari 0 config cfg("..\\..\\sample\\dct.xml"); // TO_DO: get cameraid idCamera = 1; cv::VideoCapture vc(idCamera); std::string nameWindow = "DCT - CS"; cv::namedWindow( nameWindow, cv::WINDOW_AUTOSIZE ); cv::Mat frame; cv::Rect crop(0,0 // ujung kiri atas , 479, 479); // ukuran crop unsigned char key = 0; unsigned char mouse = 0; detection det(cfg); cv::setMouseCallback( nameWindow, onMouse, static_cast(&mouse) ); unsigned int i = 0; int length = 256; int panel = 200; int margin = 10; int thickness = 23; cv::Mat canvas(cv::Size(length+panel, length), CV_8UC1, cv::Scalar(200)); std::vector tombol; tombol.emplace_back(cv::Point(length+margin, margin)); tombol.emplace_back(cv::Point(length+panel-margin, margin)); tombol.emplace_back(cv::Point(length+panel-margin, margin+thickness)); tombol.emplace_back(cv::Point(length+margin, margin+thickness)); cv::polylines(canvas, tombol, true, cv::Scalar(50), 1); cv::putText(canvas, "deteksi alat", cv::Point(length+margin+30, margin+13), CV_FONT_NORMAL, 0.5, cv::Scalar(0), 1); std::vector blank;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
blank.emplace_back(cv::Point(length+margin, margin+thickness+1)); blank.emplace_back(cv::Point(length+panel-margin, margin+thickness+1)); blank.emplace_back(cv::Point(length+panel-margin, length-margin)); blank.emplace_back(cv::Point(length+margin, length-margin)); std::vector< std::vector > blanks; blanks.push_back(blank); cv::Rect viewPort(0,0 , length, length); while (key != 27) { HWND hwnd = (HWND)cvGetWindowHandle(nameWindow.c_str()); key = cv::waitKey(50); if (hwnd == 0 || !IsWindowVisible(hwnd)) { key = 27; break; } vc >> frame; cv::Mat bin = frame(crop); cv::cvtColor(bin, bin, CV_RGB2GRAY); cv::resize(bin, bin, cv::Size(length, length)); cv::Mat feed = canvas(viewPort); bin.copyTo(feed); switch(mouse) { case 67: // (C)heck key = mouse; mouse = 0; break; } switch(key) { case 49: // space cv::imwrite("..\\..\\sample\\" + std::to_string(i++) +".png", bin); break; case 67: // (C)heck { hasil res = det.cek(bin); cv::fillPoly(canvas, blanks, cv::Scalar(200)); int posY = margin + 2*thickness; int posX = length+margin; cv::putText(canvas, "Kosinus:", cv::Point(posX, posY), CV_FONT_NORMAL, 0.5, cv::Scalar(0), 1); posY += thickness; if (res.alatKosinus.length() == 0) { cv::putText(canvas, "TIDAK DIKENALI", cv::Point(posX, posY), CV_FONT_NORMAL, 0.5, cv::Scalar(0), 1); posY += thickness; } else { cv::putText(canvas, res.alatKosinus, cv::Point(posX, posY), CV_FONT_NORMAL, 0.5, cv::Scalar(0), 1); posY += thickness; cv::putText(canvas, "nilai: " + patch::to_string(res.nilaiKosinus), cv::Point(posX, posY), CV_FONT_NORMAL, 0.5, cv::Scalar(0), 1); } posY += thickness; cv::putText(canvas, "Template Matching:", cv::Point(posX, posY), CV_FONT_NORMAL, 0.5, cv::Scalar(0), 1); posY += thickness; if (res.alatTemplate.length() == 0) {
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
cv::putText(canvas, "TIDAK DIKENALI", cv::Point(posX, posY), CV_FONT_NORMAL, 0.5, cv::Scalar(0), 1); posY += thickness; } else { cv::putText(canvas, res.alatTemplate, cv::Point(posX, posY), CV_FONT_NORMAL, 0.5, cv::Scalar(0), 1); posY += thickness; cv::putText(canvas, "nilai: " + patch::to_string(res.nilaiTemplate), cv::Point(posX, posY), CV_FONT_NORMAL, 0.5, cv::Scalar(0), 1); } } break; } cv::imshow(nameWindow, canvas); } return 0; } int DeteksiAlat() { config cfg("..\\..\\sample\\dct.xml"); //BasisData db("..\\..\\sample\\basisdata.xml"); BasisData db(cfg.basisData); if (!db.IsValid()) { std::cout << "Config tidak bisa dibaca." << "\n"; return -1; } std::vector templates; for (unsigned int i = 0; i < db.Data().size(); i++) { cv::Mat training = cv::imread(db.Data()[i].lokasiGambar, CV_LOAD_IMAGE_GRAYSCALE); if (training.data == 0) { std::cout << "Database untuk alat '" << db.Data()[i].namaAlat << "' tidak bisa dibaca." << "\n" << "Pastikan gambar '" << db.Data()[i].lokasiGambar << "' tersedia." << "\n"; return -1; } cv::Mat dTrain; int res = dct::FastDct(training, dTrain); templates.emplace_back(dTrain); } for (unsigned int i = 0; i < cfg.pathTestCases.size(); i++) { cv::Mat test1 = cv::imread(cfg.pathTestCases[i], CV_LOAD_IMAGE_GRAYSCALE); double nilaiKemiripanMaksimal = -2.0; unsigned int indexMirip = 0; cv::Mat d2; int res = dct::FastDct(test1 , d2); for (unsigned int j = 0; j < templates.size(); j++) { double cs = dct::CheckSimilarity(templates[j], d2, db.Persentase()); if (cs < db.Data()[j].batasMinimum) continue; if (cs > nilaiKemiripanMaksimal) { nilaiKemiripanMaksimal = cs; indexMirip = j;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
} } if (nilaiKemiripanMaksimal > 0.0f) { std::cout << "Gambar '" << cfg.pathTestCases[i] << "' kemungkinan adalah '"
<< db.Data()[indexMirip].namaAlat << "' dengan tingkat kimiripan: " << nilaiKemiripanMaksimal << "\n";
"\n";
} else { std::cout << "Gambar '" << cfg.pathTestCases[i] << "' tidak dikenali" <<
} } return 0; } int _tmain(int argc, _TCHAR* argv[]) { return TestCroppedStreaming(); //CreateConfig(); //return 0;
}
int keyStroke = 49; { std::cout << "Please select what you intend to do:\n"; std::cout << "\t<1> Get Sample\n"; std::cout << "\t<2> Test\n"; std::cout << "\t<3> Perbandingan\n"; std::cout << "\t<Esc> Forget about it, let me out\n"; bool noValidInput = true; while (noValidInput) { keyStroke = _getch(); switch (keyStroke) { case 27: return 0; case 49: noValidInput = false; break; // 1 case 50: noValidInput = false; break; // 2 case 51: noValidInput = false; break; // 3 default: break; } } } switch (keyStroke) { case 49: TestCroppedStreaming(); break;// buat ambil sample case 50: TestCosineSimilarity(); break;// buat testing case 51: DeteksiAlat(); break;// aplikasi akhir jadi kaya gini? } std::cout << "Selesai\n"; _getch(); return 0;
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
LAMPIRAN II HASIL TESTING
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI