• Tidak ada hasil yang ditemukan

Bab III Perancangan Dan Realisasi Perangkat Lunak

N/A
N/A
Protected

Academic year: 2021

Membagikan "Bab III Perancangan Dan Realisasi Perangkat Lunak"

Copied!
12
0
0

Teks penuh

(1)

Bab III

Perancangan Dan Realisasi Perangkat Lunak

Perangkat lunak yang digunakan dalam metode penentuan marker dari

pengambilan gambar tanpa marker dengan menggunakan kurva linier Bezier

adalah Visual Basic.NET Pembahasan dalam bab ini terutama di tekankan pada

algoritma pemrograman.

3.1 Diagram blok dan cara kerja sistem

Masukan dari sistem ini adalah gambar video yang diambil melalui

kamera video dari satu arah. Pengambilan gambar pasien dapat di mana saja dan

dengan mengenakan pakaian bebas, tidak ada ketentuan. Hasil dari rekaman video

ini lah yang kemudian diproses dengan menggunakan software yang telah dibuat

pada komputer. Komputer yang digunakan memiliki spesifikasi sebagai berikut:

prosesor Intel Core 2 Duo E4500 2.20GHz, RAM 1 GB, kartu grafis ATI Mobility

Radeon X1600, dan hard disk 160GB. Perangkat lunak yang digunakan untuk

mendukung perancangan sistem ini adalah sistem operasi Windows XP Home

Edition dan Visual Basic.NET

.

Cara kerja dari sistem ini adalah , gambar video pasien yang telah diambil

tanpa marker kemudian ditampilkan pada display program yang telah disediakan.

Selanjutnya gambar tersebut disimpan dalam bentuk frame dengan menggunakan

metode video frame reader yang fungsinya adalah mengekstrasi video menjadi

frame dan kemudian frame-frame tersebut disimpan dalam array yang disiapkan.

Selanjutnnya, gambar dari pasien yang akan dianalisa ini diberi marker

secara manual pada titik-titik yang ingin dianalisa. Dalam perangkat lunak ini

disediakan 8 marker yang dapat diletakkan ditempat yang dikehendaki untuk

dianalisa, misalnya diletakkan pada mata kaki atau pada persendian di bagian

lutut. Pemberian marker ini cukup pada beberapa frame saja, untuk selanjutnya

(2)

Hasil prediksi letak marker dengan menggunakan metode kurva Bezier ini

lah yang nantinya berupa lintasan marker untuk selanjutnya dianalisa apakah

pasien tersebut menderita gangguan pada cara berjalannya atau dalam kondisi

normal. Dalam program yang dibuat, juga dapat dilakukan koreksi secara manual,

sehingga bila ada penyimpangan yang cukup jauh pada perhitungan marker

dengan kurva Bezier, pengguna dapat menyisipkan marker secara manual pada

frame yang terjadi penyimpangan. Dengan demikian diharapkan lintasan dari

marker yang dihasilkan mendekati lintasan yang seharusnya.

Selain itu, program yang dibuat juga menyediakan analisa marker yang

befungsi untuk menghubungkan marker yang dikehendaki pada setiap framenya.

Dari sini dapat dianalisa sudut dari pasien untuk selanjutnya dikategorikan sesuai

parameter gait.

Diagram blok dan diagram alir dari perangkat lunak yang dibuat dapat

dilihat pada gambar 3.1 dan 3.2. Algoritma pemrograman dijelaskan dalam

tulisan selanjutnya.

Gambar 3.1 Diagram blok gait analisis tanpa marker (a) gambar pasien yang

direkam dengan kamera video, (b) video pasien sebagi masukan dari sistem, (c)

video pasien di ekstrak menjadi frame dan diletakkan pada array, (d) peletakan

manual marker pada beberapa frame sebagai referensi, (e) penentuan marker yang

belum diketahui dengan algoritma kurva bezier, (f) didapatkan marker setiap

Video data Ekstraksi menjadi frame Manual marker Algoritma bezier Lintasan marker Analisa gait Parameter kuantitatif dari gait

(a)

(b)

(c)

(d) (e) (f)

