Anda di halaman 1dari 89

SKRIPSI

PURWARUPA KENDALI LENGAN DENTAL LIGHT DENGAN ISYARAT


JARI BERBASIS PENGOLAHAN CITRA DIGITAL (OPENCV)











MUHAMMAD ANIS AL HILMI
08/269922/PA/12129




PROGRAM STUDI ELEKTRONIKA DAN INSTRUMENTASI
JURUSAN ILMU KOMPUTER DAN ELEKTRONIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS GADJAH MADA
YOGYAKARTA
2012

i

SKRIPSI

PURWARUPA KENDALI LENGAN DENTAL LIGHT DENGAN ISYARAT
JARI BERBASIS PENGOLAHAN CITRA DIGITAL (OPENCV)


Diajukan untuk memenuhi salah satu syarat memperoleh derajat Sarjana Sains
Program Studi Elektronika dan Instrumentasi






MUHAMMAD ANIS AL HILMI
08/269922/PA/12129




PROGRAM STUDI ELEKTRONIKA DAN INSTRUMENTASI
JURUSAN ILMU KOMPUTER DAN ELEKTRONIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS GADJAH MADA
YOGYAKARTA
2012




iii

PERNYATAAN

Dengan ini saya menyatakan bahwa laporan skripsi ini tidak terdapat
karya yang pernah diajukan untuk memperoleh gelar kesarjanaan di suatu
Perguruan Tinggi, dan sepanjang pengetahuan saya juga tidak terdapat karya atau
pendapat yang pernah ditulis atau diterbitkan oleh orang lain, kecuali secara
tertulis diacu dalam naskah ini dan disebutkan dalam daftar pustaka.


Yogyakarta, Juli 2012


Muhammad Anis Al Hilmi



iv

HALAMAN MOTTO

Sometimes I just hate it when I'm right. - MacGyver (Bushmaste
episode).
Ketidakenakan kamu itu, (akan) mengenak pelan-pelan. Prie G.S.
Humor Sahur Metro TV episode Baik Sangka.




v

KATA PENGANTAR

Puji Syukur kita panjatkan kepada Allah SWT atas petunjuk dan kasih
sayang-Nya juga telah melimpahkan semua rahmat, hidayah, dan karunia-Nya
sehingga penulis dapat menyelesaikan skripsi yang berjudul Purwarupa Kendali
Lengan Dental Light dengan Isyarat Jari Berbasis Pengolahan Citra Digital
(OpenCV). Sholawat serta salam penulis tujukan kepada junjungan umat, Nabi
Muhammad SAW yang telah memberikan tauladan dan inspirasi di segala aspek
kehidupan.
Skripsi ini disusun sebagai salah satu syarat untuk memperoleh gelar
Sarjana S1 Program Studi Elektronika dan Instrumentasi, Jurusan Ilmu Komputer
dan Elektronika, Fakultas Matematika dan Ilmu Pengetahuan Alam, Universitas
Gadjah Mada Yogyakarta. Dalam pembuatannya, penulis menyadari bahwa
terselesaikannya skripsi ini tidak terlepas dari bantuan dan dukungan dari berbagai
pihak. Oleh karena itu, dengan segala hormat pada kesempatan ini penulis ingin
menyampaikan penghargaan dan terima kasih kepada:
1. Ayah-bunda dan seluruh keluarga penulis atas segala bimbingan dan
dukungan yang diberikan ke penulis.
2. Bapak Drs. Agus Harjoko, M.Sc., Ph.D selaku dosen pembimbing
skripsi yang telah bersabar dan banyak meluangkan waktu untuk
membimbing, memberikan ide dan pemikiran, serta saran juga masukan
sehingga penulis dapat menyelesaikan skripsi ini dengan baik.
3. Dosen-dosen penulis selama mengikuti perkuliahan di program studi
elektronika dan instrumentasi ini yang tidak bisa disebutkan namanya satu
persatu, yang telah memberikan banyak ilmu dan bimbingan.
4. Semua teman Elins angkatan 2008 yang tidak bisa disebutkan namanya
satu persatu, terima kasih atas kebersamaannya selama ini.
5. Teman-teman di Fakultas Kedokteran Gigi UGM.
6. Teman-teman di komunitas Idebeda.
7. Semua pihak yang selama ini telah membantu, mendukung dan
menyemangati penulis hingga saat ini. Terima kasih, semoga Allah SWT
membalas kebaikan Anda semua.

Yogyakarta, Juli 2012


Penulis






vi

DAFTAR ISI

HALAMAN PENGESAHAN ................................................................................. ii
PERNYATAAN ..................................................................................................... iii
HALAMAN MOTTO ............................................................................................ iv
KATA PENGANTAR ............................................................................................. v
DAFTAR ISI ........................................................................................................ vi
DAFTAR GAMBAR ........................................................................................... viii
DAFTAR TABEL .................................................................................................... x
INTISARI ............................................................................................................. xi
ABSTRACT ......................................................................................................... xii
BAB I PENDAHULUAN ...................................................................................... 1
1.1 Latar Belakang .................................................................................... 1
1.2 Rumusan Masalah ............................................................................... 1
1.3 Batasan Masalah ................................................................................. 2
1.4 Tujuan Penelitian ................................................................................ 2
1.5 Metodologi Penelitian ......................................................................... 2
1.6 Sistematika Penulisan ......................................................................... 3
BAB II TINJAUAN PUSTAKA ............................................................................. 5
BAB III LANDASAN TEORI ................................................................................. 7
3.1 Dental Light ......................................................................................... 7
3.2 Pengolahan Citra .................................................................................. 9
3.2.1 Model Warna RGB dan HSV .................................................. 11
3.2.2 Threshold ................................................................................. 13
3.2.3 Erosi dan Dilasi ........................................................................ 13
3.2.4 Gaussian Smoothing ................................................................ 14
3.2.5 Deteksi Kontur ......................................................................... 16
3.3 Webcam .............................................................................................. 18
3.4 Motor Servo ....................................................................................... 19
3.4.1 Jenis-Jenis Motor Servo ........................................................... 20
3.5 Bahasa C dan C++ ............................................................................. 20
3.6 OpenCV ............................................................................................. 21
3.7 BASCOM AVR ................................................................................. 23
3.8 PowerSwitch ...................................................................................... 23
BAB IV ANALISIS DAN PERANCANGAN SISTEM ....................................... 24
4.1 Analisis Sistem Kendali ..................................................................... 24
4.2 Analisis Perangkat Lunak .................................................................. 25
4.3 Analisis Purwarupa Lengan Robot .................................................... 25
4.4 Rancangan Sistem Secara Keseluruhan ............................................. 27
4.5 Rancangan Perangkat Lunak .............................................................. 28
4.5.1 Deteksi Jari Tangan ................................................................. 28
4.5.2 Deteksi Arah Isyarat ................................................................ 30
4.5.3 Mengatur Perintah Gerakan Lengan ........................................ 31
4.5.4 Program Kendali Servo ............................................................ 32
4.6 Rancangan Perangkat Keras .............................................................. 33


vii

4.6.1 Rancangan PowerSwitch .......................................................... 35
4.6.2 Rancangan Servo Controller ................................................... 36
4.6.3 Rancangan Pedal dan Relay ..................................................... 37
4.7 Rancangan Pengujian ........................................................................ 37
BAB V IMPLEMENTASI ..................................................................................... 39
5.1 Penentuan Parameter Warna .............................................................. 39
5.2 Implementasi Deteksi Jari .................................................................. 40
5.3 Implementasi Deteksi Arah Tunjuk Jari ............................................ 44
5.4 Implementasi Mengatur Perintah Gerakan Lengan Robot................. 51
5.4.1 Firmware PowerSwitch ........................................................... 52
5.5 Implementasi Program Kendali Servo ............................................... 52
5.6 Implementasi Perangkat Keras .......................................................... 55
BAB VI PENGUJIAN DAN PEMBAHASAN ..................................................... 58
6.1 Langkah-langkah Pengujian............................................................... 58
6.2 Pengujian Warna Sarung Tangan....................................................... 60
6.3 Pengujian Pengaruh Intensitas Cahaya Ruangan ............................... 62
6.4 Pengujian Jarak Tangan ..................................................................... 63
6.5 Pengujian Waktu Respon Gerakan .................................................... 64
6.6 Pengujian Ketepatan Gerakan ............................................................ 66
BAB VII PENUTUP .............................................................................................. 67
7.1 Kesimpulan ....................................................................................... 67
7.2 Saran ................................................................................................. 68
DAFTAR PUSTAKA ............................................................................................ 69
LAMPIRAN ........................................................................................................ 71





viii

DAFTAR GAMBAR
Gambar 3.1 Dental Chair ........................................................................................ 7
Gambar 3.2 Lengan Dental Light............................................................................ 8
Gambar 3.3 Bagian Kepala Dental Light ................................................................ 8
Gambar 3.4 PSD pada Citra Digital ........................................................................ 9
Gambar 3.5 Kubus Modul RGB............................................................................ 11
Gambar 3.6 Kerucut Model HSV.......................................................................... 12
Gambar 3.7 Contoh Hasil Thresholding ............................................................... 13
Gambar 3.8 Hasil Erosi A oleh B.......................................................................... 14
Gambar 3.9 (a) Fungsi Lowpass Filter 2 Dimensi ................................................ 15
Gambar 3.9 (b) Hasil Lowpass Filter .................................................................... 15
Gambar 3.10 Contoh Hasil Gaussian Smoothing ................................................. 15
Gambar 3.11 Profil Matriks Filter Gauss .............................................................. 16
Gambar 3.12 Operator Matriks Deteksi Tepi ........................................................ 17
Gambar 3.13 Contoh Hasil Deteksi Tepi .............................................................. 17
Gambar 3.14 Kamera Web atau Lebih Sering Disebut Webcam .......................... 18
Gambar 3.15 Sistem Mekanik Motor Servo ......................................................... 19
Gambar 3.16 Motor Servo Hitec 311 .................................................................... 20
Gambar 3.17 Board PowerSwitch ....................................................................... 203
Gambar 4.1 Diagram Sistem Kendali Open Loop ................................................ 24
Gambar 4.2 Diagram Blok Rancangan Sistem secara Keseluruhan ..................... 28
Gambar 4.3 Bentuk Isyarat Jari yang Dipakai ...................................................... 29
Gambar 4.4 Diagram Alir Tahap Deteksi Jari ...................................................... 30
Gambar 4.5 Gambaran Cara Menentukan Arah Isyarat Tangan ........................... 31
Gambar 4.6 Diagram Alir Program Kendali Servo ............................................... 33
Gambar 4.7 Rancangan Derajat Kebebasan Lengan Dental Light ....................... 34
Gambar 4.8 Skematik PowerSwitch ...................................................................... 35
Gambar 4.9 Skema Minimun Sistem ATmega32 sebagai Servo Controller ........ 36
Gambar 4.10 Skema Rangkaian Relay.................................................................. 37
Gambar 5.1 Kode HSV Minimum dan Maksimum .............................................. 39
Gambar 5.2 Kode Pembacaan File Eksternal ........................................................ 40
Gambar 5.3 Kode untuk Mengakses Webcam ...................................................... 40
Gambar 5.4 Listing Ekstraksi Frame dari Kamera ............................................... 41
Gambar 5.5 Listing Mencari Objek Tangan ......................................................... 43
Gambar 5.6 Kode Pencarian kontur ...................................................................... 44
Gambar 5.7 Kode Menentukan Titik Tengah Tangan .......................................... 45
Gambar 5.8 Kode Menentukan Vektor-vektor pada Tangan ................................ 46
Gambar 5.9 Titik-titik pada Kontur Tangan ......................................................... 47
Gambar 5.10 Titik Ujung Jari dan Bagian Lembah antar Jari ........................... 47
Gambar 5.11 Kode Pemberian Indikator dari Hasil Pengenalan .......................... 48


ix

Gambar 5.12 Penghitungan Cosinus untuk Menentukan Arah Tunjuk Jari.......... 49
Gambar 5.13 Kode Penentuan Arah & Pemanggilan Program Penggerak Servo 50
Gambar 5.14 Kode Menampilkan Jendela Hasil Pengolahan Citra ...................... 51
Gambar 5.15 Sebagian Kode Program PowerSwitch ............................................ 52
Gambar 5.16 Kode Kendali Servo Bagian Deklarasi Awal .................................. 53
Gambar 5.17 Kode Kendali Servo Bagian Looping.............................................. 54
Gambar 5.18 Bentuk Papan PowerSwitch yang Sudah Jadi ................................. 55
Gambar 5.19 Bentuk Servo Controller yang Sudah Jadi ...................................... 56
Gambar 5.20 Perangkat Keras Keseluruhan yang Telah Dibuat........................... 57
Gambar 6.1 Tampilan File test.txt untuk Penentuan Parameter Warna ................ 58
Gambar 6.2 Tampilan Terminal Mengubah Status User menjadi Root ................ 59
Gambar 6.3 Tampilan Citra Asli Hasil Capture Webcam..................................... 59
Gambar 6.4 Tampilan Jendela Hasil Erosi Citra ................................................... 60
Gambar 6.5 Warna Sarung Tangan di Pasaran ..................................................... 61




x

DAFTAR TABEL

Tabel 3.1 Nilai Sudut dan Warna pada Hue .......................................................... 12
Tabel 5.1 Daftar Karakter ASCII .......................................................................... 42
Tabel 6.1 Hasil Pengujian Warna Sarung Tangan ................................................ 61
Tabel 6.2 Hasil Pengujian Pengaruh Intensitas Cahaya ........................................ 62
Tabel 6.3 Hasil Pengujian Jarak ............................................................................ 63
Tabel 6.4 Hasil Pengujian Waktu Respon ............................................................ 64
Tabel 6.5 Hasil Pengujian Ketepatan Gerakan ..................................................... 65
















xi

INTISARI

PURWARUPA KENDALI LENGAN DENTAL LIGHT DENGAN ISYARAT
JARI BERBASIS PENGOLAHAN CITRA DIGITAL (OPENCV)

Oleh
Muhammad Anis Al Hilmi
08/269922/PA/12129

Dental light atau lampu sorot yang terdapat pada kursi praktik dokter gigi
merupakan salah satu bagian penting pada dental chair. Dental light perlu diatur
posisinya agar arah cahaya sorot sesuai kebutuhan dokter. Cara biasa untuk
mengaturnya adalah dengan digerakkan dengan tangan secara langsung oleh
dokter. Cara tersebut dirasakan cukup merepotkan dan mengurangi kesterilan
tangan dokter karena harus menyentuh dental light secara langsung.
Dalam penelitian ini, masalah tersebut dicoba diselesaikan dengan
teknologi pengolahan citra digital. Sebuah webcam digunakan untuk meng-
capture citra. Kemudian citra diolah sampai mengenali isyarat jari, untuk
kemudian dapat mengendalikan dental light. Pengenalan isyarat jari dalam
penelitian ini menggunakan metode pemisahan objek dengan latar belakangnya.
Range warna dari sarung tangan dokter dipakai sebagai acuan pengenalan objek
tangan. Model warna yang dipakai adalah model HSV.
Dari 4 warna sarung tangan yang diuji, warna dengan hasil terbaik adalah
warna kuning. Jarak optimal antara webcam dan posisi tangan adalah 55-65 cm.
Waktu respon rata-rata dari saat ada isyarat sampai lengan robot bergerak adalah
0,4-0,6 sekon. Dengan hasil penelitian ini diharapkan dokter tidak perlu lagi
menyentuh langsung dental light sehingga pemakaiannya lebih mudah dan steril.

Kata kunci: dental light, lengan robot, pengolahan citra, OpenCV, range warna



xii

ABSTRACT

PROTOTYPE OF ARM-DENTAL LIGHT CONTROL USING FINGER
GESTURE BASED ON DIGITAL IMAGE PROCESSING (OPENCV)

By
Muhammad Anis Al Hilmi
08/269922/PA/12129

