CITRA DIGITAL
Oleh :
Sandi Rahmadi 1700022074
Galih Setyawan 1803022112
Mengetahui, Mengetahui:
Kepala Laboratorium Teknik Elektro Pembimbing Teknis
Yogyakarta
Ir. Wahyu Sapto Aji, S.T., M.T., IPM Phisca Aditya Rosyady, S.Si., M.Sc.
NIY: 60181169 NIY: 60010256
1
2
HALAMAN PERSETUJUAN
LAPORAN KERJA PRAKTEK
ANALISIS DIMENSI KERUSAKAN JALAN BERBASIS
CITRA DIGITAL
Mengetahui,
Ketua Program Studi Teknik Elektro
Universitas Ahmad Dahlan,
KATA PENGANTAR
Puji syukur kehadirat Allah SWT atas berkat dan karunia-Nya sehingga kami dapat
Frekuensi Tinggi Universitas Ahmad Dahlan Yogyakarta sampai dengan penyusunan laporan
hasil Kerja Praktik ini dapat terselesaikan. Laporan Kerja Praktek ini kami susun untuk
memenuhi kewajiban sebagai salah satu syarat kelulusan studi pada Program Studi Teknik
Elektro di Universitas Ahmad Dahlan. Sholawat serta salam semoga tetap tercurahkah kepada
Rasulullah Muhammad SAW sebagai suri teladan yang baik bagi seluruh umat manusia.
Kerja Praktik merupakan salah satu mata kuliah yang wajib ditempuh di Program Studi
Teknik Elektro Universitas Ahmad Dahlan, Yogyakarta. Laporan Kerja Praktik ini disusun
untuk memenuhi persyaratan mencapai derajat sarjana teknik dan sebagai laporan hasil Kerja
Praktik yang telah dilaksanakan lebih kurang dua bulan di Laboratorium Telekomunikasi dan
Penyusun sangat menyadari bahwa dalam penyusunan laporan kerja praktik ini juga
mendapat bantuan dan dukungan dari semua pihak. Oleh karena itu penyusun mengucapkan
1. Allah SWT yang telah memberikan rahmat serta hidayah-Nya kepada kami untuk
Yogyakarta.
2. Kedua orang tua kami yang telah memberi kasih sayang serta dukungan moral dan
spiritual.
3. Bapak Sunardi, S.T., M.T., Ph.D selaku Dekan Fakultas Teknologi Industri Universitas
Ahmad Dahlan.
4
4. Bapak Nuryono Satya Widodo, S.T., M.Eng. selaku Kepala Prodi Teknik Elektro.
5. Bapak Phisca Aditya Rosyady, S.Si. M.Sc. selaku Pembimbing Kerja Praktik di
bimbingannya selama ini sehingga kami dapat menyelesaikan laporan ini semaksimal
mungkin.
6. Bapak Ir.Wahyu Sapto Aji, S.T., M.T., IPM. selaku kepala Laboratorium Teknik Elektro
Universitas Ahmad Dahlan yang telah memberikan izin untuk melakukan kerja praktek
7. Bapak Phisca Aditya Rosyady, S.Si., M.Sc selaku Koordinator Kerja Praktek yang telah
8. Teman-teman Teknik Elektro yang selalu mendukung berbagai kegiatan dalam penulisan
laporan ini, terimakasih atas bantuan dan dukungannya, kalian luar biasa.
9. Semua pihak yang telah membantu penyusunan laporan ini, yang tidak dapat kami
Penyusun sangat menyadari bahwa masih banyak kekurangan dari laporan ini, baik dari
penyusun. Oleh karena itu, kritik dan saran yang membangun sangat penyusun harapkan,
sehingga laporan Kerja Praktik ini lebih baik ke depannya. Semoga laporan Kerja Praktik ini
Penyusun
5
DAFTAR ISI
3.3 OpenCV..................................................................................................................... 15
4.6.2 Program deteksi lubang jalan ............................. Error! Bookmark not defined.
4.6.3 Program Perhitungan Luas Lubang Pada Jalan Yang Berlubang ...................... 30
5.1 Kesimpulan................................................................................................................ 47
DAFTAR GAMBAR
Gambar 4.17 (a) citra asli, (b) hasil equalize histogram ............................................... 33
Gambar 4.18 (a) hasil equalize histogram, (b) hasil normalisasi .................................. 34
Gambar 4.19 (a) hasil normalisasi, (b) hasil filter gaussian blur ................................. 35
9
Gambar 4.20 (a) Hasil filter gaussian, (b) Hasil konversi HSV ................................... 35
Gambar 4.21 (a) Hasil filter gaussian, (b) Hasil thresholding ...................................... 36
Gambar 4.22 (a) Hasil thresholding, (b) hasil deteksi kontur ....................................... 38
Gambar 4.23 (a) Hasil deteksi kontur, (b) kontur terbesar ........................................... 39
DAFTAR TABEL
DAFTAR LISTING
PENDAHULUAN
merupakan suatu hal yang penting dan berguna bagi mahasiswa, karena dapat
nyata. Mahasiswa dapat menerapkan teori atau ilmu yang diperoleh di bangku
kuliah serta dapat menambah wawasan tentang dunia kerja yang dapat mengasah
softskill mahasiswa.
penting dalam mendukung bidang ekonomi, sosial dan budaya serta berbagai aspek
kualitas yang baik (Irawan et al., 2016). Jalan dengan dengan kondisi yang buruk
merupakan contoh nyata dampak kerusakan jalan yang selalu dihadapi selama ini
(Hartono, Wibisono and Sukamto, 2017). Untuk itu jalan perlu dipelihara secara
1
2
di mana petugas survei akan berjalan untuk mencatat lokasi dan luasan kerusakan
jalan serta menandainya. Cara ini kurang efektif karena membutuhkan waktu yang
lama, membutuhkan biaya yang lumayan besar, tenaga kerja yang banyak dan
subyektifitas dan faktor kelelahan (Arum Sari and Dewi, 2018). Salah satu cara
ilmu yang mempelajari tentang teknik-teknik mengolah citra berupa gambar diam
(foto) maupun gambar bergerak (yang berasal dari kamera/video) yang dilakukan
metode ini, kondisi permukaan jalan direkam menggunakan kamera video yang
komputer dan Kamera Pi untuk merekam permukaan jalan. Hasil rekaman video
digital untuk mendeteksi adanya kerusakan pada jalan. Salah satunya adalah dengan
metode segmentasi untuk memisahkan area lubang pada jalan dengan area
sekitarnya.
3
Judul kerja praktek ini adalah “Analisis Dimensi Kerusakan Jalan Berbasis
Citra Digital”.
memecahkan masalah.
penguasaan pekerjaan.
sumber daya manusia sehingga tercipta tenaga kerja terdidik yang dapat
bersaing.
macam hal seperti pengolahan citra, Smart Home, deteksi posisi benda
dan lain-lain.
BAB 2
Sebagai suatu sarana yang sangat penting bagi salah satu institusi pendidikan
Laboratorium ternyata menjadi bagian yang sangat penting dan tidak terpisahkan
tempat dan wadah yang efektif dan efisien untuk kegiatan pembelajaran terutama
minat bakat, rekayasa dan keahlian serta profesi. Sehingga pihak-pihak yang
menjalankannya dengan lebih baik, nyaman, dan terarah karena adanya tempat dan
Pada mulanya di tahun 1998, semenjak secara resmi Teknik Elektro menjadi
salah satu program studi di bawah Fakultas Teknologi Industri Universitas Ahmad
5
6
ini menjadi kampus pusat Universitas Ahmad Dahlan dan juga diresmikan
Laboratorium Teknik Elektro menjadi semakin lengkap, selain itu juga memiliki
tempat yang jauh lebih luas dari pada sebelumnya serta manajemen yang lebih baik
dan saat laporan ini disusun laboratorium berada di bawah kepemimpinan Bapak
merupakan mata kuliah praktis yang termasuk di dalam kurikulum wajib daftar
mata kuliah program Studi Teknik Elektro Universitas Ahmad Dahlan. Praktikum
Penerapan keilmuan Interface dan Peripheral yang telah dipelajari. Agar maksud
dan tujuan tersebut tercapai laboratorium Teknik Elektro ini mempunyai beberapa
fasilitas dan sarana praktikum contohnya dalam praktek Teknik Interface dan
7
sebagaimana mata kuliah praktikum yang lain merupakan bentuk implementasi dari
ilmu teori yang terdapat pada mata kuliah yang telah dipelajari.
Elektro semester 4 dengan beban 1 sks dan berstatus wajib. Pelaksanaan praktikum
laboratorium lantai 1 dan 3 digunakan untuk praktikum robotika dan tempat tim
robot untuk persiapan lomba baik skala nasional maupun internasional, sedangkan
dasar atau prinsip-prinsip teknik elektro baik teknik elektro analog dan digital.
Laboratorium ini memberi sarana kepada para mahasiswa dalam mempelajari dasar
sistem elektronika dan hukum-hukum rangkaian listrik dan aplikasinya pada sistem
8
dasar (misalnya modulasi, baik analog maupun digital), antena, sistem radio, media
sertifikasi bagi mahasiswa dalam bidang PLC atau bidang otomasi industri.
Fungsi utama laboratorium komputer adalah untuk kegiatan praktik atas teori
Pengenalan Bahasa C++, Matlab, teknik digital. Selain digunakan untuk kegiatan
9
a. Ruangan AC
b. Papan tulis
c. Komputer
d. Meja praktikum
e. Kursi praktikum
laboran, diawasi dan berkoordinasi dengan Ketua Program Studi Teknik Elektro
Kepala Labaratorium
Ir.Wahyu Sapto Aji, S.T.,
M.T., IPM.
2.6.1 Visi
Visi Program Studi Teknik Elektro UAD adalah menjadi program studi yang
unggul dan dikenal internasional dalam pengetahuan dan aplikasi di bidang teknik
2.6.2 Misi
dan internasional.
DASAR TEORI
tentang teknik-teknik mengolah citra berupa gambar diam (foto) maupun gambar
dalam bentuk diskrit pada bidang dua dimensi. Citra tersunan dari sekumpulan
piksel (picture element) yang terdiri dari baris dan kolom (Kusumanto dan
Tompunu, 2011).
Pada aplikasi pengolahan citra digital pada umumnya, citra digital dapat
dibagi menjadi 3, citra warna, citra grayscale dan citra bineri (Suryowinoto and
Hamid, 2017).
1 Citra Warna
Pada citra warna setiap piksel memiliki warna tertentu, warna tersebut dibagi
dalam tiga kanal warna, yaitu merah (Red), hijau (Green) dan biru (Blue). Jika
masing-masing lapisan warna memiliki jarak nilai antara 0 hingga 255, maka
jumlah totalnya adalah 2553 = 16.581.375 (16 K) variasi warna berbeda pada
gambar, dimana variasi warna ini cukup untuk gambar apapun. Karena jumlah
12
13
bit yang diperlukan untuk setiap piksel, gambar tersebut juga disebut gambarbit
warna.
2 Citra Grayscale
Grayscale merupakan citra dari hasil proses normalisasi dari 3 buah layer dari
citra berwarna RGB menjadi 1 layer. Pada citra digital keabuan mempunyai
warna gradasi mulai dari putih sampai hitam. Rentang tersebut berarti bahwa
3 Citra Biner
Merupakan citra digital terdiri dari warna hitam dan putih, terdapat dua warna
untuk setiap piksel, yang memerlukan 1 bit per piksel (0 atau 1) atau apabila
dalam 8 bit ( 0 dan 255), dimana hal ini akan efisien dalam hal penyimpanan di
keabuan suatu piksel dengan tingkat keabuan piksel tetangganya, lalu hasil proses
segmentasi digunakan untuk proses tingkat lebih lanjut yang dapat dilakukan
terhadap suatu citra, misalnya proses klasifikasi citra dan proses identifikasi objek.
Pada citra yang hanya mengandung satu objek, objek dibedakan dari latar
1. Threshold
Merupakan salah satu metode segmentasi citra yang prosesnya didasarkan pada
oleh warna putih (1) dan background direpresentasikan oleh warna hitam (0).
2. Active Contour
menggunakan energi dari luar, serta dipengaruhi oleh ciri-ciri dari citra tersebut
berdasarkan nilai warna dari tiap piksel tertentu dari objek tersebut dengan
mengkonversi ruang warna citra yang semula RGB menjadi ruang warna HSV
warna dari berbagai panjang gelombang cahaya yang diekstrak dan dibagi-bagi
4. Deteksi Tepi
Merupakan sebuah proses yang berfungsi untuk mendeteksi garis tepi yang
membatasi dua wilayah citra. Tepian disebut sebagai lokasi piksel yang
15
memiliki nilai perbedaan intensitas citra secara ekstrem. Operasi deteksi tepi
3.3 OpenCV
Open Source Computer Vision (OpenCV) adalah sebuah library yang berisi
OpenCV bersifat open source, bebas digunakan untuk hal-hal yang bersifat
akademis dan komersial. Pada OpenCV terdapat antarmuka untuk C++, C, Python,
dan Java yang nantinya dapat berjalan pada Windows, Linux, Android, dan Mac.
Terdapat lebih dari 2500 algoritma dalam OpenCV yang telah dioptimalkan
Thonny memiliki beberapa fitur berguna yang juga menjadikannya IDE yang baik
program. Pada Raspberry Pi 3B Thonny sudah terpasang secara bawaan pada sistem
OS. Tampilan dari aplikasi Thonny Python IDE tampak pada Gambar 3.1.
16
hardisk tetapi menggunakan SD card. Selain itu juga dilengkapi empat buah port
sebagai berikut.
Spesifikasi Keterangan
Soc BCM2711
18
Spesifikasi Keterangan
Procesor quad-core Cortex-A72
(ARMv8) @ 1.5GHz
Memory /RAM 4 GB SDRAM 400MHz
GPU VideoCore VI GPU
Wireless Adapter Dual-band (2.4 GHz/5.0 GHz)
802.11b/g/n/ac WiFi 5
Bluetooth Bluetooth 5.0 BLE
GPIO 40 Pin
Port USB 2x USB 3.0 ports
2x USB 2.0 ports
Card Stroge Micro SD card slot (now push-
pull rather than push-push)
LAN Gigabit Ethernet (RJ45)
External Audio and Video 2-lane MIPI CSI camera port
Stereo audio via AV port, digital
audio via HDMI ports
Sistem Operassi Debian GNU/Linux, Fedora,
Arch Linux ARM, RISC OS
3.6 Webcam Logitech C525
Darjat, 2015). Gambar yang diambil oleh Logitech C525 ditampilkan ke layar
monitor, karena dikendalikan oleh Raspberry Pi maka ada interface atau port yang
Kamera Pi digunakan pada penelitian ini untuk mengambil gambar jalan raya
pengolahan citra digital untuk menganalisis apakah ada kerusakan pada jalan atau
tidak. Gambar 3.3 merupakan tampilan bentuk fisik dari kamera Logitech C525.
19
Tabel 3.2
Spesifikasi Keterangan
Ukuran Sekitar 60 × 30
Bobot 30 gram
Resolusi 8 Megapiksel
Mode video HD 720p
BAB 4
Adapun alat dan bahan yang persiapkan pada pengujian alat disajikan pada
Tabel 4.1.
20
21
Analisator Kerusakan Jalan Berbasis Citra Digital, sehingga saat pengambilan data,
alat yang digunakan sesuai dengan yang diinginkan. Pengecekan alat pada
dimana terdapat satu buah Catu daya, satu buah masukan yaitu webcam, satu buah
keluaran yaitu monitor dan satu buah proses yaitu Raspbery PI 4. Pada bagian Catu
Daya digunakan charger smartphone yang memiliki fitur fast charging dengan
spesivikasi 5V 2.5A yang dapat memberi catu daya dengan stabil meski raspberry
sebagai pencuplik citra dari jalan yang akan dianalisa luasan area lubang. Raspberry
versi ini memiliki ram 4GB sehingga dapat menjalankan komputasi lebih cepat dari
tertentu yang menggambarkan urutan proses secara mendetail dan hubungan antara
suatu proses (instruksi) dengan proses lainnya dalam suatu program. Diagram alir
untuk program citra digital pada Sistem Analisator Kerusakan Jalan Raya Berbasis
Citra Digital yang digunakan pada penelitian ini tampak pada Gambar 4.2.
objek dan pengambilan contour serta mendapatkan nilai luas dan diameter, pada
24
berdasarkan nilai HSV, jika nilai HSV pada suatu gambar/video memenuhi maka
akan terjadi pendeteksian objek kemudian hasil deteksi tersebut dicontur dan
mendapatkan nilai luas dan diameter, jika tidak maka akan melakukan proses
HSV.
Sampel citra yang diuji diambil di daerah sekitar Desa Pogung, Sinduadi,
Mlati, Sleman dan Jl. Pandega Marta. Adapun area tempat pengambilan citra
Sedangkan hasil citra yang diambil pada area yang terdapat pada gambar
program dengan menggunakan perangkat lunak Thony Python IDE. Program yang
ditulis dengan perangkat lunak Thony Python IDE disebut sebagai sketch. Sketch
ditulis dalam suatu editor teks dan disimpan dalam file dengan ekstensi .py. Format
tersebut muncul ketika program yang dibuat disimpan pada suatu folder. Program
pada Thony Python IDE digunakan untuk seluruh kegiatan pemrograman alat pada
penelitian ini.
menunjukan tidak terdapat error dan kamera berjalan sesuai perintah program.
27
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while(True):
ret, frame = cap.read()
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Listing 4.1 Program menjalankan webcam
Program pada Listing 4.2 bertujuan untuk mendeteksi jalan berlubang dengan
algoritma yang sudah dirancang seperti pada Gambar 4.2. Untuk memudahkan
pencarian nilai threshold digunakan fitur trackbar pada opencv agar aplikasi dapat
lebih interaktif pada saat proses pencarian nilai dari berbagai parameter.
import cv2
import numpy as np
def nothing(x):
pass
res = None
cv2.namedWindow('controls')
cv2.createTrackbar('H_L','controls',0,255,nothing)
cv2.createTrackbar('H_H','controls',255,255,nothing)
cv2.createTrackbar('S_L','controls',0,180,nothing)
cv2.createTrackbar('S_H','controls',180,180,nothing)
cv2.createTrackbar('V_L','controls',0,255,nothing)
cv2.createTrackbar('V_H','controls',255,255,nothing)
cv2.createTrackbar('GAU','controls',1,11,nothing)
cv2.createTrackbar('ALP','controls',0,255,nothing)
cv2.createTrackbar('BET','controls',255,255,nothing)
cv2.namedWindow('control')
button = [20,60,50,250]
def process_click(event, x, y,flags, params):
if event == cv2.EVENT_LBUTTONDOWN:
if y > button[0] and y < button[1] and x > button[2] an
d x < button[3]:
print('Clicked on Button!')
convert_hsv(res)
def convert_hsv(img):
28
cv2.setMouseCallback('control',process_click)
control_image = np.zeros((80,300), np.uint8)
control_image[button[0]:button[1],button[2]:button[3]] = 180
cv2.putText(control_image, 'Button',(100,50),cv2.FONT_HERSHEY_P
LAIN, 2,(0),3)
while(1):
gaus_param = int(cv2.getTrackbarPos('GAU','controls'))
param_h_l = int(cv2.getTrackbarPos('H_L','controls'))
param_s_l = int(cv2.getTrackbarPos('S_L','controls'))
param_v_l = int(cv2.getTrackbarPos('V_L','controls'))
param_h_h = int(cv2.getTrackbarPos('H_H','controls'))
param_s_h = int(cv2.getTrackbarPos('S_H','controls'))
param_v_h = int(cv2.getTrackbarPos('V_H','controls'))
param_alp = int(cv2.getTrackbarPos('ALP','controls'))
param_bet = int(cv2.getTrackbarPos('BET','controls'))
img = cv2.imread("pothole-08.jpg")
img2 = cv2.normalize(img,None,param_alp,param_bet,cv2.NORM_MIN
MAX)
if gaus_param % 2 == 0:
gaus_param += 1
dst = cv2.GaussianBlur(img2,(gaus_param,gaus_param),cv2.BORDER
_DEFAULT)
hsv = cv2.cvtColor(dst, cv2.COLOR_BGR2HSV)
if param_h_l >= param_h_h:
param_h_l = param_h_h - 1
if param_s_l >= param_s_h:
param_s_l = param_s_h - 1
if param_v_l >= param_v_h:
param_v_l = param_v_h - 1
if param_h_h <= param_h_l:
param_h_h = param_h_l + 1
if param_s_h <= param_s_l:
param_s_h = param_s_l + 1
if param_v_h <= param_v_l:
param_v_h = param_v_l + 1
lower_pothole = np.array([param_h_l,param_s_l,param_v_l])
upper_pothole = np.array([param_h_h,param_s_h,param_v_h])
cv2.destroyAllWindows()
Listing 4.2 Program deteksi jalan berlubang
Adapun parameter yang dibuatkan trackbar para program diantaranya
adalah:
1. Lower hue
2. Lower saturation
3. Lower value
4. Upper hue
5. Upper saturation
6. Upper value
7. Dimensi kernel gaussian blur
8. Nilai alpha normalisasi
9. Nilai beta normalisasi
Trackbar untuk mencari nilai parameter deteksi jalan berlubang disajikan pada
Gambar 4.14.
30
Program pada Listing 4.3 bertujuan untuk mengkonversi luas area dari satuan
pixel ke cm2. Sebagian besar program pada Listing 4.3 diambil dari Listing 4.2 yang
import cv2
import numpy as np
font = cv2.FONT_HERSHEY_SIMPLEX
bottomLeftCornerOfText = (10,500)
fontScale = 1
fontColor = (0,255,255)
lineType = 3
param_normalize = [0 ,132]
param_low_HSV = [0 ,17 ,26]
31
raw = cv2.imread("pothole-08.jpg")
raw2 = cv2.imread("pothole-08.jpg")
ycrcb_img = cv2.cvtColor(raw, cv2.COLOR_BGR2YCrCb)
ycrcb_img[:, :, 0] = cv2.equalizeHist(ycrcb_img[:, :, 0])
img = cv2.cvtColor(ycrcb_img, cv2.COLOR_YCrCb2BGR)
img2 = cv2.normalize(img,None,0,132,cv2.NORM_MINMAX)
dst = cv2.GaussianBlur(img2,(11,11),cv2.BORDER_DEFAULT)
hsv = cv2.cvtColor(dst, cv2.COLOR_BGR2HSV)
lower_pothole = np.array(param_low_HSV)
upper_pothole = np.array(param_high_HSV)
mask = cv2.inRange(hsv, lower_pothole, upper_pothole)
res = cv2.bitwise_and(hsv,hsv, mask= mask)
ret, thresh = cv2.threshold(mask, 127, 255, 0)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, c
v2.CHAIN_APPROX_SIMPLE)
if len(contours) != 0:
# draw in blue the contours that were founded
#cv2.drawContours(img, contours, -1, (255,255,0), 3)
pembahasan terkait dengan blok diagram alat maupun diagram alir sistem.
dengan baik. fitur autofokus pada webcam Logitech C525 juga berfungsi dengan
baik serta webcam dapat berfungsi dengan lancar tanpa delay. Hasil pengujian
berjalan dengan baik, hasil pengujian akses citra melalui file disajikan pada Gambar
4.16.
33
persebaran warnanya. sehingga lebih mudah untuk diproses. hasil dari eksekusi
program equalize histogram pada citra asli disajikan pada Gambar 4.17.
(a) (b)
Pengujian alat dengan mengubah citra hasil dari equalize histogram dengan
aplha dan beta. dimana fungsi dari alpha dimaksudkan untuk meningkatkan
kecerahan dan beta untuk menurunkan kecerahan. nilai default alpha adalah 0,
dan beta adalah 255. pada proses thresholding metode normalize bertujuan untuk
mengatur besar rongga pada hasil thresholding. hasil eksekusi dari metode
(a) (b)
Gambar 4.18 (a) hasil equalize histogram, (b) hasil normalisasi
4.7.5 Pengujian program gaussian blur
mengurangi ketajaman gambar. Bila ada perbedaan warna yang tinggi pada jarak
(a) (b)
Gambar 4.19 (a) hasil normalisasi, (b) hasil filter gaussian blur
4.7.6 Pengujian program konversi HSV
Pengujian alat pada bagian ini yaitu mengubah ruang warna RGB menjadi
ruang warna HSV. Ruang warna HSV dipilih karena dapat mengubah warna yang
awalnya gabungan dari beberapa warna primer menjadi warna spektrum pada
(a) (b)
Gambar 4.20 (a) Hasil filter gaussian, (b) Hasil konversi HSV
36
objek lubang jalan. Pada pengujian thresholding, lubang jalan tidak benar-benar
terpisah. melainkan ada objek lain yang memiliki ciri yang sama dengan lubang
(a) (b)
Gambar 4.21 (a) Hasil filter gaussian, (b) Hasil thresholding
Langkah berikutnya adalah mencari nilai setiap parameter dengan
adalah:
1. Normalize
5. Threshold biner.
Dari 10 sampel yang diuji, terdapat 2 sampel citra yang tidak dapat
algoritma dapat mendeteksi lubang jalan pada citra tersebut. Dengan menggunakan
persamaan 1.
sukses
persentase = 100% (1)
total _ data
8
persentase = 100%
10 (2)
persentase = 80%
setiap tepi yang ada dari hasil threshold. pada bagian pengujian deteksi kontur.
38
masih terdapat banyak bagian yang bukan lubang jalan terdeteksi olek program
deteksi kontur. Threshold HSV tidak dapat memisahkan jalan berlubang secara
sempurna sehingga perlu dipisahkan dengan cara membuat kontur jalan berlubang
sebagai kontur dengan area yang paling luas. hasil pengujian deteksi kontur
(a) (b)
menghasilkan kontur jalan berlubang memiliki area yang paling besar sehingga
mudah untuk dideteksi. langkah berikutnya adalah menghitung luas area kontur
yang telah dideteksi masih dalam satuan pixel. hasil pengujian program deteksi
(a) (b)
mengonversi luas perhitungan dari program yang awalnya berupa satuan pixel
Dari ketiga sampel gambar Gambar 4.25 sampai Gambar 4.27, rata-rata setiap
foto mencangkup panjang 5 keramik dan lebar 4 keramik dengan kriteria setiap
keramik memiliki lebar 30x30 cm maka didapatkan total keramik seperti yang telah
A = p *l
A = 5* 4 (4)
A = 20
Setelah diketahui jumlah keramik yang tercuplik pada frame citra, selanjutnya
dikalikan dengan luas setiap keramik. setiap keramik memiliki panjang sisi 30 cm
sehingga luas dari setiap keramik adalah 900cm2 . Maka luas dari setiap frame
Areal = 20*900cm2
(5)
Areal = 18000cm2
Setelah diketahui luas frame dalam satuan cm2 langkah selanjutnya adalah
mengetahui luas pixel dari dimensi citra yang diuji. Kriteria dimensi citra
Apixel = w * h (6)
Pada Gambar 4.28, diketahui w = 1008 dan h = 756, maka didapatkan luas
Apixel yaitu:
43
Apixel = 1008*756
(7)
Apixel = 762048 px
Areal = Apixel
18000cm 2 = 762048 px 2 * x
18000 (8)
x=
762048
x = 0.02362
jadi persamaan akhir untuk menghitung luasan dalam satuan cm2 dari satuan
hasil lengkap analisa luas lubang jalan disajikan pada Gambar 4.30 sampai
Gambar 4.37.
44
Gambar 4.30 Hasil analisa citra Gambar 4.31 Hasil analisa citra
sampel 1 sampel 2
Gambar 4.32 Hasil analisa citra Gambar 4.33 Hasil analisa citra
sampel 4 sampel 5
Gambar 4.34 Hasil analisa citra Gambar 4.35 Hasil analisa citra
sampel 6 sampel 7
Gambar 4.36 Hasil analisa citra Gambar 4.37 Hasil analisa citra
sampel 8 sampel 10
45
Hasil analisa perhitungan luas lubang pada jalan disajikan pada Tabel 4.4.
memverifikasi dengan pendeteksian luas gambar bidang datar dengan luas yang
sudah ditentukan. Ada tiga objek yang disajikan pada Tabel 4.5.
PENUTUP
5.1 Kesimpulan
Berdasarkan uji coba dan analisa pendeteksian serta perhitungan luas jalan
berlubang yang dilakukan pada 10 sampel citra jalan berlubang yang dilakukan di
menghitung luas jalan berlubang dengan tingkat error 0.358% - 4.19%, namun nilai
parameter lower, upper HSV, gaussian blur kernel, aplha, beta pada fungsi masih
normalize. umumnya kernel gaussian blur yang digunakan pada proses segmentasi
digunakan 7x7 hingga 11x11 pixel. Hasil dari analisa besar luas jalan berlubang
yang dilakukan jalan Pandega Marta bervariasi dari 363 cm2 sampai 2658 cm2.
5.2 Saran
pengujian alat untuk pengklasifikasian kerusakan jalan masih terbatas pada sistem
dan metode analisis kerusakan jalan secara realtime. Selanjutnya mahasiwa kerja
47
48
Dahlan terdapat banyak ilmu yang dimiliki terutama dibidang ilmu pengolahan
Pengujian alat sistem analisator kerusakan jalan berbasis citra digital dapat
Arum Sari, Y. and Dewi, C. (2018) ‘Sistem Temu Kembali Citra Lubang Jalan
ptiik.ub.ac.id.
10.31219/osf.io/yekpr.
Lazaro, A., Buliali, J. L. and Amaliah, B. (2017) ‘Deteksi Jenis Kendaraan di Jalan
10.12962/j23373539.v6i2.23175.
Padmo A.M, A. and Murinto (2016) ‘Segmentasi Citra Batik Berdasarkan Fitur
49
50
https://ejournal3.undip.ac.id/index.php/transient/article/view/8124.
Kontur Jalan’, Seminar Nasional Sains dan Teknologi Terapan V, pp. 149–
154.
https://media.neliti.com/media/publications/266747-implementasi-
raspberry-pi-untuk-rancang-e9579c10.pdf.
LAMPIRAN
51
52
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while(True):
ret, frame = cap.read()
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Lampiran 2 Program deteksi jalan berlubang
import cv2
import numpy as np
def nothing(x):
pass
res = None
cv2.namedWindow('controls')
cv2.createTrackbar('H_L','controls',0,255,nothing)
cv2.createTrackbar('H_H','controls',255,255,nothing)
cv2.createTrackbar('S_L','controls',0,180,nothing)
cv2.createTrackbar('S_H','controls',180,180,nothing)
cv2.createTrackbar('V_L','controls',0,255,nothing)
cv2.createTrackbar('V_H','controls',255,255,nothing)
cv2.createTrackbar('GAU','controls',1,11,nothing)
cv2.createTrackbar('ALP','controls',0,255,nothing)
cv2.createTrackbar('BET','controls',255,255,nothing)
cv2.namedWindow('control')
button = [20,60,50,250]
def process_click(event, x, y,flags, params):
if event == cv2.EVENT_LBUTTONDOWN:
if y > button[0] and y < button[1] and x > button[2] an
d x < button[3]:
print('Clicked on Button!')
convert_hsv(res)
def convert_hsv(img):
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
return hsv
cv2.setMouseCallback('control',process_click)
control_image = np.zeros((80,300), np.uint8)
control_image[button[0]:button[1],button[2]:button[3]] = 180
cv2.putText(control_image, 'Button',(100,50),cv2.FONT_HERSHEY_P
LAIN, 2,(0),3)
while(1):
gaus_param = int(cv2.getTrackbarPos('GAU','controls'))
53
param_h_l = int(cv2.getTrackbarPos('H_L','controls'))
param_s_l = int(cv2.getTrackbarPos('S_L','controls'))
param_v_l = int(cv2.getTrackbarPos('V_L','controls'))
param_h_h = int(cv2.getTrackbarPos('H_H','controls'))
param_s_h = int(cv2.getTrackbarPos('S_H','controls'))
param_v_h = int(cv2.getTrackbarPos('V_H','controls'))
param_alp = int(cv2.getTrackbarPos('ALP','controls'))
param_bet = int(cv2.getTrackbarPos('BET','controls'))
img = cv2.imread("pothole-08.jpg")
img2 = cv2.normalize(img,None,param_alp,param_bet,cv2.NORM_MIN
MAX)
if gaus_param % 2 == 0:
gaus_param += 1
dst = cv2.GaussianBlur(img2,(gaus_param,gaus_param),cv2.BORDER
_DEFAULT)
hsv = cv2.cvtColor(dst, cv2.COLOR_BGR2HSV)
if param_h_l >= param_h_h:
param_h_l = param_h_h - 1
if param_s_l >= param_s_h:
param_s_l = param_s_h - 1
if param_v_l >= param_v_h:
param_v_l = param_v_h - 1
if param_h_h <= param_h_l:
param_h_h = param_h_l + 1
if param_s_h <= param_s_l:
param_s_h = param_s_l + 1
if param_v_h <= param_v_l:
param_v_h = param_v_l + 1
lower_pothole = np.array([param_h_l,param_s_l,param_v_l])
upper_pothole = np.array([param_h_h,param_s_h,param_v_h])
import cv2
import numpy as np
font = cv2.FONT_HERSHEY_SIMPLEX
bottomLeftCornerOfText = (10,500)
fontScale = 1
fontColor = (0,255,255)
lineType = 3
param_normalize = [0 ,132]
param_low_HSV = [0 ,17 ,26]
param_high_HSV = [56 ,180 ,113]
raw = cv2.imread("pothole-08.jpg")
raw2 = cv2.imread("pothole-08.jpg")
ycrcb_img = cv2.cvtColor(raw, cv2.COLOR_BGR2YCrCb)
ycrcb_img[:, :, 0] = cv2.equalizeHist(ycrcb_img[:, :, 0])
img = cv2.cvtColor(ycrcb_img, cv2.COLOR_YCrCb2BGR)
img2 = cv2.normalize(img,None,0,132,cv2.NORM_MINMAX)
dst = cv2.GaussianBlur(img2,(11,11),cv2.BORDER_DEFAULT)
hsv = cv2.cvtColor(dst, cv2.COLOR_BGR2HSV)
lower_pothole = np.array(param_low_HSV)
upper_pothole = np.array(param_high_HSV)
mask = cv2.inRange(hsv, lower_pothole, upper_pothole)
res = cv2.bitwise_and(hsv,hsv, mask= mask)
ret, thresh = cv2.threshold(mask, 127, 255, 0)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, c
v2.CHAIN_APPROX_SIMPLE)
if len(contours) != 0:
# draw in blue the contours that were founded
#cv2.drawContours(img, contours, -1, (255,255,0), 3)
(10,540),
font,
fontScale,
fontColor,
lineType)
cv2.imshow('img',np.hstack((raw2,raw)))
cv2.imwrite('08-hitung-08.jpg', raw)
#cv2.imwrite('R-pothole-01.jpg', raw)
while(1):
# waitfor the user to press escape and break the while loop
k = cv2.waitKey(1) & 0xFF
if k == 27:
break
#destroys all window
cv2.destroyAllWindows()