(g)

(3)

framenya sehingga dapat dibuat suatu lintasan marker, (g) lintasan marker

digunakan untuk pengukuran gait secara kuantitatif.

Tampikkan status start Load ? Tampilkan video yang akan dianalisa Def

ground ? Tentukan letak ground

Marker? Tentukan marker pada gambar Tentukan jarak marker dari ground Maju mundur ? Gerakkan frame sesuai perintah maju atau mundur Play ? Play video Play marker yang sudah ditentukan bila ada Analisa marker ? Tampilkan garis antar marker yang ingin dianalisa

Stop ? Berhenti pada frame yang diinginkan

(4)

Gambar 3.2 Diagram alir gait analisis tanpa marker

3.2 Deklarasi variabel member

Program penentuan marker pada pengambilan gerakan manusia tanpa

marker dengan metode kurva Bezier berbasis VB.NET untuk analisa gait adalah

sebagai berikut, pertama yaitu pendeklarasian variabel member, yaitu variabel

yang akan digunakan atau diakses di seluruh prosedur. Contoh Soure code

deklarasi variabel dapat dilihat pada gambar 3.3

Gambar 3.3 Source code deklarasi variabel

3.3 Ektraksi video menjadi frame

Untuk mengekstraksi video menjadi frame diperlukan metode Video Frame

Reader. Metode ini dapat digunakan untuk GetFrameFromVideo, GetVideoSize

dan SaveFrameFromVideo pada aplikasi VB. Dengan menambahkan reference

JockerSoft.Media.dll dan. Interop.DexterLib.dll pada proyek VB.NET yang

dibuat. Metode ini dapat bekerja pada jenis file .avi dan .wmv juga file .mpg.

Tetapi metode ini tidak dapat bekerja pada file .dvr-ms, cara ini tidak dapat

mengektraksi langsung dari rekaman televisi. Kode yang digunakan untuk

mengekstraksi video menjadi frame dapat dilihat pada gambar 3.4.

Public Class Form1

Dim frameku As Bitmap, framepos As Double, frameincrement As Double

Dim MoviePath As String = ""

Dim lblJarak(7) As Label, warna(7) As Color, skala As Single = 0.52

Dim drawAnalysis As Boolean = False

Dim MarkerID As Integer = 0, MarkerDraw As Integer

Dim MarkerBrush(7) As System.Drawing.Brush, MarkerPen(7) As System.Drawing.Pen

Dim i As Single = 0

Dim KFBoundStart As Int32 = -1 Dim KFBoundStop As Int32

Dim flag(-1, 0) As Boolean Dim X(-1, 0) As Single Dim Y(-1, 0) As Single

(5)

Gambar 3.4 Source code video frame reader dan load video

Setelah video diekstrak menjadi beberapa frame, maka frame-frame

tersebut diletakkan pada array yang dibuat. Dalam program ini video dibuat

memiliki durasi 100 Step atau langkah tiap framenya dibuat satu frame per satu

langkah, jadi ada 100 frame dalam satu video. Kode yang digunakan untuk

meletakkan frame yang telah diekstrak, pada array yang disediakan dapat dilihat

pada gambar 3.5.

Gambar 3.5 Source code peletakan frame pada array yang disediakan

Imports DexterLib

Imports JockerSoft.Media Imports System.Drawing

Private Sub btnLoad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLoad.Click

framepos = 0 frameincrement = 0.01 MoviePath = "D:\thesis\edit_aryo.00.avi" frameku = FrameGrabber.GetFrameFromVideo(MoviePath, framepos) lblTime.Text = framepos.ToString

Dim dur As Integer = 100

Dim p As Integer, q As Integer

ReDim flag(7, dur) ReDim X(7, dur) ReDim Y(7, dur)

For p = 0 To (flag.Length / 8) - 1 For q = 0 To 7 flag(q, p) = False Next Next For p = 0 To (X.Length / 8) - 1 For q = 0 To 7 X(q, p) = -10 Y(q, p) = -10 Next Next

(6)

3.4 Deklarasi marker yang digunakan dan perhitungan jarak marker

dengan ground

