implementasi perhitungan sudut rangka manusia...
TRANSCRIPT
Implementasi Perhitungan Sudut Rangka Manusia
Menggunakan Matlab 7
Nugroho Dian Purnama
Fakultas Teknologi Industri
Universitas Gunadarma
Jl. Margonda Raya, 100, Pondok Cina, Depok
Telp: (021) 78881112
Email: [email protected]
ABSTRAK
Bentuk tubuh manusia adalah sesuatu yang unik dimana setiap orang tidak
akan ada yang sama satu sama lain. Perbedaan inilah yang menarik minat banyak
peneliti untuk melakukan studi mengenai bentuk tubuh manusia. Perbedaan
bentuk tubuh manusia didasari oleh rangka manusia yang berbeda-beda.
Berdasarkan latar belakang tersebut, maka penulisan ini memfokuskan
kepada penggunaan metode Chain Code untuk mendeteksi tepi pada citra rangka
atau skeleton. Citra adalah gambar dua dimensi yang dihasilkan dari gambar
analog dua dimensi yang kontinu menjadi gambar diskrit melalui proses sampling.
Implementasi dari metode Chain Code menghasilkan perhitungan sudut
dari suatu citra skeleton. Dengan Matlab digunakan sebagai perangkat lunak
dalam proses uji coba algoritma tersebut sehingga menghasilkan besaran sudut
dalam derajat yang dapat digunakan dalam penelitian lebih lanjut.
Kata Kunci: Cropping, Chain Code, Matlab, Angel
1. Pendahuluan
Bentuk tubuh manusia adalah sesuatu yang unik dimana setiap orang tidak
akan ada yang sama satu sama lain meskipun dia kembar. Perbedaan inilah yang
menarik minat banyak peneliti untuk melakukan studi mengenai bentuk tubuh
manusia. Perbedaan bentuk tubuh manusia didasari oleh rangka manusia yang
berbeda-beda, Rangka merupakan sistem penyokong organisme. Sistem
penyokong ini bertindak sebagai bingkai tubuh yang tegar. Biasanya rangka ini
tersusun dari kalsium. Fungsi rangka ialah: menegakkan atau menopang
berdirinya tubuh, memberi bentuk tubuh, tanpa rangka tubuh manusia tidak
memiliki bentuk, melindungi organ-organ tubuh yang penting dan lunak seperti
otak, jantung, paru-paru dan mata, tempat melekatnya otot-otot rangka dan tempat
pembentukan sel-sel darah merah.
Pembahasan pada penulisan ini akan lebih memfokuskan pada perhitungan
sudut rangka tubuh manusia dimana dari gambaran rangka tubuh manusia tersebut
akan didapat besaran sudut-sudut yang dapat memberikan informasi jika sudah
dipadukan dengan beberapa bidang studi seperti kedokteran, matematika dan
komputer.
Riset yang dihasilkan dari penelitian sudut-sudut rangka manusia akan
berkontribusi kepada banyak bidang, salah satunya adalah kedokteran. Selain
kedokteran, pencitraan atau pengolahan citra adalah salah satu bidang yang akan
mendapatkan kontribusi dari riset mengenai bentuk tubuh, seperti mendapatkan
teknik baru untuk memotong, dan mendeteksi piksel. Definisi citra menurut
kamus Webster adalah suatu representasi, kemiripan, atau imitasi dari suatu objek
atau benda. Sebuah citra mengandung informasi tentang obyek yang
direpresentasikan.
Penelitian sebelumnya yang memanfaatkan pengolahan citra dalam
pendeteksian piksel adalah mendeteksi fitur rangka tubuh manusia. Menggunakan
metode hough transform untuk menghitung sudut pergelangan kaki, sudut lutut,
sudut lengan, dan jarak antara kedua lengan (Intan Nur Lestari, 2010).
Dalam Penelitian ini Penulis menggunakan metode chain code. Metode
tersebut mendeteksi tepi yang menghubungkan tiap piksel kedelapan atau empat
arah.
Bermula dari latar belakang ini, Penulis terinspirasi untuk membuat
sebuah aplikasi pengolahan citra yang dapat menghitung sudut-sudut yang ada
pada tubuh manusia.
2. Tinjauan Pustaka
1. Citra
Citra adalah gambar dua dimensi yang dihasilkan dari gambar
analog dua dimensi yang kontinu menjadi gambar diskrit melalui
proses sampling. Gambar analog dibagi menjadi N baris dan M kolom
sehingga menjadi gambar diskrit. Persilangan antara baris dan kolom
tertentu disebut dengan piksel. Contohnya adalah gambar/ titik diskrit pada
baris n dan kolom m disebut dengan piksel.
2. Digitalisasi Citra
Digitalisasi citra adalah representasi citra dari fungsi kontinu
menjadi nilai-nilai diskrit, sehingga disebut Citra Digital.
Citra digital berbentuk empat persegi panjang dan dimensi
ukurannya dinyatakan sebagai tinggi x lebar (lebar x panjang).
Citra digital yang tingginya N, lebarnya M dan memiliki L derajat
keabuan dapat dianggap sebagai fungsi :
0O xO M
f(x,y)= 0O y O N (1)
0O f O L
Citra digital yang berukuran N x M lazimnya dinyatakan dengan
matriks berukuran N baris dan M kolom, dan masing-masing elemen pada
citra digital disebut piksel (picture element)
F (x,y)= f (0,0) f (0,1) ... f (0, M )
f (1,0) f (1,1) ... f (1, M ) (2)
f ( N − 1,0) f ( N − 1,1) ... f ( N − 1, M − 1)
Suatu citra berukuran 256 x 256 piksel dengan intensitas beragam
pada tiap pixelnya, direpresentasikan secara numerik dengan matriks
terdiri dari 256 baris dan 256 kolom.
0 134 145 ... ... 231
0 167 201 ... ... 197
220 187 189 ... ... 120 (3)
: : : : : :
221 219 210 ... ... 156
3. Chain Code
Kode rantai digunakan untuk merepresentasikan batas/ tepi dengan
menyambungkan urutan dari garis lurus yang ditentukan oleh panjang dan
arah. Biasanya, tampilan ini terdiri dari 4 atau 8 sambungan dari segmen.
Arah tiap segmen dikodekan dengan menggunakan skema penomoran
seperti di gambar 2.1. Sebuah kode tepi dibentuk sebagai urutan dari
nomor terarah yang disebut sebagai kode rantai freeman.
Citra digital biasanya dibutuhkan dan diproses dalam format grid
dengan jarak yang sama dalam arah X dan Y, jadi kode rantai dapat
dihasilkan dengan mengikuti tepi sesuai dengan arah jarum jam dan
menugaskan arah segmen untuk menyambungkan setiap pasang pixel.
Metode ini biasanya tidak diterima untuk dua alasan yaitu hasil dari rantai
cukup lama dan Setiap gangguan kecil sepanjang tepi menghasilkan noise
atau segmentasi yang tidak sempurna menyebabkan perubahan pada code
yang mungkin tidak berhubungan dengan prinsip bentuk fitur dari batasan.
Gambar 2.1. Chain Code
Sebuah pendekatan yang sering digunakan untuk menyelesaikan masalah
ini adalah me-resample tepi dengan memilih jarak grid yang lebih lebar.
Batas tepi ditandai untuk setiap node dari grid yang besar, tergantung oleh
kedekatan dari tepi original node tersebut. Resample tepi menghasilkan
cara bahwa tepi dapat direpresentasikan dengan 4 atau 8 code. Gambar 2.1
menunjukan titik tepi yang kasar direpresentasikan oleh 8 arah kode
rantai. Ini adalah masalah sederhana untuk mengonversi dari kode 8
menjadi kode 4 dan sebaliknya. Titik awal pada gambar 2.4 adalah
(dengan berubah-ubah) dari titik paling atas, titik paling kiri dari tepi yang
memberikan kode rantai 0766…12. Seperti yang diperkirakan akurasi dari
hasil merepresentasikan code tergantung dari jarak sampling grid
Kode rantai dari tepi tergantung dari titik mula. Bagaimanapun
kode dapat di normalkan dengan mematuhi titik awal dengan prosedur
yang luruskode rantai dapat dengan mudah diatur sebagai urutan lingkaran
dari nomor berarah dan mendefinisikan titik asal. Hasil urutan nomor
membentuk suatu integer jarak minimum. Kita dapat menormalisasi juga
dengan rotasi (di sudut yang memiliki banyak arah dari banyak integer
seperti gambar 2.1.)
dengan menggunakan first different. Perbedaan ini diperoleh dari
hasil menghitung perubahan urutan arah (dengan berlawanan arah jarum
jam seperti gambar 2.1.) yang memisahkan dua elemen yang berdekatan.
Misalnya, perbedaan pertama dari 4 arah chain code 10103322 adalah
3133030. Jika kita menganggap kode sebagai urutan lingkaran untuk
menormalkan dengan memulai dari titik awal, elemen pertama dari
perbedaan dihitung dengan menggunakan transisi antara yang terakhir dan
yang pertama dari rantai. Di sini hasilnya adalah 33133030. Ukuran
normalisasi dapat didapatkan melalui mengubah ukuran resampling grid.
Normalisasi ini hanya pasti jika tepi itu sendiri bervariasi dengan
rotasi (di sudut yang memiliki banyak arah dari banyak integer) dan skala
berubah yang jarang kasus ini dipelajari. Biasanya, objek yang sama
didigitalisasi ke dalam dua orientasi yang berbeda akan mempunyai dua
bentuk tepi yang berbeda secara umum, dengan derajat ketidaksamaan
menjadi proporsional ke resolusi image. Efek ini dapat dikurangi dengan
memilih elemen rantai yang panjang dalam perbandingan dengan jarak
antara piksel dalam digitalisasi citra dan atau dengan mengorientasikan
resampling grid sepanjang aturan sudut dari objek untuk dikodekan.
Gambar 2.2. Kerja Chain Code
Gambar 2.2(a) menunjukan 570 x 570 gambar grayscale 8 bit dari
stroke yang melingkar yang tertanam didalam fragmen spekular. Tujuan
dari contoh ini adalah untuk mendapatkan kode rantai freeman, integer
dari magnitude minimum dan perbedaan pertama dari tepi luar objek
terbesar di gambar 2.2(a). Karena objek yang menarik tertanam dalam
fragment yang kecil, ekstraksi tepi akan menghasilkan kurva yang
memiliki noise yang tidak akan mendeskripsikan bentuk umum dari objek.
Menghaluskan adalah proses selanjutnya ketika berhadapan dengan tepi
yang memiliki noise. Gambar 2.2(b) menunjukan gambar asli yang
dihaluskan dengan averaging mask dengan ukuran 9 x 9, dan gambar
2.2(c) adalah hasil dari thresholding gambar ini dengan global threshold
didapatkan dengan menggunakan metode Otsu. Perlu diingat bahwa
jumlah dari region telah dikecilkan menjadi dua (satu di antaranya adalah
dot), secara signifikan menyederhanakan masalah.
Gambar 2.2(d) adalah tepi terluar dari region terbesar dari gambar
2.2(c). Mendapatkan kode rantai langsung dari tepi akan menghasilkan
urutan panjang dengan sedikit variasi yang tidak merepresentasikan bentuk
dari tepi. Seperti yang disebutkan sebelumnya pada bagian ini, kita biasa
me-resample tepi sebelum mendapatkan kode rantai untuk mengurangi
banyaknya variabel. Gambar 2.2(e) adalah hasil resampling tepi didalam
grid dengan node 50 pixel tersendiri (sekitar 10% dari lebar image) dan
gambar 2.2(f) adalah hasil menggabungkan hasil simpul dengan garis
lurus. Ini lebih mudah memperkirakan pendekatan dari prinsip sifat
keaslian tepi.
8 arah kode rantai Freeman tepi yang disederhanakan adalah
0006066666666444444242222202202
Titik awal dari tepi adalah koordinat (2.2) pada subsample
grid. Ini adalah yang paling atas dan paling kiri pada gambar 2.2(f).
Integer dari magnitude minimum dari kode terjadi pada kasus ini sama
dengan chain code:
0006066666666444444242222202202
Perbedaan pertama pada kode lainnya adalah
00060600000006000006260000620626
3. Proses Perhitungan Fitur
Dalam penelitian ini terdapat beberapa tahapan yang digunakan untuk
mendapatkan nilai dari fitur yang dicari yaitu:
a. Input Citra Skeletonisasi
Citra skeletonisasi digunakan sebagai citra masukan. Proses skeletonisasi
itu sendiri berawal dari citra RGB yang melewati beberapa tahapan proses
segmentasi seperti filterisasi citra, segmentasi warna, erosi dan dilatasi,
restorasi, dan skeletonisasi citra.
b. Pemotongan/ Cropping
Proses penentuan lokasi fitur dari citra skeletonisasi berasal dari penelitian
tentang citra skeletonisasi (Lee dkk, 2008). Pada penelitian Lee didapatkan
sepuluh fitur yang akan diproses. Dari sepuluh fitur tersebut empat di
antaranya adalah jarak, dan enam adalah sudut. Pada pembuatan program kali
ini hanya memfokuskan pada enam sudut. Untuk melihat lokasi atau letak dari
fitur yang akan diproses dapat dilihat pada gambar 3.1.
Gambar 3.1. Sudut-sudut yang digunakan (Lee dkk, 2008)
Tabel 3.1 Standar Nilai Interval Sudut (Lee dkk, 2008)
No Nama Fitur Nilai Standar
Interval ( 0 )
1 Sudut lutut kaki depan (F1) 1000
– 1350
2 Sudut pergelangan kaki depan (F2) 500
– 1200
3 Sudut pergelangan kaki belakang (F3) 800
– 1000
4 Sudut lutut kaki belakang (F4) 1000
– 1800
5 Sudut sikut lengan depan (F5) 600
– 1800
6 Sudut sikut lengan belakang (F6) 700
– 1600
c. Proses Perhitungan Sudut
image yang sudah dicrop tersebut akan diproses dengan mengekstraksi
derajat keabuan dari gambar citra berwarna digunakan fungsi rgb2gray.
Selanjutnya adalah melakukan threshold dalam gambar untuk memperjelas
gambar yang berwarna hitam dan putih. Langkah berikutnya adalah
mengekspansi piksel yang sudah ditemukan ke empat arah. Untuk menentukan
kode chain digunakan beberapan persyaratan. Untuk kode chain 0 maka
code(1), code(2), code(3), code(4) harus bernilai 1 dan seterusnya. Untuk kode
rantai 1 maka code(2), code(3), dan code(4) harus bernilai 1 dan seterusnya.
Untuk kode rantai 2 maka code(3) dan code(4) harus bernilai 1. Yang terakhir
untuk kode rantai 4 maka hanya code(4) saja yang bernilai 1.
Untuk melakukan perhitungan sudutnya digunakan pertambahan 90 untuk
setiap rantai bernilai 1, dikurangi 90 untuk setiap chain bernilai 2 atau 3
sedangkan untuk chain bernilai 0 maka tidak ada perhitungan. 90 digunakan
karena chain code yang digunakan adalah 4 arah kode rantai sehingga
membentuk sudut 90°. Sedangkan untuk 8 arah kode rantai, perhitungan
sudutnya adalah pertambahan nilai 45 untuk setiap chain bernilai 1 dan 2,
kemudian pengurangan nilai 45 untuk setiap chain bernilai 3, 4, 5, 6, dan 7. 45
digunakan karena 8 arah kode rantai membentuk sudut 45 derajat untuk setiap
sudutnya.
4. Hasil Uji Coba
Pada proses pengujian, terdapat 10 set data yang dijadikan sebagai
masukan dari program ini. Kemudian dari 10 data tersebut akan dilihat tingkat
keberhasilan program tersebut dalam mendapatkan nilai sudut dari ke enam
fitur tersebut. Kemudian dilakukan analisa terhadap hasil-hasil uji coba
tersebut untuk melihat sejumlah faktor yang menyebabkan terjadinya
kegagalan, apabila terjadi kegagalan dalam melakukan perhitungan terhadap
fitur tersebut.
Hasil uji coba program fitur sudut dapat dilihat pada tabel 4.1. symbol √
menandakan bahwa nilai tersebut termasuk kedalam nilai standar interval
sudut, dan symbol x menandakan sebaliknya.
Tabel 4.1. Hasil Uji Coba Program Fitur Sudut
Objek Fitur Sudut Termasuk ke dalam Nilai Standar
Nama Fitur ( 0 )
1
F1 (Sudut lutut kaki depan) F2 (Sudut pergelangan kaki depan) F3 (Sudut pergelangan kaki belakang) F4 (Sudut lutut kaki belakang) F5 (Sudut sikut lengan depan) F6 (Sudut sikut lengan belakang)
13 5
49 101 115 135
x x x √ √ √
2
F1 (Sudut lutut kaki depan) F2 (Sudut pergelangan kaki depan) F3 (Sudut pergelangan kaki belakang) F4 (Sudut lutut kaki belakang) F5 (Sudut sikut lengan depan) F6 (Sudut sikut lengan belakang)
135 9 9
90 145 164
√ x x x √ X
3
F1 (Sudut lutut kaki depan) F2 (Sudut pergelangan kaki depan) F3 (Sudut pergelangan kaki belakang) F4 (Sudut lutut kaki belakang) F5 (Sudut sikut lengan depan) F6 (Sudut sikut lengan belakang)
135 135
59 135 115 143
√ x x √ √ √
4
F1 (Sudut lutut kaki depan) F2 (Sudut pergelangan kaki depan) F3 (Sudut pergelangan kaki belakang) F4 (Sudut lutut kaki belakang) F5 (Sudut sikut lengan depan) F6 (Sudut sikut lengan belakang)
82 16 15 41 70
-
x x x x √ X
5
F1 (Sudut lutut kaki depan) F2 (Sudut pergelangan kaki depan) F3 (Sudut pergelangan kaki belakang) F4 (Sudut lutut kaki belakang) F5 (Sudut sikut lengan depan) F6 (Sudut sikut lengan belakang)
135 135
77 138 113
49
√ x x √ √ x
6
F1 (Sudut lutut kaki depan) F2 (Sudut pergelangan kaki depan) F3 (Sudut pergelangan kaki belakang) F4 (Sudut lutut kaki belakang) F5 (Sudut sikut lengan depan) F6 (Sudut sikut lengan belakang)
135 135
56 141 113
49
√ x x √ √ x
7
F1 (Sudut lutut kaki depan) F2 (Sudut pergelangan kaki depan) F3 (Sudut pergelangan kaki belakang) F4 (Sudut lutut kaki belakang) F5 (Sudut sikut lengan depan) F6 (Sudut sikut lengan belakang)
135 112
- 135
90 8
√ √ x √ x x
8
F1 (Sudut lutut kaki depan) F2 (Sudut pergelangan kaki depan) F3 (Sudut pergelangan kaki belakang) F4 (Sudut lutut kaki belakang) F5 (Sudut sikut lengan depan) F6 (Sudut sikut lengan belakang)
135 135
9 90
141 109
√ x x x √ √
9
F1 (Sudut lutut kaki depan) F2 (Sudut pergelangan kaki depan) F3 (Sudut pergelangan kaki belakang) F4 (Sudut lutut kaki belakang) F5 (Sudut sikut lengan depan) F6 (Sudut sikut lengan belakang)
24 112
28 78 29 21
x √ x x x x
10
F1 (Sudut lutut kaki depan) F2 (Sudut pergelangan kaki depan) F3 (Sudut pergelangan kaki belakang) F4 (Sudut lutut kaki belakang) F5 (Sudut sikut lengan depan) F6 (Sudut sikut lengan belakang)
180 43
135 90
135 -
x x x x x x
Dari hasil tabel 4.1. tersebut dapat dilihat bahwa simbol √ menandakan
bahwa nilai fitur yang didapatkan dari hasil uji coba program termasuk ke
dalam standar nilai interval yang berarti bahwa fitur tersebut termasuk ke
dalam kategori seseorang normal. Seseorang dapat dikategorikan normal jika
fitur tersebut berada pada nilai interval dalam tabel 3.1. Namun sebaliknya
jika nilai fitur tidak berada pada nilai interval maka dikategorikan tidak
normal. Sedangkan untuk simbol x menandakan sebaliknya yaitu nilai uji coba
program yang didapatkan tidak termasuk ke dalam standar interval dengan
kata lain fitur tersebut termasuk ke dalam kategori seseorang tidak normal.
Dari hasil pengujian ini nilai kategori yang dihasilkan normal untuk fitur sudut
pada fitur F1 yaitu citra skeletonisasi 2, 3, 5, 7, 8. Lalu untuk fitur F2 yaitu
citra skeletonisasi 7,9. Untuk fitur F3 tidak saja yang terdeteksi normal .
Untuk fitur F4 yaitu 1 ,3, 5, 6, 7. Untuk fitur F5 yaitu citra skeletonisasi 1, 2,
3, 4, 5, 6, 8. Dan yang terakhir untuk fitur F6 yaitu citra skeletonisasi 1, 3, 6.
Dari hasil ini maka dapat disimpulkan yaitu dari ke sepuluh citra skeletonisasi
yang diproses hanya citra skeletonisasi 2, 4, 9, dan 10 yang dapat dikatakan
citra tersebut termasuk ke dalam kategori tidak normal, karena banyak fitur
sudut yang tidak memenuhi nilai standar interval pada tabel 3.1 dari keempat
citra skeletonisasi tersebut.
5. Penutup
1. Kesimpulan
Chain Code bisa dikatakan sebagai suatu metode pendeteksian tepi
yang menghubungan tiap piksel ke delapan atau empat arah dan
merepresentasikannya dengan angka.
Dari pengujian perhitungan sudut menggunakan metode chain code
sangat tergantung pada kualitas dari gambar skeleton yang ada. Gambar
skeleton yang tidak terputus dan lurus dapat meminimalisir kesalahan pada
perhitungan.
Proses pemotongan gambar atau cropping juga besar pengaruhnya
terhadap hasil dari perhitungan sudut. Pemotongan gambar harus tepat
pada titik koordinat sudut yang akan dihitung.
Hasil yang didapat dari penelitian menggunakan 10 citra adalah sudut
yang terbaca normal berjumlah 33, sedangkan yang terbaca tidak normal
berjumlah 37, sehingga akurasi program dalam menghitung sudut sebesar
39%.
2. Saran
Penulis menyadari keterbatasan pengetahuan yang dimiliki dalam
pembuatan program, seperti masih sederhananya interface dan cara kerja
program yang dijalankan masih terlalu rumit. Pengujian akan lebih optimal
bila menggunakan citra yang lebih baik, sehingga keterhubungan antar
piksel menjadi lebih jelas. Oleh karena itu, penulis mengharapkan saran
dan ide-ide yang dapat diberikan guna menyempurnakan implementasi dan
pengembangan dari algoritma ini secara keseluruhan agar menjadi lebih
baik dan bermanfaat.
6. Daftar Pustaka
[1]. Intan Nur Lestari. 2010. “Implementasi Metode Hough Transform
Pada Citra Skeletonisasi Menggunakan Matlab 7.6”. Skripsi. Universitas
Gunadarma. Depok
[2]. Kale, A., Cuntoor, N., Yegnanarayima, B., Rajagopalan, N. A.,
Chellappa, R. 2003. “Gait Analysis For Human Identification”. Proc.
AVBPA, pages 70-74
[3]. Knight, Andrew. 2000. Basics of MATLAB and Beyond. Chapman &
Hall CRC. New York
[4]. Lee Howard, Guan Ling, Lee, Ivan. 2008. “Video Analysis Of Human
Gait And Posture To Determine Neurological Disorders”. EURASIP Journal
On Image And Video Processing . Volume 2008. Article ID 380867
[5]. Otto, S.R & Denier, J.P. 2005. An Introduction to Programming and
Numerical Methods in MATLAB. Springer-Verlag. London
[6]. Paulus, E., Nataliani, Y. 2007. GUI Matlab. Penerbit ANDI. Yogyakarta
[7]. Register, Andy H. 2007. A Guide to MATLAB Object Oriented
Programming. Schitech Publishing, Inc. Georgia
[8]. Wilson, Howard B. 2003. Advanced Mathematics and Mechanic Using
MATLAB. Chapman & Hall CRC. New York