• Tidak ada hasil yang ditemukan

BAB IV IMPLEMENTASI DAN EVALUASI

4.2 Potongan Program

Dalam sub bab ini akan dijelaskan mengenai beberapa potongan program Visual basic sebagai implementasi dari algoritma yang sudah dijelaskan pada bab sebelumnya.

a. Proses inisialisasi webcam

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Public Declare Function capCreateCaptureWindowA Lib "avicap32.dll" (ByVal lpszWindowName As String, ByVal dwStyle As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hwndParent As Long, ByVal nID As Long) As Long

Public Const WM_CAP_CONNECT As Long = 1034 Public Const WM_CAP_DISCONNECT As Long = 1035 Public Const WM_CAP_GET_FRAME As Long = 1084 Public Const WM_CAP_COPY As Long = 1054

Public Const WM_CAP_START As Long = WM_USER

Inisialisasi webcam menggunakan fungsi API pada visual basic, dimana digunakan untuk mengambil data video secara langsung dan untuk pengambilan input berupa background image dan frame.

b. Proses menjalankan kamera

If mCapHwnd <> 0 Then Exit Sub FrameNum = 0

Me.Timer1.Enabled = False

' capture video

mCapHwnd = capCreateCaptureWindowA("WebCap", 0, 0, 0, m_Width, m_Height, Me.hwnd, 0)

DoEvents

' koneksi ke webcam

Call SendMessage(mCapHwnd, WM_CAP_CONNECT, 0, 0)

DoEvents

Call SendMessage(mCapHwnd, WM_CAP_SET_PREVIEW, 0, 0)

' informasi timer1

bStopped = False

Me.Timer1.Enabled = True

Proses menjalankan kamera dilakukan oleh user dengan menekan button capture video, dan data video yang diambil secara langsung nantinya digunakan sebagai input yang berupa pengambilan background image dan frame

c. Proses pengambilan background image

'* Ambil background

Picture3.Picture = Picture2.Picture

Proses pengambilan background image diambil pada saat keadaan jalan masih kosong / belum ada orang lewat, dimana pengambilan background image disini berfungsi untuk perhitungan mendapatkan nilai selisih antara nilai piksel frame dan background

d. Proses mendapatkan nilai RGB pada piksel dalam ROI

For k = 1 To Shape2.Width Step 15 For l = 1 To Shape2.Height Step 15

pixelmasuk = Picture3.Point(k + Shape4.Left, l + Shape4.Top)

'pengambilan pixel pada ROI background 'RGB Background

red = pixelmasuk And RGB(255, 0, 0)

green = Int((pixelmasuk And RGB(0, 255, 0)) / 256)

blue = Int((Int(pixelmasuk And RGB(0, 0, 255)) / 256) / 256)

Proses mendapatkan nilai RGB pada ROI dilakukan secara berurutan

menggunakan proses looping hingga semua piksel pada ROI terpenuhi, nantinya

nilai RGB ini dirubah menjadi citra grayscale agar nilai piksel hanya satu.

e. Proses perubahan model warna RGB menjadi cira grayscale

For k = 1 To Shape2.Width Step 15 For l = 1 To Shape2.Height Step 15

pixelmasuk = Picture3.Point(k + Shape4.Left, l + Shape4.Top)

'pengambilan pixel pada ROI background 'RGB Background

red = pixelmasuk And RGB(255, 0, 0)

green = Int((pixelmasuk And RGB(0, 255, 0)) / 256)

blue = Int((Int(pixelmasuk And RGB(0, 0, 255)) / 256) / 256) lbmasuk = (red + green + blue) / 3 'proses grayscale

Picture7.PSet (k, l), RGB(lbmasuk, lbmasuk, lbmasuk) 'perubahan warna setiap pixel di ROI background pada picture

Next l Next k

Proses perubahan model warna RGB menjadi cira grayscale seperti pada persamaan 2.1, dimana memiliki perhitungan penjumlahan nilai red, green, blue kemudian dibagi 3, nantinya nilai piksel hanya menjadi satu dan proses perhitungan menjadi lebih mudah karena yang diolah berupa nilai piksel dari proses grayscale

f.Proses perhitungan NSSD

'Penerapan NSSD

For k = 1 To Shape2.Width Step 15 For l = 1 To Shape2.Height Step 15

pixelmasuk = Picture3.Point(k + Shape4.Left, l + Shape4.Top) 'pengambilan pixel pada ROI background

'RGB Background

red = pixelmasuk And RGB(255, 0, 0)

green = Int((pixelmasuk And RGB(0, 255, 0)) / 256)