Dental light or head-light that exists on dental chair, is one of essenstial
part of dental chair instruments. Dental light needs an appropriate positioning
control to beam the light as dentist want. The common way of controlling dental
light is the dentist stir the lamp using their hand manually. That manual control
makes the dentist wrinkled and that method is not sterile, because the dentist
touches the lamp/light directly.
In this research, that problem is tried to be solved using digital image
processing technology. A webcam is used to capture image, then the image is
processed until yield a recognition result for finger gesture and then create an
output to contol dental light.Finger gesture recognition in this research is using
objects color filter method. The color range of dentist gloves is used as reference
to recognize the dentists hand. Color model that used in this research is HSV
From 4 colors of dentist gloves that tested, the best color is yellow. The
optimum distance between webcam and hand position is 55-65 cm. The average
time response from the time that finger gesture appear until the prototype of arm
robot moves is 0.4-0.6 second. The result of this research is aimed to make a new
method that easier and more sterile to control the dental light. And the dentist
doesnt need to touch the lamp directly anymore.
Keywords: dental light, arm robot, image processing, OpenCV, color range




1

BAB I
PENDAHULUAN

1.1 Latar Belakang
Dalam dunia kedokteran gigi, dikenal suatu teknologi bernama dental
chair. Dental chair adalah kursi periksa untuk pasien dokter gigi yang telah
dilengkapi beberapa peralatan medis. Dental chair biasanya ditunjang oleh
fasilitas listrik, gas, kompresor udara, aliran air, dan saluran pembuangan. Salah
satu bagian penting dari dental chair adalah dental light.
Dental light yaitu lampu yang disorot untuk menerangi bagian mulut
pasien yang sedang diperiksa. Dental light ditopang oleh lengan berbahan metal
yang memiliki sendi-sendi yang memungkinkannya melakukan beberapa gerakan.
Dalam penggunaanya, dental light digerakkan menggunakan tangan sampai
cahaya sorotnya dirasa sesuai dengan posisi periksa dokter. Namun, cara
pengaturan tersebut dirasakan cukup merepotkan dan mengurangi kesterilan
tangan dokter karena harus menyentuh langsung. Selain itu tidak semua dokter
gigi didampingi asisten, padahal dalam melakukan praktiknya tangan dokter harus
steril. Hal inilah yang melatarbelakangi penelitian ini.
1.2 Rumusan Masalah
Berdasarkan latar belakang di atas, maka dapat dirumuskan masalah
sebagai berikut:
Bagaimana membuat sebuah sistem kendali yang mampu menggerakkan
purwarupa lengan dental light hanya dengan menggunakan isyarat jari tanpa
menyentuh langsung.



2



1.3 Batasan Masalah
Dalam pembuatan dan uji coba sistem ini, diberikan beberapa batasan
masalah sebagai berikut:
a. Bentuk dan ukuran purwarupa lengan dental light tidak sama dengan
yang sebenarnya.
b. Lengan dental light secara umum dapat melakukan 10 gerakan. Namun
dalam penelitian ini dibatasi hanya melakukan 8 gerakan dasar yaitu
memutar ke atas, ke bawah, menggeleng ke kiri, menggeleng ke kanan,
bergeser ke atas, ke bawah, berputar ke kiri , dan berputar ke kanan.
c. Dalam satu waktu, hanya 1 motor servo yang bergerak.
1.4 Tujuan Penelitian
Tujuan dari penelitian ini adalah merancang dan mengimplementasikan
purwarupa kendali lengan dental light dengan isyarat jari menggunakan
pengolahan citra digital (opencv) yang mampu menggerakkan dental light hanya
dengan isyarat jari, tanpa sentuhan langsung. Juga melakukan pengujian warna
sarung tangan, pengaruh intensitas cahaya, jarak antara tangan dengan divais
peng-capture citra, waktu respon, dan ketepatan gerakan lengan robotnya.
1.5 Metodologi Penelitian
Metodologi penelitian yang direncanakan dalam penelitian ini adalah
sebagai berikut :
1. Merumuskan masalah yang dijadikan sebagai acuan untuk menentukan
tema.
2. Melakukan kajian dan pembelajaran lebih lanjut mengenai sistem
deteksi posisi jari dengan menggunakan metode sebagai berikut :
a) Studi literatur, yaitu dengan mempelajari artikel, jurnal, karya tulis
dan buku yang berhubungan dengan deteksi jari dari data citra.
b) Konsultasi dengan dosen pembimbing tentang pengolahan citra
untuk mendapatkan saran serta masukan yang bermanfaat.
3



3. Membuat rancangan metode deteksi pola jari secara real time yang
meliputi rancangan dalam mengatasi masalah dalam pendeteksian dan
algoritma.
4. Implementasi metode deteksi pola jari secara real time dengan
menggunakan webcam.
5. Implementasi lengan dental light.
6. Melakukan uji coba di Fakultas Kedokteran Gigi UGM.
7. Membuat laporan akhir.
1.6 Sistematika Penulisan
Penulisan laporan skripsi ini berdasarkan sistematika berikut ini:
BAB I PENDAHULUAN
Berisi latar belakang pembuatan skripsi, rumusan masalah, batasan
masalah, tujuan pembuatan skripsi, metodologi penelitian serta sistematika
penulisan pada skripsi.
BAB II TINJAUAN PUSTAKA
Dalam bab ini dipaparkan hasil penelitian terdahulu atau teknologi yang
mempunyai keterkaitan dengan penelitian yang dilakukan oleh penulis.
BAB III DASAR TEORI
Berisi penjelasan dan teori komponen-komponen yang digunakan pada
sistem, baik komponen elektronik mapun teori-teori yang berkaitan
dengan sistem yang diteliti oleh penulis.
BAB IV ANALISIS DAN PERANCANGAN SISTEM
Berisi tentang perancangan sistem yang dibuat, meliputi perancangan
perangkat keras dan perangkat lunaknya.

4



BAB V IMPLEMENTASI
Berisikan tentang implementasi (uji coba) dari rancangan alat dalam
bentuk nyata baik kinerja hardware ataupun software.
BAB VI PENGUJIAN DAN PEMBAHASAN
Tentang hasil pengujian sistem yang dilakukan oleh penulis meliputi
pengamatan perangkat keras, perangkat lunak. Hasil pengujian kemudian
dibahas dan dianalisis hasil dan kinerjanya.
BAB VII PENUTUP
Bab ini berisi kesimpulan dan saran-saran sehingga sistem ini dapat
dikembangkan lebih lanjut, dengan harapan dapat digunakan untuk
mendukung kehidupan masyarakat.


5

BAB II
TINJAUAN PUSTAKA

Dalam penelitian yang dilakukan Ho (2011), webcam digunakan sebagai
pengambil masukan citra pola jari tangan berupa video. Pengambilan citra
dilakukan dengan menggunakan latar belakang berwarna hitam untuk
memudahkan pemisahan citra tangan dengan latar belakangnya. Metode yang
dipakai dalam memisahkan citra tangan dengan latar belakangnya adalah
ekualisasi histogram, kemudian dihaluskan dengan filter Gauss, lalu di-threshold
untuk menguatkan nilai masing-masing pixel. Setelah objek tangan dipisah dari
latar belakang, kemudian dicari kontur dari tangan. Kontur yang dihasilkan
kemudian dihitung titik tengahnya, dari sana didapatkan koordinat titik tengah
dari tangan.
Dalam hal ini penelitian tersebut tidak hanya mendeteksi tangan tapi juga
mengenali arah/direction dari tangan. Dengan isyarat jari telunjuk, kontur tangan
akan berubah, dari sana bisa dicari koordinat ujung jari telunjuk. Setelah itu
koordinat ujung jari dan titik tengah dibandingkan dan dihitung jarak dan
sudutnya. Dengan metode pengolahan citra tersebut selanjutnya dikembangkan
algoritma untuk mendapatkan arah tunjuk yang dilakukan tangan, apakah ke atas,
ke bawah, kiri, atau arah kanan. Dari percobaan itu, penulis akan
mengembangkannya sebagai masukan untuk mengontrol gerakan lengan dental
light, namun dengan warna latar belakang yang lebih variatif, tidak dibatasi hanya
dengan warna hitam.
Dalam penelitian Oliviera (2009), yaitu untuk memilah warna kulit
manusia, bisa menggunakan metode konversi citra dari RGB ke HSV. Dalam
pustaka OpenCV, sangat dimungkinkan untuk melakukan hal itu. Citra akan
dipilah berdasarkan range warna yang dimiliki kulit manusia secara umum, baik
hue, saturation, dan value-nya.
Dari penelitian tersebut, penulis akan menggunakan metode konversi
RGB ke HSV dan memilah range warna dari sarung tangan yang dikenakan
6



dokter dalam praktiknya. Selanjutnya memproses dengan algoritma dari penelitian
Ho (2011).
Agrawal (2012) membuat penelitian yang berjudul SNAP. Ia membuat
sistem pengambilan gambar seperti kamera dengan webcam hanya dengan
membentuk isyarat L dengan telunjuk dan ibu jari. Segmentasi antara kulit
dengan latar belakang memerlukan beberapa metode untuk menghilangkan derau.
Diantaranya adalah erotion dan dilation, yakni untuk mengurangi derau berukuran
kecil juga mempertajam citra. Hal ini dilakukan sebelum mencari kontur dari
tangan. Dari sana penulis akan menggunakan metode yang sama untuk
menghilangkan derau dari citra untuk menghasilkan keluaran dengan hasil terbaik.
Dental light dalam penelitian ini akan diwujudkan dalam bentuk lengan
robot. Dalam penelitian Hamed (2011), faktor utama dan terpenting dari
mendesain robot lengan adalah pembuatan keputusan tentang jumlah dari derajat
kebebasan atau degree of freedom (DOF) yang akan dilakukan dan area kerja dari
lengan robot. Semakin besar DOF, maka lengan robot akan semakin efisien dan
cekatan. Tapi di lain pihak, kerumitan sistem dalam desain dan kontrol juga akan
meningkat.
Pada penelitian yang dilakukan oleh Tanjung dan Sulistijono (2010),
pengendalian robot dual arm menggunakan web camera dapat menghasilkan
posisi sumbu X dan Y pada pendeteksian warna. Pengendalian robot dual arm
menggunakan web camera ketika data sudah diperoleh berupa titik tengah
sumbu X dan Y dari deteksi warna menggunakan OpenCV, robot dual arm
dapat mengikuti gerakan posisi dari pendeteksian obyek berwarna tersebut.
Penelitian tersebut sebagai tolak ukur saja, bahwa OpenCV dapat diintegrasikan
dengan aktuator berupa lengan robot.
Dari seluruh paparan di atas, maka dimungkinkan dirancang perpaduan
antara pengolahan citra dengan pengendalian lengan robot sebagai pengatur
gerakan dental light.


7

BAB III
LANDASAN TEORI

3.1 Dental Light
Dental light adalah lampu yang digunakan dokter gigi untuk menerangi
bagian mulut pasien saat melakukan praktiknya. Dental light ditopang oleh lengan
yang dapat digerakkan sesuai kebutuhan dokter gigi. Dental light terintegrasi
dengan dental chair. Pada Gambar 3.1 diperlihatkan contoh bentuk keseluruhan
dental chair.

Gambar 3.1 Dental Chair (A-dec Inc., 2011)



8



Pada Gambar 3.2 diperlihatkan contoh bentuk lengan dental light.

Gambar 3.2 Lengan Dental Light (Kabdental.com, 2011)
Lengan dental light pada umumnya memiliki 5 degree of freedom / derajat
kebebasan. Sehingga dapat melakukan 10 gerakan, yaitu : maju, mundur, geser ke
kiri, geser ke kanan, geser ke atas, geser ke bawah, putar ke kiri, putar ke kanan,
putar ke atas, dan putar ke bawah.
Dental light memiliki light handle, yang digerakkan secara manual
menggunakan tangan. Gambar 3.3 menunjukkan bagian kepala dari dental light
A-dec 371/372 :

Gambar 3.3 Bagian Kepala Dental Light (A-dec Inc., 2011)
A : flexarm
B : bulb cap assembly
C : tutup lampu
D : light handle
E : sakelar on/off
F : pivot housing
9



3.2. Pengolahan Citra
Pengolahan citra adalah proses mengubah sinyal citra dari sebuah
gambar, ataupun pemandangan menjadi bentuk fisik dari sebuah citra, citra ini
sendiri dapat berupa analog maupun digital. Keluaran dari pengolahan citra
sendiri dapat berupa gambar secara fisik (berupa gambaran dari benda atau
pemandangan yang kita lihat) atau karakterisitik dari suatu gambar.
Pengolahan citra juga sering didefinisikan sebagai proses penyesuaian
citra agar mudah diintepretasikan oleh manusia atau komputer. Penyesuaian citra
yang dilakukan disini adalah melakukan proses-proses tertentu untuk mengolah
citra dengan mentranformasikan citra menjadi citra lain yang lebih mendekati
bentuk citra yang diharapkan, contoh transformasinya misalnya pemampatan citra,
penghilangan derau dan penyesuaian kontras dari citra. Pada Gambar 3.4
digambarkan operasi pengolahan sinyal digital pada citra digital.


Gambar 3.4 PSD pada Citra Digital (Hu, 2002a)
10



Pengambilan citra secara fisik, dilakukan oleh sensor, yang peka terhadap
energi radiasi dari objek. Dari tangkapan tersebut, kemudian di-digital-isasi oleh
digitizer / hardware tambahan yang sanggup mengolahnya menjadi data digital.
Dalam penelitian ini, tidak ada perangkat keras tambahan yang digunakan karena
penggunaannya masih sederhana.
Komputer, dalam pengolahan citra bertindak sebagai pengolah dengan
software-software yang berjalan di atas sistem operasinya. Pengguna dapat
memasukkan kode-kode program yang dia butuhkan dalam pengolahan citra.
Dengan bahasa pemrograman, pengguna dapat mengatur proses olah citra sesuai
tujuan yang diharapkan
Mass storage / media penyimpanan adalah mutlak diperlukan dalam
pengolahan citra. Tiap citra memiliki ukuran berbeda-beda, mulai dari kecil
sampai besar, dalam menjaga efisiensi biasanya dilakukan kompresi atas citra itu.
Namun, untuk keperluan tertentu, citra dijaga seperti ukuran aslinya, bahkan
untuk citra dengan ukuran besar sekalipun. Karena itu, media penyimpanan sangat
diperlukan. Namun dalam penelitian ini, hasil proses pengolahan tidak disimpan.
Di masa sekarang, citra seringkali ditampilkan pada monitor. Monitor
menampilkan citra keluaran dan diatur oleh kartu grafis yang ada di komputer.
Dalam praktiknya, citra juga dapat disimpan dalam beberapa media, seperti CD-
ROM atau flash disk. Semakin berkembang pula, teknologi jaringan menjadi
bagian dari keseharian manusia. Dengan internet, data mengenai pengolahan citra
dapat ditransmisikan ke tempat lain. Namun, untuk dapat melakukan ini,
diperlukan kecepatan internet yang cepat, contohnya dengan fiber optik dan
teknologi broadband. Seluruh pemaparan di atas hanyalah model secara umum
dari pengolahan citra digital, dalam penelitian ini tidak semua bagian
ada/dibutuhkan, misalnya bagian hardcopy, storage, specialized hardware, dan
network dalam penelitian ini tidak digunakan.




11



3.2.1 Model Warna RGB dan HSV
Dalam pengolahan citra, biasanya masalah warna tidak memainkan peran
penting. Umumnya, citra diproses dalam ranah gray-scale. Contohnya banyak
pengolahan citra yang lebih menekankan ke pengenalan bentuk atau pola. Tapi di
sisi lain, masalah warna/color space amat diperlukan. Misalkan dalam kasus
pemilahan kualitas buah (Davies, 2005).
Kamera video atau monitor biasanya menghasilkan citra dalam ranah
RGB (red, green, blue). Padahal manusia memiliki penerimaan atas warna citra
yang berbeda dengan itu, maka disarankan untuk mengonversi RGB ke domain
HSV (hue, saturation, value) sebelum melakukan pemrosesan citra lebih lanjut.
Pada model RGB, citra terdiri dari 3 sumbu yang independen. Tiap
sumbu adalah warna primer, yaitu merah, hijau, dan biru. Sebuah warna
ditentukan dari letaknya dari ketiga sumbu primer. Di bawah ini adalah Gambar
3.5 mengenai model RGB dalam koordinat kartesian.

Gambar 3.5 Kubus Modul RGB (CVonline, 1999)
12