Ada 8 marker yang digunakan, masing-masing dibedakan dengan

perbedaan warnanya. Marker ini digunakan untuk menentukan bagian tubuh

pasien yang akan dianalisa. Marker pertama berwarna merah, kedua dan

seterusnya adalah hijau, biru, kuning, abu-abu, putih, ungu, dan merah muda.

Kode yang digunakan untuk menentukan urutan dari marker dapat dilihat pada

gambar 3.6.

Gambar 3.6 Source code marker pertama

Jarak tiap marker ke ground dapat dilihat pada label jarak. Algoritma

perhitungan jarak adalah nilai absolut dari selisih letak antara marker dan ground

dikalikan dengan skala, dimana skala ditentukan 0.52 cm per pixel dengan

perhitungan ukuran pengambilan gambar sebenarnya adalah 150 cm untuk 285

pixel. Sehingga 150 cm dibagi 285 pixel didapat 0.52 cm per pixel. Kode yang

digunakan dapat dilihat pada gambar 3.7.

Gambar 3.7 Source code penentuan jarak marker dari ground

MarkerID = 0 RBmarker1.Checked = True MarkerBrush(0) = Brushes.Red RBmarker1.ForeColor = Color.Red MarkerPen(0) = Pens.Red warna(0) = Color.Red

Sub HitungJarakGND(ByVal DataSekarang As Integer) Dim r As Integer

Dim deltaY As Single For r = 0 To 7

lblJarak(r).ForeColor = warna(r) If Y(r, DataSekarang) < 0 Then lblJarak(r).Text = "No data" Else

deltaY = Math.Abs(YGnd - Y(r, DataSekarang)) * skala

lblJarak(r).Text = deltaY.ToString End If

(7)

3.5 Tombol Load, Play, dan Stop

Tombol yang pertama-tama bisa dioperasikan adalah tombol load,

Sebelum tombol yang lain dapat digunakan, film yang akan dianalisa harus

dipanggil terlebih dahulu dengan tombol ini.

Tombol Play digunakan untuk memainkan film yang akan dianalisa,

sedangkan tombol Stop digunakan untuk menghentikan film pada frame yang

diinginkan. Kode yang digunakan untuk mengaktifkan tombol ini dapat dilihat

pada gambar 3.8 dan 3.9.

Gambar 3.8 Source code pengaktifan tombol

Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer.Tick

If movieLoaded = True Then btnFF.Enabled = True btnFB.Enabled = True btnPrev.Enabled = True btnNext.Enabled = True btnPlay.Enabled = True btnStop.Enabled = True PictureBox1.Enabled = True lblArray.Text = Vcount lblTime.Text = framepos Else btnFF.Enabled = False btnFB.Enabled = False btnPrev.Enabled = False btnNext.Enabled = False btnPlay.Enabled = False btnStop.Enabled = False PictureBox1.Enabled = False lblArray.Text = "" lblTime.Text = "" End If End Sub

(8)

Gambar 3.9 Source code dari perintah play dan stop

3.6 Display video yang dianalisa

Video yang dianalisa diletakkan pada sebuah picturebox. Film akan

muncul setelah tombol load diaktifkan. Dalam picturebox ini langsung dapat

ditentukan letak ground dan marker yang diinginkan. Code yang digunakan dapat

dilihat pada gambar 3.10. Setelah gambar muncul pada display picturebox , maka

pertama-tama ground didefinisikan untuk mengukur jarak pada setiap marker

yang diberikan, code yang digunakan dapat dilihat pada gambar 3.10. Kemudian

untuk menggerakkan frame ke depan dan belakang diperlukan algoritma

pergerakan frame, Kode yang digunakan dapat dilihat pada gambar 3.10.

Private Sub btnPlay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlay.Click

If btnPlay.Text = "Play" Then playDot = True framepos = 0 dotCnt = 0 TimerDot.Enabled = True Exit Sub Else btnPlay.Text = "Playing.." playDot = False TimerDot.Enabled = False Exit Sub End If End Sub

Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStop.Click

playDot = False End Sub

(9)

