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).