blue = Int((Int(pixelmasuk And RGB(0, 0, 255)) / 256) / 256) lbmasuk = (red + green + blue) / 3 'proses grayscale

Picture7.PSet (k, l), RGB(lbmasuk, lbmasuk, lbmasuk) 'perubahan warna setiap pixel di ROI background pada picture

warnamasuk = Picture2.Point(k + Shape2.Left, l + Shape2.Top) 'pengambilan pixel pada ROI Frame

'RGB Frame

red = warnamasuk And RGB(255, 0, 0)

green = Int((warnamasuk And RGB(0, 255, 0)) / 256)

blue = Int((Int(warnamasuk And RGB(0, 0, 255)) / 256) / 256) lfrmasuk = (red + green + blue) / 3 'proses grayscale

Picture6.PSet (k, l), RGB(lfrmasuk, lfrmasuk, lfrmasuk) 'perubahan warna setiap pixel di ROI Frame pada picture

nmasuk = nmasuk + 1 'proses perhitungan jumlah pixel pada ROI frame 'proses pengambilan selisih frame dan background

'proses pemangkatan selisih agar tidak ada nilai minus 'proses penjumlahan seluruh nilai selisih

JumSelisihNilaiPixelMasuk = JumSelisihNilaiPixelMasuk + ((lfrmasuk - lbmasuk) ^ 2) Next l Next k penjumlahanpixelmasuk.Text = JumSelisihNilaiPixelMasuk txtjmlpixelmasuk.Text = nmasuk

'proses mendapatkan nilai NSSDkeluar pada setiap frame

NSSDmasuk = JumSelisihNilaiPixelMasuk / nmasuk txtNSSDmasuk.Text = NSSDmasuk

Proses perhitungan NSSD diawali dengan pengambilan background, mengubahnya menjadi grayscale dan menentukan detection window pada jalur orang lewat yang akan diamati. Hal yang sama dilakukan juga untuk setiap frame video yang ditampilkan. Detection window atau ROI (Region of Interest) pada background dan frame harus pada posisi yang sama sehingga luasan area yang diamati sama persis. Jumlah nilai pixel pada frame dan background diambil selisihnya dan dikuadratkan. Hasil tersebut dibagi dengan luasan detection window untuk dinormalisasi, seperti pada persamaan 2.4

g. Proses perhitungan filtering

'proses filtering

JumFramemasuk = JumFramemasuk + 1 'perhitungan jumlah frame

txtjmlframemasuk.Text = JumFramemasuk

JumNSSDmasuk = JumNSSDmasuk + NSSDmasuk 'penjumlahan nilai

NSSDkeluar setiap frame

txtjmlNSSDmasuk = JumNSSDmasuk

txtfiltermasuk.Text = Filtermasuk

Proses filtering disini menggunakan LowPass Filter ini menggunakan cara

merata-rata setiap data yang diperoleh. Proses filtering membutuhkan input

jumlah frame dan jumlah nilai NSSD, dimna nanti proses perhitungannya adalah jumlah nilai NSSD / jumlah frame. Perhitungan ini sesui dengan persamaan 2.2.

h. Proses perhitungan thresholding

'proses thresholding

threshold = Filter * Val(cmbxnilaipengali.Text) 'proses perhitungan nilai filter dengan nilai pengali yang ditentukan oleh user

txthasiltresholdmasuk.Text = thresholdmasuk

Perhitungan proses thresholding mempunyai input berupa nilai rata-rata NSSD (nilai hasil dari proses filtering) yang dikalikan oleh nilai pengali yang diberikan oleh user, fungsi proses thresholding disini adalah mengubah citra greyscale menjadi citra biner, seperti pada persamaan 2.3.

i. Proses perhitungan orang lewat

'proses perhitungan orang lewat

If NSSDmasuk > thresholdmasuk Then txtstatusmasuk.Text = "1"

Jummasuk = Jummasuk + 1 txtJummasuk.Text = Jummasuk End If

Else 'NSSDmasuk < thresholdmasuk

txtstatusmasuk.Text = "2"

End If

txttempmasuk.Text = txtstatusmasuk.Text

Proses perhitungan orang lewat memiliki data masukan berupa nilai NSSD, nilai threshold. Melakukan perhitungan jumlah orang yang lewat, Apabila nilai NSSD lebih besar dari nilai threshold maka satus = 1 (Lewat) dan apabila nilai NSSD lebih kecil dari nilai threshold maka status = 2 (Kosong). Jumlah orang bertambah apabila Apabila nilai NSSD lebih besar dari nilai threshold dan status pada frame tersebut tidak sama dengan status pada frame sebelumnya (Temp).

Dokumen terkait