Private Sub PictureBox1_click(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp

'mendefinisikan ground

If DefGround = True Then YGnd = e.Y

DefGround = False

'frame bergerak ke depan dan ke belakang Else

If KFBoundStart = -1 Then KFBoundStart = Vcount End If

If Vcount < KFBoundStart Then KFBoundStart = Vcount End If

Me.Text = e.X.ToString + ":" + e.Y.ToString flag(MarkerID, Vcount) = True

X(MarkerID, Vcount) = e.X Y(MarkerID, Vcount) = e.Y

Dim PrevKF As Integer = 0, NextKF As Integer = 0, i As Integer

If Vcount > 0 Then

'frame bergerak ke belakang (hitung ke belakang)

For i = Vcount - 1 To KFBoundStart Step -1 If flag(MarkerID, i) = True Then

PrevKF = i Exit For End If

Next

HitungTitik(MarkerID, X(MarkerID, PrevKF), Y(MarkerID, PrevKF), X(MarkerID, Vcount),

Y(MarkerID, Vcount), PrevKF, Vcount) 'frame bergerak ke depan (hitung ke depan)

Dim found As Boolean = False

For i = Vcount + 1 To KFBoundStop Step 1 If flag(MarkerID, i) = True Then NextKF = i

found = True Exit For End If

Next

If found = True Then

HitungTitik(MarkerID, X(MarkerID, Vcount), Y(MarkerID, Vcount), X(MarkerID, NextKF), Y(MarkerID, NextKF), Vcount, NextKF) End If End If End If IsClicked = True PictureBox1.Refresh() IsClicked = False End Sub

(10)

3.7 Tombol maju dan mundur

Tombol ini digunakan untuk bergerak maju atau mundur. Tombol ini

terbagi menjadi 2 jenis, yang pertama dengan langkah atau step 1 dan yang kedua

dengan langkah atau step 10. Kode yang digunakan dapat dilihat pada gambar

3.11 dan 3.12.

Gambar 3.11 Source code perintah mundur dengan step 1

Gambar 3.12 Source code perintah mundur dengan step 10

Private Sub btnPrev_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrev.Click

Vcount = Vcount - 1

If Vcount < 0 Then Vcount = 0 HitungJarakGND(Vcount)

Dim www As Integer

lblTime.ForeColor = Color.Black For www = 0 To 7

If flag(www, Vcount) = True Then

lblTime.ForeColor = Color.LimeGreen Exit For End If Next i = i - frameincrement If i < 0 Then i = 0 framepos = i IsClicked = False PictureBox1.Refresh()

Private Sub btnFB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFB.Click

Vcount = Vcount - 10

If Vcount < 0 Then Vcount = 0 HitungJarakGND(Vcount)

Dim www As Integer

lblTime.ForeColor = Color.Black For www = 0 To 7

If flag(www, Vcount) = True Then

lblTime.ForeColor = Color.LimeGreen Exit For End If Next i = i - frameincrement * 10 If i < 0 Then i = 0 framepos = i IsClicked = False PictureBox1.Refresh()

(11)

3.8 Algoritma penentuan marker

Metode untuk menentukan letak marker dari frame yang belum ditentukan

markernya adalah dengan menggunakan kurva Bezier. Kurva Bezier banyak

digunakan untuk memodelkan kurva yang halus pada aplikasi grafik di komputer.

Metode dari kurva Bezier adalah dengan mengevaluasi beberapa titik yang saling

berdekatan dan memperkirakan urutan bagian-bagian garis.

Jika terdapat 2 titik, yaitu P0 dan P1, kurva linier Bezier berupa garis lurus

dengan persamaan antara 2 titik yang diberikan sebagai berikut:

B(t) = P

0

+ (P

1

- P

0

)t = (1-t) P

0

+ t P

1

, t Є [0,1]

Di mana t adalah fungsi dari kurva linier Bezier yang dapat

mendiskripsikan sejauh mana B(t) dari P

0

dan P

1

. Sebagai contoh ketika t=0.25,

B(t) adalah seperempat jalan dari titik P

0

menuju P

1.

Dimana t dari 0 sampai 1,

B(t) mendiskripsikan kurva dari P

0

menuju P

1

. Kode yang digunakan dapat dilihat

pada gambar 3.13.

Gambar 3.13 Source code penentuan marker

3.9 Tombol Analyze marker

Tombol ini digunakan untuk melihat lintasan dari marker yang telah

Sub HitungTitik(ByVal MID As Integer, ByVal x0 As Integer,

ByVal y0 As Integer, ByVal x1 As Integer, ByVal y1 As Integer, ByVal prevKF As Integer, ByVal nowKF As Integer)

Dim NewY As Single, NewX As Single Dim langkah As Single

langkah = (x1 - x0) / (nowKF - prevKF) Dim icount As Integer = prevKF

NewX = x0

For icount = prevKF To nowKF

NewY = (y1 - y0) * (NewX - x0) + y0 X(MID, icount) = NewX

Y(MID, icount) = NewY

(12)

tersedia. Karena ada 8 buah marker yang tersedia maka diperlukan 4 buah chanel

yang harus disediakan sehingga dapat memuat 4 kombinasi marker yang berbeda

dengan minimal 2 buah marker dan maksimal 8 buah marker setiap chanelnya.

Dari hasil lintasan inilah dapat dilihat ada tidaknya kelainan gait pada pasien.

Kode yang digunakan dapat dilihat pada gambar 3.14

Gambar 3.14 Source code analisa marker

Private Sub BtnAnalyze_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAnalyze.Click

If BtnAnalyze.Text = "Analyze" Then drawAnalysis = True BtnAnalyze.Text = "Analyzing..." tbCh1.Text = tbCh1.Text.Trim tbCh2.Text = tbCh2.Text.Trim tbCh3.Text = tbCh3.Text.Trim tbCh4.Text = tbCh4.Text.Trim Dim pq As Byte For pq = 0 To 7 con(0, pq) = 255 con(1, pq) = 255 con(2, pq) = 255 con(3, pq) = 255 Next If tbCh1.Text <> "" Then Ch1Conn = tbCh1.Text.Split("-") For pq = 0 To 7 If pq <= Ch1Conn.Length - 1 Then con(0, pq) = Val(Ch1Conn(pq)) - 1 Else con(0, pq) = 255 End If Next End If

Gambar

Diagram blok dan diagram alir dari perangkat lunak yang dibuat dapat  dilihat pada gambar 3.1 dan 3.2
Gambar 3.2 Diagram alir gait analisis tanpa marker
Gambar 3.4  Source code video frame reader dan load video
Gambar 3.8 Source code pengaktifan tombol
+5

Referensi

Dokumen terkait

Produksi adalah semua hasil padi pola SRI (System of Rice Intensification) yang diperoleh dari usahatani persatuan hektar, biaya adalah semua pengeluaran yang digunakan

Berdasarkan hasil pengujian k-means untuk kasus presentase data penduduk miskin menggunakan tools RapidMiner versi 5.3 diperoleh hasil yang sama dengan analisis

Pengujian Marshall untuk campuran tanpa getah pinus dilakukan untuk mendapatkan nilai Kadar Aspal Optimum (KAO) dan nilai KAO tersebut selanjutnya akan digunakan pada

Sekarang di dalam view terdapat file artikel.php, kita paste bagian konten yang telah kita ambil dari index.php ke artikel.php sehingga isi file

Maka dari percobaan ini akan didapatkan data nilai tegangan dan nilai arus yang masuk pada dioda dengan menggunakan dua sifat dioda, yaitu  forward   bias dan

Dengan menekan impor, maka sektor perikanan dengan sendirinya menekan tingkat penghambur- an devisa negara, sekaligus ikut membuka lapangan kerja baru dan untuk

Melihat hasil dari input data jurnal klik menu buku besar sampai muncul halaman seperti di bawah ini. Gambar 16

75 17076252517005 DELIANA Teknik Komputer dan Jaringan SMK NEGERI 2 TEBING TINGGI Kota Tebing Tinggi Sumatera Utara 1 TKJ_01 Rasaki_E 76 17076352517001 Ruli Anny Saragih