Misalkan saja warna kuning, ia adalah hasil (merah + hijau), cyan (biru +hijau) ,
magenta (merah +biru), dan putih (merah+ hijau+biru). Sedangkan model HSV
yang terdiri dari 3 komponen yaitu hue, saturation, value. Value terkadang
disamakan dengan tingkat kecerahan. Model HSV dibuat oleh Alvy Ray Smith
pada tahun 1978. HSV dikenal juga sebagai model warna hex-cone. Hue,
merepresentasikan warna, hue adalah sudut diantara 0 sampai dengan 360 derajat.
Tabel 3.1 Nilai Sudut dan Warna pada Hue
Sudut (
0
) Warna
0-60 Merah
60-120 Kuning
120-180 Hijau
180-240 Cyan
240-300 Biru
300-360 Magenta


Gambar 3.6 Kerucut Model HSV (Sequin, 2011)
Saturation mengindikasikan range/batas dari tingkat keabu-abuan dalam
ruang warna/color space. Yaitu dari nilai 0-100 %. Kadang, ia dihitung dari 0-1,
13



saat nilainya 0 maka warnanya abu-abu dan bila nilainya 1 maka warnanya
adalah warna primer. Value adalah tingkat kecerahan/brightness dari warna dan
nilainya bervariasi dan berhubungan dengan saturation. Nilainya berkisar dari
dari 0-100%. Saat 0 nilainya hitam total, dengan peningkatan nilai value maka
tingkat kecerahannya bertambah. Kelebihan model HSV adalah karena mendekati
warna yang dirasa indra manusia, sehingga sering digunakan dalam pengolahan
citra terutama pendeteksian suatu objek dengan warna tertentu.

3.2.2 Threshold
Threshold adalah metode di mana kita menetapkan suatu nilai, kemudian
kita hanya mengambil nilai di atasnya saja atau di bawahnya saja, sedangkan nilai
selainnya diabaikan (Bradski dan Kaehler, 2008). Hasil dari threshold adalah citra
yang tampak nyata perbedaan intensitasnya, biasanya hitam dan putih. Metode ini
biasanya digunakan untuk proses segmentasi / pemisahan suatu objek dengan
selainnya. Gambar 3.7 adalah contoh hasil thresholding citra.

Gambar 3.7 Contoh Hasil Thresholding (Bradski dan Kaehler, 2008)
3.2.3 Erosi dan Dilasi
Erosi atau dalam bahasa Inggrisnya erotion, adalah konvolusi dari
beberapa citra/wilayah citra sebut saja A, dengan kernel yang disebut saja B.
Kernel B bisa bervariasi bentuk dan ukurannya, ia memiliki satu titik
patokan/anchor point di tengah kernelnya. Kernel dapat juga dianggap sebagai
matrix untuk masking dan sebagai local minimum operator. Region A di-scan
14



dengan B untuk mendapat wilayah A yang lebih tipis. Pada Gambar 3.8
diperlihatkan hasil erosi A oleh B. Dilasi adalah kebalikan dari erosi.

Gambar 3.8 Hasil Erosi A oleh B (Bradski dan Kaehler, 2008)
Dalam penelitian ini, erosi digunakan untuk menghilangkan derau berupa titik-
titik kecil yang mengganggu proses deteksi objek tangan. Proses erosi dapat
dilakukan beberapa kali sesuai kebutuhan, namun banyak proses erosi perlu
diperhitungkan dengan seksama, jika berlebihan, region bisa habis tererosi.
3.2.4 Gaussian Smoothing
Low-pass filter dalam pengolahan citra digunakan untuk menghilangkan
sinyal frekuensi tinggi. Dengan itu, citra menjadi semakin halus. Salah satu
metode smoothing dalam pengolahan citra adalah Gaussian smoothing.
15




Gambar 3.9 (a) Fungsi Lowpass Filter 2 Dimensi
(b) Hasil Lowpass Filter (Hu, 2002b)
Berikut adalah pasangan persamaan transformasi Fourier dari filter
Gauss:


Fungsi dari proses smoothing adalah untuk mengurangi noise, menyatukan
beberapa bagian citra yang rusak/terpisah, seperti contoh pada Gambar 3.10
berikut

Gambar 3.10 Contoh Hasil Gaussian Smoothing (Hu, 2002b)
Dan dalam komputasi, filter Gauss berbentuk matriks yang digunakan untuk
memanipulasi piksel di dalam citra.
a b

=
=

2 2 2
2 2
2
2 /
2 ) (
) (
x
u
Ae x h
Ae u H
o t
o
o t
16




Gambar 3.11 Profil Matriks Filter Gauss (Davies, 2005)
3.2.5 Deteksi Kontur
Pendeteksian suatu objek dalam citra akan mudah dilakukan dengan
deteksi tepi. Pengertian tepi adalah lokasi perbatasan yang memiliki perbedaan
nilai yang ekstrim. Untuk menguatkan nilai tepi, dilakukan masking dengan
matriks operator, diantara yang sering digunakan dalam pengolahan citra adalah
sebagai berikut : Robert, Prewitt, Sobel, Canny, dll.
17




Gambar 3.12 Operator Matriks Deteksi Tepi (Hu, 2002b)

Gambar 3.13 Contoh Hasil Deteksi Tepi (Huaman, 2011)

18



3.3 Webcam
Webcam (singkatan dari web camera) seperti ditunjukkan pada Gambar
3.14 adalah sebuah video kamera yang menangkap gambar secara realtime dan
mengirimkan datanya ke komputer.

Gambar 3.14 Kamera Web atau Lebih Sering Disebut Webcam

Webcam adalah kamera video kecil yang mengambil gambar dengan pelan dan
biasanya dipasang di bagian atas layar komputer akan tetapi juga dapat dipasang
dimana saja. Webcam terhubung dengan video capture card di dalam komputer
dan mengambil gambar secara periodik, misal setiap 30 frame per detik. Jika ingin
melakukan video streaming, kita harus menggunakan webcam dengan frame rate
diantara 15 dan 30 frame per detik dan diperlukan juga saluran Internet
broadband (Learn2succeed.com Inc, 2008).
Frame rate adalah sebuah ukuran sebuah webcam secara berurutan
mengambil gambar setiap detiknya. Misalnya sebuah webcam dengan dengan
frame rate 30 frames per second berarti mengambil 30 gambar setiap detiknya.
Frame per second (fps) adalah satuan yang menunjukkan jumlah gambar yang
diambil sebuah kamera setiap detiknya, semakin tinggi sebuah frame rate maka
semakin banyak pula gambar yang diambil setiap detiknya yang berarti semakin
besar pula ukuran dari file video yang dihasilkan.
19



Dalam penelitian ini webcam yang rencananya digunakan adalah webcam dengan
merek Logitech dengan type C170 memiliki kemampuan melakukan maksimal
capture 30 frame setiap detik.
3.4 Motor Servo
Motor servo adalah sebuah motor dengan sistem closed feedback di mana
posisi dari motor akan diinformasikan kembali ke rangkaian kontrol yang ada di
dalam motor servo. Motor ini terdiri dari sebuah motor, serangkaian gear,
potensiometer dan rangkaian kontrol. Potensiometer berfungsi untuk menentukan
batas sudut dari putaran servo. Sedangkan sudut dari sumbu motor servo diatur
berdasarkan lebar pulsa yang dikirim melalui kaki sinyal dari kabel motor
(Iswanto, 2011).

Gambar 3.15 Sistem Mekanik Motor Servo (Iswanto, 2011)
Motor servo biasanya hanya bergerak mencapai sudut tertentu saja dan
tidak kontinyu seperti motor DC maupun motor stepper. Walau demikian, untuk
beberapa keperluan tertentu, motor servo dapat dimodifikasi agar bergerak
kontinyu. Pada robot, motor ini sering digunakan untuk bagian kaki, lengan atau
bagian-bagian lain yang mempunyai gerakan terbatas dan membutuhkan torsi
cukup besar.
Motor servo adalah motor yang mampu bekerja dua arah (clock wise dan
counter clock wise) dimana arah dan sudut pergerakan rotornya dapat
dikendalikan hanya dengan memberikan pengaturan duty cycle sinyal PWM pada
bagian pin kontrolnya. Motor servo tampak pada Gambar 3.16.
20




Gambar 3.16 Motor Servo Hitec 311 (Jogjarobotika, 2011)
Motor servo adalah motor yang berputar lambat, dimana biasanya
ditunjukkan oleh rate putarannya yang lambat, namun demikian ia memiliki torsi
yang kuat karena internal gear-nya. Lebih dalam dapat digambarkan bahwa
sebuah motor servo memiliki :
- 3 jalur kabel : power, ground, dan control
- Sinyal control mengendalikan posisi
- Operasional dari servo motor dikendalikan oleh sebuah pulsa selebar 20
ms, dimana lebar pulsa antara 0.5 ms dan 2 ms menyatakan akhir dari
range sudut maksimum.
3.4.1 Jenis-Jenis Motor Servo
Motor Servo Standar 180, motor servo jenis ini hanya mampu bergerak
dua arah (CW dan CCW) dengan defleksi masing-masing sudut mencapai 90
sehingga total defleksi sudut dari kanan tengah kiri adalah 180. Motor Servo
Continuous, motor servo jenis ini mampu bergerak dua arah (CW dan CCW)
tanpa batasan defleksi sudut putar (dapat berputar secara kontinyu).
3.5 Bahasa C dan C++
Dalam pembuatan perangkat elektronika modern, tentu tidak
lepas dari bahasa pemrograman. Contoh bahasa yang sering digunakan adalah
C. Bahasa C dikatakan berada di antara bahasa beraras rendah dan beraras tinggi.
Bahasa beraras rendah artinya berorientasi pada mesin, sedangkan beraras tinggi
berorientasi pada manusia (Iswanto, 2011).
21



Pencipta bahasa C adalah Brian W. Kerighan dan Denis M. Ritchie sekitar
tahun 1972. Penulisan program dalam bahasa C dilakukan dengan membagi
dalam blok-blok sehinggga bahasa C disebut bahasa terstruktur. Bahasa C
memiliki tingkat efisiensi yang tinggi dalam penggunaan memori, sehingga sangat
cocok untuk memprogram mikrokontroler.
C++ dikembangkan di Bell Labs, bahasa itu diturunkan dari bahasa
sebelumnya, yaitu BCL. Salah satu perbedaan yang paling mendasar dengan
bahasa C adalah dukungan terhadap konsep pemrograman berorientasi objek
(object oriented programming).
Perbedaan antara bahasa pemrograman C dan C++ meskipun bahasa-
bahasa tersebut menggunakan sintaks yang hampir sama tetapi mereka memiliki
perbedaan, C merupakan bahasa pemrograman prosedural, dimana penyelesaian
suatu masalah dilakukan dengan membagi-bagi masalah tersebut kedalam sub-
submasalah yang lebih kecil, Selain itu, C++ merupakan bahasa pemrograman
yang memiliki sifat OOP, untuk menyelesaikan masalah, C++ melakukan langkah
pertama dengan menjelaskan class-class yang merupakan anak class yang dibuat
sebelumnya sebagai abstraksi dari object-object fisik, class tersebut berisi keadaan
object, anggota-anggotanya dan kemampuan dari objectnya, Setelah beberapa
class dibuat kemudian masalah dipecahkan dengan class. Dalam penelitian ini
bahasa C++ digunakan dalam pengolahan citra, dan bahasa C digunakan untuk
komunikasi USB dan memprogram mikrokontroler.
3.6 OpenCV
OpenCV (Open Source Computer Vision) adalah library / pustaka fungsi
pemrograman untuk pemrosesan waktu nyata pada computer vision
(Willowgarage, 2011). OpenCV dirilis dibawah lisensi BSD, gratis untuk
digunakan untuk kegunaan akademis maupun untuk fungsi komersial.
Menggunakan antarmuka C++, C dan Python, juga Java. Library ini dapat
berjalan pada sistem operasi Windows, Linux maupun Mac. OpenCV memiliki
banyak lebih dari 500 fungsi.

22



Beberapa fitur OpenCV yang digunakan dalam penelitian ini, antara lain :
1. Manipulasi data citra (alokasi, copying, setting, konversi).
2. Citra dan video I/O (file dan kamera based input, image/video file output).
3. Manipulasi matriks dan vektor beserta rutin-rutin aljabar linear (products,
solvers, eigenvalues, SVD).
4. Pemroses citra fundamental (filtering, edge detection, corner detection,
sampling and interpolation, color conversion, morphological operations,
histograms, image pyramids).
5. Analisis struktur (connected components, contour processing, distance
transform, various moments, template matching, Hough transform,
polygonal approximation, line fitting, ellipse fitting, Delaunay
triangulation).
6. Graphical user interface (display image/video, penanganan keyboard dan
mouse handling, scroll-bars).
7. Pelabelan citra (line, conic, polygon, text drawing)
OpenCV terdiri dari beberapa library, diantaranya:
- CV : untuk algoritma image processing dan vision
- Highgui : untuk GUI, Image dan video I/O
- CXCORE : untuk struktur data, support XML dan fungsi-fungsu grafis.
3.7 BASCOM AVR
Bascom AVR adalah compiler bahasa pemrograman Basic yang berjalan
di atas Windows untuk memprogram keluarga mikrokontroler AVR. Ia didesain
untuk berjalan di W95/W98/NT/W2000, XP and Vista, juga Win7
(MCSelectronics, 2012). Fitur dari Bascom AVR :
- Bahasa Basic terstruktur dengan label.
- Pemrograman terstruktur dengan IF-THEN-ELSE-END IF, DO-LOOP,
WHILE-WEND, SELECT- CASE.
- Variabel dan label maksimal dapat memuat 32 karakter.
- Variabelnya mendukung : bit, byte, integer, word, long, single , double,
and string.
23



- Terdapat fungsi kalkulasi tanggal dan waktu.
- Terdapat perintah spesial untuk LCD display , chip I2C dan chip 1wire,
keyboard PC, keyboard matrix, RC5 reception, software UART, SPI ,
LCD grafis, IR RC5, RC6.
- Mendukung variable lokal, fungsi, dan pustaka.
- Terdapat emulator terminal terintegrasi dengan opsi download.
- Terdapat simulator terintegrasi.
- Mendukung ISP programmer, STK200 programmer , dan STK300
programmer.
- IDE dengan statement highlighting.
- Memiliki PDF datasheet viewer.
- Dokumentasi dan help yang lengkap.
3.8 PowerSwitch
PowerSwitch terdiri dari 2 bagian, yaitu modul perangkat keras dan
firmware. Firmware adalah program yang ditanam pada memori ROM, tidak
hilang walau tidak ada catu daya. Modul PowerSwitch terdiri atas chip AVR
ATtiny 2313 yang dilengkapi dengan kristal eksternal 12 MHz dan beberapa
komponen lain. Walaupun terkoneksi USB, papan sirkuit PowerSwitch tidak
membutuhkan chip tambahan seperti FTDI dan sebagainya, hal ini karena
dalam chip ATtiny 2313 sudah dimasukkan firmware sebagai emulator
protokol USB yang memungkinkan komunikasi komputer via USB dengan chip
AVR secara langsung (Objective Development, 2008).

Gambar 3.17 Board PowerSwitch (Objective Development, 2008)

24

BAB IV
ANALISIS DAN PERANCANGAN SISTEM

4.1 Analisis Sistem Kendali
Penelitian ini pada intinya adalah integrasi antara pengolahan citra
dengan lengan robot sebagai representasi dari dental light. Berangkat dari sana
tentu dibutuhkan suatu sistem kendali yang tepat. Dengan mengurai dan kembali
ke esensi permasalahan, yakni cara pengontrolan dental light oleh dokter gigi,
maka di antara 2 jenis sistem kendali, yaitu open-loop dan closed-loop maka
dipilihlah jenis open-loop dikarenakan output-nya tidak memberi efek/feedback
ke sistem kontrol dan yang mengendalikan sepenuhnya adalah dokter gigi itu
sendiri. Pada Gambar 4.1 ditunjukkan diagram sistem kendalinya.



Gambar 4.1 Diagram Sistem Kendali Open Loop

Masukan dari sistem kendali di atas berasal dari isyarat arah tunjuk jari
dari dokter gigi, apakah menunjuk ke atas, ke bawah, ke kiri, atau ke kanan. Arah
tunjuk digunakan sebagai input dirasakan memudahkan penggunaan karena hal itu
mudah diingat dibandingkan dengan isyarat lain seperti menghitung jumlah jari.
Kemudian untuk pengolahan citranya dibutuhkan prosesor yang mampu
menjalankan program dengan pustaka OpenCV. Dengan memanfaatkan yang
sudah ada, dalam hal ini adalah sebuah laptop, dengan spesifikasi prosesor Intel
Core 2 Duo T5870, RAM 2 GB, VGA Intel GMA 4500M, dan HD 250 GB
dianggap akan mampu melakukan proses tersebut. Sebagai controller, dibutuhkan
divais yang mudah digunakan user, juga mudah komunikasinya dengan laptop.
Pada umumnya, untuk mengontrol sesuatu di luar komputer, yang biasa
digunakan adalah protokol RS232/serial, namun karena di laptop sudah jarang
Referensi
berupa isyarat
arah tunjuk jari
Proses
pengolahan
citra
output gerakan
lengan robot
Controller
25



dijumpai port serial, maka komunikasi yang dimungkinkan dan efisien adalah via
USB. Sedangkan untuk modul controller itu sendiri membutuhkan hasil kerja
yang baik dalam menggerakkan lengan robot, namun juga tidak terlalu kompleks.
4.2 Analisis Perangkat Lunak
Proses pengolahan citra dalam penelitian ini dilakukan oleh perangkat
lunak. Dipilihlah bahasa pemrograman C++ karena meneruskan kode sumber
yang sudah ada dari penelitian Ho (2011). OpenCV digunakan sebagai pustaka
khusus mengenai computer vision karena mudah diunduh, gratis, kemampuannya
memadai, ringan, walaupun untuk referensi dan tutorialnya tidak terlalu banyak.
Untuk sistem operasi yang digunakan, juga meneruskan dari penelitian Ho (2011),
yaitu Linux. Linux juga memiliki kemudahan dan fleksibilitas untuk melakukan
pengaturan program, integrasi dengan perangkat keras, tidak membutuhkan
source komputer yang besar, juga kini telah luas digunakan tidak hanya pada
ranah desktop, tapi juga mobile device. Sehingga untuk pengembangan
kedepannnya bisa sangat luas.
Kemudahan penggunaan tetap dipertimbangkan meskipun sifatnya masih
pengembangan awal. Karena metode pengolahan citra yang digunakan adalah
pemilahan suatu warna objek dari warna latar belakangnya, maka ada parameter
tertentu yakni range warna dari objek tersebut. Untuk kemudahan penggantian
nilai parameter itu, perlu dibuat mekanisme cara memasukkan data yang fleksibel,
tidak secara langsung dalam kode program agar pengguna tidak perlu meng-
compile ulang program. Mengenai program pengolahan citranya, langkah-langkah
pemrosesan citra diusahakan menghasilkan keluaran yang baik, tidak dibatasi
warna latar belakang tertentu, dan dapat menghilangkan derau yang mungkin
terjadi.
4.3 Analisis Purwarupa Lengan Robot
Dengan batasan masalah antara lain :
a. Bentuk dan ukuran purwarupa lengan dental light tidak sama dengan
yang sebenarnya.
26



b. Gerakan dental light dibatasi hanya melakukan 8 gerakan dasar yaitu
memutar ke atas, ke bawah, menggeleng ke kiri, menggeleng ke
kanan, bergeser ke atas, ke bawah, berputar ke kiri , dan berputar ke
kanan. Yang mana gerakan aslinya juga dapat bergerak maju dan
mundur, juga bergeser ke kiri dan ke kanan digantikan dengan
berputar ke kiri dan ke kanan.
c. Dalam satu waktu, hanya 1 motor servo yang bergerak.
Dari analisis batasan tersebut, bentuk purwarupa lengan robot yang akan dibuat
tidak memerlukan bagian lengan yang panjang-panjang seperti bentuk dental light
asli. Walaupun begitu, jenis motor yang digunakan haruslah dapat menahan beban
dan mampu mempertahankan posisinya, dari sana maka jenis motor yang paling
cocok digunakan adalah motor servo, selain juga cara mengatur gerakannnya
mudah. Torsi dari motor servo yang dibutuhkan tidak terlalu besar karena
purwarupa tidak seperti lengan dental light asli yang memiliki lengan panjang-
panjang.
Karena gerakan yang akan dilakukan berjumlah 8 gerakan, maka
diperlukan penghitungan jumlah derajat kebebasan lengan yang dibutuhkan.
Setiap motor servo dapat melakukan 2 gerakan yaitu searah jarum jam dan
sebaliknya, namun dibatasi sudut putarnya hanya 180
0
karena servo yang
digunakan bukan tipe yang bisa berputar 360
0
. Dari sana dapat dihitung bahwa
untuk memperoleh 8 gerakan, maka dibutuhkan 4 motor servo. Karena setiap
motor servo juga merepresentasikan satu derajat kebebasan, maka dalam
penelitian ini, lengan robot memiliki 4 derajat kebebasan.
Pada bagian analisis sistem kendali, sebagai referensi masukannya adalah
isyarat jari. Namun jumlah dari isyarat tersebut hanya 4, sedangkan gerakan yang
dilakukan lengan robot ada 8. Maka perlu mekanisme tambahan agar dari 4
isyarat jari bisa mengontrol 8 gerakan. Sebagai pertimbangan, ada sebuah
komponen elektronika bernama relay, ia memiliki beberapa sakelar yang secara
mekanik dapat berubah posisi secara bersamaan jika diberi tegangan listrik.
Dengan relay yang memiliki 4 sakelar, dapat dibuat 2 kanal untuk memperbanyak
variasi masukan untuk mengontrol gerakan lengan robot.
27



4.4 Rancangan Sistem Secara Keseluruhan
Sistem ini menggunakan webcam yang mengambil citra pola jari tangan.
Pola tersebut didapat dari bentuk gerakan jari telunjuk atau jempol. Jari tersebut
nantinya menunjuk ke suatu arah dari 4 pilihan arah, yakni atas, bawah, kiri, dan
kanan. Arah yang ditunjukkan oleh bentuk pola jari ini akan menjadi dasar
masukan untuk gerakan lengan dental light tanpa menyentuh langsung.
Pada dasarnya gerakan dental light ada 8, maka dari 4 arah yang menjadi
input tadi, akan ditambahkan pedal yang bisa diinjak dokter (untuk mengontrol
relay) guna memperbanyak variasi gerakan menjadi 2 kali lipatnya, menjadi total
8 gerakan. Hal ini agar dokter tidak perlu menghafal bentuk isyarat jari.
Pemrosesan citra pola jari dilakukan menggunakan bahasa C++ dengan library
OpenCV. Di dalam program pemrosesan citra tersebut terdapat 5 jenis output,
yaitu default, arah atas, arah bawah, arah kiri, dan arah kanan. Kemudian output
tersebut dihubungkan dengan program PowerSwitch, yang mana program tersebut
dikembangkan dengan bahasa C.
Program PowerSwitch, yang berjalan di atas OS Linux berguna
mengendalikan board PowerSwitch yang terkoneksi dengan port USB komputer /
laptop untuk mengeluarkan logika TTL 1 atau 0. Empat keluaran dari
PowerSwitch lalu dihubungkan ke relay untuk diatur sambungannya ke papan
PCB servo controller yang menerima 8 input. PCB servo controller
menggerakkan lengan dental light jika ia mendapat masukan logika 0 atau
dinamakan active-low. Masukan nilai ke servo controller didapat dari keluaran
PowerSwitch. Jumlah keluaran dari PowerSwitch adalah 4 pin, padahal lengan
dental light dapat melakukan 8 gerakan. Maka digunakan relay untuk bertugas
memperbanyak output dari PowerSwitch yang hanya 4. Relay dikontrol
menggunakan pedal yang esensinya adalah sebuah sakelar. Pedal ini dikendalikan
dengan kaki sehingga tangan dokter tetap tidak perlu memegang sehingga terjaga
kesterilan tangannya.
Motor servo bergerak mengikuti input dari pola deteksi arah jari. Ketika
ada pola arah yang terdeteksi, maka servo controller akan mengirim sudut gerak
28



lengan dan melakukan increment / penambahan sampai pola arah tidak ada lagi /
kondisi default. Program servo-controller dibuat dengan Bascom AVR. Pada
Gambar 4.2 ditunjukkan diagram blok dan diagram alir perancangan sistem secara
keseluruhan.









Gambar 4.2 Diagram Blok Rancangan Sistem secara Keseluruhan
4.5 Rancangan Perangkat Lunak
Rancangan perangkat lunak yang terdapat dalam sistem ini ada 4 bagian,
yakni terdapat di dalam komputer berupa pengolahan citra untuk jari tangan,
aplikasi PowerSwitch di commandline di mana keduanya berjalan di atas platform
Linux Ubuntu. Perangkat lunak juga terdapat di board PowerSwitch, dan board
servo controller.
4.5.1 Deteksi Jari Tangan
Perangkat lunak pertama akan menerima masukan berupa gambar dari
kamera menjadi Ipl Image yang dikenali oleh modul OpenCV. Bentuk dari
Isyarat
arah tunjuk
jari
Input
parameter
HSV
u
Threshold
Erosi dan
dilasi
Smoothing Cari kontur
Cari titik
tengah
tangan
Cari
ujung jari
Cari arah
tunjuk jari
PowerSwitch
Servo
controller
Lengan
dental light
Pengolahan citra
Cari warna
pada range
tertentu
29



isyarat jari yang akan digunakan digambarkan pada Gambar 4.3. Arah gerakan
dilakukan dengan menunjuk ke suatu arah.


Gambar 4.3 Bentuk Isyarat Jari yang Dipakai
Berikut adalah tahapan dalam mendeteksi jari :
1. Mengonversi citra hasil tangkapan webcam dari RGB ke HSV. Hal ini
dilakukan untuk sedekat mungkin menyamai persepsi warna yang diterima
indra manusia. Juga agar lebih teliti dalam memilah nilai dari posisi warna
objek, dalam hal ini adalah sarung tangan yang dipakai dokter.
2. Memeriksa citra dengan range warna tertentu dari sarung tangan dokter untuk
mendapat bentuk dari tangan. Nilai dari warna objek tidak absolut hanya satu
nilai, namun dalam batas-batas/range yang ditentukan. Hal ini karena bisa jadi
pada suatu ruangan, intensitas dari cahaya berubah sehingga warna yang
diterima webcam juga berubah. Nilai di luar batas akan dianggap tidak ada, hal
ini dilakukan untuk membuang latar belakang yang tidak perlu.
3. Setelah objek tangan terpilah warnanya dari latar belakang, maka citra
selanjutnya di-threshold agar ada pemisahan secara tegas antara tangan dengan
latar belakang (bukan tangan).
4. Dari hasil di atas, ada beberapa derau yang dihasilkan, maka perlu dilakukan
erosi dan dilasi agar derau hilang dan hasil deteksi maksimal.
5. Dari hasil dilasi, dilakukan smoothing agar citra menjadi halus.
6. Bentuk dari tangan dicari tepiannya saja untuk menghasilkan kontur tangan.



30





Gambar 4.4 Diagram Alir Tahap Deteksi Jari
Gambar 4.4 Diagram Alir Tahap Deteksi Jari
4.5.2 Deteksi Arah Isyarat
Setelah citra tangan berhasil dipilah dari latar belakangnya, selanjutnya
dicari ke arah manakah isyarat jari menunjuk. Dalam penelitian Ho (2011),
dilakukan beberapa proses sampai menemukan arah tersebut. Cara menentukan
arah isyarat jari dilakukan dengan melakukan perhitungan sudut antara 2 titik, H
sebagai titik pusat tangan dan P sebagai ujung jari. Dari sana dapat ditentukan
apakah arahnya ke atas, ke bawah, ke kanan, atau ke kiri.
Mulai
cvImage = frame
saat ini
Input parameter HSV
Erosi dan Dilasi

range HSV min
s.d. HSV max

Thresholding
RGB to HSV
Smoothing
Selesai
Cari kontur
31




Gambar 4.5 Gambaran Cara Menentukan Arah Isyarat Tangan
Titik tengah H, diperoleh dari titik tengah dari keseluruhan objek tangan,
sedangkan P adalah titik yang diciptakan oleh telunjuk atau jempol, juga Ox
sebagai sumbu horizontal X. Setelah itu dapat dilakukan penghitungan
Cos(HP,Ox). Dari sana hasilnya bervariasi :
Cos (HP,Ox) > 0.7, arah = ke bawah.
Cos (HP,Ox) < -0.7, arah = ke atas.
If -0.7 < Cos (HP,Ox) < 0.7, dan H.y < P.y, arah = kiri.
If -0.7 < Cos (HP,Ox) < 0.7, dan H.y > P.y, arah = kanan.
4.5.3 Mengatur Perintah Gerakan Lengan
Penghubung antara pengolahan citra untuk mengenali arah isyarat
dengan gerakan lengan dental light adalah program PowerSwitch. Ia adalah
program yang dikembangkan Object Development melalui lamannya di
http://obdev.at. PowerSwitch adalah program tersendiri yang berjalan di terminal
command line Linux Ubuntu, fungsinya adalah memberi output logika 5 volt atau
0 melalui USB. Sinyal keluaran ini berguna untuk memberi perintah gerakan ke
board pengatur gerakan lengan robot. Cara menggabungkan program pengolahan
citra yang berbahasa C++ adalah dengan menambahkan fungsi system ()
untuk memanggil program PowerSwitch setelah penentuan arah isyarat jari
32



ditemukan. Program PowerSwitch harus dimasukkan ke dalam folder usr/bin/ agar
langsung bisa dipanggil. Karena lengan robot diaktifkan dengan metode active-
low, maka program PowerSwitch ini diubah dari aslinya agar sesuai kebutuhan,
dengan cara menginvert nilai keluarannya.
4.5.4 Program Kendali Servo
Dengan menggunakan bahasa Bascom AVR, mengendalikan gerakan
servo menjadi mudah. Dalam penelitian ini dibuat 8 input masukan dan 8 gerakan
yang dapat dilakukan oleh 4 servo. Delapan input masukan menggunakan metode
active-low, ketika ada sinyal 0/GND maka program akan melakukan proses
increment, selanjutnya nilai yang bertambah itu dikeluarkan ke bagian sinyal
servo sebagai sudut putarnya. Nilai sudut dibatasi dari 0-255 untuk menghindari
adanya perulangan loop program yang tidak perlu sehingga mengakibatkan
gerakan lengan robot menjadi kacau. Gambar 4.6 adalah flowchart programnya.
33




Gambar 4.6 Diagram Alir Program Kendali Servo
4.6. Rancangan Perangkat Keras
Perangkat keras yang dipakai dalam sistem ini berupa webcam, board
PowerSwitch, relay, pedal, dan board servo controller, serta lengan dental light
yang disusun dari 4 motor servo. Webcam yang digunakan adalah Logitech C170
yang memiliki kualitas video yang cukup tajam yaitu maksimal 30 fps. Perangkat
34



keras selanjutnya, Board PowerSwitch. Perangkat itu dihubungkan ke laptop
dengan kabel USB. Inti dari PowerSwitch adalah mikrokontroler ATtiny2313A.
Output dari PowerSwitch dihubungkan ke relay yang sudah dilengkapi pedal.
Penggunaan relay dan pedal ini dimaksudkan untuk mempermudah penggunaan
alat agar intuitif. Dokter gigi tidak perlu menghafalkan 8 pola jari yang berbeda,
itu terlalu banyak. Maka dokter gigi hanya perlu menghafal 4 pola jari yakni atas,
bawah, kiri, dan kanan. Dengan tambahan relay dan pedal akan menambah 4 lagi
variasi gerakan, yaitu pedal dan arah atas, pedal dan arah bawah, pedal dan arah
kiri, dan pedal dan arah kanan. Sehingga total menjadi 8 keluaran nilai.
Delapan keluaran dari relay terhubung ke papan pengendali gerakan
motor servo. Pengendali ini mengontrol gerakan 4 motor servo yang sudut putar
maksimalnya adalah 180
0
. Dari 4 motor servo, derajat kebebasan dari lengan
dental light diperlihatkan pada Gambar 4.7. Derajat kebebasan merupakan sumbu
pergerakan dari tiap motor servo.

Gambar 4.7 Rancangan Derajat Kebebasan Lengan Dental Light
Dalam satu waktu, motor servo yang bergerak hanya satu, misalkan
dokter gigi menunjuk ke arah atas dan tidak menginjak pedal, maka motor servo
nomor 2 misalnya, akan bergerak searah jarum jam secara periodik sesuai
perintah. Gerakan periodik dari motor servo dikarenakan adanya penambahan
nilai dari servo controller.
35



4.6.1 Rancangan PowerSwitch
PowerSwitch dalam bentuk modul perangkat keras rancangannya dibuat
berdasarkan skematik dari laman http://obdev.at. Modul ini mendapat daya listrik
dari laptop lewat konektor USB. Modul PowerSwitch memiliki 4 keluaran yang
dapat menghasilkan 5 volt atau 0 volt. Gambar 4.8 memperlihatkan skematik
rincinya.

Gambar 4.8 Skematik PowerSwitch (Objective Development, 2008)
Chip yang digunakan dalam modul ini adalah ATtiny 2313. Ia diprogram dengan
menanamkan program berupa file berekstensi *.hex yang di dalamnya sudah
terdapat firmware untuk memungkinkan komunikasi antara komputer dan divais
eksternal via USB tanpa perangkat dengan protokol USB secara khusus. Bisa
dilihat di Gambar 4.8 konektor SV2 adalah 4 keluaran sedangkan SV1 adalah
konektor untuk memprogram Attiny 2313.




36



4.6.2 Rancangan Servo Controller
Untuk mengontrol servo, diperlukan rangkaian elektronika yang dapat
menghasilkan sinyal PWM yang mengarahkan motor servo untuk berputar.
Kebutuhan dari penelitian ini adanya 8 masukan dari hasil pengolahan citra, juga
4 keluaran untuk 4 buah motor servo. Selain sinyal PWM, servo membutuhkan
VCC dan GND. Dalam rangkaian juga ditambahkan tombol reset untuk
mengembalikan seluruh servo ke posisi awal, hal ini dilakukan untuk menghadapi
kemungkinan adanya program error atau tidak ada respon. Pada Gambar 4.9
ditunjukkan skematik lengkap sistem minimum servo controller.

Gambar 4.9 Skema Minimun Sistem ATmega32 sebagai Servo Controller
Dalam rangkaian juga ditambahkan rangkaian regulator catu daya. Digunakan IC
7805 untuk membatasi tegangan yang masuk sebagai suplai ke mikrokontroler
ATmega 32 dan servo.

37



4.6.3 Rancangan Pedal dan Relay
Pada bagian akhir analisis purwarupa lengan robot sudah sempat
disinggung tentang kebutuhan mekanisme tambahan yang mengatasi masalah
jumlah isyarat jari yang hanya 4 kurang dari jumlah gerakan lengan robot yang
berjumlah 8 gerakan. Maka dibuatlah rancangan untuk memperbanyak variasi
input dengan relay yang memiliki 4 sakelar di dalamnya. Pada Gambar 4.10
diperlihatkan bagaimana skematikanya.

Gambar 4.10 Skema Rangkaian Relay
Relay ditambahi sebuah diode agar mencegah adanya arus balik yang dapat
mengganggu kerja relay atau merusak komponen lain. Untuk mengaktifkan relay,
diberi juga sakelar yang dibentuk seperti pedal. Dengan begitu meskipun ada
mekanisme tambahan, dokter gigi tetap tidak perlu menyentuh dental light secara
langsung. Pedal diberi indikator berupa LED agar tampak kondisi saat pedal
diinjak atau tidak. Masukan tegangan yang dibutuhkan relay adalah 12 volt.

4.7 Rancangan Pengujian
Setelah seluruh perangkat lunak dan perangkat keras jadi dan telah
diintegrasikan, diperlukan pengujian untuk mengetes sejauh mana kualitas dari
penelitian ini. Tidak hanya masalah bisa atau tidak bisa menggerakkan lengan
38



robot dengan isyarat jari, tapi ada beberapa pengujian kuantitatif yang perlu
dilakukan. Pengujian tersebut diantaranya :
a. Pengujian warna sarung tangan
Karena dokter gigi dalam praktiknya menggunakan sarung tangan, maka objek
yang akan dikenali warnanya adalah sarung tangan. Di pasaran, terdapat
berbagai macam warna sarung tangan yang tersedia. Dari varian warna tersebut
perlu diuji bagaimana karakteristik warna sarung tangan yang baik untuk
dikenali dan menggerakkan lengan robot dental light.
b. Pengujian pengaruh intensitas cahaya
Dokter gigi melakukan praktik pada umumnya di dalam ruangan. Kondisi dari
ruangan juga dapat bermacam-macam, yang paling berpengaruh terhadap
kualitas citra adalah pengaruh intensitas cahaya dalam suatu ruangan. Maka
pengaruh dari intensitas cahaya dalam ruangan juga perlu diuji, kondisi
bagaimana yang menghasilkan pengontrolan yang baik.
c. Pengujian jarak
Jarak antara webcam dengan tangan perlu dites berapa jarak optimalnya. Perlu
dicari, jarak berapakah yang menghasilkan pengontrolan lengan dental light
yang baik dan sesuai isyarat yang diberikan.
d. Pengujian waktu respon
Waktu antara adanya isyarat dan kapan lengan robot meresponnya juga perlu
diuji seberapa cepat. Jika responnya lambat, tentu akan menjadi masalah bagi
dokter yang menggunakan sistem ini.
e. Pengujian ketepatan gerakan
Arah tunjuk dari jari dan gerakan dari lengan robot perlu diuji kesesuaiannya.
Ini adalah esensi dari sistem kendali lengan dental light menggunakan isyarat
jari.



39

BAB V
IMPLEMENTASI

Bab ini menjelaskan tentang implementasi pendeteksian isyarat jari dari
citra yang ditangkap webcam kemudian digunakan untuk mengendalikan lengan
dental light. Implementasi sistem ini menggunakan perangkat keras dan perangkat
lunak sebagai berikut:
1. Webcam Logitech C170
2. Laptop ASUS K40IJ Intel Core 2 Duo T5870, 2 GB RAM
3. Servo controller
4. PowerSwitch Board
5. Lengan Robot
6. Sistem Operasi Linux Ubuntu 10.04 a.k.a. Lucid Lynx 32-Bit
7. OpenCV 2.3.1

5.1 Penentuan Parameter Warna
Yang pertama dilakukan adalah tahap kalibrasi, di mana ia berfungsi untuk
memasukkan nilai HSV minimal dan HSV maksimal untuk dapat mendeteksi
suatu warna tertentu saja dan tidak mengindahkan selainnya. Warna yang
dideteksi adalah warna sarung tangan yang dipakai dokter gigi. Cara memasukkan
nilai HSV-nya adalah dengan membuat file baru di luar file pengolahan citra, agar
pengguna tidak perlu meng-compile ulang program untuk mengganti parameter
HSV. File baru tersebut berekstensi *.txt, dengan format :
num1 num2 num3
num4 num5 num6
num1 sampai dengan num6 adalah variabel-variabel yang akan
menggantikan nilai HSV minimal dan maksimal, dalam program pengolahan
citra:
91 CvScalar hsv_min = cvScalar(num1,num2,num3); //H,S,V
92 CvScalar hsv_max = cvScalar(num4,num5,num6);

Gambar 5.1 Kode HSV Minimum dan Maksimum
40



Untuk membaca file eksternal tersebut, di dalam listing program pengolahan citra
ditambahkan fungsi kalibrasi :

19 void parameter_warna()
20 {
21 ifstream indata; // indata is like cin
22 indata.open("test.txt"); // opens the file
23 if(!indata)
24 { // file couldn't be opened
25 cerr << "Error: file could not be opened" <<
endl;
26 exit(1);
27 }
28
29 indata >>num1>>num2>>num3>>num4>>num5>>num6;
//masukkan nilai ke variabel
30 indata.close();
31 }
Gambar 5.2 Kode Pembacaan File Eksternal
Fungsi ini membutuhkan header fstream.h, maka #include <fstream> perlu
dicantumkan. ifstream indata bertindak layaknya perintah cin dalam C++.
File yang akan dibaca dimasukkan dalam perintah indata.open( .txt).
Setelah itu dilakukan pengecekan tentang ada tidaknya file yang akan dibaca.
Perintah indata>> memasukkan nilai yang terbaca ke variabel num1 s.d. num6.
Variabel num1 s.d. num6 tidak dideklarasikan di dalam fungsi karena sebelumnya
sudah ada di bagian atas, juga dimaksudkan menjadi variabel global agar bisa
diakses fungsi lain nantinya.
5.2 Implementasi Deteksi Jari
Implementasi deteksi jari dilakukan dengan langkah-langkah seperti pada
Gambar 4.3 dengan memproses setiap frame citra dari webcam, citra diambil dari
webcam dengan menggunakan kode pada Gambar 5.3.
41 CvCapture* capture = cvCaptureFromCAM(1);
Gambar 5.3 Kode untuk Mengakses Webcam
Kamera yang digunakan adalah kamera dengan nomor ID (1), ID ini
berarti kamera yang diakses adalah kamera eksternal, karena bila hanya ada satu
41



kamera di komputer (webcam laptop) maka secara default akan berada pada ID
(0). Hasil dari capture oleh kamera dimasukkan kedalam variabel capture.
Setelah itu dilakukan pengecekan terhadap kamera.
43 if ( !capture )
44 {
45 fprintf( stderr, "ERROR 1: CAPTURE is NULL \n" );
46 getchar();
47 return -1;
48 }
49
50 while(!end)
51 {
52 cvGrabFrame (capture);
53 IplImage* in0 = cvRetrieveFrame (capture);
54
55 if ( !in0 )
56 {
57 fprintf( stderr, "ERROR 2: FRAME is null...\n" );
//kamera tak dapat meng-capture citra
58 getchar();
59 break;
60 }
61
62 cvNamedWindow("init",CV_WINDOW_AUTOSIZE );
63
64
65 /*==================init phase=====================*/
66 if (key == 0)
67 {
68 IplImage* init = cvCloneImage(in0);
69 //cvNamedWindow("init",CV_WINDOW_AUTOSIZE );
70 cvShowImage("init",init);
71 if ( (cvWaitKey(10) & 255) == 10 ) // press enter to start
72 {
73 key = 1;
74 //cvDestroyWindow( "init" );
75 }
76 }

Gambar 5.4 Listing Ekstraksi Frame dari Kamera
Yang dilakukan di sini adalah mengecek apakah kamera terpasang atau
tidak, juga memeriksa apakah kamera dapat meng-capture citra atau tidak. Bila
variabel capture tidak ada isinya, dikarenakan kamera tidak dapat mengambil
gambar, maka akan muncul pemberitahuan "ERROR 2: FRAME is null...\n".
Jika kamera berhasil menangkap citra, maka citra dimasukkan ke variabel in0
42



dan akan dibuat jendela bernama init sebagai penampil dari citra asli yang
ditangkap kamera. Selanjutnya dari citra asli in0, disalin dengan nama init dengan
perintah IplImage* init = cvCloneImage(in0); baru kemudian ditampilkan
pada jendela init yang sebelumnya sudah dibuat. Untuk memulai pemrosesan
citra, program menunggu tombol Enter pada keyboard ditekan. Pada daftar kode
ASCII, tombol Enter disamakan dengan nl atau new line.
Tabel 5.1 Daftar Karakter ASCII (Sequin, 2011)

Program kemudian dilanjutkan mencari objek tangan yang ditunjukkan
dalam Gambar 5.5.
43



78 if (key == 1)
79 {
80
81 int y_finger = 0;
82 //int cDirect = 0 ;// = 0;
83 CvPoint fVector,hand_center;
84 CvPoint horizontal=cvPoint(0,10);
85
86 int nFingers = 0;
87
88 //====================PROSES=========================================
89 parameter_warna();
90
91 CvScalar hsv_min = cvScalar(num1,num2,num3); //H,S,V
92 CvScalar hsv_max = cvScalar(num4,num5,num6);
93
94 //convert to hsv image
95 IplImage* in = cvCreateImage( cvSize( 640, 480 ), 8, 3 );
96 IplImage* hsv_image=cvCreateImage( cvSize(640,480),8, 3);
97
98 IplImage* hsv_black=cvCreateImage(cvSize(640,480),8,1);
99
100
101 //IplImage* equal = doEqualHist(in0);
102
103 cvCvtColor(in0, hsv_image, CV_BGR2HSV);
104 cvInRangeS(hsv_image, hsv_min,hsv_max, hsv_black); //
deteksi warna kuning
105 IplImage* thres2 = doThresBinary(hsv_black,100);
106 IplImage* erode = doErode (thres2, 2 );
107 IplImage* dilate = doDilate (erode, 1 );
108 IplImage* smooth = doSmoothGaussian(dilate, 41,41);
//lebar, tinggi kernel Gaussian (harus angka ganjil)


Gambar 5.5 Listing Mencari Objek Tangan
Pada fase pengenalan, variabel-variabel yang digunakan diberi nilai awal
yakni = 0. Selanjutnya, untuk memilah warna yang akan diproses, dalam hal ini
warna dari sarung tangan dokter gigi, maka diperlukan batas nilai pada mode
warna HSV-nya. Dalam program dituliskan dengan CvScalar hsv_min dan
CvScalar hsv_max. Nilai-nilai tersebut didapat dengan pemilihan warna model
HSV.
Berikutnya yang perlu disiapkan adalah membuat jendela untuk
menampilkan hasil konversi citra dari RGB ke HSV. Hal ini dilakukan agar di
layar monitor nantinya tampak jelas setiap proses yang dilakukan. Ukuran dari
44



jendela-jendela tersebut dibuat dengan ukuran 640x480 pixel. Dengan format
perintah : IplImage* cvCreateImage(CvSize size, int depth, int
channels) maka depth/tingkat kedalaman diatur ke 8 bit dan channel warna
nomor 3 dan nomor 1 untuk yang hitam-putih. Proses konversi dilakukan dengan
perintah cvCvtColor(in0, hsv_image, CV_BGR2HSV); yang artinya citra in0
dikonversi dari RGB ke HSV dan hasilnya dinamai hsv_image. Dari hasil
konversi tersebut lalu nilai HSV-nya dipilah sesuai batas yang ditentukan di
hsv_min dan hsv_max, hasil pemilahan warna tersebut kemudian dinamai
hsv_black.
Dari pemilahan objek tangan berdasar warna, kemudian dilakukan
thresholding untuk memfilter pixel yang nilainya terlalu kecil atau terlalu besar.
Dalam hal ini nilai yang digunakan adalah 100-255. Metode yang dipakai adalah
THRESH_BINARY, nilai di bawah 100 akan dianggap 0, dan selain itu dianggap 1.
Untuk menghilangkan derau berupa titik, maka dierosi 2 kali kemudian dilakukan
dilasi 1 kali untuk mengisi lubang-lubang di citra pada objek tangan. Setelah itu
dilakukan proses smoothing untuk memperhalus citra. Metode smoothing yang
dipakai adalah dengan Gaussian kernel berukuran 41x41, ukuran itu dari
penelitian Ho (2011).
5.3 Implementasi Deteksi Arah Tunjuk Jari
Setelah mendapatkan objek tangan dan membuang pixel latar belakangnya,
maka yang dilakukan adalah mendeteksi arah tunjuk dari jari. Objek tangan
selanjutnya dicari konturnya. Sebelum proses pencarian kontur, dipersiapkan
dahulu jendela untuk hasil kontur dengan IplImage* contour.
111 IplImage* contour = cvCloneImage(smooth);
112 CvMemStorage* storage = cvCreateMemStorage(0);
113 CvSeq* hand_contour = 0;
114
115 //fungsi di bawah cuma buat binary
116 cvFindContours
(contour,storage,&hand_contour,sizeof(CvContour),CV_RETR_TR
EE, CV_CHAIN_APPROX_NONE,cvPoint(0,0));

Gambar 5.6 Kode Pencarian kontur
45



Kontur tangan didapatkan dengan menggunakan fungsi cvFindContours
dengan tipe CV_RETR_TREE, menerima kembali semua kontur dan
merekonstruksi hirarkinya seperti pohon/tree. susunan hierarki dipakai untuk
menarik sebuah ciri-ciri umum dari citra yang sudah diambil.
CV_CHAIN_APPROX_NONE, menyimpan semua titik kontur. Artinya, setiap 2 titik
berikutnya (x1, y1) dan (x2, y2) dari kontur baik itu bertetangga secara horizontal
atau vertikal (abs(x1-x2),abs(y2-y1))==1. cvPoint(0,0)yaitu nilai offset, artinya
tidak ada pergeseran .
118 if (hand_contour)
119 {
120 //mencari titik tengah tangan
121 CvRect hand_box= cvBoundingRect (hand_contour,0);
122 hand_center.x = cvRound(hand_box.x + hand_box.width*0.5);
123 hand_center.y = cvRound(hand_box.y + hand_box.height*0.5);

Gambar 5.7 Kode Menentukan Titik Tengah Tangan
Dari sana ditentukan posisi X dan Y dari titik tengah tangan. Objek tangan
diberi batas berupa kotak/box. Kemudian dari sana dapat ditentukan nilai titik
pusatnya. Proses kemudian dilanjutkan untuk mendeteksi ujung jari. Di mana ada
r sebagai jarak antara titik tengah tangan dengan ujung jari, yang nantinya
diproses untuk dihitung nilai cosinus sudutnya dengan sumbu X. Dari Ho (2011),
dilakukan penghitungan nilai vektor P1, P2 dan seterusnya.











46



125 int i=0;
126 int r = 75; //jarak antara tengah tangan dan ujung jari
127 int step = 10; //n step kontur
128 for( i = 0; i < (hand_contour ? hand_contour->total : 0);
i+= step )
129 {
130 CvPoint* r0 = (CvPoint*)cvGetSeqElem( hand_contour, i );
131 CvPoint n0 = cvPoint (r0->x,r0->y);
132 double cos0 = curve (hand_contour, i, r); //calculate the COS at
point P
133 if (cos0 > 4)
134 {
135 final = g_nFingers;
136 break;
137 }
138 if (cos0 > 0.5)
139 {
140 double cos1 = curve (hand_contour, i - step, r); // calculate
COS at point P1
141 double cos2 = curve (hand_contour, i + step, r); // calculate
COS at point P2
142 double max1 = max_3 (cos0, cos1, cos2); // Find the Max of 3 Cos
value
143 bool equal = IsEqual (max1 , cos0);
144 signed int z = zCrossProduct (hand_contour, i, r); //
Calculate cross product of 2 vector PP1 and PP2
145
146 if (equal == 1 && z<0)
147 {
148 nFingers += 1;
149 CvPoint* r0 = (CvPoint*)cvGetSeqElem( hand_contour, i );

Gambar 5.8 Kode Menentukan Vektor-vektor pada Tangan
Seperti bisa dilihat pada Gambar 5.1, Jika didapat 3 titik pada kontur
tangan, dan menghitung sudut A diantara vektor PP1 dan PP2, maka dapat
ditentukan yang manakah titik sebagai ujung jari. Jika sudut A nilainya kurang
dari 450 maka bisa dipastikan itu adalah ujung jari (Ho, 2011).

47





Gambar 5.9 Titik-titik pada Kontur Tangan (Ho 2011)

Persoalan belum selesai, masih ada masalah jika ditemukan titik lembah
diantara jari seperti pada Gambar 5.10. Dengan sudut yang amat kecil juga, maka
dilakukan penghitungan cross product antara PP1 and PP2 untuk membedakan
ujung jari dengan lembah. Jika hasil cross product Z kurang dari 0 maka itulah
titik ujung jari.



Gambar 5.10 Titik Ujung Jari dan Bagian Lembah antar Jari (Ho 2011)
48



Agar hasil dari pendeteksian kontur tangan, ujung jari, dan titik tengah
tangan, maka di titik-titik tersebut diberi indikator berupa lingkaran dengan
cvCircle dan garis dengan cvLine yang menghubungkan keduanya. Warna dari
indikator-indikator tersebut dibuat berbeda agar tegas. Pengaturan warnanya
diatur dengan model RGB. Misalkan R=255, G=0, dan B=0 untuk menciptakan
warna merah dan seterusnya.
150 CvPoint n0 = cvPoint (r0->x,r0->y);
151 y_finger = r0->x;
152 fVector = cvPoint(n0.x - hand_center.x, n0.y -
hand_center.y);
153 cvCircle( in0,n0 , 8, CV_RGB(255,0,0), 3, 8, 0 ); /ujung jari,
warna merah
154 cvCircle( in0,hand_center , 8, CV_RGB(0,255,0), 3, 8, 0 );
//tengah jari, warna kuning
155 cvLine (in0, n0, hand_center,cvScalarAll(255), 1,8 );
156 cvDrawContours( in0, hand_contour, CV_RGB(255,0,0),
CV_RGB(0,255,0), 1, 2, 8, cvPoint(0,0));

Gambar 5.11 Kode Pemberian Indikator dari Hasil Pengenalan
Pada penelitian Ho (2011), untuk dapat mengetahui arah tunjuk dari jari
dibutuhkan titik tengah tangan dan titik ujung jari. Dari proses sebelumnya, hal
tersebut sudah bisa didapatkan. Selanjutnya, dari kedua titik itu, dicarilah nilai
cosinus-nya. Kodenya ada pada Gambar 5.12.








49




178 if (final == 1)
179 {
180 //if (final == 0)
181 //cout << "stop" << endl;
182
183 double cos_angle = cos_vector(fVector, horizontal);
184 if (cos_angle < -0.7)
185 {
186 cDirect = 1; //up
187 }
188 else if (cos_angle > 0.7)
189 {
190 cDirect = 2; //down
191 }
192 else
193 {
194 if (y_finger > hand_center.x)
195 {
196 cDirect = 3; //right
197 }
198 else
199 {
200 cDirect = 4; //left
201 }
202 }
203 }
204 if (final != 1) // tidak ada arah yg terdeteksi, stop
205 cDirect = 0;

Gambar 5.12 Penghitungan Cosinus untuk Menentukan Arah Tunjuk Jari
Seperti dijelaskan sebelumnya pada bab perancangan, cara menentukan
arah adalah dengan menghitung sudut antara vektor HP (vektor antara titik pusat
tangan dan ujung jari) dengan garis horizontal/sumbu X. Bila nilai cos HPOx < -
0.7 maka arah yang ditunjukkan adalah ke atas, bila cos HPOx < 0.7 maka arah
yang ditunjukkan adalah ke bawah. Kemudian jika posisi koordinat ujung jari
lebih tinggi dibanding koordinat H/pusat tangan pada sumbu Y, maka arahny
adalah ke kiri, selain itu semua adalah arah kanan. Bila tak ada arah yang
terdeteksi, maka berhenti. Nilai dari arah disimpan di variabel cDirect. Setelah
arah tunjuk didapat, maka dengan fungsi system(), dapat memanggil program
PowerSwitch sebagai input ke perangkat keras. Ditambahkan pula kondisi agar
di terminal penampil, ada keterangan arah yang ditunjuk. Di Gambar 5.13
50



dituliskan juga bagaimana pemanggilan program PowerSwitch dilakukan. Dari 8
channel, yang diperlukan hanya 4 channel.
207 if (g_direct != cDirect )
208 {
209 g_direct = cDirect;
210 //cek g_nFingers
211 //cout << "g_nFingers : " << g_nFingers << "\n";
212 cout << "kondisi : " << g_direct << endl;
213
214 switch (g_direct)
215 {
216 case 0: cout << "stop" << endl;
217 system("for i in 0 1 2 3 4 5 6 7; do powerSwitch off $i;
done"); break;
218 case 1: cout << "up" << endl;
219 system("powerSwitch on 5"); break;
220 case 2: cout << "down" << endl;
221 system("powerSwitch on 4"); break;
222 case 3: cout << "left" << endl;
223 system("powerSwitch on 6"); break;
224 case 4: cout << "right" << endl;
225 system("powerSwitch on 7"); break;
226
227 }
228 }
Gambar 5.13 Kode Penentuan Arah & Pemanggilan Program Penggerak
Servo
Tahap akhir dalam program pengolahan citra, adalah menampilkan
jendela-jendela yang menampilkan hasil dari pemrosesan yang dianggap perlu,
diantaranya citra asli yang ditangkap kamera dan citra hasil eroding. Dari
keduanya akan nampak hasil pendeteksian tangan, pendeteksian arah tunjuk dari
jari, titik tengah tangan, ujung jari, dan kontur tangan. Perintah untuk
menampilkan jendela-jendela tersebut, cukup dengan cvShowImage. Di akhir
program, perlu dilakukan penghapusan memori dari citra yang telah diproses agar
leluasa bagi citra yang baru, perintahnya dengan cvReleaseImage. Untuk
mematikan program, user perlu menekan tombol ESC pada keyboard, yang dalam
ASCII bernomor 27. Jelasnya dituliskan dalam Gambar 5.14.


51



232 cvShowImage("init",in0);
233 //cvShowImage("contour",contour);
234 cvShowImage("dilate",dilate);
235 //cvShowImage( "hsv-black", hsv_black);
236
237 //fingers quantity stabilizer
238
239 if ( (cvWaitKey(10) & 255) == 27 ) //wait for esc key to stop
240 end = 1;
241
242 cvReleaseMemStorage( &storage );
243 cvReleaseImage(&in);
244 //cvClearSeq(CvSeq* hand_contour);
245 //cvReleaseMemStorage( &in );
246 cvReleaseImage(&smooth);
247 cvReleaseImage(&contour);
248 cvReleaseImage(&hsv_image);
249 cvReleaseImage(&hsv_black);
250 cvReleaseImage(&erode);
251 cvReleaseImage(&dilate);
252 cvReleaseImage(&thres2);
253
254 }
255
256
257 //cvDestroyWindow( "thres2" );
258
259 }
260
261 cvDestroyWindow( "in" );
262
263 cvReleaseCapture(&capture);
264 return 0;
265 }

Gambar 5.14 Kode Menampilkan Jendela Hasil Pengolahan Citra
5.4 Implementasi Mengatur Perintah Gerakan Lengan Robot
Untuk bisa menggunakan program PowerSwitch, maka perlu menginstal
program tersebut terlebih dahulu. Namun dalam penelitian ini, ada beberapa
modifikasi yang perlu dilakukan agar sesuai kebutuhan. Karena bersifat open-
source, proses modifikasi dapat dilakukan dengan cukup mudah. Sebelumnya, ia
memerlukan avr-gcc dan avr-libc ( pustaka bahasa C untuk microcontroller
AVR). Pada sub-direktori commandline terdapat file make yang siap
dieksekusi lewat terminal. Sebelum itu, perlu dilakukan pengeditan file
powerSwitch.c sebagai berikut :
52



199 printf("port %d: %s%s\n", i, isOn ? "off" : "on", isInv ?
(isOn ? " / pulse on" : " / pulse off") : "");

212 if(strcmp(argv[1], "off") == 0){
nBytes = usb_control_msg(handle, USB_TYPE_VENDOR |
USB_RECIP_DEVICE | USB_ENDPOINT_IN, PSCMD_ON, duration,
port, (char *)buffer, sizeof(buffer), 5000);
}else if(strcmp(argv[1], "on") == 0)


Gambar 5.15 Sebagian Kode Program PowerSwitch
Kata off diganti menjadi on begitu juga sebaliknya. Karena servo controller
aktif jika diberi sinyal rendah/active low. Setelah itu, barulah program dapat di-
compile dengan terlebih dahulu membuka terminal, kemudian mengakses sub-
direktori commandline program PowerSwitch lalu mengetik perintah make.
Setelah jadi, program PowerSwitch di salin ke direktori filesystem Linux /usr/bin/
agar tidak perlu repot mengakses direktori, sehingga langsung bisa dipanggil
program pengolahan citranya.
5.4.1 Firmware PowerSwitch
Seperti program PowerSwitch yang berjalan di atas OS Linux, program
yang ditanam pada chip ATtiny2313 juga perlu di-compile dan caranya sama saja.
Hanya saja, dalam mengisi chip ATtiny2313, diperlukan devais tambahan, yakni
USBASP downloader. Dengan menggunakan program AVR-Dude file berekstensi
.hex dapat ditanam ke chip ATtiny2313.
5.5 Implementasi Program Kendali Servo
Nilai keluaran dari PowerSwitch digunakan sebagai nilai masukan pada
papan kendali servo. Untuk dapat bergerak, servo memerlukan sinyal perintah 8
bit / 0-255. Logika dari program kendali servo adalah, ketika ada input tegangan
rendah / 0 volt pada port B di Atmega 32 papan kendali servo, maka akan dikirim
sinyal ke servo yang nilainya terus bertambah/increment seiring lama waktu input
yang diberikan. Sinyal keluaran ada di port D Atmega 32. Program dibuat dengan
Bascom AVR. Kode program ada pada Gambar 5.16 berikut ini.
53



5 $regfile = "m32def.dat"
6 $crystal = 12000000
7
8 Config Pinb.0 = Input
9 Config Pinb.1 = Input
10 Config Pinb.2 = Input
11 Config Pinb.3 = Input
12 Config Pinb.4 = Input
13 Config Pinb.5 = Input
14 Config Pinb.6 = Input
15 Config Pinb.7 = Input
16
17 'aktif low
18
19 Set Portb.0
20 Set Portb.1
21 Set Portb.2
22 Set Portb.3
23 Set Portb.4
24 Set Portb.5
25 Set Portb.6
26 Set Portb.7
27
28 Tombol1 Alias Pinb.0
29 Tombol2 Alias Pinb.1
30 Tombol3 Alias Pinb.2
31 Tombol4 Alias Pinb.3
32 Tombol5 Alias Pinb.4
33 Tombol6 Alias Pinb.5
34 Tombol7 Alias Pinb.6
35 Tombol8 Alias Pinb.7
36
37 'servo di port.d 0,1,2,3
38
39 Config Servos = 4 , Servo1 = Portd.0 , Servo2 = Portd.1 ,
Servo3 = Portd.2 , Servo4 = Portd.3 , Reload = 10
40 Config Portd.0 = Output
41 Config Portd.1 = Output
42 Config Portd.2 = Output
43 Config Portd.3 = Output
44
45 Dim Sudut1 As Byte
46 Dim Sudut2 As Byte
47 Dim Sudut3 As Byte
48 Dim Sudut4 As Byte
49
50 Sudut1 = 100
51 Sudut2 = 150
52 Sudut3 = 100
53 Sudut4 = 100

Gambar 5.16 Kode Kendali Servo Bagian Deklarasi Awal
54




Nilai sudut putar mula-mula yang diberikan pada servo masing-masing
yaitu 100, 150, 100, dan 100. Nilai ini disesuaikan ada di nilai tengah (antara 0-
255) sebagai posisi default dari lengan dental light. Papan kendali servo aktif
dengan metode active-low. Dan karena memanfaatkan fitur interupsi ATmega32,
maka dituliskan juga dalam program Enable Interrupts. Setelah deklarasi awal dan
pemberian nilai default, selanjutnya dilakukan loop terus menerus untuk
mengecek apakah ada input dari PowerSwitch atau tidak. Jika ada maka akan ada
increment nilai sudut putaran servo dengan alamat tertentu. Program kendali
gerakan servo ini mengatur 4 buah servo pada lengan dental light yang dapat
melakukan 8 gerakan. Pada Gambar 5.17 untuk lebih jelasnya mengenai kode
looping kendali servo.
55 Enable Interrupts
56 Do
57 If Tombol1 = 0 Then Decr Sudut1
58 If Sudut1 <= 2 Then Sudut1 = 2
59

60 If Tombol2 = 0 Then Incr Sudut1
61 If Sudut1 >= 253 Then Sudut1 = 253
62

63 If Tombol3 = 0 Then Decr Sudut2
64 If Sudut2 <= 2 Then Sudut2 = 2
65

66 If Tombol4 = 0 Then Incr Sudut2
67 If Sudut2 >= 253 Then Sudut2 = 253
68

69 If Tombol5 = 0 Then Decr Sudut3
70 If Sudut3 <= 2 Then Sudut3 = 2
71

72 If Tombol6 = 0 Then Incr Sudut3
73 If Sudut3 >= 253 Then Sudut3 = 253
74

75 If Tombol7 = 0 Then Decr Sudut4
76 If Sudut4 <= 2 Then Sudut4 = 2
77

78 If Tombol8 = 0 Then Incr Sudut4
79 If Sudut4 >= 253 Then Sudut4 = 253
80 Servo(1) = Sudut1
81 Servo(2) = Sudut2
82 Servo(3) = Sudut3
83 Servo(4) = Sudut4
84 Waitms 30
85 Loop
Gambar 5.17 Kode Kendali Servo Bagian Looping
55



5.6 Implementasi Perangkat Keras
Perangkat keras yang digunakan pada penelitian ini terdiri dari beberapa
bagian. PowerSwitch termasuk bagian yang menghubungkan perangkat lunak
dengan perangkat keras. Ia berfungsi menerima perintah untuk menghidupkan
atau mematikan channel yang dimilikinya. PowerSwitch yang belum dimodifikasi
normalnya mengeluarkan output 5 volt untuk keadaan on dan 0 volt/GND jika off.
Namun karena kebutuhan untuk mengatur papan kendali servo yang bertipe
active-low, maka keluaran dari PowerSwitch di-invert. PowerSwitch merupakan
device sederhana yang menggunakan inti chip AVR untuk bisa berkomunikasi via
USB tanpa chip tambahan seperti FTDI. Yang membuatnya memiliki kemampuan
demikian karena di dalam AVR ditanam program/firmware V-USB atau virtual
USB yang dikembangkan tim Object Development. Untuk skema dari
PowerSwitch, tidak berbeda dengan skema perangkat keras V-USB biasa, namun
PowerSwitch memiliki 8 keluaran yang dapat diatur untuk on atau off.


Gambar 5.18 Bentuk Papan PowerSwitch yang Sudah Jadi
Untuk mengatur gerakan servo, digunakan rangkaian sistem minimum
ATmega32. Kebutuhan rangkaian ini standar saja, catu daya 5 volt yang diatur
dengan bantuan regulator 7805, sumber clock eksternal berupa xtal 12 MHz,
tombol untuk keperluan reset, 5 pin untuk ISP, 8 pin sebagai input, dan 8 lagi
untuk output ke servo. Selain itu di dalam rangkaian terdapat VCC dan GND
56



untuk motor servo. Port B diposisikan menjadi input sedangkan port D menjadi
output. Pada Gambar 5.19 diperlihatkan bentuk jadinya.



Gambar 5.19 Bentuk Servo Controller yang Sudah Jadi
Empat Keluaran dari PowerSwitch diperbanyak variasinya menjadi 8
dengan relay 12 volt. Relay mempunyai 2 channel berbeda, pengaturan pemilihan
channel-nya dilakukan dengan pedal sebagai sakelar. Pada pedal, diberi indikator
berupa LED untuk menandai apakah sedang posisi on atau off. Antara
PowerSwitch, servo controller, relay, dan pedal GND-nya disambungkan semua.
Webcam dipasang di bagian atas laptop, hal ini agar pengambilan citra
stabil posisinya. Di sisi lain, lengan dental light tersusun atas 4 servo dengan daya
angkat maksimum 3 kg. Servo pada lengan robot dibentuk dengan plastik yang
dibengkokkan sedemikian rupa hingga menyerupai sendi. Perbandingan ukuran
lengan dental light tidak seperti aslinya, hal ini karena keterbatasan daya angkat
servo. Karena semakin panjang ukuran penghubung antar servo, maka torsi motor
yang dibutuhkan semakin besar. Walau tidak sama dengan perbandingan ukuran
asli, namun tidak mengurangi esensi gerakan dari lengan dental light. Untuk
57



merepresentasikan lampu dental light, dipasang juga LED yang menyerupai senter
kecil. Pada Gambar 5.20 diperlihatkan gambar keseluruhan perangkat keras.

Gambar 5.20 Perangkat Keras Keseluruhan yang Telah Dibuat


58

BAB VI
PENGUJIAN DAN PEMBAHASAN

6.1 Langkah-langkah Pengujian
Langkah-langkah yang perlu dilakukan untuk melakukan pengujian
deteksi isyarat jari, guna mengontrol gerakan lengan dental light, adalah sebagai
berikut :
1. Seluruh perangkat keras dipasang dengan catu daya yang dibutuhkan, papan
PowerSwitch dan webcam juga dihubungkan dengan USB laptop.
2. File test.txt diedit seperti di Gambar 6.1 jika ingin melakukan perubahan
terhadap warna sarung tangan yang akan dideteksi. File ini harus ada karena
akan dibaca nilainya oleh program deteksi isyarat sebagai batasan untuk nilai
HSV maksimum dan minimum. Pada penelitian ini, warna sarung tangannya
berwarna kuning, sehingga nilainya H : 20-30 S: 100-255 V: 100-255.


Gambar 6.1 Tampilan File test.txt untuk Penentuan Parameter Warna

59



3. Program deteksi isyarat dijalankan melalui terminal command pada Linux
Ubuntu seperti ditampilkan pada Gambar 6.2 dengan terlebih dahulu mengubah
status user menjadi root dengan cara mengetik perintah sudo su kemudian
password administrator dimasukkan. Program diaktifkan dengan mengetik
./hand_point yang artinya jalankan hand_point di folder yang sedang
aktif lalu tombol Enter pada keyboard ditekan.

Gambar 6.2 Tampilan Terminal Mengubah Status User menjadi Root
4. Akan muncul jendela bernama init seperti di Gambar 6.3 yang
menampilkan citra asli hasil capture dari webcam. Setelah itu, sarung tangan
dikenakan oleh pengguna kemudian tombol Enter ditekan lagi untuk memulai
proses pengolahan citra.

Gambar 6.3 Tampilan Citra Asli Hasil Capture Webcam
60



5. Akan muncul jendela erode yaitu hasil deteksi dan pemilahan objek dengan
warna tertentu, dalam hal ini sarung tangan. Hasilnya tampak pada Gambar
6.4. Ketika ada isyarat jari yang menunjuk ke arah tertentu, maka lengan robot
dental light akan bergerak mengikuti arah tersebut sampai isyarat tidak ada lagi
atau jaraknya terlalu jauh sehingga tidak masuk hitungan. Selain itu, di
terminal command akan muncul teks tentang arah yang terdeteksi.


Gambar 6.4 Tampilan Jendela Hasil Erosi Citra
6. Jika sudah selesai pemakaiannya, program dapat dimatikan dengan tombol
ESC.

6.2 Pengujian Warna Sarung Tangan
Di pasaran, sarung tangan tersedia dalam beberapa warna. Pada intinya
warna apapun tidak bermasalah untuk digunakan dokter gigi, asalkan bukan
berwarna merah karena itu warna darah. Dan dari hasil pencarian di pasaran,
warna sarung tangan yang biasa dipakai oleh dokter yang didapat, antara lain
61



warna krem dan warna cyan. Namun, untuk menambah varian pengujian, didapat
juga warna kuning dan warna oranye meskipun yang didapat dari pasaran bukan
sarung tangan untuk dokter. Pada Gambar 6.5 diperlihatkan warna yang tersedia
di pasaran, namun tidak semuanya diuji.

Gambar 6.5 Warna Sarung Tangan di Pasaran (usamedicalgloves.com 2012)
Berikut pada Tabel 6.1 merupakan data percobaan warna sarung tangan yang
berhasil didapat penulis.
Tabel 6.1 Hasil Pengujian Warna Sarung Tangan
No. Warna
Jumlah
Percobaan
Warna
Keterangan
H S V
1. Kuning 5 20-30 100-255 100-255 Sangat baik
2. Cyan/biru 5 40-90 30-100 120-255 Kurang
3. Krem/clear 5 2-50 2-50 100-255 Kurang
4. Oranye 5 0-10 100-255 100-250 Baik

Warna yang baik untuk digunakan adalah warna yang memiliki saturasi atau
tingkat kemurnian yang tinggi ke warna primernya, dalam hal ini warna kuning
sebagai yang terbaik. Warna cyan hasilnya kurang baik karena warnanya kurang
pekat, sehingga ketika terkena cahaya warnanya bertambah cerah mendekati
putih, sehingga dalam pemilahan warna, objek tangan yang didapat seringkali
62



tidak utuh. Warna krem hasilnya kurang baik karena warnanya mendekati putih,
sedangkan sering kali latar belakang dari citranya kebanyakan berwarna putih,
sehingga menyulitkan pemilahan warna untuk mendeteksi objek tangan.

6.3 Pengujian Pengaruh Intensitas Cahaya Ruangan
Dalam pengolahan citra, intensitas cahaya sangat berpengaruh. Cahaya
mempengaruhi hasil citra yang di-capture oleh kamera. Karena digunakan di
kedokteran gigi, maka pengujian dilakukan di dalam ruangan, dengan asumsi
praktik dokter gigi selalu di dalam ruangan.

Tabel 6.2 Hasil Pengujian Pengaruh Intensitas Cahaya
No. Kondisi
Jumlah
Percobaan
Keterangan
1. Gelap 5 Tidak bekerja
2. Cahaya matahari 5 Bekerja baik
3. Cahaya lampu 5 Bekerja baik

Pengujian dengan cahaya matahari dilakukan pada pukul 08.00 s.d. 12.00 di mana
sinar matahari sudah dirasa cukup terang. Sedangkan pada pengujian di dalam
ruangan dengan cahaya lampu dilakukan dengan lampu putih 15 watt, cukup
untuk menerangi sebuah kamar 3x3 m
2
. Hasil pengujian pada aneka variasi
intensitas cahaya menunjukkan asalkan ada cahaya dengan intensitas yang baik,
dalam arti tidak terlalu gelap dan tidak terlalu terang, maka sistem dapat bekerja.
Pengaruh intensitas cahaya sangat terasa kepada hasil capture kamera, jika
cahaya baik, maka warna dari sarung tangan dapat dideteksi juga dengan baik.
Cahaya yang terlalu terang akan membuat warna sarung tangan yang ditangkap
kamera menjadi lebih putih, sehingga malah dianggap bukan warna sarung
tangan. Sama halnya pada kondisi gelap, warna sarung tangan cenderung lebih
gelap dan banyak bayangan hitam, sehingga juga oleh program tidak dianggap
sebagai warna sarung tangan.


63



6.4 Pengujian Jarak Tangan
Pengujian terhadap jarak tangan terhadap webcam perlu dilakukan karena
perlu diketahui seberapa batas maksimum dan minimum jarak tangan dengan
webcam yang masih bisa dideteksi sebagai isyarat. Jarak diuji dengan mendeteksi
seberapa jauh dan seberapa dekat isyarat jari yang berada di depan webcam untuk
bisa diproses. Hasil selengkapnya disajikan dalam Tabel 6.3.
Tabel 6.3 Hasil Pengujian Jarak
No. Jarak (cm)
Jumlah
Pengujian
Keterangan
1. > 75 5 0 terdeteksi, 5 error
2. 65-75 5 4 terdeteksi, 1 error
3. 55-65 5 5 terdeteksi, 0 error
4. 45-55 5 4 terdeteksi, 1 error
5. 35-45 5 4 terdeteksi, 1 error
6. 25-35 5 4 terdeteksi, 1 error
7. 15-25 5 0 terdeteksi, 5 error

Dari hasil pengujian jarak, terlihat bahwa jarak yang dapat dideteksi oleh program
pengolahan citra adalah antara 25-75 cm. Jarak optimal yang didapat dari
pengujian menunjukkan pada rentang 55-65 cm. Hal tersebut dipengaruhi oleh
pengaturan listing program pengolahan citra. Di dalam kode program, terdapat
batasan nilai panjang antara titik tengah tangan dengan ujung jari, yaitu r.
Maka, semakin jauh jarak tangan dari webcam, maka meskipun terdeteksi
objeknya, jarak r dianggap terlalu kecil sehingga tidak dipedulikan. Sebaliknya,
ketika jarak tangan terlalu dekat, maka kamera tidak dapat menangkap citra
tangan secara utuh, yang tertangkap hanyalah telapak tangan, tapi ujung jari tidak.
Hal itu juga menyebabkan sistem tidak merespon apa-apa. Nilai r ini dapat diatur
dalam program sesuai kebutuhan. Adanya batasan jarak antara ujung jari dengan
titik tengah tangan juga mencegah adanya salah deteksi, sistem hanya mau
memproses warna sesuai yang ditentukan, tapi juga melihat apakah ada ujung jari
yang menunjuk ke suatu arah atau tidak, jadi tidak asal ada suatu warna.
Pengaturan ini sangat baik mengingat variasi warna pakaian dari pasien dokter
gigi sangat banyak.
64



Adanya error dalam pendeteksian selain disebabkan jarak yang terlamapu
dekat atau jauh, disebabkan juga kesalahan pembacaan akibat gerakan mendadak
oleh tangan (yang sebelumnya di luar jangkauan capture kamera) masuk ke
daerah yang terjangkau kamera. Maka, pemrosesan dilakukan terlalu dini, padahal
tangan belum memberikan isyarat.
6.5 Pengujian Waktu Respon Gerakan
Pengujian terhadap waktu respon dimaksudkan untuk menguji seberapa
jeda waktu mulai dari deteksi isyarat sampai lengan dental light bergerak. Pada
Tabel 6.4 ditampilkan hasil dari pengujian respon menggunakan sarung tangan
kuning dan pada jarak 55-65cm.
Tabel 6.4 Hasil Pengujian Waktu Respon
No. Arah
Jumlah
Pengujian
Delay (sekon)
Waktu Rata-
rata
1. 5 kali 0,6 ; 1,0 ; 0,5 ; 0,4 ; 0,6 0,6 sekon
2. 5 kali 0,7 ; 0,5 ; 0,8 ; 0,3 ; 0,8 0,6 sekon
3. 5 kali 0,4 ; 0,3 ; 0,4 ; 0,4 ; 0,5 0,4 sekon
4 5 kali 0,4 ; 0,5 ; 0,6 ; 0,4 ; 0,5 0,5 sekon

Dibutuhkan 2 orang untuk melakukan pengujian ini, karena waktu yang perlu
diukur sangat cepat. Dilakukan pengujian sebanyak 5 kali untuk memperbaik
kevalidan data. Dari hasil uji, didapatkan bahwa jeda waktu respon gerak dari
lengan dental light terhitung singkat, dibawah 1 sekon. Hal ini nampak pada
semua arah tunjuk yang dilakukan tangan. Walaupun program pengolahan citra,
program PowerSwitch, dan program pada servo controller terpisah, memiliki
bahasa pemrograman yang berbeda dan meng-handle bagian masing-masing,
terbukti dari pengujian ini, program-program tersebut dapat berkomunikasi
dengan baik. Adanya jeda waktu ini disebabkan oleh proses pengolahan citra yang
memproses frame tiap waktu dan juga kecepatan fps kamera. Adanya proses
pengolahan dan deteksi memerlukan waktu untuk sampai pada kesimpulan
gerakan. Namun dengan hasil yang baik ini, dapat dikatakan proses pengolahan
65



citra dengan bahasa pemrograman C++ dan pustaka pemrograman citra OpenCV
memiliki proses yang cepat dan hasil memuaskan.
6.6 Pengujian Ketepatan Gerakan
Ketepatan dalam gerakan sangatlah penting, karena memang itulah hasil
yang diharapkan dan paling esensial dalam penelitian ini. Pengujian ini
dilakukan menggunakan sarung tangan kuning dan pada jarak 55-65cm. Pengujian
dimaksudkan untuk mendapatkan data prosentase keberhasilan sistem kendali ini.
Tabel 6.5 Hasil Pengujian Ketepatan Gerakan
No. Arah
Jumlah
Jari
Jumlah
Pengujian
Keterangan
1. 1 5 5x tepat
2. 1 5 5x tepat
3. 1 5 5x tepat
4. 1 5 5x tepat
5. 2 5 tidak stabil
6. 2 5 tidak stabil
7. 2 5 tidak stabil
8. 2 5 tidak stabil
9. 3 5 tidak ada respon
10. 3 5 tidak ada respon
11. 3 5 tidak ada respon
12. 3 5 tidak ada respon
13. 4 5 tidak ada respon
14. 4 5 tidak ada respon
15. 4 5 tidak ada respon
16. 5 5 tidak ada respon

Proses pengujian dilakukan dengan cara :
1. Menggenggamkan tangan yang telah dipasang sarung tangan berwarna di depan
kamera.
2. Membuat isyarat dengan menunjuk ke satu arah.
3. Mengamati arah gerakan yang dilakukan lengan robot.
Pengujian dilakukan selama 1 jam, dengan asumsi praktik dokter gigi rata-
rata dilakukan dengan durasi seperti itu. Dari hasil pengujian ini nampak bahwa
ketepatan dari gerakan lengan robot sudah baik sekali. Pengujian ini memberi
66



indikasi bahwa algoritma yang diterapkan untuk mengenali objek sampai dengan
mendeteksi arah tunjuk dari isyarat jari sudah berjalan dengan baik. Penghitungan
sudut cosinus dan metode lain dalam program membuahkan hasil, semakin
kompleks dan unik suatu cara pendeteksian, maka hasilnya juga akan semakin
tepat, tidak hanya berdasarkan warna dari sarung tangan, tapi juga pengaruh dari
arah tunjuk dan jarak antara tangan dengan kamera.
Selain dengan kondisi normal, dilakukan juga pengujian dengan kondisi
lain, misalkan ujung jari ada lebih dari 1. Hasil dari percobaan tersebut
didapatkan, maksimal ujung jari yang bisa untuk menggerakkan lengan adalah 2
ujung jari terdeteksi, itupun hasilnya kurang stabil. Jika jari yang terdeteksi lebih
dari 2, maka sistem tidak mengenalinya sebagai isyarat menggerakkan lengan
robot, hal ini karena sudut dari vektor-vektor di ujung jari nilainya terlalu besar.

67

BAB VII
PENUTUP

7.1 Kesimpulan
Dari penelitian yang telah dilakukan, dapat diambil kesimpulan sebagai berikut:
1. Dengan purwarupa sistem kendali penelitian ini, dokter gigi tidak perlu
menyentuh langsung dental light dalam mengontrol gerakannya.
2. Metode yang diterapkan untuk mengenali objek dengan memilah warna dengan
latar belakangnya sudah berjalan dengan baik.
3. Semakin kompleks dan unik suatu cara pendeteksian, maka hasilnya juga akan
semakin tepat, tidak hanya berdasarkan warna dari sarung tangan, tapi juga
pengaruh dari arah tunjuk dan jarak antara tangan dengan kamera.
4. Metode erosi dan dilasi dapat digunakan untuk membuang derau berupa titik-
titik (salt and pepper noise).
5. Dari 4 warna sarung tangan yang diuji, warna kuning adalah warna terbaik.
6. Intensitas cahaya mempengaruhi baik buruknya kualitas citra yang dapat
ditangkap kamera. Kualitas citra yang baik didapat dari intensitas cahaya yang
tidak terlalu rendah atau terlalu tinggi.
7. Jarak tangan terhadap webcam yang terbaik adalah 55-65 cm.
8. Waktu respon dari lengan robot untuk bergerak setelah ada isyarat jari
terhitung baik, yaitu rata-rata antara 0,4 - 0,6 sekon.
9. Ketepatan dari gerakan lengan robot sudah baik sekali dan hasilnya maksimal
jika jari yang terdeteksi hanya 1.







68



7.2 Saran
Beberapa saran dari penulis untuk pengembangan kendali lengan dental
light dengan isyarat jari ini antara lain :
1. Gerakan dari lengan robot dibuat agar bisa bergerak lebih dari satu motor
servo pada waktu yang sama. Karena sementara ini hanya bisa satu motor
servo tiap satu waktu.
2. Algoritma pengolahan citra dapat dibuat lebih efisien lagi dan diberi
pengalokasian memori yang dipakai, hal ini agar pengolahan citra dapat
dilakukan dengan cepat namun tidak memakai resource banyak dari
komputer/laptop.
3. Metode pendeteksian isyarat dibuat agar dapat bekerja dengan baik dengan
pengaruh intensitas cahaya beragam dan warna latar belakang yang sama
dengan warna objek yang ingin dikenali.
4. Sistem kendali dibuat dengan RTOS (real time operating system) agar
penggunaan chip-nya seifisien dan sesedikit mungkin.
5. Menggunakan komponen regulator tegangan yang relatif tahan panas agar
perangkat keras dapat bertahan bekerja dalam jangka waktu yang lama.













69



DAFTAR PUSTAKA

A-dec Inc., 2011, InstructIons for use A-dec 371 and 372 Dental Light, http://id.a-
dec.com/en/~/media/Adec/Document%20Library/Product%20Information/
Support%20Information/Instructions%20for%20Use/86022000.pdf,
diakses pada 5 Maret 2012.
Agrawal, K., 2012, Final Project Snap,
http://golancourses.net/2012spring/05/10/kaushal-agrawal-final-project-
snap/, diakses pada 10 Juni 2012
Bradski, G. dan Kaehler, A., 2008, Learning OpenCV, OReilly Media, Inc,
Gravenstein Highway North.
Davies, E.R., 2005, Machine Vision Theory Algorithms Practicalities, Morgan
Kaufmann, London.
Hamed, B., 2011. A Mimicking Human Arm with 5 DOF Controlled by LabVIEW.
IACSIT IJET. 3(1).
Ho, L., 2011, Finger Detection and Gesture Recognition,
http://code.google.com/p/finger-detection-and-gesture-recognition/,
diakses pada 4 Maret 2012.
CVonline, 1999, Lecture 12 Colour Image Processing,
http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/OWENS/L
ECT14/, diakses pada 23 Juli 2012.
Alain, 2011, ASCII TABLE -1,
http://www.cdrummond.qc.ca/cegep/informat/Professeurs/Alain/files/ascii.
htm, diakses pada 6 Maret 2012.
Sequin, C.H., 2011, Color Spaces,
http://www.cs.berkeley.edu/~sequin/CS184/TOPICS/ColorSpaces/Color_0
.html, diakses pada 23 Juli 2012.
Hu, Y. H., 2002a. Lecture 2. Introduction to Digital Image Processing.
Hu, Y. H., 2002b. Image Enhancement in Frequency Domain.
Huaman, A., 2011, Finding contours in your image,
http://opencv.itseez.com/doc/tutorials/imgproc/shapedescriptors/find_cont
ours/find_contours.html#find-contours, diakses pada 6 Maret 2011.
Iswanto, 2011, Belajar Mikrokontroler AT89S51 dengan bahasa C, Penerbit
Andi, Yogyakarta.
Jogjarobotika, 2011, Servo Hitec-311,http://jogjarobotika.com/toko/Produk/16-
hitec-hs-311-standard-servo-motor-nylon-gear.html, diakses pada 6 Maret
2012.
70



Kabdental.com , 2011, Operatory Light, http://kabdental.com/small-dental-
equipment/lighting-reflectors-shields/beaverstate.htm, diakses pada 6
Maret 2012.
Learn2succeed.com Inc, 2008, Streaming Video and Audio for Business: New
Ways to Communicate with Your Customers, Employees and Shareholders
Over the Internet, Productive Publications, Toronto.
MCSelectronics, 2012. Bascom-AVR,
http://www.mcselec.com/index.php?option=com_content&task=view&id=
14&Itemid=41, diakses pada 6 Maret 2012.
Object Development, 2008, PowerSwitch,
www.obdev.at/products/vusb/powerswitch.html, diakses pada 6 Maret
2012.
Oliviera, V. A., 2009, Skin Detection using HSV Color Space.
Tanjung, M. R. dan Sulistijono, I. A., 2010, Kendali Visual Dual Arm Robot
Menggunakan Pendekatan Center Of Gravity. EEPIS Final Project.
usamedicalgloves.com, 2012, Gloves By Color,
http://www.usamedicalgloves.com/colored-medical-gloves, diakses pada
23 Juli 2012.
Willowgarage, 2012, OpenCV, http://opencv.willowgarage.com/wiki/, diakses
pada 6 Maret 2012.









71




LAMPIRAN
Kode Program Pengolahan Citra yang Utuh

1 #include <iostream>
2 #include <cstdlib>
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <math.h>
6 #include <fstream>
7
8 #include "cv.h"
9 #include "cvaux.h"
10 #include "cxcore.h"
11 #include "highgui.h"
12 #include "cxmisc.h"
13 #include "tools.h"
14 //#include "parameter.h"
15
16 using namespace std;
17
18 int num1,num2,num3,num4,num5,num6; // variable for HSV
19 void parameter_warna()
20 {
21 ifstream indata; // indata is like cin
22 indata.open("test.txt"); // opens the file
23 if(!indata)
24 { // file couldn't be opened
25 cerr << "Error: file could not be opened" <<
endl;
26 exit(1);
27 }
28
29 indata >>num1>>num2>>num3>>num4>>num5>>num6;
//masukkan nilai ke variabel
30 indata.close();
31 }
32 int g_nFingers;
33 int g_direct = 0; // =0 ? //so ngon tay trong lan detect truoc
34 int cDirect = 0;
35 int main(int argc, char ** argv)
36
37 {
38 //int num1,num2,num3,num4,num5,num6;
39 int end = 0; int key = 0;
40 int minus2,minus1,present,final = 0;
41 CvCapture* capture = cvCaptureFromCAM(1);
42
43 if ( !capture )
72



44 {
45 fprintf( stderr, "ERROR 1: CAPTURE is NULL \n" );
46 getchar();
47 return -1;
48 }
49
50 while(!end)
51 {
52 cvGrabFrame (capture);
53 IplImage* in0 = cvRetrieveFrame (capture);
54
55 if ( !in0 )
56 {
57 fprintf( stderr, "ERROR 2: FRAME is null...\n" );
//kamera tak dapat meng-capture citra
58 getchar();
59 break;
60 }
61
62 cvNamedWindow("init",CV_WINDOW_AUTOSIZE );
63
64
65 /*==================init phase=====================*/
66 if (key == 0)
67 {
68 IplImage* init = cvCloneImage(in0);
69 //cvNamedWindow("init",CV_WINDOW_AUTOSIZE );
70 cvShowImage("init",init);
71 if ( (cvWaitKey(10) & 255) == 10 ) // press enter to start
72 {
73 key = 1;
74 //cvDestroyWindow( "init" );
75 }
76 }
77 /*==================recognition phase=====================*/
78 if (key == 1)
79 {
80
81 int y_finger = 0;
82 //int cDirect = 0 ;// = 0;
83 CvPoint fVector,hand_center;
84 CvPoint horizontal=cvPoint(0,10);
85
86 int nFingers = 0;
87
88 //====================PROSES=========================================
89 parameter_warna();
90
91 CvScalar hsv_min = cvScalar(num1,num2,num3); //H,S,V
92 CvScalar hsv_max = cvScalar(num4,num5,num6);
93
94 //convert to hsv image
95 IplImage* in = cvCreateImage( cvSize( 640, 480 ), 8, 3 );
96 IplImage* hsv_image=cvCreateImage( cvSize(640,480),8, 3);
73



97
98 IplImage* hsv_black=cvCreateImage(cvSize(640,480),8,1);
99
100
101 //IplImage* equal = doEqualHist(in0);
102
103 cvCvtColor(in0, hsv_image, CV_BGR2HSV);
104 cvInRangeS(hsv_image, hsv_min,hsv_max, hsv_black); //
deteksi warna kuning
105 IplImage* thres2 = doThresBinary(hsv_black,100);
106 IplImage* erode = doErode (thres2, 2 );
107 IplImage* dilate = doDilate (erode, 1 );
108 IplImage* smooth = doSmoothGaussian(dilate, 41,41);
//lebar, tinggi kernel Gaussian (harus angka ganjil)
109 //IplImage* smooth = doSmoothGaussian(invert, 41,41);
110
111 IplImage* contour = cvCloneImage(smooth);
112 CvMemStorage* storage = cvCreateMemStorage(0);
113 CvSeq* hand_contour = 0;
114
115 //fungsi di bawah cuma buat binary
116 cvFindContours
(contour,storage,&hand_contour,sizeof(CvContour),CV_R
ETR_TREE, CV_CHAIN_APPROX_NONE,cvPoint(0,0));
117
118 if (hand_contour)
119 {
120 //nyari titik tengah tangan
121 CvRect hand_box= cvBoundingRect
(hand_contour,0);
122 hand_center.x = cvRound(hand_box.x +
hand_box.width*0.5);
123 hand_center.y = cvRound(hand_box.y +
hand_box.height*0.5);
124
125 int i=0;
126 int r = 75; //jarak antara tengah tangan dan ujung jari
127 int step = 10; //n step kontur
128 for( i = 0; i < (hand_contour ? hand_contour-
>total : 0); i+= step )
129 {
130 CvPoint* r0 = (CvPoint*)cvGetSeqElem(
hand_contour, i );
131 CvPoint n0 = cvPoint (r0->x,r0->y);
132 double cos0 = curve (hand_contour, i, r);
//calculate the COS at point P
133 if (cos0 > 4)
134 {
135 final = g_nFingers;
136 break;
137 }
138 if (cos0 > 0.5)
139 {
140 double cos1 = curve (hand_contour, i -
74



step, r); // calculate COS at point P1
141 double cos2 = curve (hand_contour, i +
step, r); // calculate COS at point P2
142 double max1 = max_3 (cos0, cos1, cos2);
// Find the Max of 3 Cos value
143 bool equal = IsEqual (max1 , cos0);
144 signed int z = zCrossProduct (hand_contour,
i, r); // Calculate cross product of 2 vector PP1 and PP2
145
146 if (equal == 1 && z<0)
147 {
148 nFingers += 1;
149 CvPoint* r0 =
(CvPoint*)cvGetSeqElem(
hand_contour, i );
150 CvPoint n0 = cvPoint (r0->x,r0->y);
151 y_finger = r0->x;
152 fVector = cvPoint(n0.x -
hand_center.x, n0.y -
hand_center.y);
153 cvCircle( in0,n0 , 8,
CV_RGB(255,0,0), 3, 8, 0 ); /ujung jari,
warna merah
154 cvCircle( in0,hand_center , 8,
CV_RGB(0,255,0), 3, 8, 0 ); //tengah
jari, warna kuning
155 cvLine (in0, n0,
hand_center,cvScalarAll(255), 1,8 );
156 cvDrawContours( in0, hand_contour,
CV_RGB(255,0,0), CV_RGB(0,255,0), 1,
2, 8, cvPoint(0,0));
157 }
158 }
159
160 minus2=minus1;
161 minus1=present;
162 present=nFingers;
163
164 if (minus2 == nFingers)
165 final = nFingers;
166 else
167 final = minus2;
168
169
170 }
171
172
173
174 }
175
176
177
178 if (final == 1)
179 {
75



180 //if (final == 0)
181 //cout << "stop" << endl;
182
183 double cos_angle = cos_vector(fVector,
horizontal);
184 if (cos_angle < -0.7)
185 {
186 cDirect = 1; //up
187 }
188 else if (cos_angle > 0.7)
189 {
190 cDirect = 2; //down
191 }
192 else
193 {
194 if (y_finger > hand_center.x)
195 {
196 cDirect = 3; //right
197 }
198 else
199 {
200 cDirect = 4; //left
201 }
202 }
203 }
204 if (final != 1) // tidak ada arah yg terdeteksi, stop
205 cDirect = 0;
206
207 if (g_direct != cDirect )
208 {
209 g_direct = cDirect;
210 //cek g_nFingers
211 //cout << "g_nFingers : " << g_nFingers << "\n";
212 cout << "kondisi : " << g_direct << endl;
213
214 switch (g_direct)
215 {
216 case 0: cout << "stop" << endl;
217 system("for i in 0 1 2 3 4 5 6 7; do
powerSwitch off $i; done"); break;
218 case 1: cout << "up" << endl;
219 system("powerSwitch on 5"); break;
220 case 2: cout << "down" << endl;
221 system("powerSwitch on 4"); break;
222 case 3: cout << "left" << endl;
223 system("powerSwitch on 6"); break;
224 case 4: cout << "right" << endl;
225 system("powerSwitch on 7"); break;
226
227 }
228 }
229
230
231
76



232 cvShowImage("init",in0);
233 //cvShowImage("contour",contour);
234 cvShowImage("dilate",dilate);
235 //cvShowImage( "hsv-black", hsv_black);
236
237 //fingers quantity stabilizer
238
239 if ( (cvWaitKey(10) & 255) == 27 ) //wait for esc key to stop
240 end = 1;
241
242 cvReleaseMemStorage( &storage );
243 cvReleaseImage(&in);
244 //cvClearSeq(CvSeq* hand_contour);
245 //cvReleaseMemStorage( &in );
246 cvReleaseImage(&smooth);
247 cvReleaseImage(&contour);
248 cvReleaseImage(&hsv_image);
249 cvReleaseImage(&hsv_black);
250 cvReleaseImage(&erode);
251 cvReleaseImage(&dilate);
252 cvReleaseImage(&thres2);
253
254 }
255
256
257 //cvDestroyWindow( "thres2" );
258
259 }
260
261 cvDestroyWindow( "in" );
262
263 cvReleaseCapture(&capture);
264 return 0;
265 }
266
267 //Alhamdulillah

Anda mungkin juga menyukai