Anda di halaman 1dari 223

SKRIPSI

PEMROSESAN VIDEO UNTUK DETEKSI


LIMBAH CAIR PEWARNA BATIK DAN LIMBAH PADAT AIR SUNGAI
BERBASIS CIRI WARNA DAN GERAK

VIDEO PROCESSING FOR LIQUID POLLUTANT OF BATIK COLORANT


AND SOLID POLLUTANT DETECTION IN FLOWING WATER
BASED ON COLOR AND MOTION FEATURES

IKA CANDRADEWI
06/194507/PA/10988

PROGRAM STUDI ELEKTRONIKA DAN INSTRUMENTASI


JURUSAN ILMU KOMPUTER DAN ELEKTRONIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS GADJAH MADA
YOGYAKARTA

2011
SKRIPSI

PEMROSESAN VIDEO UNTUK DETEKSI


LIMBAH CAIR PEWARNA BATIK DAN LIMBAH PADAT AIR SUNGAI
BERBASIS CIRI WARNA DAN GERAK

VIDEO PROCESSING FOR LIQUID POLLUTANT OF BATIK COLORANT


AND SOLID POLLUTANT DETECTION IN FLOWING WATER
BASED ON COLOR AND MOTION FEATURES

Diajukan untuk memenuhi salah satu syarat memperoleh derajat Sarjana Sains
Program Studi Elektronika dan Instrumentasi

IKA CANDRADEWI
06/194507/PA/10988

PROGRAM STUDI ELEKTRONIKA DAN INSTRUMENTASI


JURUSAN ILMU KOMPUTER DAN ELEKTRONIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS GADJAH MADA
YOGYAKARTA

2011
HALAMAN PENGESAHAN

SKRIPSI

PEMROSESAN VIDEO UNTUK DETEKSI


LIMBAH CAIR PEWARNA BATIK DAN LIMBAH PADAT AIR SUNGAI
BERBASIS CIRI WARNA DAN GERAK

Telah dipersiapkan dan disusun oleh

IKA CANDRADEWI
06/194507/PA/10988

Telah dipertahankan di depan Tim Penguji


pada tanggal 12 Januari 2011

Susunan Tim Penguji

Drs. Agus Harjoko, M.Sc., Ph.D. Ilona Usuman., M.Kom.


Pembimbing I Penguji I

Andi Dharmawan., M.Cs.


Penguji II

iii
PERNYATAAN

Dengan ini saya menyatakan bahwa Laporan Skripsi ini tidak terdapat karya
yang pernah diajukan untuk memperoleh gelar Ahli Madya/Kesarjanaan di suatu
Perguruan Tinggi, dan sepanjang pengetahuan saya juga tidak terdapat karya atau
pendapat yang pernah ditulis atau diterbitkan oleh orang lain, kecuali yang secara
tertulis diacu dalam naskah ini dan disebutkan dalam daftar pustaka.

Yogyakarta, 12 Januari 2010

Ika Candradewi

iii
HALAMAN MOTO DAN PERSEMBAHAN

Dan Tuhanmu berfirman, “Berdoalah kepada-Ku (imanilah Keesaaan-Ku dan


mintalah kepada-Ku apa saja) niscaya Aku akan menjawab (doamu). “
(Q.S Al Mukmin : 60)

The Greatest pride is not because we are unbeatable in every competition


but the greatest pride is how strong our effort
to stand up again in every time we are falling down

Stay Foolish..Stay Hungry...


Man Jadda wa Jada

Karya ini kupersembahkan kepada :


Ayah dan Ibuku

iv
KATA PENGANTAR

Assalamu’alaikum Wr. Wb
Puji syukur penulis panjatkan kepada Allah SWT yang telah melimpahkan
ridha, rahmat, hidayah, dan karunia-Nya
karunia Nya kepada penulis sehingga penulis dapat
menyelesaikan skripsi ini dengan baik. Shalawat serta salam penulis haturkan
kepada junjungan Nabi Muhammad saw.
Penyusunan dan penulisan laporan skripsi ini ditujukan untuk memenuhi
kewajiban penulis dalam menyelesaikan studi sekaligus memenuhi salah satu
syarat mencapai derajat sarjana S-1
S pada Program
am Studi Elektronika dan
Instrumentasi, Jurusan Ilmu Komputer dan Elektronika di Universitas Gadjah
Mada Yogyakarta. Selama masa perkuliahan hingga dalam penyelesaian skripsi
ini penulis banyak mendapat dukungan, semangat, dan kritikan dari berbagai
pihak, untuk itu penulis dengan tulus ingin mengucapkan terima kasih kepada:
1. Bapak Drs. Retantyo Wardoyo, M.Sc., Ph.D.,
Ph.D., selaku Ketua Jurusan Ilmu
Komputer dan Elektronika, Fakultas MIPA Universitas Gadjah Mada
Yogyakarta.
2. Bapak Drs. Agus Harjoko, M.Sc, Ph.D, selaku Ketua Prodi Elekronika dan
Instrumentasi sekaligus sebagai dosen pembimbing yang telah sabar
memberikan saran, bimbingan, dan pengarahan hingga selesainya skripsi ini.
3. Bapak dan ibu dosen di Jurusan Ilmu Komputer
Komputer dan Elektronika, Fakultas
MIPA Universitas Gadjah Mada yang telah mengajar dan membantu penulis
untuk menambah ilmu pengatahuan selama masa studi.
4. Karyawan dan semua staf Program Studi Elektronika dan Instrumentasi,
Fakultas MIPA Universitas Gadjah Mada yang telah membantu dalam
keperluan administrasi dan akademis.
5. Bapak dan Ibuku tercinta, adikku, Tante Ida, Tante Win, Om Naryo, Tante
Ndari yang selalu memberikan motivasi dan doa. Serta semua keluarga besar
di Jogja, Jakarta, dan Cilegon.

v
6. Teman-teman Elins 2006, para elinswati Dine, Uchil, Ade, Puchan, Wulan,
Nia, Hans, Rani atas semua motivasi, kebersamaan, dan persahabatan kita.
Mitha,teman seperjuangan skripsi thanks atas segala bantuanmu kawan,
kalian memang wonderfull friends.
7. Adhi, atas segala saran, masukkan, dan kesediannya untuk berdiskusi serta
berbagi ilmu dengan penulis.
8. Teman-teman kkn, Wiwien, dan Nadia atas semua gelak tawa yang tercipta
saat kita kumpul bersama layaknya keluarga sendiri.
9. Sobatku Mai, dan Endri atas semua nasehat, motivasi, dan celotehan yang
kalian berikan.
10. Dek Nisa dan dek Taufik, atas pinjaman laptopnya selama proses
penyelesaian skripsi.
11. Semua pihak yang tidak dapat penulis sebutkan satu persatu, yang telah
banyak mendukung penulis hingga terselesaikannya skripsi ini.
Semoga Allah SWT selalu memberikan rahmat serta kemudahan kepada semua
pihak yang telah banyak membantu dalam penyelesaian skripsi ini.
Penulis menyadari bahwa dalam pembuatan skripsi ini baik dalam sistem
pembuatan maupun penulisannya masih jauh dari sempurna dan masih banyak
kekurangan namun penulis berusaha menyajikan sebaik-baiknya sesuai dengan
kemampuan penulis. Oleh karena itu dengan hati yang terbuka penulis mohon
maaf dan saran serta kritik yang membangun. Akhir kata semoga skripsi ini dapat
memberi manfaat bagi banyak pihak.
Wassalamu’alaikum Wr. Wb

Yogyakarta, 7 Januari 2011


Penulis

vi
DAFTAR ISI

KATA PENGANTAR v
DAFTAR ISI vii
DAFTAR GAMBAR x
DAFTAR TABEL xiii
DAFTAR LISTING xiv
INTISARI xvi
ABSTRACT xviii
BAB I. PENDAHULUAN
1.1 Latar Belakang Dan Permasalahan 1
1.2 Tujuan Penelitian 2
1.3 Manfaat Penelitian 2
1.4 Batasan Masalah 3
1.5 Metode Penelitian 3
1.6 Sistematika Penulisan 5
BAB II. TINJAUAN PUSTAKA
2.1 Color Thresholding 7
2.2 Gaussian Mixture Model 8
BAB III. LANDASAN TEORI
3.1 Pencemaran Air Sungai 11
3.1.1 Sumber pencemaran air 11
3.1.2 Polutan air 12
3.1.3 Sifat-sifat air terpolusi 14
3.2 Pemrosesan Citra Digital 14
3.3 Citra Digital 15
3.3.1 Jenis citra digital 15
3.4 Fitur (Feature) 18
3.4.1 Warna 19
3.4.2 Motion 20
3.5 Preprocessing 21
3.5.1 Gaussian filtering 21
3.5.2 Grayscale 22
3.6 Statistik Data dan Perhitungan Jarak (Distance Measurement)22
3.6.1 Mean (rata-rata) 22
3.6.2 Standar deviasi 23
3.6.3 Variance 23
3.6.4 Euclidean distance 23
3.7 Segmentasi Citra 24
3.8 Color Thresholding 25
3.8.1 Double color thresholding 25
3.8.2 Multivariable Thresholding 25
3.9 Deteksi Obyek dengan Gaussian Mixture Model 26
3.9.1 Gaussian mixture model 26

vii
3.9.2 Pemrosesan pixel citra (pixel processing) 26
3.9.3 Metode K-Means Clustering 27
3.9.4 Algoritma Gaussian mixture model 28
3.10 Filter Median 31
3.11 Analisis dan Deskripsi Citra 32
3.11.1 Ketetanggaan (Neighborhoods) dan Komponen 32
Terkoneksi (Connected Component)
3.11.2 Luas area 33
3.12 Matlab 33
3.12.1 Sistem matlab 34
BAB IV. ANALISIS DAN PERANCANGAN PROGRAM
4.1 Analisis Permasalahan 35
4.2 Perancangan Metode Deteksi 37
4.3 Program Utama 37
4.4 Preprocessing 41
4.4.2 Gaussian Filter 41
4.4.2 Grayscale 44
4.5. Metode Deteksi Berbasis Fitur Warna 44
4.5.1 Kategori mode “Putih” 44
4.5.2 Kategori mode “Ungu” 47
4.5.3 Kategori mode “Merah” 52
4.5.4 Kategori mode “Biru” 68
4.6 Metode Deteksi Berbasis Fitur Gerak 88
4.6.1 Algoritma Gaussian Mixture Model (GMM) 89
4.7 Analisis dan Deskripsi Citra 93
4.7.1 Luas area obyek 93
4.7.2 Analisis dan deskripsi hasil deteksi limbah 95
4.8 Proses Final 99
4.9 User Interface 99
BAB V. IMPLEMENTASI
5.1 Data Penelitian 102
5.2 Persiapan Implementasi 102
5.3 Implementasi 102
5.3.1 Program utama 102
5.3.2 Preprocessing 103
5.3.3 Metode deteksi berbasis fitur warna 104
5.3.4 Metode deteksi berbasis fitur gerak 133
5.4 Proses Akhir Frame Terdeteksi 139
5.5 Analisis dan Dekripsi Citra 139
5.5.1 Luas area obyek 139
5.5.2 Analisis dan deskripsi hasil deteksi limbah cair 142
5.5.3 Analisis dan deskripsi hasil deteksi limbah padat 144
5.5.4 Proses Final 145
5.6 User Interface 149
5.6.1 Pemilihan data input video dan metode pendeteksian 149
5.6.2. Proses berdasarkan kategori mode deteksi limbah 150

viii
BAB VI. HASIL DAN PEMBAHASAN
6.1 Kategori mode “Putih” 157
6.1.1 Pengujian pada sampel video 157
6.1.2 Analisis Hasil Pengujian Sistem 158
6.1.3 Frame yang gagal dalam pendeteksian limbah 164
6.2 Kategori mode “Ungu” 165
6.2.1 Pengujian terhadap sampel video 165
6.2.2 Analisis hasil pengujian dan pembahasan 166
6.2.3 Frame yang gagal dalam pendeteksian 168
6.3 Kategori mode “Merah” 169
6.3.1 Pengujian pada sampel video 169
6.3.2. Analisis hasil pengujian dan pembahasan 172
6.3.3 Frame yang gagal dalam pendeteksian 181
6.4 Kategori mode “Biru” 182
6.4.1 Pengujian pada sampel video 182
6.4.2 Analisis hasil pengujian 183
6.4.3 Frame yang gagal dalam pendeteksian 188
6.5 Deteksi Limbah Padat Berbasis Fitur Gerak 189
6.5.1 Pengujian pada sampel video 189
6.5.2 Analisis hasil pengujian 191
6.5.3 Frame yang gagal dalam pendeteksian 198
BAB VII. KESIMPULAN
7.1 Kesimpulan 199
7.2 Saran 200
DAFTAR PUSTAKA 201

ix
DAFTAR GAMBAR

Gambar 3.1 Citra digital 15


Gambar 3.2 (a) Citra RGB, (b) Array pixel RBG 16
Gambar 3.3 Citra grayscale 16
Gambar 3.4 Citra biner 17
Gambar 3.5 Citra berindeks 17
Gambar 3.6 Aspek fitur : (a) vector, (b) ruang fitur dan (c) scatter plot 18
Gambar 3.7 Sifat keterpisahan fitur dan jenis-jenis fitur 19
Gambar 3.8 RGB color cube 19
Gambar 3.9 Model warna; (a) model warna aditif, dan (b) model warna
subtraktif 20
Gambar 3.10 Ilustrasi penggunaan filter median 32
Gambar 3.11 Pixel-piksel 8-tetangga 32
Gambar 3.12 Tampilan utama MATLAB 34
Gambar 4.1 Diagram blok metode deteksi secara umum 38
Gambar 4.2 Diagram alir program utama 39
Gambar 4.3 Diagram alir program utama (lanjutan) 40
Gambar 4.4 Diagram alir kernel Gaussian 42
Gambar 4.5 Diagram alir filter Gaussian 43
Gambar 4.6 Tahapan deteksi limbah cair mode “Putih”; (a) citra
asli (b) segmentasi limbah dengan (4.5) (c) segmentasi
limbah dengan (4.6) (d) segmentasi limbah dengan
(4.7) (e) segmentasi limbah dengan gabungan (4.5),
(4.6), (4.7) 46
Gambar 4.7 Diagram alir deteksi limbah cair mode “Putih 47
Gambar 4.8 Tahapan deteksi limbah cair mode “Ungu”; (a) citra
asli (b) segmentasi limbah dengan (4.20) (c) segmentasi
limbah dengan (4.21) (d) segmentasi limbah dengan
(4.22) (e) segmentasi limbah dengan (4.23 (f) segmentasi
limbah dengan gabungan (4.20), (4.21), (4.22),
(4.23) (g) segmentasi limbah gabungan dengan wallMask 50
Gambar 4.9 Diagram alir deteksi limbah cair warna ungu 51
Gambar 4.10 Diagram alir deteksi limbah cair warna ungu (lanjutan) 52
Gambar 4.11 Diagram alir pembentukan wallMask 55
Gambar 4.12 Diagram alir deteksi limbah cair warna merah 56
Gambar 4.13 Diagram alir pengecekkan kondisi pendeteksian 57
Gambar 4.14 Diagram alir aturan deteksi 1 58
Gambar 4.15 Diagram alir aturan deteksi 7 58
Gambar 4.16 Diagram alir aturan deteksi 2 59
Gambar 4.17 Diagram alir aturan deteksi 2 (lanjutan) 60
Gambar 4.18 Diagram alir aturan deteksi 3 61
Gambar 4.19 Diagram alir aturan deteksi 4 62
Gambar 4.20 Diagram alir aturan deteksi 4 (lanjutan) 63
Gambar 4.21 Diagram alir aturan deteksi 5 64

x
Gambar 4.22 Diagram alir aturan deteksi 6 65
Gambar 4.23 Diagram alir aturan 6 (lanjutan) 66
Gambar 4.24 Diagram alir aturan deteksi 8 67
Gambar 4.25 Tahapan deteksi limbah cair mode “Biru”; (a) citra
asli (b) segmentasi limbah dengan (4.40) (c) segmentasi
limbah dengan (4.41) (d) segmentasi limbah dengan
(4.42) (e) segmentasi limbah dengan gabungan (4.40),
(4.41), (4.42) 70
Gambar 4.26 Diagram alir pembentukkan citra wallMask mode “Biru” 71
Gambar 4.27 Diagram alir utama proses pendeteksian limbah mode
“Biru” 72
Gambar 4.28 Diagram alir pengecekkan kondisi pendeteksian 73
Gambar 4.29 Diagram alir pengecekkan kondisi pendeteksian (lanjutan) 74
Gambar 4.30 Diagram alir aturan biru 1 74
Gambar 4.31 Diagram alir aturan biru 2 75
Gambar 4.32 Diagram alir aturan biru 2 (lanjutan) 76
Gambar 4.33 Diagram alir aturan biru 3 77
Gambar 4.34 Diagram alir biru 3 (lanjutan) 78
Gambar 4.35 Aturan deteksi biru 4 79
Gambar 4.36 Aturan deteksi biru 5 80
Gambar 4.37 Aturan deteksi biru 5 (lanjutan) 81
Gambar 4.38 Aturan deteksi biru 6 82
Gambar 4.39 Aturan deteksi biru 7 83
Gambar 4.40 Aturan deteksi biru 8 84
Gambar 4.41 Aturan deteksi biru 9 85
Gambar 4.42 Aturan deteksi 10 86
Gambar 4.43 Aturan deteksi 11 86
Gambar 4.45 Aturan Deteksi Biru 12 87
Gambar 4.46 Aturan Deteksi Biru 14 87
Gambar 4.47 Aturan deteksi Biru 13 88
Gambar 4.48 Blok diagram Gaussian Mixture Model 89
Gambar 4.49 Diagram alir algoritma K-Means 91
Gambar 4.50 Diagram alir metode Gaussian Mixture Model 92
Gambar 4.51 Ilustrasi alur pengecekkan 93
Gambar 4.52 Diagram alir proses perhitungan luas area obyek 95
Gambar 4.53. Diagram alir pengecekan komponen terkoneksi bagian
Pertama 96
Gambar 4.54 Diagram alir pengecekan komponen terkoneksi
bagian kedua 97
Gambar 4.55 Diagram alir pengecekan komponen terkoneksi
bagian ketiga 98
Gambar 4.56 Tampilan rancangan user interface 99
Gambar 5.1 Questdlg pemilihan video dan mode deteksi 150
Gambar 6.1 Tampilan hasil deteksi limbah putih pada GUI 157
Gambar 6.2 Contoh limbah yang berhasil dideteksi 159
Gambar 6.3 Grafik data luas area sampel video putih 1 (a) 161

xi
Gambar 6.4 Grafik data luas area sampel video putih 1 (b) 162
Gambar 6.5 Grafik luas area sampel video putih 2 163
Gambar 6.6 Grafik data luas area sampel video putih 3 164
Gambar 6.7 Grafik data luas area sampel video putih 4 164
Gambar 6.8 (a) Kesalahan deteksi pada dinding yang mirip dengan limbah165
(b) Kesalahan deteksi karena refleksi cahaya matahari pada
permukaan air sungai
Gambar 6.9 Tampilan GUI hasil deteksi limbah cair warna ungu 166
Gambar 6.10 Contoh frame limbah cair ungu yang berhasil dideteksi 167
Gambar 6.11 Grafik data luas area limbah warna ungu 168
Gambar 6.12 Contoh frame video dengan kesalahan deteksi 168
Gambar 6.13 Tampilan GUI deteksi limbah mode “Merah” 169
Gambar 6.14 Contoh frame video ada limbah yang berhasil dideteksi 171
Gambar 6.15 Grafik informasi luas area sampel merah 1 173
Gambar 6.16 Grafik informasi luas area sampel merah 2 174
Gambar 6.17 Data informasi luas limbah sampel merah 3 (a) 175
Gambar 6.18 Data informasi luas limbah sampel merah 3 (b) 176
Gambar 6.19 Data informasi luas area limbah sampel 4 (a) 177
Gambar 6.20 Data informasi luas area limbah sampel 4 (b) 177
Gambar 6.21 Data informasi luas area limbah sampel 5 178
Gambar 6.22 Data informasi luas area limbah sampel 6 179
Gambar 6.23 Data informasi luas area limbah sampel 7 180
Gambar 6.24 Data informasi luas area limbah sampel 8 181
Gambar 6.25 Contoh hasil deteksi limbah cair yang mengalami kegagalan182
Gambar 6.26 Tampilan GUI deteksi limbah cair mode “Biru” 183
Gambar 6.27 Contoh hasil deteksi yang berhasil dengan benar 185
Gambar 6.28 Grafik data informasi luas area video sampel biru 1 186
Gambar 6.29 Grafik data informasi luas area video sampel biru 2 187
Gambar 6.30 Grafik data informasi luas area seluruh frame sampel biru 3 187
Gambar 6.31 Contoh hasil deteksi limbah biru yang gagal 188
Gambar 6.32 Contoh hasil deteksi limbah biru yang berhasil terdeteksi 190
Gambar 6.33 Grafik informasi luas area limbah padat sampel 1 192
Gambar 6.34 Grafik data informasi luas area limbah padat sampel 2 193
(video sampel merah 1)
Gambar 6.35 Grafik data informasi luas area limbah padat sampel 3 194
Gambar 6.36 Grafik informasi luas area limbah padat sampel 4 195
Gambar 6.37 Grafik informasi luas area limbah padat sampel 5 195
Gambar 6.38 Grafik informasi luas area limbah padat sampel 6 196
Gambar 6.39 Luas area pada setiap frame sampel 7 197
Gambar 6.40 Grafik informasi luas area limbah padat sampel 9 197
(video merah 11)
Gambar 6.41 Contoh frame yang mengalami kesalahan pendeteksian 198

xii
xiii
DAFTAR TABEL

Tabel 4.1 Sampel kondisi pada citra limbah 45


Tabel 4.2 Sampel kondisi citra limbah ungu 48
Tabel 4.3 Sample kondisi citra limbah “merah” 53
Tabel 4.4 Sampel kondisi citra limbah 68
Tabel 6.1 Hasil Pengujian Deteksi Limbah warna Putih 158
Tabel 6.2 Data luas area hasil pengujian 160
Tabel 6.3 Hasil pengujian deteksi limbah warna ungu 165
Tabel 6.4 Data hasil pendeteksian limbah cair ungu 167
Tabel 6.5 Hasil Pengujian 170
Tabel 6.6 Data hasil pendeteksian limbah cair merah 172
Tabel 6.7 Hasil pengujian deteksi limbah warna Biru 184
Tabel 6.8 Data luas area hasil pengujian 184
Tabel 6.9 Data luas area limbah padat pada cuplikan frame sampel 190
Tabel 6.10 Hasil pengujian deteksi limbah padat berbasis fitur gerak. 191

xiii
DAFTAR LISTING

Listing 5.1 Fungsi kernel filter Gaussian 103


Listing 5.2 Program FilterGauss31 104
Listing 5.3 Fungsi program hitungCentroid 105
Listing 5.4 Fungsi program segmenLiquidPutih 105
Listing 5.5 Program deteksi dinding dan hitung nilai persen mode ungu 106
Listing 5.6 Aturan kondisi deteksi limbah ungu 107
Listing 5.7 Deteksi dinding dan hitung nilai persen mode merah 109
Listing 5.8 Aturan deteksi merah 1 110
Listing 5.9 Aturan deteksi merah 2 111
Listing 5.10 Aturan deteksi merah 3 112
Listing 5.11 Aturan deteksi merah 4 112
Listing 5.12 Aturan deteksi merah 5 114
Listing 5.13 Aturan deteksi merah 6 115
Listing 5.14 Aturan deteksi merah 7 116
Listing 5.15 Aturan deteksi merah 8 117
Listing 5.16 Program tahap awal mode biru 119
Listing 5.17 Aturan deteksi biru 1 120
Listing 5.18 Aturan deteksi biru 2 120
Listing 5.19 Aturan deteksi Biru 3 122
Listing 5.20 Aturan deteksi Biru 4 123
Listing 5.21 Aturan deteksi biru 5 124
Listing 5.22 Aturan deteksi biru 6 126
Listing 5.23 Aturan deteksi biru 7 127
Listing 5.24 Aturan deteksi biru 8 128
Listing 5.25 Aturan deteksi biru 9 129
Listing 5.26 Aturan deteksi biru 10 130
Listing 5.27 Aturan deteksi biru 11 130
Listing 5.28 Aturan deteksi biru 12 131
Listing 5.29 Aturan deteksi biru 13 132
Listing 5.30 Aturan deteksi biru 14 132
Listing 5.31 Pembacaan input GMM K, alpha, dan thresh 133
Listing 5.32 Inisialisasi parameter GMM 133
Listing 5.33 Fungsi program hitung Euclidean distance 135
Listing 5.34 Fungsi algoritma K-Means 136
Listing 5.35 Fungsi program Algoritma GMM 137
Listing 5.36 Mengubah biner menjadi warna obyek hasil deteksi 139
Listing 5.37 Fungsi program hitung luas area obyek 140
Listing 5.38 Program perhitungan standar deviasi luas area limbah cair 143
Listing 5.39 Listing program hitung standar deviasi intensitas limbah cair 144
Listing 5.40 Deskripsi obyek limbah cair 145
Listing 5.41 Perhitungan standar deviasi luas area limbah padat 146
Listing 5.42 Perhitungan standar deviasi intensitas pixel obyek limbah
padat 147

xiv
Listing 5.43 Program penyimpanan data untuk limbah cair 147
Listing 5.44 Dekripsi obyek limbah padat 148
Listing 5.45 Program penyimpanan data untuk limbah padat 148
Listing 5.46 Proses analisis akhir 149
Listing 5.47 Pemilihan data & mode deteksi pada GUI (function:
pilihVideo) 151
Listing 5.48 Proses deteksi dan analisis citra pada tiap mode 152
Listing 5.49 Proses deteksi pada mode “Putih” 153
Listing 5.50 Proses deteksi pada mode “Merah” 154
Listing 5.51 Proses deteksi pada mode “Ungu” 155
Listing 5.52 Proses deteksi pada mode “Biru” 156

xv
INTISARI

PEMROSESAN VIDEO UNTUK DETEKSI LIMBAH CAIR


PEWARNA BATIK DAN LIMBAH PADAT AIR SUNGAI
BERBASIS CIRI WARNA DAN GERAK

Oleh

Ika Candradewi
06/194507/PA/10988

Aktifitas industri batik selain menghasilkan produk juga menghasilkan buangan


berupa limbah zat pewarna. Pengaruh dominan terjadinya pencemaran adalah
aktifitas kehidupan manusia yang menghasilkan limbah rumah tangga. Pada
umumnya kedua limbah tersebut dibuang ke perairan sungai tanpa pemrosesan
terlebih dahulu sehingga memberi dampak pada menurunnya kualitas air sungai, dan
kerusakan ekosistem air sungai. Oleh karena itu dibutuhkan suatu sistem yang dapat
mendeteksi limbah cair pewarna batik dan limbah padat air sungai yang bertujuan
untuk mengetahui informasi luas area polutan sungai sebagai bagian dari sistem
pemantauan lingkungan berbasis visual, sehingga dapat dilakukan tindakan lebih
lanjut untuk mengurangi masalah pencemaran air sungai.
Metode yang digunakan pada pendeteksian limbah cair adalah color thresholding
pada ruang warna RGB, berdasarkan jenis warna limbah dan pola kondisi tertentu.
Metode yang digunakan pada pendeteksian limbah padat adalah Gaussian Mixture
Model untuk mendeteksi gerakan obyek yang dilakukan berdasarkan proses update
parameter GMM, yakni nilai means, standar deviasi, dan bobot. Setelah limbah
berhasil dideteksi dilanjutkan dengan analisis dan deskripsi citra yang
direpresentasikan dengan rata-rata luas area tiap obyek dan standar deviasi luas obyek
pada setiap framenya.
Hasil pengujian menunjukkan metode deteksi limbah cair memiliki tingkat
keberhasilan yang baik, tingkat keberhasilan pendeteksian limbah putih 70,5 % - 100
%, pendeteksian limbah warna ungu sebesar 89,47 %, pendeteksian limbah warna
merah terletak pada range 75,12 % - 100 %, dan pendeteksian limbah biru adalah
70,36 % - 92,98 %, pada kamera yang bergerak tingkat keberhasilan hanya 21,52 %.
Pada metode deteksi limbah padat dilakukan analisa terhadap 8 sampel video dengan
kamera yang relatif statis, tingkat keberhasilan yang diperoleh sebesar 34,58 % -
79,04%.
Analisis luas area dari hasil pendeteksian limbah cair menunjukkan pada saat video
diambil rata-rata luas area limbah cair dominan berada dalam rentang yang besar dan
beragam sesuai dengan volume limbah yang berada pada daerah sungai. Analisis luas
area limbah padat yang terdeteksi menunjukkan padatan berupa lumut kehijauan
memiliki rata-rata luas area pada range 46,16 – 90,90 pixel tiap obyeknya dan

xvi
padatan berupa plastik memiliki rata-rata luas area pada range 96,26 – 120,19 pixel
dengan frame video berukuran 320x240 pixel.

Kata kunci : deteksi limbah cair pewarna batik, deteksi limbah padat, ciri warna dan
gerak, color thresholding, Gaussian Mixture Model,

xvii
ABSTRACT

VIDEO PROCESSING FOR LIQUID POLLUTANT OF


BATIK COLORANT AND SOLID POLLUTANT DETECTION
IN FLOWING WATER BASED ON COLOR AND MOTION FEATURES

By

Ika Candradewi
06/194507/PA/10988

Batik industrial activities in addition to providing products also produce waste


disposal in the form of batik colorant. The dominant influence of pollution is the
human life activities that generate household waste. In general, both the waste water
discharged into rivers without any processing in advance so that an impact on
decreasing water quality, and damage to river ecosystems. Therefore needed a system
that can detect liquid pollutant of batik colorant and solid pollutant in flowing water
which aims to find out information on area of pollutants as part of a visual-based
environmental monitoring system, so it can be further action to reduce flowing water
pollution problems.
The method used in the detection of liquid waste is color thresholding in RGB color
space, based on the type of liquid pollutant color and pattern under certain conditions.
The method used in the detection of solid waste is a Gaussian Mixture Model to
detect movement of objects that works based on the process of updating GMM
parameters covered by means, standar deviation and weight. After successfully
detected pollutant followed by analysis and description of the image represented by
the average area of each object and standard deviation of the object area in each
frame.
The test results showed the detection method of liquid waste has a good success
rate, the success rate of detection of white liquid pollutant 70.5% - 100%, The
detection of purple liquid pollutant detecting by 89.47%. Red liquid pollutant
detection lies in the range 75.12% - 100%, and detection of blue liquid pollutant is
70.36% - 92.98%, while for a moving camera is only 21.52% success rate. In the
detection method of solid pollutant carried out an analysis of eight samples with a
video camera that is relatively static, the success rate obtained for 34.58% - 79.04%.
Analysis of the detection results, area of the pollutant showed that when the video
was taken the average area of the liquid pollutant being dominant in a large and
diverse range according to the volume of pollutant that is in the river area. Extensive
analysis of the detected area of solid pollutant shows a moss-green solids have an
average land area in the range of 46.16 to 90.90 pixels per object and solids pollutant
in the form of plastic has an average area in the range of 96.26 to 120.19 pixel with
the video frame size of 320x240 pixels.

xviii
Key words : liquid pollutant of batik colorant detection, solid pollutant detection,
color and motion feature, color thresholding, Gaussian Mixture Model

xix
BAB I
PENDAHULUAN

1.1 Latar Belakang Dan Permasalahan


Sungai merupakan salah satu sumber air yang memberikan banyak manfaat
bagi kehidupan manusia. Kondisi air sungai, baik dari segi kuantitas maupun
kualitasnya selalu mengalami perubahan sesuai dengan perkembangan lingkungan
dan karakteristik air sungai. Selain itu juga dipengaruhi oleh pola hidup manusia
disekitarnya. Aktifitas industri selain menghasilkan produk, juga menghasilkan
buangan atau limbah yang menyebabkan pencemaran. Bahkan ironisnya sebagian
besar industri membuang limbahnya ke perairan sungai tanpa pemrosesan terlebih
dahulu. Selain itu pengaruh dominan terjadinya pencemaran yang sangat terlihat
adalah kerusakan yang diakibatkan oleh aktifitas kehidupan manusia yang
menghasilkan limbah rumah tangga. Limbah-limbah tersebut dapat berupa polutan
padat maupun polutan cair.
Sungai Bengawan Solo merupakan salah satu contoh sungai dengan tingkat
pencemaran yang memprihatinkan. Berdasarkan hasil penelusuran perjalanan
jurnalistik tim ekspedisi Bengawan Solo kompas pada tahun 2007, diketahui
kualitas air sungai Bengawan Solo memburuk akibat pencemaran limbah industri,
dan limbah rumah tangga seperti plastik, kaleng, kotoran manusia, maupun
kotoran dari usaha peternakan. Pencemaran oleh limbah plastik meninggalkan
jejak dengan berbagai jenis dan warna, hal ini terlihat pada pohon di pinggir
badan sungai yang dipenuhi plastik. Air yang mengalir dari sejumlah anak sungai
ke Bengawan Solo tampak berwarna coklat, biru, dan merah-keunguan, serta
menebarkan aroma tidak sedap. Berbagai jenis limbah, yakni limbah dari pabrik
tekstil, pabrik kimia, atau pabrik tapioka, dibuang ke sungai Bengawan Solo. Hal
senada juga terjadi di sungai-sungai yang berada di Daerah Istimewa Yogyakarta
yakni sungai Code, Winongo, dan Gadjahwong.
Fenomena pencemaran ini akan berdampak pada menurunnya kualitas air
sungai, seperti air yang berubah warna dan bau yang tidak sedap serta kerusakan

1
2

ekosistem air yang pada akhirnya akan menimbulkan dampak negatif bagi
kehidupan manusia itu sendiri. Oleh karena itu dibutuhkan suatu sistem
pendukung yang menjadi alternatif baru yakni sistem yang dapat memantau
keadaan air sungai agar dapat dilakukan tindakan lebih lanjut sehingga
pencemaran sungai dapat diminimalkan.
Deteksi limbah cair dan limbah padat pada air sungai adalah bagian yang
penting dari suatu sistem pemantauan lingkungan air sungai berbasis sistem visual
yang menggunakan data berupa frame video atau citra digital, karena proses
pengambilan keputusan tentang kualitas air sungai ataupun informasi tentang
polutan sungai hanya dapat dilakukan jika limbah cair maupun limbah padat dapat
terdeteksi. Oleh karena itu dibutuhkan metode untuk mendeteksi limbah cair dan
limbah limbah padat. Salah satu parameter pencemaran yang dapat terlihat adalah
warna air sungai yang berubah akibat cairan limbah. Jenis limbah padat yang
memiliki ciri ukuran dan massa relatif ringan, cenderung bergerak mengikuti
aliran sungai sehingga dapat dilakukan pendeteksian terhadap limbah padat yang
tidak terendap atau yang bergerak. Berdasarkan ciri warna dan gerak ini akan
dilakukan riset/penelitian menggunakan teknik pemrosesan citra digital dalam
mendeteksi limbah cair dan limbah padat yang digunakan untuk mengetahui
kuantitas (luas) pencemaran air sungai.

1.2 Tujuan Penelitian


Tujuan yang ingin dicapai dari penelitian ini adalah membuat program yang
digunakan dalam mendeteksi limbah cair pewarna batik dan limbah padat,
berbasiskan ciri warna dan gerak, untuk mengetahui area polutan air sungai
dengan mengimplementasikan teknik pemrosesan citra digital sebagai bagian dari
sistem pemantauan lingkungan.

1.3 Manfaat Penelitian


Manfaat dari penelitian ini adalah:
1. Dapat digunakan untuk membangun sistem monitoring pencemaran air
sungai atau pada water quality control berbasis pemrosesan citra atau video.
3

2. Dapat digunakan sebagai salah satu metode untuk segmentasi citra limbah
3. Dapat digunakan sebagai salah satu metode pendeteksian berbasis
pemrosesan citra digital.

1.4 Batasan Masalah


Penelitian ini terbatas pada hal-hal sebagai berikut:
1. Mendeteksi limbah cair berdasarkan kategori pewarna batik yang dominan
terlihat yakni yang berwarna putih, merah, ungu, dan biru dengan syarat
berbeda dari warna dasar sungai sebagai background.
2. Mendeteksi limbah pada lokasi tertentu (khusus) hanya lokasi yang menjadi
obyek dari penelitian atau untuk limbah cair yang memiliki ciri hampir sama
dengan obyek penelitian.
3. Mendeteksi limbah dengan lingkungan sekitar sungai memiliki dinding
sungai yang dominan berwarna putih-kecoklatan atau putih-kehijauan.
4. Mendeteksi limbah padat bergerak, berbasis pada ciri gerak pada jenis
pengambilan video yang relatif statis (tidak bergerak) .
5. Pada penelitian ini digunakan data sekunder berupa video belum secara
realtime, obyek penelitian diambil dari sungai yang berada di kota Solo, dan
beberapa sungai di daerah Yogyakarta.
6. Mendeteksi limbah sebelum malam hari, atau dengan kata lain mendeteksi
hanya saat ada sumber cahaya matahari.

1.5 Metodologi Penelitian


Metodologi penelitian yang dilakukan oleh penulis pada studi ini adalah
sebagai berikut :
1. Studi Literatur dan referensi
Tahap ini dilakukan dengan mempelajari artikel, makalah, jurnal, karya tulis
dari internet, serta buku-buku yang terkait dengan penelitian yang dilakukan,
seperti teknik pemrosesan citra digital, segmentasi citra, dan sistem
pengenalan pola untuk kemudian diambil sebagai referensi dan acuan dalam
merancang dan membuat penelitian ini.
4

2. Konsultasi dan Diskusi


Pada tahap ini dilakukan pengumpulan fakta-fakta yang mendukung
perancangn sistem dengan melakukan konsultasi pada dosen pembimbing dan
orang yang ahli di bidang pemrosesan citra digital untuk mendapatkan saran
yang baik selama proses penelitian berlangsung.
3. Pengumpulan bahan penelitian
Pada tahap ini adalah proses akuisisi data berupa pengambilan video sungai,
yang dilakukan dengan menggunakan kamera untuk kemudian diproses
ataupun berupa pengumpulan data sekunder yang telah tersedia.
4. Analisis dan Perancangan Sistem
Perancangan dan implementasi berupa pembuatan rancangan program
pemrosesan citra digital. Perancangan program terdiri dari tiga bagian yaitu:
preprocessing, deteksi obyek, dan analisis deskripsi citra limbah. Pada tahap
awal analisis dilakukan terhadap citra pada beberapa kondisi pengambilan
data yang mewakili beberapa frame pada data video. Pada tahap deteksi
obyek dibagi menjadi 2 metode yakni Gaussian Mixture Model (GMM) untuk
pemrosesan data video berbasis gerak dalam mendeteksi limbah padat yang
bergerak mengikuti aliran air dan metode thresholding warna untuk deteksi
limbah cair berbasis fitur warna. Hasil deteksi obyek digunakan untuk
melakukan analisis dan deskripsi citra obyek melalui perhitungan luasan area
limbah (pencemaran air sungai) dan standar deviasi intensitas warna obyek.
Keseluruhan proses dilakukan dengan menggunakan alat bantu aplikasi
MATLAB R2010a.
5. Implementasi
Setelah program dirancang, selanjutnya diimplementasikan secara
keseluruhan kedalam program yang mencakup tahap : preprocessing,
segmentasi dinding (wall masking), segmentasi limbah cair, deteksi gerakan
limbah dan limbah padat bergerak, analisis dan deskripsi citra melalui
perhitungan luasan area limbah dan standar deviasi intensitas pada citra
obyek.
5

6. Pengujian dan Analisis Hasil Penelitian


Melakukan pengujian sistem secara keseluruhan, kemudian dari hasil yang
diperoleh dilakukan analisis perhitungan keakuratan dari sistem yang dibuat.
7. Penyusunan laporan dan kesimpulan akhir
Pada tahap ini dilakukan penyusunan laporan hasil analisis dari penelitian
yang dilakukan ke dalam format penulisan skripsi dengan disertai kesimpulan
akhir.

1.6 Sistematika Penulisan


Secara garis besar penulisan laporan penelitian ini terdiri dari tujuh bab, yaitu:
1. BAB I : PENDAHULUAN
Bab ini menjelaskan tentang latar belakang dan permasalahan, batasan
masalah, tujuan penelitian, manfaat penelitian, metodologi penelitian, dan
sistematika penulisan.
2. BAB II : TINJAUAN PUSTAKA
Bab ini menjelaskan tentang hasil penelitian terdahulu yang pernah dilakukan
pada topik yang sama atau serupa. Berdasarkan analisis terhadap pustaka
tersebut peneliti dapat membatasi masalah dan ruang lingkup penelitian, serta
menemukan variabel penelitian yang penting dan hubungan antar variabel
tersebut.
3. BAB III : DASAR TEORI
Bab ini berisikan tentang dasar teori yang dapat menunjang perancangan dan
analisis dalam penelitian yang meliputi: Pencemaran Air Sungai, Pemrosesan
Citra Digital, Citra Digital dan Video, Jenis Citra Digital, Preprocessing,
Thresholding warna, Definisi Fitur atau Ciri, Gaussian Mixture Model,
Algoritma K-means, Statistik Data, Segmentasi, dan Matlab
4. BAB IV : ANALISIS DAN PERANCANGAN PROGRAM
Bab ini merupakan perancangan program yang terdiri dari pembuatan
rancangan proses, rancangan user interface, analisis variabel permasalahan,
dan metode yang dibutuhkan dalam penelitian. Rancangan program terdiri
atas: deteksi obyek berbasis fitur warna yang meliputi preprocessing, wall
6

masking, segmentasi limbah cair. Deteksi obyek berbasis fitur gerak


berdasarkan algoritma Gaussian Mixture Model serta proses analisis dan
deskripsi (luas pencemaran dan standar deviasi intensitas warna obyek).
5. BAB V : IMPLEMENTASI
Bab ini menguraikan tentang implementasi sistem secara detail sesuai
rancangan yakni penjelasan tentang program yang dibuat dengan bahasa
pemograman Matlab R2010a.
6. BAB VI : HASIL DAN PEMBAHASAN
Bab ini menyajikan hasil pengujian yang meliputi program deteksi limbah
padat dan limbah cair yang ditampilkan dalam GUI dan kemudian dilakukan
pembahasan dan analisis hasil penelitian berdasarkan kajian pustaka dan
dasar teori. Selain itu juga terdapat hasil deteksi limbah cair dan padat yang
gagal, pembahasannya serta kendala yang dihadapi ketika penelitian.
7. BAB VII : KESIMPULAN
Bab ini berisi kesimpulan dari hasil penelitian yang diperoleh dan saran untuk
penelitian atau pengembangan program lebih lanjut.
BAB II
TINJAUAN PUSTAKA

2.1 Color Thresholding


Penelitian mengenai pendeteksian terhadap suatu obyek yang spesifik berbasis
fitur warna telah banyak dilakukan. Salah satunya adalah penelitian dengan
menggunakan metode color thresholding. Pada dasarnya metode color thresholding
digunakan berdasarkan pada pengetahuan dasar (knowledge base) warna obyek yang
akan dideteksi.
Penelitian dilakukan terhadap aplikasi robocup competition yakni kompetisi robot
pemain sepak bola menggunakan kamera sebagai sensornya untuk mendeteksi bola
dan posisi gawang, lawan, kawan, dan lokasi tanda jalur putih pada lapangan serta
melakukan realtime tracking dengan metode thresholding pada ruang warna YUV.
Bola dideteksi berdasarkan pengetahuan warnanya, begitupula keberadaan tembok.
Langkah pertama dicari batas bawah (lowerthresh) dan batas atas (upperthresh) untuk
tiap komponen warna(YUV), pengecekkan dilakukan dengan kontrol logika. Suatu
pixel dianggap obyek jika nilai pixel berada diatas lowerthresh dan nilai pixel
dibawah upperthresh. Tiap class merepresentasi sebuah warna, pada tiap kelas
kemudian dilakukan operasi AND di setiap elemen array yang mengindikasikan kelas
warna obyek. Tahap akhir adalah pengelompokkan warna dengan karakteristik nilai
warna tertentu yang diinginkan setelah proses thresholding digabungkan menjadi satu
wilayah (region) obyek yang terdeteksi. (Bruce et al, 2000).
Perhitungan nilai threshold untuk mendeteksi obyek dapat dilakukan dengan
perhitungan jarak antara tiap pixel citra terhadap nilai centroidnya. Percobaan
dilakukan pada ruang warna RGB dan memberikan hasil yang baik untuk aplikasi
realtime video. Teknik ini digunakan untuk mendeteksi suatu warna tertentu dalam
citra, sedangkan pixel lain yang tidak memenuhi persyaratan nilai threshold dianggap

7
8

sebagai background dengan asumsi warna background adalah hitam. Hal ini
dilakukan dengan menetapkan nilai radius warna sebagai nilai threshold. Setiap
warna yang berada di dalam radius tersebut akan terlihat sebagai daerah yang
disegmentasi. Suatu warna obyek diperoleh dengan cara menghitung jarak antar pixel
yang akan dievaluasi dari pusat intensitas warna obyek, dan membandingkannya
dengan radius, sehingga range pada masing-masing komponen, dapat direduksi
menjadi 1 saja (Heuvalmans, 2005).

2.2 Gaussian Mixture Model


Penelitian terhadap deteksi objek yang bergerak di lingkungan outdoor telah
banyak dilakukan diantaranya adalah dengan menggunakan Gaussian Mixture Model
untuk mendeteksi gerakan pada video.
Gaussian Mixture Model adalah sebuah metode yang adaptif, dimana setiap pixel
pada citra dimodelkan sebagai K distribusi yang direpresentasikan dalam parameter-
parameter Gaussian Mixture Model. Kemudian proses adaptasi terhadap perubahan
yang terjadi dievaluasi melalui proses update parameter weight, standard deviation,
dan means. Setiap pixel dikelompokkan berdasarkan distribusi yang dianggap paling
efektif sebagai model latar belakang. Estimasi dari parameter dalam Gaussian mixture
model dilakukan melalui EM (Expectation Maximization) yang selalu diperbaharui,
atau melalui pendekatan algoritma K-means. Hasil penelitian menunjukkan bahwa
metode ini merupakan suatu pendeteksian pixel yang stabil terhadap perubahan
pencahayaan, gerakan berulang-ulang, dan perubahan tampilan lingkungan jangka
panjang. Metode ini tidak selalu dapat beradaptasi dengan perubahan lingkungan
seperti gangguan bayangan, refleksi pada benda cair dan obyek pada foreground yang
relatif statis. (Stauffer dan Grimson, 1999).
Pada penelitian yang berjudul “ Motion Object Detecion and Tracking Based on
Adaptive Background Substraction“ yang bertujuan untuk membangun sebuah sistem
monitoring dan proses tracking obyek, menggunakan metode Gaussian Mixture
Model untuk membangun suatu initial background. Dari hasil penelitian tersebut
9

dapat diketahui bahwa metode ini dapat mendeteksi gerakan obyek dalam berbagai
kondisi perubahan cahaya lambat baik pada saat cerah, berawan, hujan, dan kondisi
malam hari. Metode ini juga dapat beradaptasi dengan berbagai keadaan background
seperti gedung, dedaunan yang bergerak, jalan raya, cahaya monitor, repetitive
motion seperti gelombang air (Ling, 2005)
Parameter dalam Gaussian Mixture Model terdiri dari K, alpha sebagai learning
rate digunakan untuk mengupdate parameter weight, digunakan untuk mengupdate
parameter standar deviasi dan nilai mean. Pengembangan metode dilakukan oleh
Power dan Schoones (2002) dalam penelitiannya yang berjudul “Understanding
Background Mixture Model for Foreground Segmentation”. Sebuah background pada
rekaman video tidak selalu dalam keadaan statis, sering kali pada background
terdapat obyek bergerak yang dapat mengakibatkan kesalahan pendeteksian terhadap
obyek (foreground). Pengembangan yang dilakukan dalam penelitian ini salah
satunya mengunakan learning rate yang adaptive terhadap durasi input video. Nilai
perlu diubah untuk mendapatkan perhitungan dan pemrosesan yang lebih cepat, yang

menurut Stauffer dan Grimson = ( | , ) menjadi ≈ , nilai
0 ℎ
( | , ) atau nilai Gaussian Probability Density Function membutuhkan
komputasi yang lama dan menghasilkan perubahan antar frame yang tidak signifikan.
Pada penelitian ini juga dikemukakan bahwa peningkatan nilai K=7, dalam
prakteknya tidak meningkatkan performa pemrosesan, karena jika dibandingkan
dengan pemodelan distribusi yang nilai K=5 hasilnya tidak jauh berbeda.
Pengembangan lainnya yang dilakukan oleh Scoonees adalah proses update learning
rate. Pengembangan tersebut dilakukan dengan menetapkan suatu nilai minimum
alpha (αmin), jika nilai alpha lebih besar samadengan αmin maka nilai alpha
didefinisikan sebagai suatu inisial variabel waktu αt = 1/t. Jika tidak memenuhi
kondisi tersebut maka nilai alpha α = αmin.
10

Ribeiro dan Gonzaga (2006) menyatakan dalam penelitiannya yang berjudul


“Hand Image Segmentation in Video Sequence by GMM: a Comparative Analysis”
menyatakan bahwa metode Gaussian Mixture Model berdasarkan metode Power dan
Schoones (2002) memberikan hasil yang paling baik, untuk segmentasi tangan
berdasarkan gerakan dan segmentasi citra tangan jika dibandingkan dengan 2 metode
lainnya yaitu GMM murni stauffer dan Grimson (1999) dan metode GMM berbasis
warna dan depth oleh KadewTraKuPong dan Bowden (2001).
BAB III
LANDASAN TEORI

3.1. Pencemaran Air Sungai


Menurut Keputusan Menteri Negara Kependudukan dan Lingkungan Hidup
NO. 02/MENKLH/I/1988 yang dimaksud dengan polusi atau pencemaran air dan
udara adalah masuk atau dimasukkannya makhluk hidup, zat, energi, atau
komponen lain ke dalam air/udara, atau berubahnya tatanan (komposisi) air/udara
oleh kegiatan manusia atau oleh proses alam, sehingga kualitas air/udara turun
sampai tingkat tertentu yang menyebabkan air/udara menjadi kurang atau tidak
dapat berfungsi lagi sesuai dengan peruntukannya (Fardiaz, 1992).
Polusi air adalah penyimpangan sifat-sifat air dari keadaan normal, bukan dari
kemurniannya. Bahan-bahan yang mencemari air sehingga menyimpang dari sifat
air normal disebut sebagai polutan. Air yang tersebar dialam tidak pernah terdapat
dalam bentuk murni, tetapi bukan berarti semua air terpolusi. Air yang tidak
terpolusi tidak selalu merupakan air murni, tetapi air yang tidak mengandung
bahan-bahan asing tertentu dalam jumlah melebihi batas yang ditetapkan sehingga
air tersebut dapat digunakan secara normal untuk keperluan tertentu, misalnya air
minum, berenang atau rekreasi, kehidupan hewan air (air sungai, danau),
pengairan dan keperluan industri.
3.1.1. Sumber pencemaran air
Secara umum, sumber pencemaran air dapat dikatagorikan menjadi 2 (dua),
yaitu sumber kontaminasi langsung, dan tidak langsung. Sumber langsung
meliputi efluen yang keluar dari industri, TPA, rumah tangga, dan lain
sebagainya. Sumber tak langsung adalah kontaminan yang memasuki badan air
dari tanah, air tanah atau atmosfer. Sumber limbah berdasarkan asalnya dapat
dibedakan menjadi dua yaitu limbah domestik adalah semua limbah yang berasal
dari dapur, limbah plastik, sisa makanan atau sisa sayuran, busa deterjen pencuci
pakaian, apotek, limbah rumah sakit, rumah makan yang secara kualitatif limbah
tadi terdiri atas zat organik baik berupa padat atau cair, bahan berbahaya, dan

11
12

beracun (B3). Limbah non-domestik sangat bervariasi, terlebih-lebih untuk limbah


pabrik detergen yang menghasilkan limbah fosfat dan sulfur, serta industri
peternakan yang menghasilkan limbah kotoran hewan. (Sastrawijaya, 2000).
3.1.2. Polutan air
Air yang terpolusi selalu mengandung padatan pada penelitian ini difokuskan
terhadap limbah padat dan limbah cair kategori pewarna batik yang merupakan
cairan tersuspensi dan koloid.
Limbah Padat
Limbah padat adalah bahan buangan yang berbentuk padat. Biasanya limbah
padat ini yang disebut sebagai sampah. Segala limbah yang tidak dapat atau sulit
untuk terurai/busuk secara alami oleh mikroorganisme pengurai, seperti plastik,
kertas, dan karet. Klasifikasi limbah padat (sampah) menurut istilah teknis ada 6
kelompok, yaitu :
a. Sampah organik mudah busuk (garbage), yaitu limbah padat semi basah,
berupa bahan-bahan organik yang mudah busuk.
b. Sampah anorganik dan organik tak membusuk (rubbish), yaitu limbah padat
anorganik atau organik yang cukup kering yang sulit terurai oleh
mikroorganisme, sehingga sulit membusuk, misalnya kertas, plastik, kaca,
dan logam.
c. Sampah abu (ashes), yaitu limbah padat yang berupa abu, biasanya hasil
pembakaran.
d. Sampah bangkai binatang (dead animal), yaitu semua limbah yang berupa
bangkai binatang.
e. Sampah sapuan (street sweeping), yaitu limbah padat hasil sapuan jalanan
yang berisi berbagai sampah yang tersebar di jalanan.
f. Sampah industri (industrial waste), semua limbah padat buangan industri.

Pendeteksian limbah padat pada penelitian ini terbatas pada limbah padatan
yang tidak terendap dan memiliki massa yang relatif ringan sehingga terapung
atau melayang diatas permukaan air dan bergerak mengikuti arus aliran air sungai.
13

Limbah cair pewarna batik


Limbah cair adalah segala jenis limbah yang berwujud cairan, berupa air
beserta bahan-bahan buangan lain yang tercampur (tersuspensi) maupun terlarut
dalam air. Limbah cair dalam penelitian ini terbatas pada limbah cair industri dari
pewarnaan kain/bahan industri batik. Industri seperti tekstil memiliki limbah
dengan kandungan senyawa aktif biru matilen.
Limbah cair industri batik dihasilkan dari berbagai tahapan proses pembuatan
batik, dimana pada setiap proses akan dihasilkan jenis limbah yang berbeda. Pada
proses pencelupan (pewarnaan) umumnya penyumbang warna yang kuat dan
mudah terdeteksi, kebanyakkan penggunaan bahan pencelup dengan struktur
molekul organik yang mat stabil tidak dapat dihancurkan dengan proses biologis.
Senyawa organik maupun anorganik yang terdapat dalam limbah cair industri
batik berupa: karbohidrat, protein, lemak, surfaktan, dan zat organik aromatik
seperti zat warna, zat pencelup, alkali, asam, dan garam. (Kasam, et.al., 2009).
Jika limbah cair batik ini dialirkan langsung ke lingkungan tanpa pengolahan
terlebih dahulu maka menurunkan kualitas air dan merusak lingkungan tersebut.
Zat warna yang digunakan dalam pencelupan (proses pemasukkan zat warna
dalam serat bahan mori), menurut sumber asalnya digolongkan menjadi 2 yaitu :
a. Zat warna batik alami yaitu zat warna yang berasal dari bahan-bahan alam
seperti dari ekstrak tumbuhan atau hewan, seperti jenis indigofera (daun
pohon nila), kulit pohon soga tingi, kayu tegeran, kunyit, teh, akar mengkudu,
kulit soga jambal, kesumba, daun jambu biji.
b. Zat warna sintetis adalah zat warna buatan yang dibuat melalui proses reaksi
kimia dengan bahan dasar ter arang batu-bara atau minyak bumi. Zat warna
sintesis memiliki jenis warna bermacam-macam, dan lebih praktis dalam
penggunaannya. Contoh proses pewarnaannya adalah pertama proses
pencelupan azo (napthol) yang berwarna kebiruan atau keunguan. Zat warna
ini tidak larut dalam air, Kedua adalah pembangkitan warna dengan larutan
dioxo aatau nyareni, yang terdiri dari garam diazonium.
14

3.1.3. Sifat – sifat air terpolusi


Sifat-sifat fisik air yang umum diuji dan dapat digunakan untuk mendeteksi
adanya polusi air diantaranya bau, rasa, dan warna. Rupa air dalam sungai tidak
tetap, perubahan rupa air ini disebabkan bahan-bahan tersuspensi dan terlarut.
Pada kondisi normal konsentrasi bahan-bahan ini rendah, sehingga tidak tampak.
Sifat transparan ada hubungannya dengan produktivitas air sungai yaitu
kemampuan mendukung kehidupan. Padatan terlarut dan tersuspensi
mempengaruhi ketransparanan dan warna air. Cahaya tidak dapat tembus banyak
jika konsentrasi bahan tersuspensi tinggi selain itu warna air juga ada
hubungannya dengan kualitas air (Sastrawijaya, 2000).

3.2. Pemrosesan Citra Digital


Pemrosesan citra digital merupakan suatu proses yang bertujuan untuk
memanipulasi dan menganalisis citra menggunakan bantuan komputer. Pada
umumnya operasi – operasi pemrosesan citra dapat dikelompokkan menjadi dua
kegiatan, yaitu:
a. Memperbaiki kualitas citra agar lebih mudah diinterprestasi oleh mata manusia.
b. Mengolah informasi pada suatu citra, untuk keperluan pengenalan obyek secara
otomatis.
Pada proses akuisisi, citra yang diolah ditransformasikan dalam suatu
representasi numerik. Proses selanjutnya representasi numerik tersebutlah yang
akan diolah secara digital oleh komputer. Pada umumnya operasi dalam
pemrosesan citra digital terdapat lima proses (Wijaya dan Prijono, 2007), antara
lain :
1. Perbaikkan citra (image restoration)
2. Peningkatan kualitas citra (image enchancement)
3. Registrasi citra (image registration)
4. Pemampatan data citra (image data compaction)
5. Pemilahan citra (image reconstruction)
15

3.3. Citra Digital


Citra merupakan suatu fungsi intensitas dalam bidang dua dimensi f(x,y)
dimana x dan y menunjukkan koordinat spasial, dan nilai f pada suatu titik (x,y)
sebanding dengan tingkat kecerahan atau graylevel dari citra pada titik tersebut.
Citra digital adalah citra yang telah mengalami perubahan dari citra dua dimensi
yang kontinu menjadi citra diskrit melalui proses digitalisasi (discrete form) pada
koordinat spasialnya maupun tingkat intensitasnya.
Citra digital direpresentasikan sebagai suatu matriks data atau fungsi f(x,y),
yang terdiri dari M baris dan N kolom, ilustrasinya terlihat pada persamaan 3.1.
Tiap elemen dari matriks citra digital, yang dinotasikan dengan koordinat
pasangan baris dan kolom disebut pixel (picture element), dimana x dan y adalah
koordinat spasialnya sedangkan f(x,y) adalah nilai intensitas citra pada koordinat
tersebut (Gonzales dan Woods, 2008). Gambaran citra digital dengan titik origin
berada di kiri atas terlihat pada gambar 3.1.

(0,0) (0,1) … (0, − 1)


(1,0) (1,1) … (1, − 1)
( , )= (3.1)
… … … …
( − 1,0) ( − 1,1) … ( − 1, − 1)

Titik origin
(0,0) x

f(x,y)

Gambar 3.1. Citra digital


3.3.1. Jenis citra digital
Pada operasi pemrosesan citra digital, terdapat beberapa jenis tipe citra,
didasarkan pada format penyimpanan warnanya yaitu:
16

a. Citra berwarna (true color)


Citra berwarna adalah citra yang warna setiap pixelnya direpresentasikan
sebagai kombinasi dari intensitas tiga warna dasar (RGB). Format file citra
menyimpan citra RGB sebagai citra 24 bit tiap pixelnya yang masing-masing
mengandung komponen 8-bit intensitas merah, 8-bit komponen intensitas hijau, 8-
bit intensitas biru, sehingga dapat menghasilkan kombinasi warna sebanyak
162.777.216 macam (224). Citra warna disimpan dalam format array/matriks data
berukuran M x N x 3, seperti terlihat pada gambar 3.2.

(a) (b)
Gambar 3.2 (a) Citra RGB, (b) Array pixel RGB
(sumber: www.mathworks.com)

b. Citra intensitas (intensity images)


Citra intensitas adalah citra yang terbentuk dari hasil penangkapan pantulan
intensitas cahaya yang nilainya menggambarkan derajat keabuan (grayscale)
dalam setiap pixel penyusunnya seperti terlihat pada gambar 3.3, nilai 0 biasanya
berarti hitam dan nilai 1 atau 255 atau nilai 65535 (tergantung tipe datanya)
berarti intensitas penuh atau putih.

Gambar 3.3 Citra grayscale


17

Tingkat gradasi intensitas citra diperoleh dari hasil pemangkatan dari bilangan dua
atau 2 , dimana n adalah lebar data dalam satuan bit. Semakin tinggi tingkat
gradasi citra maka semakin baik representasi citra, tetapi semakin besar pula
memory untuk penyimpanan atau pemrosesan.

c. Citra biner (binary images)


Citra biner adalah citra yang setiap pixelnya diasumsikan bernilai salah satu
dari dua nilai diskrit, yaitu nilai ”on” (putih = 1) dan nilai “off” (hitam = 0) seperti
terlihat pada gambar 3.4. Penggunaan citra biner ini memudahkan untuk
membedakan fitur-fitur struktural obyek dari latar belakang dengan pemrosesan
terlebih dahulu untuk memperoleh daerah obyek (region of interest).

Gambar 3.4 Citra biner

d. Citra berindex (indexed images)


Citra berindex adalah citra digital yang mengandung sebuah matriks data X
dan matriks peta warna (colormap) yang berukuran M x 3 yang mengandung
floating point dengan nilai antara 0 sampai dengan 1.

Gambar 3.5 Citra berindeks


18

Setiap baris pada colormap adalah data komponen untuk warna merah, hijau,
dan biru seperti terlihat pada gambar 3.5. Citra berindeks menggunakan direct
mapping untuk menandakan nilai pixel pada map (peta) (Wijaya dan Prijono,
2007).

3.4. Fitur (Feature)


Fitur adalah segala jenis aspek pembeda dan kualitas dari hasil pengukuran
yang bisa diperoleh. Fitur juga menggambarkan karakteristik obyek. Fitur bisa
berwujud simbolik (misal: warna) atau numerik (misal: luas, tinggi, berat).

Gambar 3.6 Aspek fitur : (a) vector, (b) ruang fitur dan (c) scatter plot
(sumber: Suksmono, 2010)

Aspek-aspek fitur diilustrasikan pada gambar 3.6. Ada beberapa definisi


terkait dengan fitur yakni sebagai berikut :
a. Kombinasi dari d-buah fitur dinyatakan sebagai vector kolom dimensi-d dan
disebut sebagai vector feature.
b. Ruang dimensi-d yang dibentuk oleh vector feature disebut sebagai ruang fitur
(feature space).
c. Obyek dinyatakan sebagai sebuah titik di dalam ruang fitur. Penggambaran
demikian disebut sebagai diagram hambur (scatter plot). Ini adalah alat
visualisasi untuk menentukan distribusi vector. Ciri yang tersedia bisa banyak,
masalahnya adalah bagaimana memilih kombinasi ciri terbaik yang dapat
mengenali setiap obyek dengan akurat.
Kualitas dari suatu feature vector dilihat dari kemampuannya membedakan
obyek yang berasal dari kelas yang berbeda-beda. Obyek dalam kelas yang sama
19

harus memiliki nilai vektor fitur yang sama dan obyek yang berda dalam kelas
yang berbeda harus memiliki vektor fitur yang berlainan pula. Sifat-sifat dari fitur,
linear/non-linear separability, korelasi dan modalitas, sangat penting untuk
menentukan sistem pengenalan yang cocok (Suksmono, 2010).
Berbagai sifat fitur yang penting dapat digambarkan dalam diagram hambur
(scatter plot) berikut ini :

Gambar 3.7 Sifat keterpisahan fitur dan jenis-jenis fitur


(sumber: Suksmono, 2010)

3.4.1. Warna
Warna adalah salah fitur atau ciri dari citra, terbentuk dari hasil penangkapan
pantulan intensitas beberapa panjang gelombang atau channel (saluran) yang
mengandung informasi warna, disamping informasi intensitas yang
menggambarkan terang dan gelap pada penampakan pixel-pixel penyusunnya.
Citra yang direpresentasikan dalam RGB color model atau color space terdiri dari
3 citra yang masing-masing adalah representasi dari warna pokok (primary color)
merah, hijau dan biru. Jumlah bits yang digunakan untuk merepresentasikan tiap
pixel pada ruang RGB disebut dengan pixel depth. (Gonzales dan Woods, 2008).

Gambar 3.8 RGB color cube (Sumber: Gonzales dan Woods, 2008)
20

Kekuatan intensitas dengan nilai 0 (0 %) untuk ketiga warna pokok berarti


ketiadaan suatu warna maupun kecerahan pada suatu pixel sehingga tampak
sebagai warna hitam, sebaliknya nilai intensitas penuh (100%) untuk ketiga warna
pokok berarti semua komponen warna akan saling menetralkan pada suatu pixel
sehingga tampak sebagai warna putih.
Ruang warna RGB dapat digambarkan sebagai sebuah kubus 3-dimensi terlihat
pada gambar 3.8 yang masing-masing sumbunya yakni sumbu Z direpresentasikan
sebagai warna merah, sumbu X sebagai warna hijau dan sumbu Y sebagai warna
biru. Pada model warna RGB, warna didefinisikan dengan jumlah relatif dari
intensitas ketiga warna pokok untuk membentuk suatu warna. Kekuatan intensitas
tiap komponen warna berkisar dari 0 % hingga 100%. Berdasarkan cara
pembentukkan komponen warnanya, model warna dibedakan menjadi dua macam
yaitu: model warna aditif dan model warna substraktif terlihat pada gambar 3.9.
Gabungan dari warna pokok dapat menghasilkan warna sekunder. Warna
merah murni akan muncul bila komponen warna merah bernilai penuh, sedangkan
dua komponen lainnya (hijau dan biru) bernilai nol. Sama halnya dengan keadaan
munculnya warna hijau murni dan biru murni, terjadi bila komponen warna
tersebut bernilai penuh dan komponen kedua warna lainnya bernilai nol.

Hijau
Kuning

Kuning Cyan Merah Hijau


Putih Hitam
Merah Biru
Magenta Biru Cyan
Magenta

(a) (b)

Gambar 3.9 Model warna; (a) model warna aditif, dan (b) model warna
subtraktif

3.4.2. Motion
Motion (gerak) adalah fitur atau ciri dari citra yang terbentuk dari respon citra
terhadap faktor waktu. Citra-citra statis yang ditampilkan secara cepat akan akan
21

terkesan bergerak. Video terdiri dari citra-citra digital yang ditampilkan berurutan
menurut waktu. Setiap citra yang ada dalam suatu video disebut dengan frame.
Kecepatan suatu image acquisition device untuk menyediakan data digital disebut
frame rate, pada umumnya diukur dengan fps(frame per second).
Pendekatan dasar untuk mendeteksi perubahan antara dua citra atau frame
f(x,y,ti) dan f(x,y,tj) dari data video pada waktu ke- ti dan ke- tj adalah dengan
membandingkan dua citra pixel demi pixel, dimana salah satu atau keduanya
terdapat obyek yang bergerak sehingga menghasilkan nilai tidak nol yang
berkorespondensi dengan komponen citra yang tidak statis, dan akan
menghilangkan komponen citra yang sifatnya statis. Perbedaan antara dua citra
yang diambil pada waktu ke- ti dan ke- tj didefinisikan melalui persamaan 3.3.

1 ( , , )− , , > (3.2)
( , )=
0

Dimana nilai T adalah nilai batas spesifik, ( , ) akan bernilai 1 pada


koordinat spasial (x, y) jika perbedaan intensitas antara dua citra tersebut berbeda
secara signifikan dan memenuhi kriteria nilai batas yang telah ditentukan. Pada
citra berurutan yang bergerak secara dinamis nilai 1 dianggap sebagai obyek yang
bergerak (Gonzales dan Woods, 2008).

3.5. Preprocessing
Preprocessing merupakan tahap awal pada pemrosesan citra digital yang
bertujuan untuk mempersiapkan citra agar dapat diproses pada tahap selanjutnya.
3.5.1. Gaussian filtering
Filter Gaussian adalah filter linear dengan nilai pembobotan untuk setiap
anggotanya dipilih berdasarkan fungsi Gaussian untuk menghilangkan noise yang
bersifat sebaran normal, karena proses digitasi akibat sifat pantulan cahaya dan
kepekaan sensor cahaya pada kamera itu sendiri. Semakin besar nilai standar
deviasi, semakin lebar distribusi kernel Gaussian maka, maka semakin kuat
22

penghalusan yang terjadi pada citra. Pembuatan filter gaussian ini, dilakukan nilai
pembobotan langsung dari distribusi diskrit Gaussian dengan persamaan:

( ) (3.3)
=

Proses filtering pada domain spasial dilakukan dengan proses konvolusi, yakni
konvolusi antara citra awal f(x,y) dan kernel filter w(x,y), persamaan
konvolusinya adalah sebagai berikut :

( , )⋆ ( , )= ∑ ∑ ( , ) ( − , − ) (3.4)

Dimana kernel konvolusi ( , ), berukuran n x n dikalikan dengan setiap pixel


yang terdapat pada citra f(x,y), serta diasumsikan akan mengisi ruang pixel citra
sehingga dihasilkan citra baru hasil konvolusi. (Gonzales dan Woods, 2008).
3.5.2. Grayscale
Proses grayscale hanya menggunakan warna pada tingkatan warna abu-abu.
Nilai intensitas tiap pixel pada citra keabuan dinyatakan sebagai nilai tunggal.
Menurut Ahmad (2005), untuk memperoleh citra keabuan dari citra true color
(RGB) dapat dilakukan dengan mengambil faktor pengali terhadap ketiga
komponen warna pokok, dimana jumlah faktor pengali = 1, sehingga konsep dari
grayscale adalah mengubah tiga komponen matriks menjadi satu matriks
grayscale, yang menghasilkan satu citra grayscale.

3.6.Statistik Data dan Perhitungan Jarak (Distance Measurement)


3.6.1. Mean (rata-rata)
Mean adalah nilai rata-rata (average) dari suatu kumpulan data yakni jumlah
dari seluruh nilai data dibagi dengan jumlah cacah data, rumusnya adalah:

1
̅= (3.5)
23

dimana: ̅ = rata-rata (mean).


n = banyaknya cacah data.
∑ = jumlah nilai semua data.
3.6.2. Standar deviasi
Standar deviasi biasanya disimbolkan dengan (sigma). Standar deviasi dapat
pula disebut sebagai luas pengukuran dari suatu distribusi (simpangan baku),
dengan memperhitungkan akar dari rata-rata jumlah jarak kuadrat nilai individu
dari nilai rata-ratanya. (Sugiyono, 2009). Rumus untuk mencari standar deviasi
adalah sebagai berikut:

1
= ( − ̅) (3.6)
−1

dimana: = standar deviasi


n = banyaknya cacah data
∑ ( − )̅ = jumlah kuadrat dari selisih data ke-i dengan mean
3.6.3. Variance
Variance merupakan salah satu teknik statistik yang digunakan untuk
menjelaskan homegenitas kelompok, nilai varians ( ) diperoleh dari perhitungan
rata-rata jumlah kuadrat semua deviasi nilai-nilai individual terhadap nilai mean
kelompok (Sugiyono, 2009). Rumus untuk mencari variance adalah sebagai
berikut:

1
= ( − ̅) (3.7)
−1

3.6.4. Euclidean distance


Perhitungan jarak atau nilai antara 2 buah titik dapat dilakukan dengan
metode Euclidean distance (Gonzales dan Woods. 2008), dengan nilainya adalah
24

‖ ‖=( /
) sebagai persamaan Euclidean normal. Rumusnya adalah sebagai
berikut:

= − = ( − ) + …+ ( − ) (3.8)

dimana : = euclidean distance


− = nilai absolute perhitungan jarak antara data dan

3.7. Segmentasi Citra


Segmentasi merupakan fase pertama dalam analisis citra. Gonzalez dan Woods
(2008) menyatakan bahwa segmentasi adalah proses pembagian sebuah citra
kedalam sejumlah bagian atau obyek. Segmentasi merupakan suatu bagian yang
sangat penting dalam analisis citra secara otomatis, sebab pada prosedur ini obyek
yang diinginkan akan digunakan untuk proses selanjutnya. Segmentasi citra
(image segmentation) mempunyai arti membagi suatu citra menjadi wilayah-
wilayah yang homogen berdasarkan kriteria keserupaan yang tertentu antara
tingkat keabuan suatu piksel dengan tingkat keabuan piksel – piksel tetangganya,
kemudian hasil dari proses segmentasi ini akan digunakan untuk proses tingkat
lebih lanjut yang dapat dilakukan terhadap suatu citra, misalnya proses klasifikasi
citra dan proses identifikasi obyek.
Algoritma segmentasi secara umum berbasiskan pada sifat dasar nilai
intensitas yaitu :
1. diskontinyu: membagi suatu citra berdasarkan perubahan besar nilai intensitas
(seperti sisi). Mendeteksi tiga tipe dasar diskontinuits tingkat keabuan, yaitu:
titik, garis dan sisi. Teknik umum yang digunakan adalah dengan
menggunakan mask pada keseluruhan citra.
2. similaritas: membagi suatu citra berdasarkan similaritas sesuai kriteria tertentu
yang sudah didefinisikan. Pendekatan kemiripan atau similarity adalah
pendekatan dengan cara mempartisi citra menjadi daerah-daerah memiliki
25

kesamaan sifat tertentu (region based), dengan menggunakan teknik


thresholding, region growing, region splitting dan merging.

3.8. Color Thresholding


Thresholding digunakan untuk mengatur jumlah derajat keabuan yang ada
pada citra. Proses thresholding ini pada dasarnya adalah proses pengubahan
kuantisasi (proses digitalisasi skala keabuan) pada citra sehingga dihasilkan citra
biner yang merepresentasikan bagian bukan obyek (background) yang bernilai 0
(nol) dan obyek (foreground) yang bernilai 1 (satu).
3.8.1. Double color thresholding
Pada citra berwarna (RGB) nilai color threshold diterapkan pada masing-
masing komponen warna yakni komponen warna merah, hijau, dan biru untuk
memperoleh warna tertentu yang diinginkan. Proses thresholding dapat dilakukan
dengan menentukan dua buah nilai threshold T1 dan T2 pada sebuah citra.
Teknik dasar untuk mengetahui tiap pixel komponen warna berada pada batas
(range) warna yang ditentukan, dilakukan dengan menetapkan nilai lowerthresh
dan upperthresh untuk mendefinisikan obyek. (Heuvelmans, 2005), persamaannya
sebagai berikut, dianggap obyek jika:

≥ ℎ ℎ, AND
≤ ℎ ℎ, AND
≥ ℎ ℎ, AND
≤ ℎ ℎ, AND
≥ ℎ ℎ, AND
≤ ℎ ℎ, (3.9)

3.8.2 Multivariable Thresholding


Multivariable Thresholding adalah suatu teknik segmentasi obyek melalui
thresholding dengan melibatkan lebih dari satu variabel, misalnya pada citra
berwarna yang melibatkan 3 komponen warna merah, hijau, dan biru (Gonzales
dan Woods, 2008). Pada model warna RGB, kedekatan dua buah warna dapat
26

dianggap sama seperti jarak dua buah titik P1 dan P2 pada ruang dalam ruang
warna (color space). Deteksi suatu warna tertentu dari suatu citra dapat dilakukan
dengan cara perhitungan jarak D(z,a), sebagai berikut:

1 ( , )<
= (3.10)
0

dimana: g = citra hasil thresholding.


z = arbitrary color point.
a = nilai rata-rata (mean) dari variabel warna.
( , )= jarak antara color point dengan nilai mean variabel warna.
T = nilai threshold yang telah ditentukan.

3.9 Deteksi Obyek dengan Gaussian Mixture Model


Deteksi gerak pada penelitian ini digunakan untuk mendeteksi polutan padat
yang bergerak mengikuti aliran air. Dari beberapa literature diketahui bahwa
Gaussian mixture model merupakan sebuah metode yang tahan terhadap
perubahan lingkungan yang sebenarnya dengan memodelkan distribusi
background dan mendeteksi obyek yang bergerak pada video.
3.9.1. Gaussian mixture model
Gaussian Mixture model digunakan untuk memodelkan tiap pixel dari citra
yang berurutan kedalam distribusi model yang di update atau diperbaharui
berdasarkan perbedaan antara frame saat ini (t) dengan frame sebelumnya (t-1).
3.9.2 Pemrosesan pixel citra (pixel processing)
Tiap pixel dari citra dimodelkan sebagai distribusi K -Gaussian mixture model.
Keadaan suatu pixel dapat didefinisikan sebagai nilai pixel pada citra yang
sifatnya berubah berdasarkan waktu (temporal series). Nilai pixel pada citra
direpresentasikan sebagai nilai scalar pada citra grayscale. Untuk tiap waktu t,
dan tiap pixel ={ , } pixel pada video frame dapat direpresentasikan
dengan:
27

{ ⃗ , ,…, ⃗ , } = { ⃗( , , ): 1 ≤ ≤ − 1} (3.11)

Dimana ⃗ adalah frame sequence, nilai pixel adalah sample dari variabel ⃗ ,

dengan K-distribusi Gaussian mixture model. ⃗ , dapat berupa citra 1-dimensi


(monochrome intensity), 2-dimensi (normalized color space atau intensity plus-
range), 3-dimensi(color) atau D-dimensi direpresentasikan sebagai kolom vector.
Parameter dari model Gaussian mixture model yang dideskripsikan sebagai
komponen gausian ke-k pada waktu/frame ke-t terdiri dari:
, , ⃗, , dan S , , . , adalah bobot (weight) parameter dari
komponen Gaussian ke-k. ⃗, , dan |S , , | adalah adalah mean-vector dan
determinan matriks covariance distribusi Gaussian ke-k pada waktu atau frame
ke-t. Untuk memudahkan perhitungan diasumsikan:

S, , = , , . atau S = [ ] (3.12)

Oleh karena itu covariance matriks dapat ditentukan melalui persamaan S


diatas, dimana , , adalah variance dari komponen RGB, sehingga nilai
dari pixel dianggap sebagai komponen yang berdiri sendiri (independent) dan
dapat memiliki nilai variance yang sama (Stauffer dan Grimson, 1999).
3.9.3 Metode K-Means Clustering
Clustering adalah metode pengelompokan data dengan mempartisi data ke
dalam satu kelompok (cluster) atau lebih berdasarkan ciri atau informasi yang
diperoleh dari data. K-Means Clustering merupakan teknik yang digunakan untuk
pengelompokan data (clustering), dengan membentuk K buah centroid (titik pusat
massa) atau rata-rata (mean) dari sekumpulan data berdimensi n.
Teknomo (2006) menyatakan algoritma dasar dari K-means clustering terdiri
dari:
1. Menentukan jumlah cluster.
2. Menentukan titik pusat masa cluster awal (bisa acak, atau pilih salah satu
dari koleksi data).
28

3. Memasukkan tiap satuan data ke dalam semua cluster, kemudian dihitung


jarak setiap obyek dengan jarak pusat massa (centroid) tiap cluster,
kemudian dikelompokkan berdasarkan jarak terdekat dengan centroid. Jika
tidak memnuhi syarat minimum distance, maka akan masuk sebagai
anggota cluster lainnya.
4. Memperbarui nilai pusat massa tiap cluster sebagai rata-rata (mean) dari
seluruh anggota kelompok tersebut.
5. Ulangi langkah ke-3 hingga convergen dan anggota dari clusternya cukup
stabil tidak ada lagi perubahan.
3.9.4 Algoritma Gaussian mixture model
Inisialisasi parameter
Parameter gaussian mixture model harus diinisialisasi untuk menghasilkan
pendeteksisan yang akurat, parameter tersebut adalah:
1. Jumlah komponen Gaussian (K) per-pixel
Nilai K didefinisikan sebagai suatu konstanta yang menentukan sifat
multimodal dari background, dan menunjukkan perhitungan ketersediaan
memory dan komputasi yang dilakukan. Jumlah distribusi yang dimodelkan
dari tiap pixel, nilainya berkisar K = 3,..,5, semakin banyak jumlah distribusi
maka model merepresentasikan akan lebih baik pada citra yang kompleks
dengan konsekuensi meningkatnya proses komputasi. (Ribeiro dan Gonzaga,
2006).
2. Inisialisasi awal (bobot, miu, alpha, dan sdev)
Parameter bobot (weight) mengindikasikan perbandingan relatif
kemunculan K dari frame yang diobservasi. Nilai miu (means) diinisialisasi
menggunakan algoritma K-means untuk mendapatkan nilai K-centroid pada
masing-masing distribusi. Inisial nilai standar deviasi menggambarkan ukuran
variasi tiap pixel dari komponen. Ketiga parameter diatas digunakan untuk
memodelkan tiap pixel yang harus diupdate dari frame yang diobservasi
berdasar pada keadaan distribusi sebelumnya. Nilai alpha (learning rate)
merupakan variabel yang mengindikasikan kecepatan adaptasi metode
terhadap perubahan yang terjadi pada setiap pixel data.
29

Pencocokan input terhadap distribusi


Pada tahap ini input dicocokkan dengan semua distribusi hingga ditemukan
distribusi yang paling cocok. Hal ini dilakukan dengan perhitungan jarak (distance
calculation) antar pixel ( ⃗ , ) dengan nilai means ( ⃗, ) dan pengecekan
terhadap parameter batas ambang (threshold) deviasi  antara citra saat ini
(current frame) dengan K distribusi Gaussian.
Saat suatu pixel pada frame ke-t datang sebagai input, test pencocokan tiap
pixel dilakukan, suatu pixel dikatakan masuk dalam suatu distribusi Gaussian jika
nilai pixel tersebut masuk dalam jarak  σ = 2.5σ, dengan σ adalah standar
deviasi dari distribusi ke-k (k = 1, …, K ). Kriteria pencocokannya dihitung
berdasarkan Euclidean distance :

⃗ , − ⃗, , ≤b , (3.13)

Maka dapat ditarik 2 kesimpulan yang mungkin terjadi, yaitu:


1. Pixel dikatakan “cocok “ dengan distribusi K Gaussian jika memenuhi kriteria
pencocokan, jika kecocokan ditemukan pada beberapa distribusi maka
parameter distribusi ke-k yang cocok akan diupdate.
2. Jika pixel tidak cocok dengan distribusi manapun pada K distribusi maka pixel
diklasifikaskan sebagai foreground.
Update parameter
Model tidak dapat diperkirakan untuk berada dalam keadaan yang sama untuk
waktu yang lama, oleh karena itu parameter K distribusi akan diupdate agar
beradaptasi dengan perubahan kondisi dan mengolah input selanjutnya.
1. Jika ⃗ , − ⃗, , ≤b , , maka match = 1. Update parameter untuk
pixel yang cocok pada frame dengan distribusi mixture, maka nilai observasi
yang baru diupdate melalui persamaan berikut:
a. Update nilai weight :

, , = (1 − ) , , + , , (3.14)
30

Nilai , , = 1 untuk model yang cocok dan 0 untuk model lainnya.


Setelah pendekatan update ini, maka weight baik untuk parameter yang cocok
ataupun tidak dinormalisasi kembali dimana ∑ = 1.
b. Update nilai mean:

⃗, , = (1 − ) ⃗, , + (3.15)
= (3.16)
,

c. Update nilai variance:

, , = (1 − ) , , + ⃗ , − ⃗, , (3.17)

Untuk nilai komponen yang tidak cocok maka, komponen ⃗, , , ,

memiliki nilai yang sama dengan nilai parameter sebelumnya. Sedangkan nilai
yang diupdate adalah nilai weight saja ( ) dengan persamaan:

, , = (1 − ) , , + (3.18)

2. Jika tidak ditemukan kecocokan antara pixel dengan K distribusi manapun,


maka pixel tersebut dianggap sebagai foreground dan dibuat distribusi yang
baru yang mencerminkan background. Distribusi ke-k dengan tingkat
kemungkinan yang paling kecil digantikan dengan parameter baru, dimana
nilainya:

, , = nilai pada urutan paling kecil (3.19)


⃗, , = (nilai mean sama dengan nilai pixel) (3.20)

, , = initial high variance (3.21)


31

Keterangan:
ω , = bobot. = learning rate pertama untuk bobot.

, = mean. = learning rate kedua untuk , dan ,

, = standar deviasi. = piksel data.

, = varian. t dan t-1 = frame saat ini dan frame sebelumnya


Estimasi distribusi model background
Estimasi distribusi background, dilakukan setelah proses adaptasi model
dengan frame yang di observasi. Model K distribusi diurutkan berdasarkan rasio
= / , untuk menentukan nilai index dari distribusi, dengan menganggap
bahwa pixel background memiliki distribusi dengan nilai bobot (weight) yang
tinggi dan variance yang rendah. Dimana nilai / akan meningkat seiring
dengan meningkatnya nilai bobot dan menurunnya nilai variance (distribusi lebih
stabil). Distribusi dengan index pertama digunakan sebagai distribusi model baru
yang mencerminkan background dimana B harus memenuhi kriteria :

= , > (3.22)

Nilai T adalah nilai proporsi terkecil dari data yang dihitung sebagai
background hingga dicapai perbandingan terbaik distribusi yang dianggap sebagai
model background. Jika nilai T yang dipilih kecil maka, model background
bersifat uni-modal, sebaliknya distribusi bersifat multi-modal yang disebabkan
oleh adanya gerakan berulang pada background (misal: gerakan dedaunan, dan
gelombang air) akan menghasilkan lebih dari satu yang menjadi bagian dari model
background. (Stauffer, et.al. 1999).

3.10 Filter Median


Filter median sangat efektif untuk menghilangkan noise jenis salt dan paper
yang dapat mengganggu proses pendeteksian tetapi tetap mempertahankan detail
citra, ilustrasi penggunaan filter median terlihat pada gambar 3.10.
32

Gambar 3.10. Ilustrasi penggunaan filter median


Cara kerja filter median melalui langkah-langkah berikut ini:
1. Membaca nilai pixel yang akan diproses beserta piksel-piksel
tetangganya.
2. Mengurutkan nilai-nilai piksel dari yang paling kecil hingga paling besar.
3. Pilih nilai pada bagian tengah untuk nilai yang baru bagi piksel(x,y).

3.11 Analisis dan Deskripsi Citra


3.11.1 Ketetanggaan (Neighborhoods) dan Komponen Terkoneksi (Connected
Component)
Neighborhoods merupakan sekumpulan pixel yang ditentukan berdasarkan
lokasinya relatif terhadap pixel tersebut. Sebuah pixel memiliki empat pixel
tetangga yang bersentuhan sisi dan delapan pixel tetangga yang bersentuhan
sudut.

1 2 3

8 (x,y) 4

7 6 5

Gambar 3.11 Pixel-piksel 8-tetangga

Sekumpulan pixel dimana setiap pixel terkoneksi pada seluruh pixel lainnya
disebut komponen terkoneksi (connected component). Suatu komponen terkoneksi
dapat berupa bagian yang mewakili obyek. Kumpulan suatu pixel dapat dianggap
33

sebagai suatu obyek tunggal jika tidak lagi tersambung dengan piksel atau
kumpulan piksel lainnya di dalam citra biner. (Ahmad, 2005).
3.11.2 Luas Area
Area adalah jumlah pixel dalam S, jika dalam satu citra terdapat lebih dari satu
komponen, S1, S2, S3, ..., Sn maka akan ada A1, A2, A3, ..., An. Nilai area suatu
obyek merupakan jumlah dari piksel-piksel penyusun obyek tersebut, dalam
satuan unit piksel (pixel) yang membentuk suatu luasan. Ukuran suatu obyek
(Area), dapat dirumuskan sebagai berikut:

= ( , ) (3.25)

dimana: A = Area obyek.


O = pixel citra biner.
x,y = koordinat pixel.
m = ukuran row (baris) citra.
n = ukuran column (kolom) citra.
Nilai A diperoleh dengan cara membaca piksel-piksel milik obyek dan
menambah nilai A dengan 1 setiap kali ditemukan pixel milik obyek. Bila
pembacaan jatuh pada piksel latar belakang, maka nilai A tidak berubah.

3.12 Matlab
MATLAB (MATrix LABoratory) adalah sebuah program untuk analisis
komputasi numerik dan merupakan bahasa pemrograman matematika lanjutan
yang dibentuk dengan dasar pemikiran menggunakan sifat dan bentuk matrik.
Jendela utama MATLAB terlihat pada gambar 3.12. MATLAB telah menjadi
sebuah environment pemrograman yang canggih yang berisi fungsi-fungsi built-in
untuk melakukan tugas pemrosesan sinyal, aljabar linier, dan kalkulasi matematis
lainnya. MATLAB bersifat extensible, dalam arti bahwa pengguna dapat menulis
fungsi baru untuk ditambahkan pada library ketika fungsi-fungsi built-in yang
tersedia tidak dapat melakukan tugas tertentu. (Arhami dan Desiani, 2005).
34

3.12.1. Sistem matlab


Sistem MATLAB terdiri atas lima bagian utama :
1. Development Environment berisi fasilitas untuk membantu kita dalam
menggunakan fungsi dan file MATLAB. Bagian ini memuat:
 Current Directory digunakan untuk menampilkan folder dan file matlab
 Command window digunakan untuk menuliskan perintah
 Command history digunakan untuk menampilkan riwayat perintah
 Editor digunakan sebagai editor script, berisi fungsi program MATLAB
dan syntax pemograman.
2. MATLAB Help Window menyediakan sistem help yang dapat diakses dengan
perintah help.
3. MATLAB Mathematical Function Library berisi algoritma komputasi,
4. The MATLAB language. Ini adalah bahasa matrik/array level tinggi dengan
control flow, fungsi, struktur data, input/output, dan fitur pemrograman
berbasis obyek lainnya.
5. Graphics. MATLAB fasilitas ini mencakup visualisasi data dua / tiga dimensi,
pemrosesan citra, animasi, dan grafik animasi. Ditampilkan melalui jendela
figure.

Gambar 3.12. Tampilan utama MATLAB


BAB IV
ANALISIS DAN PERANCANGAN PROGRAM

4.1 Analisis Permasalahan


Pendeteksian limbah cair pewarna batik dan limbah padat air sungai memiliki
beberapa permasalahan yang harus diatasi, yang harus disesuaikan pula dengan
karakteristik lingkungan disekitar area sungai. Permasalahan tersebut diantaranya:
1. Karakteristik visual limbah
Warna, dan gerakan merupakan beberapa karakteristik visual dari limbah
yang dapat dijadikan sebagai dasar pengetahuan (knowledge based) dalam
menentukan metode pendeteksian yang akan digunakan. Lingkungan sungai tidak
mungkin dalam keadaan yang statis dalam waktu yang lama.
Limbah cair pewarna batik dalam penelitian ini secara visual memiliki
karakteristik cenderung membentuk luasan area yang terlihat statis, dengan
gerakan yang relatif lambat mengikuti aliran sungai. Selain itu warna limbah cair
yang bercampur dengan air sungai sangat dipengaruhi oleh warna background air
sungai. Sedangkan jenis, bentuk, dan warna limbah padat sangatlah bervariasi.
Limbah padat cenderung bergerak mengikuti aliran sungai.
2. Keberadaan dinding sungai dan keadaan di sekitar sungai
Keberadaan dinding sungai dan keadaan disekitar sungai seperti rerumputan
dan pepohonan yang tumbuh di tepi badan sungai, jika terdapat kemiripan dengan
karakteristik warna limbah dapat berakibat pada kesalahan pendeteksian.
3. Warna background air sungai
Warna air sungai sangat dipengaruhi oleh warna dasar sungai. Maka apabila
background sungai memiliki kemiripan dengan obyek (camuflage), maka obyek
dapat dianggap sebagai background atau sebaliknya.
4. Sifat peletakkan kamera
Peletakkan kamera sebagai alat akuisisi pengambilan data video dapat bersifat
statis maupun bergerak sehingga memerlukan penanganan yang berbeda.

35
36

5. Refleksi pada permukaan air sungai


Refleksi pada permukaan air sungai yang biasa terjadi, diantaranya refleksi:
warna langit, pepohonan yang ada di pinggir sungai, gedung atau rumah-rumah di
pinggiran sungai, refleksi cahaya matahari pada air mengakibatkan penyebaran
intensitas cahaya yang tidak merata pada beberapa bagian permukaan air sungai.
Ataupun refleksi obyek itu sendiri yang menimbulkan bayangan pada permukaan
air sungai.
Beberapa tantangan yang dihadapi dalam pendeteksian limbah berbasis fitur
gerak diantaranya:
1. Pergerakkan background
Pada pendeteksian limbah berbasis fitur gerak, pergerakkan background dapat
berupa rekaman video yang tidak statis atau bergoyang sehingga dapat membuat
background dianggap sebagai foreground (obyek bergerak).
2. Gerakan obyek pada background
Air sungai yang mengalir dapat menimbulkan gerakan berulang (repetitive
motion) berupa riak atau gelombang air, selain itu gerakan terjadi apabila ada
obyek pada background yang sebelumnya diam kemudian bergerak seperti
gerakan daun akibat tiupan angin pada pepohonan yang tumbuh di tepi sungai.
3. Perubahan cahaya bertahap
Perubahan cahaya dapat membuat kesalahan dalam pendeteksian limbah
karena terdapat perbedaan pada sebagian besar citra dari frame sebelumnya.
Perubahan dari pencahayaan matahari dari pagi hingga sore hari.
4. Perubahan cahaya secara tiba-tiba
Perubahan cahaya secara tiba-tiba biasanya disebabkan oleh pencahayaan
yang berlebihan saat proses akuisisi menggunakan kamera. Kepekaan sensor
kamera terhadap cahaya mempengaruhi besarnya cahaya yang ditangkap lensa,
menjadi salah satu faktor penyebabnya (Bouwmans et. al, 2008).
5. Gerakan obyek yang kemudian berhenti
Hal ini terjadi karena faktor lingkungan yang selalu berubah dan asumsi
bahwa obyek yang bergerak pada suatu saat akan berhenti. Misalnya pada kasus
37

limbah yang tadinya bergerak mengikuti aliran sungai yang berhenti di pinggir
badan sungai.
6. Kesamaan antara foreground obyek dan background (Camuflage)
Kesamaan antara obyek dengan background membuat hal ini sulit untuk
dibedakan (Harville et.al, 2001). Hal ini menjadi sebuah tantangan pula bagi
pendeteksian berbasis fitur warna.

4.2 Perancangan Metode Deteksi


Perancangan program deteksi limbah cair pewarna batik dan limbah padat
terdiri atas 3 bagian, yaitu: preprocessing, proses deteksi obyek, dan analisis
citra. Proses deteksi obyek limbah cair dan limbah padat, bertujuan untuk
memisahkan bagian foreground dan background pada frame video. Pada
penelitian ini proses pendeteksian dibagi menjadi 2 metode deteksi yakni
pendeteksian berbasis fitur warna dan pendeteksian berbasis fitur gerak. Proses
analisis citra bertujuan untuk menghitung luasan area limbah dan standar deviasi
intensitas warna obyek.
Pendeteksian berbasis fitur warna, dititikberatkan untuk mendeteksi limbah
cair pewarna batik dengan kategori warna tertentu. Pendeteksian berbasis fitur
gerak dititikberatkan untuk mendeteksi limbah padat yang bergerak dan limbah
yang bergerak mengikuti aliran air sungai. Blok diagram program secara umum
terlihat pada Gambar 4.1.

4.3 Program Utama


Program dimulai dengan melakukan pemilihan input video limbah sesuai
kategori warna limbah dan metode pendeteksian untuk mendeteksi limbah dengan
mode tertentu. Pendeteksian limbah cair berbasis fitur warna dibagi menjadi 4
kategori mode warna limbah cair dominan yaitu “Putih”, “Biru”, “Merah”, dan
“Ungu”. Kemudian setelah itu menampilkan properties video yang berisi
informasi frame rate, durasi, jumlah frame, format video, ukuran dan bit per pixel.
Diagram alir program utama terlihat pada gambar 4.2.
38

Alur program secara umum pada tiap mode deteksi limbah berbasis fitur
warna, pertama dilakukan preprocessing pada tiap frame video yaitu filter
Gaussian. Setelah itu dilakukan segmentasi warna dinding untuk memperoleh
bagian bukan dinding atau dapat diasumsikan sebagai daerah air sungai. Tahap
selanjutnya adalah proses wallmasking dan segmentasi warna limbah cair yang
dirancang menjadi satu rutin program.

Gambar 4.1 Diagram blok metode deteksi secara umum

Pada beberapa kondisi frame terdapat gangguan pada dinding sungai dan tepi
badan sungai, berupa tumbuhan ataupun warna dinding yang mirip dengan obyek
limbah yang harus dianggap sebagai background pula. Agar hasil pendeteksian
dapat akurat maka kedua obyek ini harus dianggap sebagai bagian dari
background yang direpresentasikan dengan nilai pixel 0 atau hitam. Disinilah
fungsi dari proses wallmasking yaitu proses pembuatan mask yang menutup
bagian yang dianggap dinding dengan pixel berwarna hitam berukuran nilai
persen dikali baris (ro) untuk seluruh kolom citra. Selanjutnya akan dibahas lebih
mendalam pada sub-bab deteksi obyek berbasis fitur warna pada tiap modenya.
39

Gambar 4.2 Diagram alir program utama


40

Gambar 4.3 Diagram alir program utama (lanjutan)


41

Proses pendeteksian limbah padat berbasis fitur gerak menggunakan


algoritma Gaussian Mixture Model, alur rancangan program secara umum tahap
pertama dilakukan pengecekkan awal parameter gaussian yaitu K, alpha(learning
rate), nilai threshold dimana nilai dari ketiga variabel ini ditentukan oleh input
dari pengguna (user). Nilai parameter standar deviasi dan bobot di-inisialisasi
sebagai konstanta untuk K distribusi pada setiap pixel frame. Nilai means,
ditentukan melalui perhitungan centroid menggunakan K-means clustering.
Proses selanjutnya adalah pemrosesan tiap frame video, tahap pertama adalah
preprocessing yakni melakukan proses smoothing dengan Gaussian filter dan
grayscale. Kemudian dilakukan deteksi gerakan obyek dengan metode Gaussian
Mixture Model (GMM) sehingga dihasilkan foreground obyek limbah padat yang
bergerak mengikuti aliran air sungai. Selanjutnya akan dibahas lebih mendalam
pada sub-bab deteksi obyek berbasis fitur gerak.
Tahap analisis citra dirancang dengan melakukan pengecekkan terhadap
pixel-pixel obyek yang saling terkoneksi untuk mencari jumlah obyek, dan area
luasan limbah serta standar deviasinya. Koordinat pixel hasil segmentasi limbah
yang berkorespondensi diproses untuk mendapatkan nilai standar deviasi
intensitas warna masing-masing komponen warna. Tanda batas terluar (perimeter)
diberikan pada obyek yang terdeteksi pada setiap frame, pesan nilai standar
deviasi, jumlah obyek, rata-rata area limbah, dan total area limbah juga dituliskan
di setiap frame yang diproses baik untuk limbah cair maupun padat.
Proses final merupakan tahap akhir yang menghasilkan output akhir berupa
jumlah obyek limbah tiap framenya, rata-rata luasan limbah dan standar deviasi
nya, nilai standar deviasi intensitas warna obyek pada komponen R G B (merah,
hijau, dan biru). Pada tahap ini dihasilkan pula citra limbah hasil pendeteksian.

4.4 Preprocessing
Tahap preprocessing terdiri dari proses filtering gaussian dan grayscale
4.4.1 Gaussian Filter
Proses pertama adalah membentuk kernel Gaussian (n x n) untuk melakukan
konvolusi terhadap citra berdasarkan persamaan (3.3). Diagram alir pembuatan
42

kernel konvolusi gaussian terlihat pada Gambar 4.4. Pada penerapan suatu filter
dibutuhkan nilai yang bulat karena nilai pixel pada citra digital diwakili oleh
bilangan bulat (integer) sehingga dibutuhkan proses normalisasi dengan
membentuk konstanta pengali dari rasio nilai maksimum dan nilai minimum
kernel yang terbentuk, terakhir membagi kernel dengan jumlah seluruh nilai
kernel.

Gambar 4.4 Diagram alir kernel Gaussian


43

Kernel berupa matriks dimana nilai pada koordinat kernel (0,0) sama dengan
1. Citra yang dikonvolusi memiliki ukuran M x N, kemudian kernel konvolusi
memiliki dimensi k (baris) x l (kolom). Proses konvolusi dinotasikan dengan
persamaan (3.4). Langkah-langkah fungsi conv2 pada matlab (Wijaya dan
Prijono, 2007), sebagai berikut:

Gambar 4.5 Diagram alir filter Gaussian

1. Memutar kernel konvolusi


Perhitungan konvolusi 2 dimensi menggunakan computational molecule
yakni dengan cara memutar kernel konvolusi 180 derajat atau rot90(kernel, 2);.
2. Menentukan pixel tengah dari computational molecule
Hal pertama yang dilakukan untuk menggunakan computational molecule
adalah menentukan pixel tengah. Sebagai contoh dalam sebuah molekul kernel
berukuran 5 x 5, maka pixel tengahnya terletak pada koordinat (3,3).
44

3. Menerapkan computational molecule pada setiap pixel citra input


Nilai pixel ( , ) dihitung dengan menerapkan computational molecule
kernel dengan pixel citra input f(i, j) yang saling berkorespondensi hal ini
dilakukan pada tiap pixel citra input. Ilustrasinya dengan menumpuk kernel pada
citra input f(i, j), dengan pixel tengah kernel ((dimensi + 1) dibagi 2) menimpa
pixel yang mau dihitung pada citra asli. Nilai a dan b adalah (maks - 1) dimana a
sebagai lengan kanan dan b sebagai lengan kiri kernel dengan 1 pixel kernel
adalah pixel tengahnya. Kemudian mengalikan setiap elemen dari kernel dengan
pixel citra asli, menjumlahkan hasilnya.
4.4.2 Grayscale
Proses grayscale digunakan untuk proses pendeteksian berbasis fitur gerak.
Algoritma fungsi rgb2gray pada MATLAB mengubah nilai-nilai RGB dengan
mengalikan intensitas RGB dengan koefisien tertentu dan menjumlahkannya
(Fanning, 2002).

= 0.3 ∗ R + 0.59 ∗ G + 0.11 ∗ B (4.1)

dengan Y = luminance (intensitas)


R = intensitas warna merah
G = intensitas warna hijau
B = intensitas warna biru

4.5 Metode Deteksi Berbasis Fitur Warna


Metode yang digunakan pada pendeteksian berbasis fitur warna adalah
thresholding warna berdasarkan sifat pembentukan warna pada ruang warna RGB.
4.5.1 Kategori mode “Putih”
Mode ini bertujuan untuk mendeteksi adanya limbah berwarna putih pada
setiap frame video. Analisis pendeteksian dilakukan terhadap intensitas komposisi
warna RGB. Tahap pertama yang dilakukan adalah melakukan segmentasi limbah
cair pada sampel frame yang terdapat limbah. Ilustrasi tahapan segmentasi limbah
terlihat pada Gambar 4.6. Berdasarkan percobaan terhadap citra sampel, diperoleh
45

kriteria pendeteksian setelah proses preprocessing suatu pixel dianggap sebagai


limbah cair berwarna putih jika memenuhi kriteria sebagai berikut :

(R > 110) AND (G > 40) AND (B > 20) AND (4.2)
(NOT (R >B)) AND (NOT((B – G) >= 15)) AND (4.3)
NOT(meansB – B >= 20) (4.4)

Dari analisis citra hasil thresholing syarat pertama (4.2) dan syarat kedua (4.3)
dihasilkan segmentasi dinding sungai dan bagian bukan dinding, hal ini terjadi
karena adanya kemiripan intensitas. Citra yang digunakan sebagai sampel,
merupakan citra yang diambil di lokasi yang sama, 4 kondisi sampel diantaranya:

Tabel 4.1 Sampel kondisi pada citra limbah

Kondisi Sampel Kondisi Sampel

Ada
dinding tumbuhan
dominan di pinggir
sungai

Mirip
Hanya
dengan
limbah saja
warna
limbah

Kombinasi dari ketiga persyaratan diatas menghasilkan pixel obyek limbah


cair berwarna putih. Pengecekkan gabungan syarat pendeteksian dilakukan pada
setiap pixel frame hingga koordinat pixel terakhir. Gambar 4.7 adalah diagram alir
pendeteksian limbah cair berwarna putih, dengan liquid direpresentasikan sebagai
hasil deteksi limbah cair.
46

(a) (b)

(c) (d)

(e)

Gambar 4.6 Tahapan deteksi limbah cair mode “Putih”;


(a) citra asli (b) segmentasi limbah dengan (4.2) (c) segmentasi limbah
dengan (4.3) (d) segmentasi limbah dengan (4.4) (e) segmentasi limbah
dengan gabungan (4.2), (4.3), (4.4)
47

Gambar 4.7 Diagram alir deteksi limbah cair mode “Putih

4.5.2 Kategori mode “Ungu”


Pada bagian ini akan dijelaskan tentang rancangan metode pendeteksian
limbah cair berwarna ungu. Analisis terhadap karakteristik intensitas obyek
dilakukan berdasarkan pembentukkan warna ungu, dengan faktor dominan warna
48

merah dan warna biru. Metode pendeteksian limbah terdiri dari tahap deteksi
keberadaan dinding sungai, wallmasking dan segmentasi limbah cair warna ungu.
Deteksi keberadaan dinding (segmentasi dinding) dilakukan dengan thresholding
berdasarkan warnanya yakni dominan putih. Suatu pixel dikatakan kandidat
dinding sungai apabila memenuhi salah satu atau beberapa kriteria, berikut ini:

((meanR – R)2 + (meanG - G)2 + (meanB - B)2 < 152) (4.5)


(B > R) AND (B > G) (4.6)
(R > 140) AND(G > 40) AND(B > 20) (4.7)

Tabel 4.2 Sampel kondisi citra limbah ungu


Kondisi Sampel citra

ada dinding sungai

hanya limbah saja

Tahap selanjutnya adalah mencari nilai persen yang digunakan sebagai acuan
pengecekkan kondisi deteksi limbah. Nilai persen diperoleh dari perhitungan
persentase pixel bukan nol hasil operasi penjumlahan (OR) antara syarat pertama
(4.5) dan syarat kedua (4.6) yang dinotasikan sebagai variabel temp dengan
perhitungan persentase pixel bukan nol hasil operasi syarat ketiga (4.7) yang
dinotasikan dengan variabel tempOther. Hasil pengurangan kedua variabel ini
disebut sebagai nilai persen yang diasumsikan mewakili persentase kandidat
49

dinding sungai. Tiap kondisi pendeteksian memiliki aturan pendeteksian


tersendiri.
Kandidat dinding sungai akan direpresentasikan dengan pixel 0 (hitam) pada
tiap kondisi pendeteksian. Nilai persen frame saat ini dibandingkan dengan nilai
persen frame sebelumnya. Jika nilai persen kurang dari nilai persen sebelumnya
maka diasumsikan alat akuisisi sedang memperbesar bagian limbah atau bagian
air sungai sehingga kandidat bagian dinding berkurang, maka ukuran ipersen akan
berkurang, jika nilai persen frame saat ini lebih dari nilai persenPrev maka nilai
diasumsikan alat akuisisi sedang memperkecil bagian limbah atau bagian air
sungai sehingga kandidat bagian dinding bertambah, maka ukuran ipersen akan
bertambah. Nilai ipersen digunakan untuk membentuk citra wallMask. Diagram
alir pembentukan citra wallMask terlihat pada Gambar 4.11.
Tahap kedua adalah mendefinisikan inisial awal kandidat warna limbah. Suatu
pixel dikatakan limbah cair berwarna ungu jika memenuhi persyaratan sebagai
berikut:

(|meansB - B| > 15) (4.8)


( ((B – R) > 15) OR ((R - G) > 5) ) (4.9)
(B - G) > 10 OR |meansB - B| > 70 (4.10)

Gambar 4.8 adalah ilustrasi tahapan pendeteksian limbah cair berwarna ungu.
Tahap ketiga adalah mendeteksi obyek limbah cair, berdasarkan beberapa
kemungkinan kondisi pendeteksian limbah yang ditentukan berdasarkan nilai
persen untuk mengatasi pengambilan video dengan tipe kamera bergerak.
Pengecekkan kemungkinan kondisi dilakukan berdasarkan nilai persen pada
rentang nilai persen 0 – 100. Seluruh rentang pendeteksian diperoleh melalui
percobaan. Warna limbah ungu dideteksi dengan menggabungkan syarat (4.6)
AND syarat (4.8) AND syarat (4.9) AND syarat (4.10) yang dinotasikan sebagai
detectColor. Pada masing-masing kondisi pendeteksian tersebut, memiliki
ketentuan yang berbeda-beda limbah lebih jelasnya digambarkan pada diagram
alir deteksi limbah cair warna ungu (Gambar 4.9 dan Gambar 4.10).
50

(a) (b)

(c) (d)

(e) (f)

(g)
Gambar 4.8 Tahapan deteksi limbah cair mode “Ungu”;
(a) citra asli (b) segmentasi limbah dengan (4.6) (c) segmentasi limbah
dengan (4.8) (d) segmentasi limbah dengan (4.9) (e) segmentasi limbah
dengan (4.10) (f) segmentasi limbah dengan gabungan (4.6), (4.8), (4.9),
(4.10) (g) segmentasi limbah gabungan dengan wallMask
51

Gambar 4.9 Diagram alir deteksi limbah cair warna ungu


52

Gambar 4.10 Diagram alir pengecekkan kondisi deteksi limbah cair ungu

4.5.3 Kategori mode “Merah”


Perancangan program pada kategori mode “Merah” bertujuan untuk
mendeteksi limbah cair yang secara visual terlihat berwarna merah. Sama halnya
seperti mode sebelumnya, rancangan program terdiri dari segmentasi warna
dinding, hitung nilai persen, wallmasking, dan segmentasi limbah cair. Beberapa
53

sampel kondisi citra, digunakan untuk memperoleh nilai threshold obyek dan
menentukan nilai persen kemungkinan kondisi limbah, diantaranya terlihat pada
tabel 4.3.
Tabel 4.3 Sampel kondisi citra limbah “merah”
Kondisi Sampel citra

Dominan dinding sungai

Dominan limbah cair saja

Warna limbah hampir


sama dengan background
air sungai

Refleksi dinding
pada permukaan air

Suatu pixel dianggap dinding jika memenuhi beberapa persyaratan, sebagai


berikut :
((meanR - R).^2) + ((meanG - G).^2) + ((meanB - B).^2) < 15^2 (4.11)
(R > 95) & (G > 50) & (B > 30) (4.12)
~(R > B) & ~(R > G) (4.13)
54

Kandidat dinding direpresentasikan dengan pixel bernilai 0 (hitam) yang


diperoleh dari operasi invers atau operasi logika lainnya pada setiap tahap
pengecekkan persen kondisi pendeteksian yang disebut sebagai kandidat dinding.
Tahap selanjutnya adalah menghitung nilai persen, yang diperoleh dari
pengurangan persen temp dan tempOther. Temp diperoleh dari syarat pertama
(4.11) OR syarat kedua (4.12) diasumsikan sebagai persentase dominan pixel
bukan nol daerah bukan dinding atau bagian air sungai dan bagian dinding yang
juga ikut terdeteksi, tempOther diperoleh dari syarat ketiga (4.13) diasumsikan
sebagai persentase bagian dinding yang terdeteksi. Dengan demikian nilai persen
didefinisikan sebagai asumsi persentase daerah air sungai (bukan dinding) yang
terdeteksi.
Nilai persen berfungsi untuk pembentukkan wallMask, dan penentuan kondisi
pendeteksian limbah cair, misal jika nilai persen >= 90 maka diasumsikan daerah
bukan dinding memiliki rasio 90% terhadap jumlah seluruh pixel pada frame,
sehingga kondisi pendeteksian dirancang hanya dengan pendeteksian kandidat
awal warna limbah, tidak membutuhkan proses wallMasking dan operasi
penggabungan dengan kandidat dinding. Pada proses pembentukkan citra
wallmasking besarnya citra yang direpresentasikan dengan nilai ipersen yang
berubah-ubah, beberapa aturan diterapkan untuk mengatasi masalah video yang
mengalami zooming atau minimize khususnya pada daerah limbah.
Nilai persen frame sebelumnya dibandingkan nilai persen saat ini, jika nilai
persen frame sebelumnya lebih besar dari nilai persen maka diasumsikan kamera
melakukan zooming sehingga persentase daerah air sungai lebih besar dan daerah
dinding mengecil, maka nilai ipersen akan berkurang. Jika nilai persenTemp lebih
kecil dari nilai persen maka diasumsikan kamera melakukan minimizing sehingga
daerah air sungai berkurang dan daerah dinding membesar maka nilai ipersen
akan bertambah pula. Proses wallMasking dilakukan pada beberapa kondisi
rentang persen yang seluruhnya diperoleh dari percobaan. Tahap selanjutnya
adalah segmentasi limbah cair. Berdasarkan pembentukkan warnanya, merah
terlihat karena adanya dominasi intensitas pada komponen warna merah,
dibanding kedua warna lainnya. Berdasarkan percobaan suatu pixel dikatakan
55

Gambar 4.11 Diagram alir pembentukan wallMask

limbah berwarna merah, jika memenuhi gabungan dari beberapa persyaratan


berikut ini:
|meanR - R| >= 5 atau meanR - R| >= 15 atau meanR - R| >= 30 (4.14)
|meanG - G| >= 10 (4.15)
|meanB - B| >= 40 (4.16)
R – G >= 10 atau R – G >= 15 atau R – G >= 20 atau R – G >= 30 (4.17)
Not(B > G) (4.18)
(R > G ) & (R > B) (4.19)
(B - G) >= 5 (4.20)
not ( (R > 200) & (G > 200) & (B > 200) ) (4.21)
56

Tiap kondisi pada rentang nilai persen memiliki persyaratan deteksi limbah
cair tersendiri, yang disesuaikan dengan persyaratan deteksi warna limbah merah
diatas. Diagram alir deteksi limbah cair warna merah terlihat pada Gambar 4.12.
Pengecekkan kondisi pendeteksian berdasarkan rentang nilai persen terlihat pada
Gambar 4.15 – 4.26.

Gambar 4.12 Diagram alir deteksi limbah cair warna merah


57

Gambar 4.13 Diagram alir pengecekkan kondisi pendeteksian


58

Gambar 4.14 Diagram alir aturan deteksi 1

Gambar 4.15 Diagram alir aturan deteksi 7


59

Gambar 4.16 Diagram alir aturan deteksi 2


60

Gambar 4.17 Diagram alir aturan deteksi 2 (lanjutan)


61

Gambar 4.18 Diagram alir aturan deteksi 3


62

Gambar 4.19 Diagram alir aturan deteksi 4


63

Gambar 4.20 Diagram alir aturan deteksi 4 (lanjutan)


64

Gambar 4.21 Diagram alir aturan deteksi 5


65

Gambar 4.22 Diagram alir aturan deteksi 6


66

Gambar 4.23 Diagram alir aturan 6 (lanjutan)


67

Gambar 4.24 Diagram alir aturan deteksi 8

Gambar 4.24 Diagram alir aturan 8


68

4.5.4 Kategori mode “Biru”


Perancangan program pada kategori mode “Biru” bertujuan untuk mendeteksi
limbah cair yang secara visual terlihat berwarna biru. Rancangan program terdiri
dari deteksi (segmentasi) warna dinding, hitung nilai persen, wallmasking, dan
segmentasi limbah cair. Beberapa sampel kondisi citra, digunakan untuk
memperoleh nilai threshold obyek dan menentukan nilai persen kemungkinan
kondisi limbah, diantaranya terlihat pada tabel 4.4.
Tabel 4.4 Sampel kondisi citra limbah
Kondisi Sampel citra

Dominan dinding sungai

Dominan limbah cair saja

Warna limbah hampir


sama dengan pantulan
warna langit pada
permukaan air sungai

Refleksi dinding
pada permukaan air
69

Dari analisis kondisi sampel diatas maka diketahui suatu pixel dianggap dinding
jika memenuhi beberapa persyaratan, sebagai berikut :
((meanR - R).^2) + ((meanG - G).^2) + ((meanB - B).^2) < 15^2 (4.22)
(R > 200) & (G > 185) & (B > 200) (4.23)
~(R > B) & ~(R > G) (4.24)
Hasil pendeteksian dinding direpresentasikan dengan pixel bernilai 0 (hitam)
disebut sebagai segmenWall. Tahap selanjutnya adalah menghitung nilai persen,
yang diperoleh dari pengurangan persen temp dan tempOther. Temp adalah nilai
persentase pixel bukan nol bagian dinding sungai yang diperoleh dari invers
(syarat (4.22) OR syarat (4.23)) dan beberapa bagian air sungai yang ikut
terdeteksi, tempOther (syarat (4.24)) adalah persentase bagian dinding putih (nilai
pixel > 200) yang terdeteksi. Dengan demikian nilai persen didefinisikan sebagai
asumsi daerah dinding yang terdeteksi.
Nilai persen berfungsi untuk pembentukkan wallMask, dan penentuan kondisi
pendeteksian limbah cair. Nilai persen akan ter-update pada setiap framenya
dimulai pada frame kedua. Pada proses pembentukkan citra wallmasking besarnya
citra yang direpresentasikan dengan nilai ipersen berubah-ubah, beberapa aturan
diterapkan untuk mengatasi masalah video yang mengalami zooming atau
minimize khususnya pada daerah limbah.
Nilai persen frame sebelumnya disebut persenPrev. Selanjutnya dibandingkan
antara nilai persenPrev dan nilai persen, jika nilai persenPrev lebih besar dari
nilai persen maka diasumsikan kamera melakukan zooming sehingga persentase
daerah air sungai lebih besar dan daerah dinding mengecil, maka nilai ipersen
akan berkurang. Jika nilai persenPrev lebih kecil dari nilai persen maka
diasumsikan kamera melakukan minimizing sehingga daerah air sungai berkurang
dan daerah dinding membesar maka nilai ipersen akan bertambah pula. Proses
wallMasking dilakukan pada beberapa kondisi rentang persen. Proses
pembentukkan wallMask pada mode “Biru” terlihat pada gambar 4.25. Tahap
selanjutnya adalah segmentasi limbah cair. Berdasarkan pembentukkan warnanya,
warna biru terlihat karena adanya dominasi intensitas pada komponen warna biru.
70

Suatu pixel dikatakan obyek limbah berwarna biru, jika memenuhi gabungan
(dioperasikan dengan logika AND atau OR) dari persyaratan berikut ini:
(polB - polR) >= 5 (4.25)
(polB - polG) >= 5 (4.26)
(polB >= polG) AND (polB >= polR) (4.27)
Ilustrasi tahapan pendeteksian limbah padat terlihat pada gambar 4.25, sebagai
berikut:

(a) (b)

(c) (d)

(e)
Gambar 4.25 Tahapan deteksi limbah cair mode “Biru”;
(a) citra asli (b) segmentasi limbah dengan (4.40) (c) segmentasi limbah
dengan (4.41) (d) segmentasi limbah dengan (4.42) (e) segmentasi limbah
dengan gabungan (4.40), (4.41), (4.42)
71

Gambar 4.26 Diagram alir pembentukkan citra wallMask mode “Biru”


Tahap selanjutnya adalah melakukan pengecekkan aturan pendeteksian limbah
cair berdasarkan rentang nilai persen. Diagram alir utama proses deteksi limbah
terlihat pada gambar 4.27. Tiap rentang nilai persen memiliki aturan deteksi
masing-masing. Proses pengecekkan tahap lanjut pada beberapa rentang nilai
dilakukan, berdasarkan persentase kandidat dinding ataupun kandidat air sungai,
agar lebih jelasnya proses pengecekkan terlihat pada gambar 4.28 – 4.47.
72

Gambar 4.27 Diagram alir utama proses pendeteksian limbah mode “Biru”
73

Gambar 4.28 Diagram alir pengecekkan kondisi pendeteksian


74

Gambar 4.29 Diagram alir pengecekkan kondisi pendeteksian (lanjutan)

Gambar 4.30 Diagram alir aturan biru 1


75

Diagram alir selanjutnya digambarkan sebagai suatu operasi matriks sehingga


pada kotak operasi merupakan suatu operasi yang melibatkan operasi tiap elemen
pixel, yang digambarkan tanpa proses perulangan koordinat pixel.

Gambar 4.31 Diagram alir aturan biru 2


76

Gambar 4.32 Diagram alir aturan biru 2 (lanjutan)


77

Gambar 4.33 Diagram alir aturan biru 3


78

Gambar 4.34 Diagram alir biru 3 (lanjutan)


79

Gambar 4.35 Aturan deteksi biru 4


80

Gambar 4.36 Aturan deteksi biru 5


81

Gambar 4.37 Aturan deteksi biru 5 (lanjutan)


82

Gambar 4.38 Aturan deteksi biru 6


83

Gambar 4.39 Aturan deteksi biru 7


84

Gambar 4.40 Aturan deteksi biru 8


85

Gambar 4.41 Aturan deteksi biru 9


86

Gambar 4.42 Aturan deteksi 10

Gambar 4.43 Aturan deteksi 11


87

Gambar 4.45 Aturan Deteksi Biru 12

Gambar 4.46 Aturan Deteksi Biru 14


88

Gambar 4.47 Aturan deteksi Biru 13

4.6 Metode Deteksi Berbasis Fitur Gerak


Metode Gaussian Mixture Model (GMM) memodelkan tiap pixel pada frame
sebagai K distribusi background dan foreground (hasil segmentasi obyek
bergerak) yang ditentukan berdasarkan frekuensi kemunculan, direpresentasikan
sebagai pembobotan (weight) dan variasi disimbolkan dengan sebagai standar
deviasi (sigma) dari tiap distribusi pada suatu pixel. Gerakan obyek dideteksi
dengan membandingkan parameter GMM pada frame sebelumnya dengan
parameter GMM saat ini. Blok diagram metode GMM terlihat pada Gambar 4.48.
89

Gambar 4.48 Blok diagram Gaussian Mixture Model

4.6.1 Algoritma Gaussian Mixture Model (GMM)


Algoritma GMM dibagi menjadi 2 bagian yaitu inisialisasi parameter, dan
pemrosessan perframe video yang terdiri dari pencocokan input, update
parameter, dan estimasi model background pada tahap akhir ini diperoleh pula
foreground hasil pendeteksian.
90

Inisialisasi parameter means, standar deviasi, dan bobot


Parameter gaussian yang dibutuhkan dalam proses update adalah means,
standar deviasi, dan bobot. Pada inisialisasi awal terdapat nilai K, nilai standar
deviasi dan nilai bobot yang sama di setiap pixelnya. Nilai means (rata-rata)
ditentukan melaui algoritma K-Means sehingga terdapat K nilai means. Nilai K
berkisar antara 3 – 5, parameter lainnya yaitu nilai alpha (learning rate) berkisar
antara 0 – 1, sedangkan nilai threshold berkisar pada 0,25 – 0,75. Diagram alir
algoritma K-means terlihat pada Gambar 4.49.
Pemrosesan tiap frame video
Tahap pertama dalam algoritma Gaussian Mixture Model adalah tahap
pencocokan input yakni menghitung beda pixel antara tiap pixel data pada frame
sekarang dengan nilai komponen means ke-k, kemudian dicek atau dicocokan
apakah beda pixel <= 2,5*standar deviasi. Tahap kedua adalah update parameter,
apabila nilai beda pixel memenuhi syarat threshold standar deviasi berarti
nilai_cocok = 1 maka parameter bobot (ω), rata-rata (µ), standar deviasi ( ) di-
update. Sehingga nilai bobot meningkat dan nilai standar deviasi akan berkurang,
sedangkan nilai means mendekati nilai pixel. Jika syarat tersebut tidak terpenuhi
(nilai_cocok = 0) maka hanya parameter bobot yang diupdate, kemudian dibuat
distribusi komponen baru. Jika dianalisis, apabila ada suatu obyek statis untuk
waktu yang cukup lama menjadi bagian dari background, kemudian bergerak
maka obyek tersebut secara cepat digabungkan ke dalam background. Dimana
nilai means dan standar deviasinya masih sama seperti sebelumnya, sedangkan
nilai bobotnya menjadi lebih kecil.
Tahap ketiga adalah estimasi model background, hal pertama yang dilakukan
adalah mengurutkan parameter GMM berdasarkan bobot / standar deviasi dari
nilai terbesar hingga terkecil. Selanjutnya menerapkan nilai threshold untuk
komponen bobot. Model background adalah ditentukan berdasarkan urutan
komponen pertama (dari urutan bobot/standar deviasi), dimana nilai bobot >
threshold. Tahap selanjutnya adalah menentukan pixel foreground. Pixel
foreground adalah pixel yang tidak cocok dengan komponen apapun yang terdapat
pada model background.
91

Gambar 4.49 Diagram alir algoritma K-Means


92

Gambar 4.50 Diagram alir metode Gaussian Mixture Model


93

4.6 Analisis dan Deskripsi Citra


Bagian ini program dirancang untuk melakukan analisa dan memberikan
informasi tentang obyek yang terdeteksi dan mendeskripsikan obyek melalui batas
terluar dari obyek.
4.7.1 Luas area obyek
Program analisis citra dirancang untuk menghitung luas area obyek yang
berhasil tersegmentasi (foreground). Diagram alir proses perhitungan luas area
terlihat pada gambar 4.52. Berdasarkan prinsip connected component dirancang
sebuah program yang dapat menghitung jumlah obyek dan luasan obyek dengan 8
ketetanggan. Proses pengecekkan pixel tetangga dilakukan pada pada baris yang
sama. Ilustrasi alur pengecekkan pixel tetangga terlihat pada gambar 4.51.

Gambar 4.51 Ilustrasi alur pengecekkan connected component

Kemudian selanjutnya dilakukan pengecekkan komponen terkoneksi. Setiap


pixel yang yang dianggap obyek bernilai 1 dan merupakan komponen terkoneksi
maka nilai pixel dijadikan sama dengan 0. Nilai pixel citra di cek kembali untuk
mencari nilai pixel bukan nol dan seterusnya hingga tidak ditemukan lagi pixel
obyek bukan nol. Pada saat obyek 8 komponen terkoneksi semuanya bernilai nol
pada rutin pencarian obyek, output jumlah obyek ditambahkan satu, hal ini berarti
94

jumlah obyek bertambah begitu pula luasan area obyek dan koordinat pixel obyek.
Selanjutnya dilakukan pengecekkan ulang pada citra biner untuk mencari pixel
tidak nol, kemudian cek komponen terkoneksi hingga pixel bukan nol pada citra
tidak ditemukan lagi.
Pengecekkan connected component bagian pertama
Bagian ini melakukan pengecekkan connected component pada koordinat
pixel tetangga yang berada ditengah pada gambar ditandai dengan warna merah.
Cek komponen terkoneksi pertama dilakukan pada posisi pixel lengan kanan
tengah pada koordinat (x, y+1), cek komponen terkoneksi kedua dilakukan pada
posisi pixel lengan kiri tengah pada koordinat (x, y-1). Diagram alir pengecekkan
komponen terkoneksi bagian pertama terlihat pada gambar 4.53.
Pengecekkan connected component bagian kedua
Pengecekkan connected component bagian kedua dilakukan pada baris
selanjutnya (x+1) yaitu pada koordinat pixel tetangga yang bersentuhan sudut di
bawah pixel (x) pada gambar ditandai dengan warna merah. Cek komponen
terkoneksi ketiga dilakukan pada posisi pixel tengah bawah pada koordinat (x+1,
y). Cek komponen terkoneksi keempat dilakukan pada posisi pixel lengan kanan
bawah pada koordinat (x+1, y+1). Cek komponen terkoneksi kelima dilakukan
pada posisi pixel lengan kiri bawah pada koordinat (x+1, y-1). Diagram alir
pengecekkan connected component bagian kedua terlihat pada gambar 4.54.
Pengecekkan connected component bagian ketiga
Pengecekkan connected component bagian ketiga, dilakukan pada baris
sebelumnya (x -1) yaitu pada koordinat pixel tetangga yang bersentuhan sudut di
atas pixel (x) pada gambar ditandai dengan warna merah atas. Cek komponen
terkoneksi keenam dilakukan pada posisi pixel tengah atas pada koordinat (x-1,
y). Cek komponen terkoneksi ketujuh dilakukan pada posisi pixel lengan kanan
atas pada koordinat (x-1, y+1). Cek komponen terkoneksi kedelapan dilakukan
pada posisi pixel lengan kiri atas pada koordinat (x-1, y-1). Diagram alir
pengecekkan connected component bagian kedua terlihat pada gambar 4.55.
Proses pengecekkan dilakukan untuk mencari pixel obyek yang
direpresentasikan dengan nilai 1 (putih) yang saling terkoneksi sehingga
95

membentuk satu obyek, selain itu diperoleh pula koordinat pixel terkoneksi dari
obyek-obyek yang terdeteksi.
4.7.2. Analisis dan deskripsi hasil deteksi limbah
Setelah proses hitung luas diperoleh hasil berupa jumlah obyek, luas area, dan
koordinat pixel obyek. Setelah itu dihitung nilai rata-rata dan standar deviasi luas
area obyek pada setiap framenya. Kemudian koordinat yang berkorespondensi
dengan citra asli diambil nilai pixelnya sehingga diperoleh nilai pixel pada
masing-masing komponen warna untuk tiap obyek. Intensitas warna pada tiap
komponen kemudian dihitung nilai standar deviasinya berdasarkan rumus
pencarian standar deviasi (3.6). Proses ini dilakukan pada hasil deteksi limbah cair
dan limbah padat.

Gambar 4.52 Diagram alir proses perhitungan luas area obyek


96

Proses selanjutnya adalah mendeskripsikan citra, yakni melalui proses


pemberian tanda dan pesan informasi total area, jumlah obyek, dan standar deviasi
luas area obyek pada setiap framenya. Pemberian tanda obyek yang terdeteksi
dilakukan melalui deskripsi wilayah dari pixel obyek yang berbatasan langsung
dengan background.

Gambar 4.53 Diagram alir pengecekan komponen terkoneksi


bagian pertama
97

Gambar 4.54 Diagram alir pengecekan komponen terkoneksi


bagian kedua
98

Gambar 4.55 Diagram alir pengecekan komponen terkoneksi


bagian ketiga
99

4.7 Proses Final


Tahap ini dirancang untuk menghitung nilai akhir proses analisis citra yang
dilakukan terhadap limbah cair dan limbah padat yakni time processing, rata-rata
rata
jumlah obyek perframenya,
nya, rata
rata-rata luas area per obyek, rata-rata
rata standar deviasi
per framenya dan rata-rata
rata standar deviasi intensitas per framenya. Pada tahap ini
berisi proses paling akhir saat eksekusi program berhenti atau seluruh frame yang
dideteksi telah terproses.

4.8 User Interface


Tampilan rancangan user interface untuk memudahkan penggunaan metode
deteksi limbah cair dan limbah padat terlihat pada gambar 4.56. Rancangan
cangan GUI
terdiri dari beberapa bagian dengan fungsi masing-masing,
masing masing, penjelasannya sebagai
berikut:
A. Bagian ambil data video
Bagian ini berfungsi untuk melakukan pemilihan dan pengambilan data video
pada direktori penyimpanan berdasarkan mode kategori limbah yang akan
dideteksi.
B. Bagian kumpulan tombol
Bagian ini digunakan sebagai kendali program yakni melakukan fungsi tombol,
sebagai berikut:

Gambar 4.56
4. Tampilan rancangan user interface
100

 Tombol Proses digunakan untuk memulai proses pendeteksian


 Tombol Stop digunakan untuk menghentikan proses saat program
dijalankan dan menghentikan video yang sedang diputar.
 Tombol Hapus digunkan untuk menghapus semua input, dan data
pemrosesan sebelumnya.
C. Bagian menu bar
Bagian ini berisi menu baris yang terdiri dari File yang digunakan untuk
memutar video dan keluar dari program. Menu simpan digunakan untuk
menyimpan data analisis luasan tiap frame kedalam berkas berekstensi *.xls.
D. Bagian masukan
Bagian ini akan digunakan untuk memasukkan nilai awal untuk inisialisai awal
program. Bagian ini terdiri dari K yang merupakan jumlah komponen
Gaussian yang digunakan, alpha yang merupakan nilai dari learning rate, dan
T yang merupakan batas Threshold obyek dianggap background.
E. Bagian properties video
Bagian ini berisi daftar informasi dari sampel video yang dipilih. Informasi
video yang ditampilkan berupa ukuran video, durasi, jumlah frame, frame rate,
format video, dan ukuran bit/piksel video.
F. Bagian informasi proses
Bagian ini digunakan untuk menampilkan runtutan proses saat program
dijalankan, dan kecepatan pemrosesan.
G. Bagian pilih metode deteksi warna
Bagian ini berfungsi untuk mengaktifkan tombol proses saat pilihan metode
deteksi warna dan gerak aktif. Saat pilihan metode gerak saja yang aktif maka
hanya bagian H saja yang aktif.
H. Bagian proses GMM saja
Bagian ini berfungsi hanya untuk mendeteksi limbah bergerak dengan GMM.
I. Bagian tampilan frame yang sedang diproses
Bagian ini menampilkan nomer frame yang sedang diproses oleh sistem.
101

J. Bagian informasi limbah cair


Bagian ini merupakan bagian yang berfungsi untuk menampilkan informasi
luasan citra berupa jumlah obyek, rata-rata luas area per obyek yang terdeteksi,
standar deviasi luas area per frame, dan rata-rata standar deviasi intensitas
masing-masing komponen warna per frame .
K. Layar tampilan hasil deteksi limbah cair
Layar hasil deteksi akan menampilkan hasil deteksi limbah cair pada sampel
video berupa tanda berwarna pink dan pesan informasi luasan yang berwarna
biru pada frame yang diproses.
L. Layar tampilan hasil deteksi limbah padat
Layar hasil deteksi akan menampilkan hasil deteksi limbah padat pada sampel
video berupa tanda berwarna hijau dan pesan informasi luasan.
M. Layar tampilan obyek limbah cair
Layar obyek limbah akan menampilkan hasil deteksi limbah cair bertipe RGB
setiap frame-nya.
N. Layar tampilan obyek limbah padat
Layar obyek limbah padat akan menampilkan hasil deteksi limbah padat
bertipe RGB setiap frame-nya.
O. Bagian informasi limbah padat
Bagian ini merupakan bagian yang berfungsi untuk menampilkan informasi
luasan citra hasil deteksi limbah padat berupa jumlah obyek, rata-rata luas area
per obyek yang terdeteksi, standar deviasi luas area per frame, dan rata-rata
standar deviasi intensitas masing-masing komponen warna per frame .
BAB V
IMPLEMENTASI

5.1 Data Penelitian


Data yang digunakan dalam penelitian agar dapat dimplementasikan secara
seragam maka digunakan video sample menggunakan resolusi 240x320 pixel
dengan frame rate 10 fps.
Data video diperoleh dari data sekunder berupa video sungai-sungai tercemar
yang berlokasi di Solo. Lokasi pengambilan data video lainnya dilakukan dengan
datang ke lokasi sungai di desa centra batik Wijirejo, Bantul yang di Yogyakarta.

5.2 Persiapan Implementasi


Spesifikasi perangkat keras dan perangkat lunak yang digunakan dalam
implementasi metode ini adalah sebagai berikut:
1. Kamera Canon IXUS 95 IS 10 Mpx
2. Laptop Toshiba Satellite A200 (Intel(R) Core(TM) 2 CPU T5300 1.53
GHz ), RAM 3 G, HD 240 GB
3. Sistem Operasi Windows 7 Professional
4. Matlab 7.10 R2010a

5.3 Implementasi
Metode deteksi limbah cair pewarna batik dan limbah padat berbasis fitur
warna dan fitur gerak ini, diimplementasikan dalam pembuatan program aplikasi
yang ditampilkan pada Graphic User Interface (GUI).
5.3.1 Program Utama
Implementasi program utama terdiri dari 3 bagian yaitu preprocessing, proses
deteksi obyek, dan analisis dan deskripsi citra. Ketiga bagian ini dilakukan pada
pemrosessan tiap frame video, setelah proses pemilihan data video dan mode
deteksi.

102
103

5.3.2 Preprocessing
Filter Gaussian
Fungsi kernelGauss yang berfungsi untuk membentuk jendela kernel gaussian
untuk proses konvolusi. Input dari fungsi kernelGauss adalah dimensi yang
menggambarkan ukuran dari matriks kernel (n x n) dan nilai sdev akan
mempengaruhi besarnya efek penghalusan. Pada penelitian ini digunakan kernel
gaussian ukuran matriks = 5 x 5 dan nilai sdev adalah 0,6. Selanjutnya dilakukan
proses pembobotan kernel berdasarkan persamaan (3.3).
Setelah itu konstanta m dikalikan dengan matriks kernel (gauss2
=(gauss.*m), untuk melakukan konvolusi terhadap suatu citra yang mengandung
noise nilai piksel hasil perhitungan harus dinormalkan dengan cara membaginya
dengan jumlah semua elemen nilai pembobotan filter agar rentang nilai intensitas
tetap seperti semula. Fungsi kernelGauss terlihat pada listing 5.1
Listing 5.1 Fungsi kernel filter Gaussian
function kernel = kernelGauss(dimensi, sdev)

sdev = abs(sdev);
maks = (dimensi + 1)/2;
gauss = zeros(dimensi, dimensi);
for i = -(maks-1):(maks-1)
for j = -(maks-1):(maks-1)
k = i + maks;
l = j + maks;
gauss(k,l) = exp(-((i)^2 +(j)^2)/(2*sdev^2));
end
end
m =(max(max(gauss))/min(min(gauss)));
gauss2 = (gauss.*m);
jumlah = sum(sum(gauss2));
gauss2 = gauss2./jumlah;

Proses selanjutnya adalah melakukan konvolusi pada input frame asli, pertama
adalah melakukan pengecekkan terhadap dimensi citra, jika dimensi citra adalah 3
maka dilakukan ekstraksi tiap komponen warna merah, hijau dan biru yang
disimpan dalam variabel polR, polG, dan polB. Implementasi program terlihat
pada listing 5.2.
104

Listing 5.2 Program FilterGauss31

function polut = FilterGauss31(polutan, kernel)

new_rgb = im2double(polutan);
[ro co vc] = size(new_rgb);
if vc == 3;
polR = new_rgb(:,:,1);
polG = new_rgb(:,:,2);
polB = new_rgb(:,:,3);
polut = zeros(ro,co,vc);
polut (:,:,1) = polut (:,:,1)+conv2(polR,kernel,'same');
polut (:,:,2) = polut (:,:,2)+conv2(polG,kernel,'same');
polut (:,:,3) = polut (:,:,3)+conv2(polB,kernel,'same');
polut = im2uint8(polut);
else
polut = zeros(ro, co, vc);
polut = polut + conv2(new_rgb, kernel, 'same');
polut = im2uint8(polut);
end

Proses konvolusi dilakukan pada tiap komponen warna sebagai contoh


conv2(polR,kernel,'same')berarti fungsi conv2 akan melakukan konvolusi
pada setiap pixel yang ada pada citra masukan yakni polR dengan kernel. Jika
pixel berada pada batas pinggir citra, maka akan dilakukan zero padding
(penambahan baris baru atau kolom baru dengan nilai 0) tetapi citra tengahnya
tetap pada piksel-piksel matriks citra masukan sehingga citra keluaran berukuran
sama dengan citra masukan. Jika bukan tiga dimensi (misal: grayscale) maka
konvolusi hanya dilakukan pada satu matriks citra saja. Citra hasil pemfilteran
disimpan sebagai variabel polutFil.
5.3.3 Metode deteksi berbasis fitur warna
Proses deteksi dilakukan secara full frame terhadap seluruh piksel yang ada di
dalam frame. Program deteksi berbasis fitur warna terdiri dari fungsi umum
hitungCentroid kareana diimplementasikan hampir pada tiap mode dan empat
sub-mode fungsi program yaitu kategori “Putih”, “Ungu”, “Merah”, dan “Biru”.
Fungsi hitungCentroid intensitas tiap komponen RGB
Program hitungCentroid dibuat untuk mengihung nilai rata-rata intensitas
setiap komponen warna (cenR, cenG, cenB), secara umum diimplementasikan
105

pada setiap mode deteksi warna limbah, input dari fungsi hitungCentroid adalah
citra hasil pemfilteran (polut). Variabel ro, col, polR, polG, polB disimpan
sebagai variabel global agar dapat diakses oleh fungsi-fungsi lainnya untuk
mendeteksi limbah. Proses selanjutnya adalah ekstraksi matriks warna variabel
polR sebagai variabel komponen warna merah, polG sebagai variabel komponen
warna hijau dan variabel polB sebagai komponen warna biru. Kemudian dihitung
nilai rata-ratanya, sebagai contoh nilai rata-rata intensitas pada komponen warna
merah dihitung dengan cara sum(polR(:))/(length(polR(:))). Implementasi
program terlihat pada Listing 5.3.
Listing 5.3 Fungsi program hitungCentroid

function [cenR, cenG, cenB] = hitungCentroid(polut)

global ro col polR polG polB


[ro col dimens] = size(polut);
polR = polut(:, :, 1);
polG = polut(:, :, 2);
polB = polut(:, :, 3);
cenR = sum(polR(:))/(length(polR(:)));
cenG = sum(polG(:))/(length(polG(:)));
cenB = sem(polB(:))/(length(polB(:)));

Kategori mode “Putih”


Bagian deteksi berbasis fitur warna mode “Putih” bertujuan untuk memisahkan
limbah cair yang berwarna putih dari background air sungai dan dinding sungai.
variabel gabung2 merepresentasikan hasil segmentasi obyek limbah berwarna
putih. Implementasi program terlihat pada listing 5.4.
Listing 5.4 Fungsi program segmenLiquidPutih
function [gabung gabung2] = segmenLiquidPutih(polut)

global polR polG polB ro col

[cenR, cenG, cenB] = hitungCentroid(polut);


syarat1 = (polR > 110) & (polG > 40) & (polB > 20);
syarat2 = ~(polR > polB);
gabung = syarat1 & syarat2;
syarat3P = ~ (polB - polG >= 15);
syarat4P = ~(cenB - polB >= 20);
detectColor = syarat3P & syarat4P;
gabung2 = gabung & detectColor;
106

Kategori mode “Ungu”


Program kategori mode “Ungu” bertujuan untuk mensegmentasi limbah cair
yang berwarna ungu. Variabel temp dan tempOther merupakan matriks kandidat
dinding, tahap selanjutnya adalah mencari elemen matriks bukan nol dari
persen_temp dan persen_tempOther. Hasil pengurangan kedua variabel ini
merepresentasikan nilai persen bagian dinding sungai yang digunakan untuk
pengecekkan kondisi pendeteksian limbah.
Listing 5.5 Program deteksi dinding dan hitung nilai persen mode ungu

function [gabung gabung2] = segmenLiquidUngu(polut,n,numFrames)

global polR polG polB ro col persenPrev

[ro col dimensi] = size(polut);


[cenR, cenG, cenB] = hitungCentroid(polut);

% ----------- deteksi pixel bagian Dinding --------------


radius = 15.^2;
syarat1a=((cenR-polR).^2)+((cenG-polG).^2)+((cenB-polB).^2);
syarat1 = syarat1a < radius;
syarat2 = (polB > polR) & polB > polG);
syarat3 = (polR > 140) & (polG > 40) & (polB > 20);
temp = (syarat1 | syarat2);
tempOther = syarat3;

% ------------ hitung nilai persen ---------------


if n >= 2 && n <= numFrames
persenPrev = persen;
end
idx_temp = find(temp);
idx_tempOther = find(tempOther);
persen_temp = (length(idx_temp)/numel(tempOther))*100;
persen_tempOther=(length(idx_tempOther)/numel(tempOther))*100;
persen = persen_temp - persen_tempOther;

% ------ cek persyaratan deteksi warna --------------


syarat2U = abs(cenB - polB) > 15;
syarat3U = (polB - polR) > 15;
syarat4U = (polB - polG) > 10;
syarat5U = (polR - polG) > 5;
syarat6U = abs(cenB - polB) > 70
detectColor = syarat2&syarat2U&(syarat3U|syarat5U)&syarat4U
| syarat6U

================= Listing 5.6 ================


107

Listing 5.6 Aturan kondisi deteksi limbah ungu

% ------------- aturan kondisi pertama ---------------


if persen > 5 && persen < 20;
% ---------- hitung nilai ipersen untuk wallMask -----------
persen_diff = abs(persen - persenPrev);
if persen < persenPrev
ipersen = abs(persen - persen_diff);
else
ipersen = persen + persen_diff;
end
if n < 2
ipersen = 0;
end
ukuran_ro = (ipersen/100)*ro;
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
gabung = (temp & ~tempOther);
gabung2 = (gabung | detectColor) & wallMask;

elseif persen >= 25 && persen < 65;


% ---------- hitung nilai ipersen untuk wallMask -----------
persen_diff = abs(persen - persenPrev);
if persen < persenPrev
ipersen = abs(persen - persen_diff);
else
ipersen = persen + persen_diff
end
ipersen = 0.25*ipersen;
% ---- wallMasking ------
ukuran_ro = (ipersen/100)*ro;
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
% ---- segmen warna ------
gabung = (wallMask & ~tempOther);
gabung2 = gabung & wallMask & detectColor;
else
gabung = tempOther;
gabung2 = gabung | detectColor;
end

Kandidat awal piksel yang mencerminkan warna limbah cair direpresentasikan


sebagai variabel detectColor. Pada kondisi tersebut hal yang dilakukan pertama
adalah pengecekan terhadap nilai persen, kemudian mencari nilai ipersen
(perbandingan ukuran ro(baris)) bagi proses wallMasking. Jika nilai persen kurang
dari persenPrev, maka dianggap bahwa kondisi frame sekarang memiliki kandidat
108

dinding yang lebih kecil, dapat diasumsikan terjadi karena adanya proses zooming
pada bagian limbah atau adanya gerakan kamera maka nilai ipersen =
abs(persen - persen_diff), maka jika nilai persen lebih besar dari
persenPrev , maka nilai ipersen = persen + persen_diff. Implementasi
program segmentasi limbah cair berwarna ungu terlihat pada Listing 5.5.
Nilai persen_diff diperoleh dari perhitungan nilai abs(persen -

persenPrev). Kondisi pertama adalah jika nilai persen terletak diantara 5 dan 20,
kandidat dinding didefinisikan sebagai gabungan antara invers tempOther AND
temp. Variabel gabung didefinisikan sebagai hasil segmentasi dinding dimana
bagian dinding direpresentasikan dengan piksel bernilai 0 dan bagian yang
dianggap air dengan piksel bernilai 1. Setelah itu citra wallMask untuk menutup
bagian dinding yang masih terdeteksi dengan piksel bernilai 0. Kondisi kedua jika
persen terletak diantara nilai 25 dan 65. Pengecekkan kondisi pendeteksian
terlihat pada Listing 5.6.

Kategori mode “Merah”


Program mode merah bertujuan untuk mensegmentasi limbah cair berwarna
merah. Program dimulai dengan mencari nilai rata-rata komponen warna (cenR,
cenG, dan cenB) fungsi hitungCentroid. Proses pertama adalah melakukan
deteksi warna dinding, yang dilakukan berdasarkan persamaan 4.11 hingga 4.13.
Variabel temp dan tempOther adalah kandidat pixel-pixel yang mewakili
sebagian besar dinding yang nantinya akan direpresentasikan sebagai pixel 0
(hitam). Salah satu atau kedua variabel ini nantinya pada tahap pengecekkan
kondisi akan dikenai proses invers atau penggabungan operasi logika lainnya dan
disimpan sebagai variabel gabung. Implementasi program untuk deteksi limbah
cair warna merah terlihat pada Listing 5.7.
Pengecekkan kondisi pendeteksian dilakukan perdasarkan nilai persen, dimana
tiap kondisi memiliki persyaratan tertentu yang harus dipenuhi. Program
pengecekkan kondisi diimplementasikan terhadap 7 kemungkinan kondisi
pendeteksian yang menggambarkan besarnya presentase bagian bukan dinding
atau bagian air. Pada tiap kondisi pendeteksian kandidat awal warna limbah
109

Listing 5.7 Deteksi dinding dan hitung nilai persen mode merah
function [gabung gabung2] = segmenLiquidMerah(polut, n, numFrames)

global polR polG polB ro col persen persenTemp ipersen


[ro col dimensi ] = size(polut);
% ----------- hitung nilai centroid tiap channel warna --------
[cenR, cenG, cenB] = hitungCentroid(polut);
% ------------------ deteksi dinding ------------------------
radius2=15.^2;
syarat1a=((cenR-polR).^2)+((cenG-polG).^2)+((cenB-polB).^2);
syarat1 = syarat1a < radius2;
syarat2 = (polR > 95) & (polG > 50) & (polB > 30);
syarat3 = ~(polR > polB) & ~(polR > polG);
tempOther = syarat3;
temp = (syarat1 | syarat2);
% -------------- buat inisial temp persen untuk wallMask --
if n >= 2 && n <= numFrames
persenTemp = persen;
end
idx_temp = find(temp);
idx_tempOther = find(tempOther);
persen_temp = (length(idx_temp)/numel(temp))*100;
persen_tempOther = (length(idx_tempOther)/numel(temp))*100;
persen = abs(persen_temp - persen_tempOther);
% --------------- cek nilai persen --------------------
persen_diff = abs(persen - persenTemp);
if persenTemp > persen
ipersen = abs(persen - persen_diff);
else
ipersen = persen + persen_diff;
end
if ipersen > 100
ipersen = 0;
end
% ------ cek kondisi deteksi limbah cair merah -------
if persen > 5 && persen <= 35
======== Listing 5.8 ========
elseif persen > 35 && persen <= 52
======== Listing 5.9 =========
elseif persen > 52 && persen <= 54
======== Listing 5.10 ========
elseif persen > 54 && persen <= 70
======== Listing 5.11 ========
elseif persen > 70 && persen <= 80
======== Listing 5.12 ========
elseif persen > 80 && persen <= 90
======== Listing 5.13 ========
elseif persen > 95 && persen <= 100
======== Listing 5.14 ========
else
======== Listing 5.15 ========
end
110

didefinisikan sebagai variabel detectColor dan hasil pendeteksian akhir obyek


limbah cair sebagai variabel gabung2.
Rentang aturan pertama jika nilai persen berada diantara 5 kurang dari sama
dengan 35. Hasil akhir dari deteksi warna limbah merah disimpan sebagai
variabel gabung2. Implementasi program terlihat pada Listing 5.8
Listing 5.8 Aturan deteksi merah 1

ukuran_ro = (0.5*ipersen/100)*ro;
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
gabung = ~temp;
%-------- detect warna limbah cair -------------
mu_diffR = abs(cenR - polR) >= 5;
mu_diffG = abs(cenG - polG) >= 10;
syarat4M = (polR - polG) >= 10;
syarat5M = abs(cenR - polR) >= 15;
detectColor = syarat4M & (mu_diffR | mu_diffG);
gabung2 = (gabung | syarat5M) & detectColor & wallMask;

Rentang aturan kedua jika nilai persen berada diantara 35 dan kurang dari sama
dengan 52. kemudian dilakukan perhitungan nilai persen_cek yang diperoleh dari
perhitungan persentase pixel bukan nol hasil operasi citra biner syarat3M_diffRG
yang menggambarkan kandidat bagian air sungai. Persen_cek memberikan variasi
rentang pengecekkan tahap lanjut. Pengelompokan tahap kedua dilakukan
berdasarkan kesamaan pola deteksi yakni jika nilai persen berada pada rentang
tertentu. Implementasi program terlihat pada Listing 5.9.
Rentang aturan ketiga jika nilai persen berada diantara 52 dan kurang dari
sama dengan 54. Pertama dibuat citra wallMask Kemudian dilakukan
pengecekkan kondisi tahap 2 berdasarkan kesamaan pola pendeteksian.
Implementasi program terlihat pada Listing 5.10.
Rentang aturan keempat jika nilai persen berada diantara 54 sampai 70.
Pengecekkan tahap kedua dilakukan berdasarkan kesamaan pola deteksi, agar
lebih mudah dipahami implementasi program terlihat pada Listing 5.11
111

Listing 5.9 Aturan deteksi merah 2

ukuran_ro = (0.35*ipersen/100)*ro;
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
mu_diffR = abs(cenR - polR) >= 30;
mu_diffB = abs(cenB - polB) >= 40;
mu_diffG = abs(cenG - polG) >= 10;
syarat3M_diffRGB = (mu_diffR | mu_diffG);
idx_syarat3M_diffRGB = find(syarat3M_diffRGB);
persen_cek = (length(idx_syarat3M_diffRGB)/numel(temp))*100;
if persen > 40 && persen <= 45
gabung = ~tempOther;
if persen_cek > 45 && persen_cek < 75 %50
liquid1M = (polR > polG) & (polR > polB);
liquid2M = (polB > polG);
syarat4M = (polR - polG) >= 15;
detectColor = liquid1M & liquid2M & syarat4M;
gabung2 = syarat3M_diffRGB & detectColor;
else
syarat4 = (polR > 200) & (polG > 200) & (polB > 200);
syarat4M = (polR - polG) >= 8;
detectColor = syarat4M & (mu_diffR | mu_diffB);
gabung2 = detectColor & ~syarat4;
end
elseif (persen > 45 && persen <= 50) || (persen_cek > 50 &&
persen_cek < 80)
gabung = syarat3M_diffRGB;
liquid1M = (polR > polG) & (polR > polB);
liquid2M = (polB > polG);
syarat4M = (polR - polG) >= 15;
detectColor = liquid1M & syarat4M & liquid2M;
gabung2 = detectColor & gabung;
else
if persen_cek > 45 && persen_cek < 70
gabung = syarat3M_diffRGB;
liquid1M = (polR > polG) & (polR > polB);
liquid2M = (polB > polG);
syarat4M = (polR - polG) >= 15;
detectColor = liquid1M & syarat4M & liquid2M;
gabung2 = detectColor & gabung;
else
gabung = (wallMask & temp);
%---------- detect warna limbah cair ------------
syarat4M = (polR - polG) >= 20;
detectColor = syarat4M & (mu_diffR | mu_diffB);
gabung2 = (detectColor | syarat4M) & gabung;
end
end
112

Listing 5.10 Aturan deteksi merah 3


ukuran_ro = (0.75*ipersen/100)*ro;
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
%------- detect warna limbah cair ------------
if persen > 52 && persen < 54
mu_diffR = abs(cenR - polR) >= 5;
mu_diffG = abs(cenG - polG) >= 10;
syarat3M_diffRGB = (mu_diffR | mu_diffG);
idx_syarat3M_diffRGB = find(syarat3M_diffRGB);
persen_cek =(length(idx_syarat3M_diffRGB)/numel(temp))*100;
if persen_cek > 50
gabung = ~tempOther;
liquid1M = (polR > polG) & (polR > polB);
liquid2M = (polB > polG);
syarat4M = (polR - polG) >= 15;
detectColor = liquid1M & syarat4M & liquid2M &
syarat3M_diffRGB;
gabung2 = gabung & detectColor;
else

gabung = temp;
liquid2M = ~(polB > polG);
syarat4M = (polR - polG) >= 15;
detectColor = syarat4M & syarat3M_diffRGB;
gabung2 = (~gabung | liquid2M) & detectColor & wallMask;
end
else
gabung = temp;
mu_diffR = abs(cenR - polR) >= 30;
mu_diffG = abs(cenG - polG) >= 10;
detectColor = mu_diffR & mu_diffG;
gabung2 = ~gabung & detectColor;
end

Listing 5.11 Aturan deteksi merah 4


%------------ detect warna limbah cair ------------------
if persen > 56 && persen < 62
mu_diffG = abs(cenG - polG) >= 10;
mu_diffR = abs(cenR - polR) >= 30;
syarat3M_diffRGB = (mu_diffR | mu_diffG);
idx_syarat3M_diffRGB = find(syarat3M_diffRGB);
persen_cek = (length(idx_syarat3M_diffRGB)/numel(temp))*100;
if persen_cek > 40 && persen_cek <= 58
gabung = ~tempOther;
syarat4M = (polR - polG) >= 8;
mu_diffB = abs(cenB - polB) >= 40;
detectColor = syarat4M & (mu_diffR | mu_diffB);
gabung2 = detectColor & gabung;
elseif persen_cek > 58 && persen_cek < 75 %50
gabung = syarat3M_diffRGB;
113

liquid1M = (polR > polG) & (polR > polB);


liquid2M = polB > polG;
syarat4M = (polB - polG) >= 5;
detectColor = liquid1M & liquid2M & syarat4M;
gabung2 = detectColor & gabung;
else
ukuran_ro = (ipersen/100)*ro;
wallMask = ones(ro,col);

for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
gabung = ~temp;
syarat4 = (polR > 200) & (polG > 200) & (polB > 200);
syarat4M = (polR - polG) >= 8;
mu_diffB = abs(cenB - polB) >= 40;
detectColor = syarat4M & (mu_diffR | mu_diffB);
gabung2 = detectColor & ~syarat4 & gabung & wallMask;
end
elseif persen >= 62 && persen <= 70
mu_diffG = abs(cenG - polG) >= 10;
mu_diffR = abs(cenR - polR) >= 30;
syarat3M_diffRGB = (mu_diffR | mu_diffG);
idx_syarat3M_diffRGB = find(syarat3M_diffRGB);
persen_cek=(length(idx_syarat3M_diffRGB)/numel(temp))*100;
if persen_cek > 40 && persen_cek < 75
gabung = ~temp;
syarat4M = (polR - polG) >= 15;
liquid2M = polB > polG;
detectColor = syarat4M & liquid2M;
gabung2 = detectColor;
elseif persen_cek > 75 && persen_cek < 80
ukuran_ro = (ipersen/100)*ro;
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
syarat4M = (polR - polG) >= 8;
mu_diffB = abs(cenB - polB) >= 40;
detectColor = syarat4M & (mu_diffR | mu_diffB);
gabung2 = detectColor & wallMask;
else
gabung = ~temp;
liquid2M = ~(polB > polG);
syarat4M = (polR - polG) >= 8;
mu_diffB = abs(cenB - polB) >= 40;
detectColor = syarat4M & (mu_diffR | mu_diffB);
gabung2 = (gabung | liquid2M) & detectColor;
end
else
gabung = ~tempOther;
syarat4M = (polR - polG) >= 15;
liquid2M = polB > polG;
detectColor = syarat4M & liquid2M;
gabung2 = detectColor & gabung;
end
114

Listing 5.12 Aturan deteksi merah 5

if (persen > 70 && persen < 75)


|| (persen > 77 && persen < 80)
gabung = ~tempOther;
liquid1M = (polR > polG) & (polR > polB);
liquid2M = polB > polG;
syarat4M = (polR - polG) >= 15;
detectColor = liquid1M & syarat4M & liquid2M;
gabung2 = gabung & detectColor;
else
mu_diffR = (abs(cenR - polR)) >= 15;
mu_diffG = (abs(cenG - polG)) >= 10;
syarat3M_diffRGB = (mu_diffR | mu_diffG);
idx_syarat3M_diffRGB = find(syarat3M_diffRGB);
persen_cek =(length(idx_syarat3M_diffRGB)/numel(temp))*100;
if persen_cek > 60 && persen_cek <= 70
gabung = syarat3M_diffRGB;
liquid2M = polB > polG;
syarat4M = (polR - polG) >= 15;
detectColor = liquid2M & syarat4M;
gabung2 = detectColor & gabung;
else
ukuran_ro = (0.15*ipersen/100)*ro;
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
gabung = ~temp;
% ------ detect limbah cair --------------------
syarat4M = (polR - polG) >= 15;
detectColor = (syarat4M & syarat3M_diffRGB)|gabung;
gabung2 = detectColor & wallMask;
end
end

Rentang aturan kelima jika nilai persen berada diantara 70 dan kurang dari
sama dengan 80. Pengecekkan tahap kedua dilakukan berdasarkan kesamaan pola
Pendeteksian. Jika tidak memenuhi persyaratan nilai persen diatas maka
penecekkan tahap dua dilakukan melalui nilai persen_cek yakni perhitungan nilai
persentase pixel ≠ 0, dari hasil variabel citra biner syarat3M_diffRGB
Implementasi program terlihat pada listing 5.12.
Rentang aturan keenam, jika nilai persen berada pada rentang lebih besar dari
80 dan persen kurang dari sama dengan 90. Implementasi program terlihat pada
Listing 5.13.
115

Aturan deteksi ketujuh adalah jika nilai persen lebih besar dari 95 dan persen
<= 100, maka kandidat dinding dinotasikan dengan matriks temp. Kemudian
dilakukan pendeteksian awal warna limbah yang dinotasikan dengan detectColor.
Implementasi program terlihat pada Listing 5.14
Aturan deteksi kedelapan, memuat aturan pendeteksian yang berada diluar
seluruh persyaratan nilai persen deteksi limbah cair merah. Implementasi program
terlihat pada listing 5.15.
Listing 5.13 Aturan deteksi merah 6
%--------------- detect warna limbah cair ------------------
mu_diffR = abs(cenR - polR) >= 15;
mu_diffG = abs(cenG - polG) >= 10;
syarat3M_diffRGB = (mu_diffR | mu_diffG);
if persen < 82
idx_syarat3M_diffRGB = find(syarat3M_diffRGB);
persen_cek =(length(idx_syarat3M_diffRGB)/numel(temp))*100;
syarat4M = (polR - polG) >= 15;
detectColor = liquid2M & syarat4M;
gabung2 = detectColor & gabung;
else
ukuran_ro = (0.15*ipersen/100)*ro;
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
gabung = ~temp;
% ------ detect limbah cair --------------------
syarat4M = (polR - polG) >= 15;
detectColor = (syarat4M & syarat3M_diffRGB)|gabung;
gabung2 = detectColor & wallMask;
end
end
if persen_cek > 55 && persen_cek < 60
gabung = temp;
syarat4M = (polR - polG) >= 15;
liquid2M = polB > polG;
detectColor = syarat4M & liquid2M;
gabung2 = gabung & detectColor;

else
gabung = ~tempOther;
syarat4M = (polR - polG) >= 15;
detectColor = syarat4M & syarat3M_diffRGB;
gabung2 = gabung & detectColor;
end
elseif persen >= 82 && persen < 90
idx_syarat3M_diffRGB = find(syarat3M_diffRGB);
persen_cek =(length(idx_syarat3M_diffRGB)/numel(temp))*100;
if persen_cek > 50 && persen_cek < 60
gabung = temp;
116

syarat4M = (polR - polG) >= 15;


liquid2M = polB > polG;
detectColor = syarat4M & liquid2M;
gabung2 = gabung & detectColor;
else
gabung = ~tempOther;
liquid1M = (polR > polG) & (polR > polB);
liquid2M = polB > polG;
syarat4M = (polR - polG) >= 15;
detectColor = liquid1M & syarat4M & liquid2M;
gabung2 = gabung & detectColor;
end
else
% ------- check deteksi limbah cair tahap lanjut ------
idx_syarat3M_diffRGB = find(syarat3M_diffRGB);
persen_cek =(length(idx_syarat3M_diffRGB)/numel(temp))*100;
if persen_cek >= 55
ukuran_ro = (0.75*ipersen/100)*ro;
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
gabung = ~tempOther;
syarat4M = (polR - polG) >= 15;
liquid1M = (polR > polG) & (polR > polB);
detectColor = syarat4M & syarat3M_diffRGB;
gabung2 = ((gabung & detectColor)| mu_diffR) & liquid1M
& wallMask;
else
ukuran_ro = (0.75*ipersen/100)*ro;
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
gabung = ~tempOther;
syarat4M = (polR - polG) >= 10;
syarat6M = (polB - polG) >= 5;
detectColor = syarat4M & syarat3M_diffRGB & syarat6M;
gabung2 = gabung & detectColor & wallMask;
end
end

Listing 5.14 Aturan deteksi merah 7


gabung = temp;
syarat4M = (polR - polG) >= 15;
liquid2M = polB > polG;
detectColor = syarat4M & liquid2M;
gabung2 = gabung & detectColor;
117

Listing 5.15 Aturan deteksi merah 8

% ------- detect limbah cair ---------------


mu_diffR = abs(cenR - polR) >= 15;
mu_diffG = abs(cenG - polG) >= 10;
syarat3M_diffRGB = (mu_diffR | mu_diffG);
idx_syarat3M_diffRGB = find(syarat3M_diffRGB);
persen_cek = (length(idx_syarat3M_diffRGB)/numel(temp))*100;
if persen_cek > 30 && persen_cek < 75
gabung = syarat3M_diffRGB;
syarat4M = (polR - polG) >= 15;
liquid2M = polB > polG;
detectColor = syarat4M & liquid2M;
gabung2 = detectColor;
else
gabung = ~temp;
syarat4M = (polR - polG) >= 15;
detectColor = syarat4M & syarat3M_diffRGB;
gabung2 = (gabung | liquid2M) & detectColor;
end

Kategori mode “Biru”


Program mode “Biru” bertujuan untuk mensegmentasi limbah cair berwarna
biru. Program dimulai dengan mencari nilai rata-rata masing-masing komponen
warna (cenR, cenG, dan cenB). Proses pertama adalah melakukan deteksi
warna dinding, yang dilakukan berdasarkan persamaan 4.22 hingga 4.24.
Kemudian mulai dari frame kedua hingga frame terakhir, nilai persenPrev
diperoleh dari nilai persen sebelumnya yakni, persen (n - 1), setelah itu
menentukan nilai persen dari nilai persentase pixel bukan nol matriks citra biner
persen_temp dan persen_tempOther, melalui perintah persen = persen_temp -
persen_tempOther;.
Tahap kedua, adalah menentukan inisial awal kandidat pixel-pixel warna
limbah, kemudian disimpan sebagai variabel detectColor. Selanjutnya adalah
tahap pengecekkan kondisi pendeteksian, terdapat 14 kemungkinan kondisi, agar
proses eksekusi hanya dilakukan saat aturan deteksi pada satu kondisi saja yang
terpenuhi.
Kemungkinan kondisi tersebut dibuat untuk mencoba mengatasi permasalahan
pendeteksian seperti kemiripan dinding sungai dengan warna limbah. Tahapan
yang dilakukan pada setiap kondisi pengecekkan nilai persen secara umum adalah
pembuatan wallMask, mendefinisikan variabel gabung (pixel berwarna putih pada
118

bagian daerah air sungai), serta proses segmentasi limbah tahap akhir yang
disimpan sebagai variabel gabung2. Implementasi program terlihat pada Listing
5.16. Rentang kondisi pengecekkan aturan pertama yaitu jika nilai persen >=5
&& persen < 25, Implementasi program terlihat pada Listing 5.17
Rentang aturan kondisi kedua, nilai persen >= 25 && persen < 36,
pengecekkan tahap lanjut dilakukan dengan persen_gabung, dengan setting baris
wallMask berukuran ukuran_ro = (ipersen/100)*ro;. Implementasi
program terlihat pada Listing 5.18.
Rentang kondisi ketiga, jika nilai persen >=36 && persen < 40,
pengecekkan tahap lanjut menggunakan persentase pixel bukan nol dari variabel
gabung yang disebut dengan persen_gabung. Pengecekkan tahap 2 ini
dilakukan untuk mencoba mengatasi perubahan pengambilan video. Ukuran baris
yang digunakan untuk membuat wallMask adalah ukuran_ro =

(ipersen/100)*ro;. Implementasi program terlihat pada Listing 5.19.


Aturan kondisi keempat berada pada rentang kondisi persen >= 40 &&
persen < 42. Ukuran baris yang digunakan untuk membuat wallMask adalah
ukuran_ro = (0.5*ipersen/100)*ro);. Pada tahap ini juga dilakukan
pengecekan tahap dua berdasarkan nilai persen_gabung. Implementasi program
terlihat pada listing 5.20
Aturan kondisi kelima berada pada rentang kondisi persen >= 42 &&
persen < 51 . Pengecekan tahap kedua dilakukan berdasarkan persen_gabung.
Implementasi program terlihat pada listing 5.21.
Aturan keenam, jika nilai persen >= 51 && persen < 55. Pengecekkan
terhadap nilai persen_gabung juga dilakukan pada tahap ini untuk mendapatkan
variasai rentang yang lebih lebar sehingga memungkinkan variasi pengolahan
frame dengan berbagai kondisi. Implementasi program terlihat pada listing 5.22.
Aturan ketujuh, jika nilai persen >= 55 && persen < 60. Ukuran baris
yang digunakan untuk membuat wallMask adalah ukuran_ro =

(0.5*ipersen/100)*ro). Setelah proses wallMasking maka dilakukan


pengecekan tahap 2 berdasarkan nilai persen_gabung. Implementasi program
terlihat pada listing 5.23.
119

Listing 5.16 Program tahap awal mode biru


[gabung gabung2] = segmenLiquidBiru(polut, n, numFrames);
global polR polG polB ro col persenPrev persen ipersen

[ro col dimensi] = size(polut);


[cenR, cenG, cenB] = hitungCentroid(polut);
radius = 15.^2;
syarat1a=((cenR - polR).^2) + ((cenG-polG).^2) + ((cenB -
polB).^2);
syarat1 = syarat1a < radius;
syarat2 = ~(polR > polG) & ~(polR > polB);
syarat4 = (polR > 200) & (polG > 185) & (polB > 200);
tempOther = syarat4;
temp = ~(syarat1 | syarat2);
if n >= 2 && n <= numFrames
persenPrev = persen; %persenPrev = persen frame sebelumnya
end
idx_temp = find(~temp); idx_tempOther = find(tempOther);
persen_temp = (length(idx_temp)/numel(tempOther))*100;
persen_tempOther = (length(idx_tempOther)/numel(tempOther))*100;
persen = persen_temp - persen_tempOther;
liquid1 = (polB - polR) >= 5;
liquid2 = (polB - polG) >= 5; %1 atau 10;
liquid5 = (polB >= polG) & (polB >= polR);
detectColor = liquid1 & liquid5 & liquid2;
% ------ pengecekan kondisi deteksi limbah cair biru ------
if persen >= 5 && persen < 25
========= Aturan biru 1 listing 5.17 ========
elseif persen >= 25 && persen < 36
========= Aturan biru 2 listing 5.18 ========
elseif persen >=36 && persen < 40
========= Aturan Biru 3 listing 5.19 ========
elseif persen >= 40 && persen < 42
========= Aturan Biru 4 listing 5.20 ========
elseif persen >= 42 && persen < 51
========= Aturan Biru 5 listing 5.21 ========
elseif persen >= 51 && persen < 55
========= Aturan Biru 6 listing 5.22 ========
elseif persen >= 55 && persen < 60
========= Aturan Biru 7 listing 5.23 ========
elseif persen >= 60 && persen < 65
========= aturan Biru 8 listing 5.24 ========
elseif persen >= 65 && persen < 70
========= aturan biru 9 listing 5.25 ========
elseif persen >= 70 && persen < 80
========= aturan biru 10 listing 5.26 ========
elseif persen >= 80 && persen < 85
========= aturan biru 11 listing 5.27 ========
elseif persen >= 85 && persen < 90
========= aturan biru 12 listing 5.28 ========
elseif persen >= 25 && persen < 36
========= aturan biru 13 listing 5.29 ========
else
========= aturan biru 14 listing 5.30 ========
end
120

Listing 5.17 Aturan deteksi biru 1

% -------------- Aturan deteksi biru pertama -----------


persen_diff = abs(persen - persenPrev);
if persen < persenPrev
ipersen = persen - persen_diff;
else
ipersen = persen + persen_diff;
end
% Keterangan :
% jika persen < persenPrev berarti asumsi kamera gerak kebawah atau
% kamera melakukan zooming(memperbesar detail limbah) sehingga
% daerah air lebih besar dan daerah dinding mengecil
% lainnya berarti asumsi kamera gerak keatas atau bergeser atau
melakukan minimizing(mengecilkan daerah limbah) sehingga daerah
air berkurang daerah tembok membesar
if ipersen > 100
ipersen = 0;
ukuran_ro = (ipersen/100)*ro;
else
ukuran_ro = (0.75*ipersen/100)*ro;
end
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
% ----------- cek persen hasil segmen wall -------
gabung = (wallMask & ~tempOther);
gabung2 = ~tempOther & detectColor;

Listing 5.18 Aturan deteksi biru 2


% ----------- aturan deteksi biru 2 ----------------
persen_diff = abs(persen - persenPrev);
if persen < persenPrev
ipersen = persen - persen_diff;
else
ipersen = persen + persen_diff;
end
if ipersen > 100
ipersen = 0;
ukuran_ro = (ipersen/100)*ro;
else
ukuran_ro = (ipersen/100)*ro;
end

wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
gabung = ~tempOther;
% ---------------- cek persen hasil segmen wall -----------
idx_gabung = find(gabung);
persen_gabung = (length(idx_gabung)/numel(tempOther))*100;
if (persen_gabung > 60 && persen_gabung <= 75)
gabung2 = gabung & detectColor;
121

elseif persen_gabung > 75 && persen_gabung <= 80


idx_detectColor = find(detectColor);
persen_detectColor =(length(idx_detectColor)/
numel(tempOther))*100;
if persen_detectColor >= 5 && persen_detectColor < 25
if persen_detectColor >= 10 && persen_detectColor < 20
gabung2 = gabung & detectColor;
else
liquid6 = abs(cenB - polB) > 30;
gabung2 = gabung & detectColor & liquid6 & wallMask;
end
else
gabung2 = detectColor & gabung;
end
elseif persen_gabung > 80 && persen_gabung <= 85
idx_detectColor = find(detectColor);
persen_detectColor=(length(idx_detectColor)/numel(tempOther))*100
if persen_detectColor >= 10 && persen_detectColor < 25
if (persen_detectColor > 10 && persen_detectColor
<= 16) && (persen >= 34)
gabung2 = detectColor & gabung & wallMask;
else

gabung2 = detectColor & gabung;


end
else
liquid6 = abs(cenB - polB) > 30;
gabung2 = gabung & detectColor & liquid6 & wallMask;
end
elseif persen_gabung > 88 && persen_gabung <= 90
idx_detectColor = find(detectColor);
persen_detectColor = (length(idx_detectColor)
/numel(tempOther))*100;
if persen_detectColor > 5 && persen_detectColor <= 20
gabung2 = gabung & detectColor;
else
gabung = tempOther;
liquid6 = (cenB - polB) > 5;
liquid8 = (polR > 150) & (polG > 150) & (polB > 160);
gabung2 = detectColor & gabung & liquid8 & liquid6 &
wallMask;
end
elseif persen_gabung >= 96 && persen_gabung < 98
liquid6 = (cenB - polB) > 5;
liquid8 = (polR > 150) & (polG > 150) & (polB > 160);
gabung2 = detectColor & gabung & ~liquid8 & liquid6;
else
idx_detectColor = find(detectColor);
persen_detectColor=(length(idx_detectColor)/numel(tempOther))*100
if persen_detectColor > 10 && persen_detectColor <= 25
gabung2 = gabung & detectColor;
else
liquid6 = abs(cenB - polB) > 30; %5
gabung2 = detectColor & liquid6;
end
end
122

Listing 5.19 Aturan Deteksi Biru 3


% ----------- aturan deteksi biru 3 ----------------
persen_diff = abs(persen - persenPrev);
if persen < persenPrev
ipersen = persen - persen_diff;
else
ipersen = persen + persen_diff;
end
if ipersen > 100
ipersen = 0;
ukuran_ro = (ipersen/100)*ro;
else
ukuran_ro = (ipersen/100)*ro;
end
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
gabung = ~tempOther;
% ------- cek persen hasil segmen wall (gabung -----
idx_gabung = find(gabung);
persen_gabung = (length(idx_gabung)/numel(tempOther))*100;
if persen_gabung > 45 && persen_gabung <= 65
gabung2 = (gabung & detectColor & wallMask);
elseif (persen_gabung > 65 && persen_gabung <= 75)
gabung2 = gabung & detectColor;
elseif persen_gabung > 80 && persen_gabung <= 83
idx_detectColor = find(detectColor);
persen_detectColor=(length(idx_detectColor)/numel(tempOther))*100
if ((persen_detectColor > 5 && persen_detectColor <= 14) &&
(persen > 36 && persen <= 38))
liquid6 = abs(cenB - polB) > 30;
gabung2 = detectColor & gabung & wallMask & liquid6;
elseif persen_detectColor > 17 && persen_detectColor < 18
liquid6 = abs(cenB - polB) > 30;
gabung2 = detectColor & gabung & liquid6;
else
gabung2 = detectColor;
end
elseif persen_gabung > 83 && persen_gabung <= 86
idx_detectColor = find(detectColor);
persen_detectColor=(length(idx_detectColor)/numel(tempOther))*100
if persen_detectColor > 5 && persen_detectColor <= 12
if persen_detectColor > 10
gabung2 = detectColor & gabung & wallMask;
else
gabung2 = detectColor & gabung;
end
elseif persen_detectColor > 13 && persen_detectColor < 14
liquid6 = abs(cenB - polB) > 5;
gabung2 = detectColor & gabung & wallMask & liquid6;
elseif persen_detectColor >= 14 && persen_detectColor <= 20
if persen_detectColor >= 17 && persen_detectColor <= 20
gabung2 = detectColor;
else
123

gabung2 = detectColor & gabung & wallMask;


end
else
liquid6 = abs(cenB - polB) > 30;
gabung2 = detectColor & liquid6 & wallMask;
end
elseif persen_gabung > 86 && persen_gabung <= 90
gabung2 = (gabung & detectColor) & wallMask;
elseif persen_gabung >= 96 && persen_gabung < 98
liquid6 = (cenB - polB) > 5;
liquid8 = (polR > 150) & (polG > 150) & (polB > 160);
gabung2 = detectColor & gabung & ~liquid8 & liquid6;
else
gabung2 = detectColor;
end

Listing 5.20 Aturan Deteksi Biru 4

% ----------- aturan deteksi biru 4 ----------------


persen_diff = abs(persen - persenPrev);
if persen < persenPrev
ipersen = persen - persen_diff;
else
ipersen = persen + persen_diff;
end
if ipersen > 100
ipersen = 0;
ukuran_ro = (ipersen/100)*ro;
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end

else
ukuran_ro = (0.5*ipersen/100)*ro;
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
end
gabung = ~tempOther;
idx_gabung = find(gabung);
persen_gabung = (length(idx_gabung)/numel(tempOther))*100;
if persen_gabung > 60 && persen_gabung <= 70
gabung = tempOther;
gabung2 = gabung & detectColor;
elseif persen_gabung > 80 && persen_gabung <= 83
idx_detectColor = find(detectColor);
persen_detectColor=(length(idx_detectColor)/numel(tempOther))*100
if (persen_detectColor > 5 && persen_detectColor <= 14)
liquid6 = abs(cenB - polB) > 30;
gabung2 = detectColor & gabung & wallMask & liquid6;
elseif persen_detectColor > 15 && persen_detectColor < 18
124

liquid6 = abs(cenB - polB) > 30;


gabung2 = detectColor & gabung & liquid6;
else
gabung2 = detectColor;
end
elseif persen_gabung > 83 && persen_gabung <= 86
idx_detectColor = find(detectColor);
persen_detectColor=(length(idx_detectColor)/numel(tempOther))*100
if persen_detectColor > 5 && persen_detectColor <= 25
if persen_detectColor > 10 && persen_detectColor < 15
gabung2 = detectColor & gabung & wallMask;
else
gabung2 = detectColor & gabung;
end
else
liquid6 = abs(cenB - polB) > 30;
gabung2 = detectColor & liquid6 & wallMask;
end
elseif persen_gabung > 86 && persen_gabung <= 90
liquid6 = abs(cenB - polB) >30;
gabung2 = detectColor & liquid6 & wallMask;
else
gabung2 = detectColor;
end

Listing 5.21 Aturan deteksi biru 5

% -------------- Aturan deteksi biru pertama ------------------


persen_diff = abs(persen - persenPrev);
if persen < persenPrev
ipersen = persen - persen_diff;
else
ipersen = persen + persen_diff;
end
if ipersen > 100
ipersen = 0;
ukuran_ro = (ipersen/100)*ro;
else
ukuran_ro = (0.5*ipersen/100)*ro;
end
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
gabung = ~tempOther;

% ---------------- cek persen hasil segmen wall ---------


idx_gabung = find(gabung);
persen_gabung =(length(idx_gabung)/numel(tempOther))*100;
if persen_gabung > 60 && persen_gabung <= 65
gabung2 = detectColor & gabung;
elseif persen_gabung > 65 && persen_gabung <= 70
% ------------ segmen dinding & wallMask -------------
ukuran_ro = (0.10*ipersen/100)*ro;
125

wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
gabung2 = detectColor & gabung & wallMask;
elseif persen_gabung > 70 && persen_gabung <= 80
idx_detectColor = find(detectColor);
persen_detectColor=(length(idx_detectColor/numel(tempOther))*100
if persen_detectColor > 20 && persen_detectColor < 25
liquid6 = abs(cenB - polB) > 30;
gabung2 = detectColor & gabung & ~liquid6;
elseif (persen_detectColor >= 15 && persen_detectColor < 20)
|| persen_detectColor >= 25 && persen_detectColor < 40
gabung2 = detectColor;
else
liquid6 = abs(cenB - polB) > 30;
gabung2 = detectColor & gabung & liquid6;
end
elseif persen_gabung > 80 && persen_gabung <= 90
idx_detectColor = find(detectColor);
persen_detectColor=(length(idx_detectColor)/numel(tempOther))*100;
if (persen_detectColor > 5 && persen_detectColor < 8) ||
(persen_detectColor >= 10 && persen_detectColor <= 14)
gabung2 = detectColor & gabung;
elseif (persen_detectColor >= 8 && persen_detectColor < 9)
liquid6 = abs(cenB - polB) > 30;
gabung2 = detectColor & gabung & liquid6 & wallMask;
elseif (persen_detectColor > 20 && persen_detectColor < 25)
|| (persen_detectColor >= 34 && persen_detectColor <= 35)
gabung2 = detectColor & gabung;
elseif persen_detectColor >= 45 && persen_detectColor < 51
liquid6 = abs(cenB - polB) > 5;
gabung2 = gabung & detectColor & liquid6 & wallMask;
else
gabung2 = detectColor;
end
elseif persen_gabung > 90 && persen_gabung <= 95
idx_detectColor = find(detectColor);
persen_detectColor=(length(idx_detectColor)/numel(tempOther))*100;
if persen_detectColor >= 45 && persen_detectColor < 51
liquid6 = abs(cenB - polB) > 5;
gabung2 = gabung & detectColor & liquid6 & wallMask;
else
gabung2 = detectColor;
end
elseif persen_gabung > 98 && persen_gabung < 100
liquid6 = (cenB - polB) > 5;
liquid8 = (polR > 150) & (polG > 150) & (polB > 160);
gabung2 = detectColor & gabung & ~liquid8 & liquid6;
elseif persen_gabung >= 100
gabung = tempOther;
gabung2 = detectColor & gabung & wallMask;
else
gabung2 = detectColor;
end
126

Listing 5.22 Aturan deteksi biru 6


% ------ cek apakah ada gerakan kamera atau (zooming)----
persen_diff = abs(persen - persenPrev);
if persen < persenPrev
ipersen = persen - persen_diff;
else
ipersen = persen + persen_diff;
end
if ipersen > 100
ipersen = 0;
ukuran_ro = (ipersen/100)*ro;
else
ukuran_ro = (0.6*ipersen/100)*ro;
end
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
gabung = ~tempOther;
% -------- cek persen hasil segmen wall -------------
idx_gabung = find(gabung);
persen_gabung = (length(idx_gabung)/numel(tempOther))*100;
if persen_gabung > 45 && persen_gabung <= 55
|| (persen_gabung > 60 && persen_gabung <= 65)

gabung2 = detectColor & gabung;


elseif persen_gabung > 55 && persen_gabung <= 60
gabung = ~tempOther & wallMask;
gabung2 = detectColor & gabung;
elseif persen_gabung > 65 && persen_gabung <= 70
% ------------ segmen dinding & wallMask -------------
ukuran_ro = (0.10*ipersen/100)*ro;
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
gabung = ~tempOther & wallMask;
gabung2 = detectColor & gabung;
elseif persen_gabung > 70 && persen_gabung <= 80
gabung2 = detectColor;
elseif persen_gabung > 80 && persen_gabung <= 86
idx_detectColor = find(detectColor);
persen_detectColor=(length(idx_detectColor)/numel(tempOther))*100
if persen_detectColor > 20 && persen_detectColor < 35
gabung2 = detectColor & gabung;
else
liquid6 = abs(cenB - polB) > 5;
gabung2 = gabung & detectColor & liquid6 & wallMask;
end
elseif persen_gabung > 86 && persen_gabung <= 98
gabung2 = detectColor & gabung;
elseif persen_gabung >= 100
gabung = tempOther;
gabung2 = detectColor & gabung;
else
127

liquid8 = (polR > 150) & (polG > 150) & (polB > 160);
gabung2 = detectColor & gabung & ~liquid8;
end

Listing 5.23 Aturan deteksi biru 7


% ------- cek apakah ada gerakan kamera atau (zooming)-----
persen_diff = abs(persen - persenPrev);
if persen < persenPrev
ipersen = persen - persen_diff;
else
ipersen = persen + persen_diff;
end
if ipersen > 100
ipersen = 0;
ukuran_ro = (ipersen/100)*ro;

else
ukuran_ro = (0.6*ipersen/100)*ro;
end
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
gabung = ~tempOther;
% -------- cek persen hasil segmen wall -------------
idx_gabung = find(gabung);
persen_gabung = (length(idx_gabung)/numel(tempOther))*100;
if (persen_gabung > 55 && persen_gabung <= 80)
gabung2 = detectColor & gabung;
elseif persen_gabung > 80 && persen_gabung <= 95
idx_detectColor = find(detectColor);
persen_detectColor=(length(idx_detectColor)/numel(tempOther))*100
if (persen_gabung > 85 && persen_gabung < 90) &&
(persen_detectColor > 30 && persen_detectColor < 32)
gabung = tempOther;
gabung2 = detectColor & gabung & wallMask;
else
gabung2 = detectColor & gabung;
end
elseif persen_gabung >95 && persen_gabung <= 98
gabung2 = detectColor & gabung;
elseif persen_gabung > 98 && persen_gabung < 100
liquid8 = (polR > 150) & (polG > 150) & (polB > 160);
gabung2 = detectColor & gabung & ~liquid8;
elseif persen_gabung == 100
gabung = tempOther;
gabung2 = detectColor & gabung & wallMask;
else
gabung2 = detectColor & gabung;
end
128

Listing 5.24 Aturan deteksi biru 8

% ------- cek apakah ada gerakan kamera atau (zooming)-----


persen_diff = abs(persen - persenPrev);
if persen < persenPrev
ipersen = persen - persen_diff;
else
ipersen = persen + persen_diff;
end
if ipersen > 100
ipersen = 0;
ukuran_ro = (ipersen/100)*ro;
else
ukuran_ro = (0.5*ipersen/100)*ro;
end
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
gabung = ~tempOther;
idx_gabung = find(gabung);
persen_gabung = (length(idx_gabung)/numel(tempOther))*100;
if (persen_gabung > 50) && (persen_gabung <= 80)
gabung2 = gabung & detectColor;
elseif (persen_gabung > 80) && (persen_gabung <= 85)
gabung2 = (gabung & detectColor) & syarat4;
elseif (persen_gabung > 90) && (persen_gabung <= 95)
idx_detectColor = find(detectColor);
persen_detectColor = (length(idx_detectColor)
/numel(tempOther))*100;
if persen_detectColor > 50
gabung = tempOther;
gabung2 = gabung & detectColor & wallMask;
else
gabung2 = gabung & detectColor;
end
elseif (persen_gabung > 95) && (persen_gabung < 100)
liquid8 = (polR > 150) & (polG > 150) & (polB > 160);
gabung2 = detectColor & gabung & ~liquid8;
else
idx_detectColor = find(detectColor);
persen_detectColor = (length(idx_detectColor)
/numel(tempOther))*100;
if persen_detectColor > 50 || persen_gabung >= 100
gabung = tempOther & wallMask;
gabung2 = detectColor & gabung;
else
gabung2 = detectColor & gabung;
end
end

Proses pengecekkan aturan kedelapan dilakukan berdasarkan rentang nilai


persen >= 60 && persen < 65. Pengecekkan tahap lanjut dilakukan
129

berdasarkan persentase pixel bukan nol dari variabel gabung dan pada beberapa
kondisi berdasarkan nilai persentase pixel bukan nol dari variabel detectColor.
Implementasi program terlihat pada listing 5.24.
Listing 5.25 Aturan deteksi biru 9
% -------- cek apakah ada gerakan kamera atau (zooming)---
persen_diff = abs(persen - persenPrev);
if persen < persenPrev
ipersen = persen - persen_diff;
else
ipersen = persen + persen_diff;
end
if ipersen > 100
ipersen = 0;
ukuran_ro = (ipersen/100)*ro;
else
ukuran_ro = (ipersen/100)*ro;
end
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
gabung = ~tempOther;
idx_gabung = find(gabung);
persen_gabung = (length(idx_gabung)/numel(tempOther))*100;
if persen_gabung > 30 && persen_gabung <= 40
gabung2 = detectColor;
elseif (persen_gabung > 60 && persen <= 70) || (persen_gabung
> 85 && persen_gabung <= 95)
gabung2 = detectColor & gabung;
elseif persen_gabung > 99 && persen_gabung < 100
liquid6 = (cenB - polB) > 5;
liquid8 = (polR > 150) & (polG > 150) & (polB > 160);
gabung2 = detectColor & gabung & ~liquid8;
else
idx_detectColor = find(detectColor);
persen_detectColor=(length(idx_detectColor)
/numel(tempOther))*100
if persen_detectColor > 50 || persen_gabung >= 99.9
gabung = tempOther & wallMask;
gabung2 = detectColor & gabung;
else
gabung2 = detectColor & gabung;
end
end

Aturan kesembilan, jika nilai persen >= 65 && persen < 70.
Implementasi program terlihat pada listing 5.27. Pengecekkan aturan kesepuluh,
jika nilai persen >= 70 && persen < 80. Pengecekkan kondisi tahap 2
130

dilakukan berdasarkan persentase pixel bukan nol dari variabel gabung.


Implementasi program terlihat pada listing 5.25.
Listing 5.26 Aturan deteksi biru 10

gabung = ~tempOther;
% ---------------- cek persen hasil segmen wall ------------
idx_gabung = find(gabung);
persen_gabung = (length(idx_gabung)/numel(tempOther))*100;
if persen_gabung > 98 && persen_gabung <= 100
gabung = tempOther;
gabung2 = detectColor & gabung;
else
gabung2 = detectColor & gabung;
end

Listing 5.27 Aturan deteksi biru 11

% ------ cek apakah ada gerakan kamera atau (zooming)-------


persen_diff = abs(persen - persenPrev);
if persen < persenPrev
ipersen = persen - persen_diff;
else
ipersen = persen + persen_diff;
end

if ipersen > 100


ipersen = 0;
ukuran_ro = (ipersen/100)*ro;
else
ukuran_ro = (ipersen/100)*ro;
end
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end

gabung = ~tempOther;
% ---------------- cek persen hasil segmen wall ------------
idx_gabung = find(gabung);
persen_gabung = (length(idx_gabung)/numel(tempOther))*100;
if persen_gabung >= 100
gabung = tempOther;
gabung2 = detectColor & gabung & wallMask;
else
gabung2 = detectColor & gabung;
end
131

Listing 5.28 Aturan deteksi biru 12

% ------ cek apakah ada gerakan kamera atau (zooming)----------


persen_diff = abs(persen - persenPrev);
if persen < persenPrev
ipersen = persen - persen_diff;
else
ipersen = persen - persen_diff;
end
if ipersen > 100
ipersen = 0;
ukuran_ro = (ipersen/100)*ro;
else
ukuran_ro = (ipersen/100)*ro;
end
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
gabung = ~tempOther;
% ------------- cek persen hasil segmen wall ------------
idx_gabung = find(gabung);
persen_gabung = (length(idx_gabung)/numel(tempOther))*100;

if persen_gabung > 80 && persen_gabung <= 99


gabung2 = detectColor & gabung;
elseif persen_gabung == 100
gabung = tempOther;
gabung2 = detectColor & tempOther;
else
gabung2 = detectColor & gabung & wallMask;
end

Pengecekkan aturan kesepuluh, jika nilai persen >= 70 && persen < 80.
Pengecekkan kondisi tahap 2 dilakukan berdasarkan persentase pixel bukan nol
dari variabel gabung. Implementasi program terlihat pada listing 5.26.
Pengecekkan aturan kesebelas, jika nilai persen >= 80 && persen < 85,
ukuran baris yang digunakan adalah ukuran_ro = (ipersen/100)*ro;.

Implementasi program terlihat pada listing 5.27.


Aturan keduabelas, jika nilai persen >= 85 && persen < 90 berarti
persentase daerah dinding terhadap seluruh pixel pada frame berada pada rentang
nilai persen tersebut, sehingga ukuran baris diset ukuran_ro =

(ipersen/100)*ro;. Proses wallMask hanya dilakukan pada syarat yang tidak


memenuhi ketentuan batas nilai persen_gabung. Implementasi program terlihat
pada listing 5.28.
132

Aturan ketigabelas, jika nilai persen >= 90 && persen < 95. berarti
persentase daerah dinding terhadap seluruh pixel pada frame berada pada rentang
nilai persen tersebut. Pengecekkan kondisi tahap 2 dilakukan berdasarkan nilai
persen_gabung. Implementasi program terlihat pada listing 5.29.
Jika ketigabelas syarat sebelumnya tidak memenuhi persyaratan maka atutan
pendeteksian keempatbelas akan dieksekusi. Implementasi program terlihat pada
listing 5.30.
Listing 5.29 Aturan deteksi biru 13
% --------------- Aturan deteksi biru 13 -------------

persen_diff = abs(persen - persenPrev);


if persen < persenPrev
ipersen = persen - persen_diff;
else
ipersen = persen - persen_diff;
end
if ipersen > 100
ipersen = 0;
ukuran_ro = (ipersen/100)*ro;
else
ukuran_ro = (0.5*ipersen/100)*ro;
end
wallMask = ones(ro,col);
for i = 1:ukuran_ro
wallMask(i, :) = 0;
end
gabung = ~tempOther;
idx_gabung = find(gabung);
persen_gabung = (length(idx_gabung)/numel(tempOther))*100;
if persen_gabung > 80 && persen_gabung <= 99
gabung2 = detectColor & gabung;
elseif persen_gabung > 99 && persen_gabung <= 100
gabung = tempOther;
gabung2 = detectColor & gabung & wallMask;
else
gabung2 = detectColor & gabung;
end

Listing 5.30 Aturan deteksi biru 14

% ------------------- Aturan deteksi biru 14 -----------------


gabung = tempOther;
idx_gabung = find(gabung);
persen_gabung = (length(idx_gabung)/numel(tempOther))*100;
gabung2 = gabung & detectColor;
133

Listing 5.31 Pembacaan input GMM K, alpha, dan thresh


K = str2double(get(handles.nilaiK, 'String'));
alpha = str2double(get(handles.nilaiA, 'String'));
thresh = str2double(get(handles.nilaiT, 'String'));

5.3.4 Metode Deteksi Berbasis Fitur Gerak


Inisialisasi parameter GMM (means, standar deviasi, dan bobot)
Bagian ini merupakan bagian yang paling penting dalam algoritma GMM,
karena digunakan sebagai nilai setting awal untuk mengupdate parameter pada
frame selanjutnya. Nilai parameter K, alpha, dan threshold ditentukan oleh user
melalui edittext GUI atau dengan setting default K = 5, alpha = 0,005, dan
threshold = 0.25. str2double digunakan untuk mengkonversi data string
menjadi nilai angka. Listing program membaca input dari user terlihat pada listing
5.31.
Nilai D, bobot, standar deviasi, dan mean
Parameter Gaussian Mixture Model lainnya direpresentasikan dengan ”bobot”,
“sdev”, “miu”. Tahap pertama adalah membuat inisial input frame dan
preallocating matriks miu_diff, miu, bobot, dan sdev.
Listing 5.32 Inisialisasi parameter GMM

D = 2.5;
Sdev_init = 6;
kernel = kernelGauss(5, 0.6);
polutFil = FilterGauss31(first, kernel);
polut = rgb2gray(polutFil);
[ro col dimensi] = size(polut);

% ------ Preallocating matriks ---------


miu_diff = zeros(ro, col, K);
miu = zeros(ro, col, K);
bobot = zeros(ro, col, K);
sdev = zeros(ro, col, K);

% -------- inisial miu, bobot, dan standar deviasi -------


X_Vector = double(polut(:));
[means] = kmeans2(X_Vector, K, 1);
for k = 1:K
miu(:, :, k)= means(k, :);
bobot(:, :, k) = 1/K;
sdev(:, :, k) = sdev_init;
end
134

Frame pertama digunakan sebagai initial frame kemudian difilter menggunakan


filter Gaussian, dan diubah menjadi grayscale yang disimpan sebagai variabel
polut digunakan untuk proses inisial nilai miu dengan mengubahnya menjadi
vector (X_Vector = double(polut(:))).

Dari percobaan, nilai ”bobot” ditetapkan sebesar 1/K, nilai awal standar
deviasi (sdev_init) adalah 6, dan nilai miu diperoleh dari nilai centroid data
pixel tiap k cluster menggunakan algoritma K-means. Nilai D sama dengan 2.5
digunakan sebagai konstanta standar deviasi untuk proses pencocokan input
frame. Inisial nilai M sama dengan nilai K, yang didefinisikan sebagai jumlah
komponen background yang mungkin terbentuk, dibutuhkan pada saat estimasi
model background. Implementasi program untuk inisialisasi parameter terlihat
pada listing 5.32.
Pada implementasi algoritma K-means, nilai centroid pada masing masing
cluster digambarkan sebagai variabel “means”. Pada inisial awal nilai centroid
ditetapkan melalui random data (p = randperm(Ndata)). Ndata menggambarkan
banyaknya jumlah pixel data, dan p menggambarkan koordinat pixel data random
yang dijadikan centroid.
Kemudian dilakukan pengukuran jarak antara tiap pixel data dengan tiap
centroid melalui perhitungan Euclidean distance, yakni akar dari S=S+(C{k}-
D{k}').^2. C adalah replikasi data A dan D adalah replikasi data B. Tujuannya
adalah agar setiap data A dapat dilakukan operasi perhitungan jarak dengan tiap
data B, dengan syarat jumlah kolom (dimensi) antara data A yakni data vektor
piksel frame ke-n dan data B yakni nilai means (centroid) tiap klaster harus sama.
Implementasi perhitungan jarak terlihat pada listing 5.33.
Selanjutnya data dikelompokkan menurut jarak terdekat (minimum distance).
Jika tidak ditemukan lagi nilai minimumnya maka perulangan akan berhenti, jika
tidak maka dihitung nilai centroid baru yakni nilai rata-rata dari dari data pixel
hasil klaster sementara yang telah terbentuk means(i, :) =

abs(mean(imgKlus(g == i, :), 1). Jika masih ada data yang berubah maka
dilakukan perhitungan jarak dan pencarian nilai jarak minimum untuk tiap klaster
135

serta instruksi lainnya dalam sarang while akan terus dijalankan. Implementasi
algoritma K-means terlihat pada listing 5.34.
Listing 5.33 Fungsi program hitung Euclidean distance

function d=distance(A,B)

[roA, colA]=size(A);
[roB, colB]=size(B);
if colA ~= colB,
error(' dimensi A dan B harus sama');
end
member = zeros(1,colA);
C = cell(size(member));
D = cell(size(member));
for k=1:colA
C{k}= repmat(A(:,k),1,roB);
D{k}= repmat(B(:,k),1,roA);
end
S=zeros(roA,roB);
for k=1:colA
S=S+(C{k}-D{k}').^2;
end
d=sqrt(S);

Pemrosesan tiap frame video


Algoritma Gaussian Mixture Model melibatkan pemrosesan tiap pixel, dalam.
program diilustrasikan i adalah baris citra dan j adalah kolom citra. Keadaan
frame saat ini dipengaruhi oleh keadaan frame sebelumnya yang direpresentasikan
dalam proses update parameter bobot, means, dan standar deviasi. Ketiga
parameter ini digunakan sebagai acuan, dalam melakukan deteksi gerakan obyek
(foreground).
Tahap pencocokan input
Tahap ini dimulai dengan menghitung nilai beda pixel (miu_diff(:,:,m))
antara tiap data pixel frame saat ini (t) dengan tiap k nilai miu (means)
sebelumnya (t -1). Kemudian dilakukan pencocokan apakah beda pixel ke-k <=
D*standar deviasi, dimana nilai D adalah 2.5. Hal ini dilakukan sebagai acuan
proses update parameter, jika syarat terpenuhi maka nilai_cocok diset sama
dengan 1 kemudian dilanjutkan proses update parameter, nilai_cocok tetap pada
136

keadaan awal sama dengan 0 jika terdapat beda pixel ke-k yang tidak memenuhi
syarat pencocokan.

Listing 5.34 Fungsi algoritma K-Means

function [means Nmeans hasil] = kmeans2(imgKlus, K, pilih)

[Ndata dimens] = size(imgKlus);


if nargin < 3,
pilih = 0;
end
if nargin < 2,
K = 3
end
means = zeros(K, dimens);
if pilih,
p = randperm(Ndata);
for i = 1:K
means(i, :) = imgKlus(p(i), :);
end
else
for i = 1:K-1
means(i, :) = imgKlus(i, :);
end
end
while 1
Nclass = zeros(K, 1);
d = distance(imgKlus, means);
[~, g] = min(d, [], 2);
if g == temp,
break;
else
temp = g;
end
for i = 1:K
f = find(g == i);
if f
means(i, :) = abs(mean(imgKlus(g == i, :), 1));
end
Y{i} = imgKlus(g == i, :);
Nclass(i) = numel(Y{i});
end
Nmeans = Nclass;
end
hasil = Y;

Tahap update parameter


Saat nilai_cocok diset = 1, maka parameter bobot frame saat ini diupdate
berdasarkan nilai bobot frame sebelumnya, begitu pula dengan nilai standar
137

deviasi dan means. Update nilai bobot ke-k dipengaruhi oleh nilai learning rate
(alpha) dan nilai Mkt = 1, nilai p (second learning rate) digunakan untuk
mengupdate standar deviasi dan means. Saat nilai_cocok diset = 0, maka hanya
parameter bobot ke-k yang diupdate, dengan nilai Mkt = 0. Setelah K beda pixel
dicocokkan maka dilakukan normalisasi terhadap nilai bobot, bobot(i,j,:) =
bobot(i,j,:)./sum(bobot(i,j,:)), dimana jumlah seluruh K bobot sama dengan 1. Jika
pada tiap beda pixel ke-k tidak ada yang cocok maka dibuat komponen baru
dimana nilai miu adalah nilai pixel, dan nilai standar deviasinya adalah high initial
sdev berdasarkan nilai minimum dari bobot.
Estimasi Model Background
Tahap ini dilakukan dengan mengurutkan nilai urutan, urutan =

bobot(i,j,:)./sdev(i,j,:). Kemudian nilai variabel urutan, diurutkan


menurun dari nilai besar ke kecil. Konstanta k ditetapkan sama dengan 1 dan M
sama dengan K.
Listing 5.35 Fungsi program Algoritma GMM
function [fg bw] = GMM_Motion(polutFil, K, alpha, thresh, M, D)

polut = rgb2gray(polut1);
[ro col dimensi] = size(polut);
% ------- tahap pencocokan input -------------
for m=1:K
miu_diff(:,:,m) = abs(double(polut) - double(miu(:,:,m)));
end
for i=1:ro
for j=1:col
nilai_cocok = 0
for k=1:K
if (abs(miu_ diff(i,j,k)) <= D*sdev(i,j,k))
% ---------- update parameter --------------
nilai_cocok = 1;
bobot(i,j,k) = (1-aa)*bobot(i,j,k) + aa;
p = aa/bobot(i,j,k);
miu(i,j,k) = (1-p)*miu(i,j,k) + p*double(polut(i,j));
sdev(i,j,k) = sqrt((1-p)*(sdev(i,j,k)^2) + ...
p*((double(polut(i,j)) - ...
miu(i,j,k)))^2);
else
bobot(i,j,k) = (1-aa)*bobot(i,j,k);
end
end
while((nilai_cocok == 0)&&(k <= M))
if(bobot(i,j,idx_urutan(k)) > thresh)
if (abs(miu_diff(i,j,idx_urutan(k))) < ...
D*sdev(i,j,idx_urutan(k)))
138

fg(i,j) = 0;
nilai_cocok = 1;
else
fg(i,j) = polut(i,j);
end
end
k = k+1;
end
end
end
bobot(i,j,:) = bobot(i,j,:)./sum(bobot(i,j,:));
if (nilai_cocok == 0)
[min_bobot, index_min_bobot] = min(bobot(i,j,:));
miu(i,j,index_min_bobot) = double(polut(i,j));
sdev(i,j,index_min_bobot) = sdev_init;
end
% ------------- estimasi model background -----------
urutan = bobot(i,j,:)./sdev(i,j,:);
[urutan, idx_urutan] = sort(urutan, 'descend');
nilai_cocok = 0;
k = 1;
fg(i,j) = 0;
while((nilai_cocok == 0)&&(k <= M))
if(bobot(i,j,idx_urutan(k)) > thresh)
if (abs(miu_diff(i,j,idx_urutan(k))) < ...
D*sdev(i,j,idx_urutan(k)))
fg(i,j) = 0;
nilai_cocok = 1;
else
fg(i,j) = polut(i,j);
end
end
k = k+1;
end
end
end
fg = medfilt2(fg);
level = graythresh(fg);
bw = im2bw(fg, level);
bw = logical(bw);

Selama nilai_cocok sama dengan 0 dan k kurang dari sama dengan M, maka
terus dilakukan pengecekkan terhadap bobot ke-k yang lebih besar dari threshold
background (bobot(i,j,idx_urutan(k)) > thresh), jika memenuhi syarat
threshold tersebut, kemudian dilanjutkan pengecekkan beda pixel dari indeks
urutan ke-k hingga urutan ke-M ada yang lebih kecil dari standar deviasi maka
foreground pixel fg(i,j) = 0, sedangkan jika syarat tidak terpenuhi maka fg(i,j) = 1.
Ketiga tahap diatas terus dilakukan pada tiap koordinat pixel hingga seluruh pixel
139

dalam citra dikenai proses yang sama. Implementasi algoritma Gaussian Mixture
Model, terlihat pada Listing 5.35.

5.4 Proses Akhir Frame Terdeteksi


Median Filtering
Implementasi program median filtering ini menggunakan fungsi medfilt2
dengan 3 x 3 ketetanggaan. Input fungsi medfilt2 dapat berupa citra bertipe logical
ataupun grayscale. Proses ini dikenakan pada frame hasil pendeteksian dengan
sebelum citra dianalisis. Untuk limbah cair Instruksinya adalah gabung2 =
medfilt2(gabung2).
Citra hasil deteksi
Listing 5.36 Mengubah biner menjadi warna obyek hasil deteksi
% --------- mask citra asli limbah cair -------
objectMaskLiq = cast(gabung2, class(polR));
maskPolRLiq = objectMaskLiq.*polR;
maskPolGLiq = objectMaskLiq.*polG;
maskPolBLiq = objectMaskLiq.*polB;
maskPolutLiq = cat(3, maskPolRLiq, maskPolGLiq, maskPolBLiq);
maskPolutLiq = uint8(maskPolutLiq);

% -------- mask citra asli limbah padat -------


objectMaskSol = cast(gabung3, class(polR));
maskPolRSol = objectMaskSol.*polR;
maskPolGSol = objectMaskSol.*polG;
maskPolBSol = objectMaskSol.*polB;
maskPolutSol = cat(3, maskPolRSol, maskPolGSol, maskPolBSol);
maskPolutSol = uint8(maskPolutSol);

Setelah hasil deteksi limbah diperoleh citra hasil pendeteksian ditampilkan


dalam frame bertipe RGB baik untuk limbah cair dan limbah padat. Programnya
terlihat pada listing 5.36.

5.5 Analisis dan Deskripsi Citra


5.5.1 Luas area obyek
Implementasi bagian analisis citra ini, bertujuan untuk menghitung nilai luas
area limbah berdasarkan pencarian 8 ketetanggaan pada suatu pixel. Proses
pertama adalah melakukan pemanggilan dan deklarsi citra sebagai variabel citra
biner dan size. Program akan terus dijalankan selama masih terdapat nilai pixel
140

obyek yang direpresentasikan sebagai pixel bukan nol (1). Didalamnya terdapat
rutin pencarian pixel bukan nol [roPos,colPos] = find(img > 0);.
Koordinat posisi pixel bukan nol disimpan dalam variabel roPos dan colPos.
Jika sudah tidak ditemukan pixel bukan nol, maka instruksi break dijalankan
Listing 5.37 Fungsi program hitung luas area obyek

function output = bwcount(citraBiner)

output = {};
output.numArea = 0;
output.koorPosisi = {};
output.Area = [];
img = citraBiner;
ro = size(img,1);
col = size(img,2);
while (1)
[roPos,colPos] = find(img > 0);

if ( isempty(roPos) || isempty(colPos) )
break;
end
roPos = roPos(1); colPos = colPos(1);
q = [roPos;colPos];
posisi = [];

%% --------- Rutin pengecekkan komponen terkoneksi (CC)---------


while(~isempty( q ))
roPos = q(1,1); colPos = q(2,1);

q = q(:,2:end);
posisi = [posisi, [roPos; colPos]];
% ----- Pengecekkan CC bagian pertama (baris tengah) ----
img(roPos,colPos) = 0;
if ( colPos + 1 <= col )
if ( img( roPos , colPos + 1) > 0 )
img( roPos, colPos + 1 ) = 0;
newpixel = [ roPos ; colPos + 1 ];
q = [q, newpixel];
end
end
if ( colPos - 1 >= 1 )
if ( img( roPos , colPos - 1) > 0 )
img( roPos, colPos - 1 ) = 0;
newpixel = [ roPos ; colPos - 1 ];
q = [q, newpixel];
end
end
% ---- pengecekkan CC baris setelahnya bagian kedua ----
if( roPos + 1 <= ro )
if ( img( roPos + 1, colPos ) > 0 )
img( roPos + 1, colPos ) = 0;
newpixel = [ roPos + 1; colPos];
141

q = [q, newpixel];
end
if ( colPos + 1 <= col )
if ( img( roPos + 1, colPos + 1) > 0 )
img( roPos + 1, colPos + 1 ) = 0;
newpixel = [ roPos + 1; colPos + 1 ];
q = [q, newpixel];
end
end
if ( colPos - 1 >= 1 )
if ( img( roPos + 1, colPos - 1) > 0 )
img( roPos + 1, colPos - 1 ) = 0;
newpixel = [ roPos + 1; colPos - 1 ];
q = [q, newpixel];
end
end

% ----- pengecekkan CC baris sebelumnya bagian ketiga -----


if( roPos - 1 >= 1 )
if ( img( roPos - 1, colPos ) > 0 )
img( roPos - 1, colPos ) = 0;

newpixel = [ roPos - 1; colPos];


q = [q, newpixel];
end
if ( colPos + 1 <= col )
if ( img( roPos - 1, colPos + 1) > 0 )
img( roPos - 1, colPos + 1 ) = 0;
newpixel = [ roPos - 1; colPos + 1 ];
q = [q, newpixel];
end
end
if ( colPos - 1 >= 1 )
if ( img( roPos - 1, colPos - 1) > 0 )
img( roPos - 1, colPos - 1 ) = 0;
newpixel = [ roPos - 1; colPos - 1 ];
q = [q, newpixel];
end
end
end
end
output.numArea = output.numArea + 1;
output.koorPosisi{output.numArea} = posisi;
output.Area(output.numArea) = size(posisi,2);
end
return
end

Secara otomatis seluruh proses selanjutnya tidak akan dieksekusi. Maka nilai
output akhir berupa jumlah area, koordinat pixel obyek, dan luas area diperoleh.
Selanjutnya pasangan koordinat pixel roPos pertama dan colPos pertama disimpan
sebagai variabel q. Selama masih terdapat pixel obyek maka dilanjutkan proses
142

pengecekkan komponen terkoneksi. Direpresentasikan dengan instruksi


while(~isempty( q )), rutin pengecekkan komponen terkoneksi dimulai
dengan deklarasi koordinat pixel roPos, dan colPos, (roPos = q(1,1); colPos =
q(2,1)). Serta alokasi matriks koordinat q (q = q(:,2:end)) dan matriks yang
menyimpan pasangan koordinat pixel bukan nol (posisi = [posisi, [roPos;
colPos]]).
Pengecekkan connected component
Bagian ini digunakan untuk mencari pixel bukan nol yang merupakan pixel
obyek melalui pengecekkan pixel tetangga. Implementasi program terlihat pada
listing 5.37. Setelah semua pixel tetangga dicek kemudian rutin kembali pada
perintah while jika matriks q, masih terdapat koordinat pixel ≠ [ ] (matriks
kosong) maka rutin instruksi pengecekkan terus dilakukan hingga tidak
ditemukkan lagi komponen terkoneksi sehingga instruksi dapat keluar dari rutin
while, artinya pula jumlah obyek bertambah 1. Proses perhitungan jumlah obyek,
luas area obyek dan koordinat posisi dibuat dalam bentuk structure output agar
lebih mudah untuk diakses, untuk limbah cair disebut outputLiq sedangkan untuk
limbah padat disebut outputSol.
5.5.2 Analisis dan deskripsi hasil deteksi limbah cair
Setelah menghitung luas area, diperoleh variabel jumlah obyek, luas area, dan
koordinat posisi maka dilakukan perhitungan standar deviasi luas area tiap
framenya. Implementasi program terlihat pada listing 5.38.
Proses perhitungan nilai standar deviasi dimulai dengan melakukan filter area
terhadap variabel gabung2 ditetapkan >50. Luas total obyek yang terdeteksi pada
frame ke-n disimpan dalam matriks dataAnalisisLiq(n, 2). Jumlah obyek yang
terdeteksi pada frame ke-n disimpan dalam matriks dataAnalisisLiq(n, 3). Rata-
rata luas area per obyek dalam frame ke-n, disimpan dalam matriks
dataAnalisisLiq(n, 4). Tahap selanjutnya menghitung nilai standar deviasi
berdasarkan persamaan 3.6. Hasil perhitungan standar deviasi disimpan dalam
variabel dataAnalisisLiq(n, 5) .
Sebagai informasi tambahan, dilakukan perhitungan standar deviasi intensitas
obyek untuk meengetahui variasi intentisasnya. Pertama, diambil nilai intensitas
143

pixel obyek, kemudian dihitung nilai standar deviasinya. Implementasi program


terlihat pada listing 5.39.
Listing 5.38 Program perhitungan standar deviasi luas area limbah cair

outputLiq = bwcount(gabung2);

% ------ filter Area obyek agar menghilangkan noise -------


ind = find(outputLiq.Area > 50);
totalArea = sum(outputLiq.Area(ind));
dataAnalisisLiq(n, 2) = totalArea;
dataAnalisisLiq(n, 3) = length(ind);
dataAnalisisLiq(n, 4) = totalArea/length(ind);
if isnan(dataAnalisisLiq(n, 4))
dataAnalisisLiq(n, 4) = 0.00005;
end
% ----------- hitung standar deviasi luas area ----------
diff_AreaMean = zeros(size(ind, 2), 1);
for i = 1:size(ind, 2)
diff_AreaMean(i, :) = (outputLiq.Area(ind(:, i)) –
dataAnalisisLiq(n, 4)).^2;
end
jml_diff_AreaMean = sum(diff_AreaMean);
diff_numArea = (length(ind) - 1);
if isnan(diff_numArea)
diff_numArea = 0.000005;
end
SDArea = sqrt((1/diff_numArea)*jml_diff_AreaMean);
if isnan(SDArea)
SDArea = 0.00005;
end
dataAnalisisLiq(n, 5) = SDArea;

Pemberian Tanda dan Pesan pada Frame Video


Pemberian tanda dan pesan pada setiap frame obyek bertujuan untuk
memberikan deskripsi informasi kepada user tentang luas area total pada frame
tersebut, rata-rata luas area limbah, jumlah obyek dan nilai rata-rata standar
deviasi luas area pada tiap obyek dalam frame tersebut.
Deskripsi obyek berupa limbah digunakan boundary region dengan fungsi
bwboundaries, input dari fungsi ini adalah citra biner hasil pendeteksian yang
mencari pixel terluar dari suatu obyek yang bersebelahan dengan dengan pixel-
pixel dari latar belakang. Hasil pelacakkan pixel batas terluar pada obyek
disimpan dalam variabel boundaries1. dan fungsi plot untuk menggambarkan
garis pada sekeliling pixel perimeter terluar pada current axes. Untuk
144

menampilkan pesan text digunakan instruksi sprintf. Variabel yang ditampilkan


pada tiap frame adalah totalArea, numArea, MeanAreaLiq, dan mean_sdevObj.
Implementasi program terlihat pada listing 5.40.
Listing 5.39 Listing program hitung standar deviasi intensitas limbah cair

pixelValue1 = cell(size(ind, 2), 1);


for obj = 1:(outputLiq.numArea)
for i = 1:size(ind, 2)
if obj == ind(:, i) && (outputLiq.Area(obj) > 50)
koorPixel1 = cell2mat(outputLiq.koorPosisi(obj));
koorPixel1 = koorPixel1';
pixelValue1(i) = {zeros(outputLiq.Area(obj), 3)};
sumPix = size(pixelValue1{i}, 1);
for p = 1:sumPix
pixelValue1{i}(p,1)= polR(koorPixel1(p,1),koorPixel1(p,2));
pixelValue1{i}(p,2)= polG(koorPixel1(p,1), koorPixel1(p,2));
pixelValue1{i}(p,3)= polB(koorPixel1(p,1), koorPixel1(p,2));
end
end
end
end
% ------kalkulasi nilai standard deviasi intensitas obyek ---
sdevObj1 = zeros(length(ind), size(polut,3));
for q = 1:length(ind)
sdevObj1(q,:) = std(pixelValue1{q});
end
mean_sdevObj1(n, :) = mean(sdevObj1);
if isnan(mean_sdevObj1(n, :))
mean_sdevObj1(n, :) = 0.00005;
end

5.5.3 Analisis dan deskripsi hasil deteksi limbah padat

Hasil akhir deteksi limbah padat disimpan dalam variabel gabung3 kemudian
perhitungan standar deviasi luas area limbah dilakukan melalui program yan
terlihat pada listing 5.41.
Perhitungan standar deviasi intensitas pixel-pixel limbah padat, nilai rata-rata
sd obyek pada frame ke-n, dinotasikan dilakukan melaui dengan variabel
mean_sdevObj2(n, :). Implementasi progam terlihat pada listing 5.42.
Untuk mendeskripsikan daerah obyek limbah padat dilakukan boundary region
pada batas terluar dari obyek, dan memberikan informasi jumlah obyek, rata-rata
luas area, dan standar deviasinya, program terlihat pada listing 5.44
145

Listing 5.40 Deskripsi obyek limbah cair

boundaries1 = bwboundaries(gabung2);
imshow(polutan, ‘Parent’, handles.axes1);
hold on
% ---- menampilkan gesture (edgeline) obyek pada citra RGB -----
for k = 1:length(boundaries1)
for i = 1:size(ind, 2)
if k == ind(:, i)
bnd = boundaries1{k};
plot(bnd(:,2),bnd(:,1),'m','LineWidth',2);
end
end
end
% ---- inisial 1 = limbah cair, inisial 2 = limbah padat -----

messageSdevArea = sprintf('sdArea: %3.0f ', SDArea);


messageTotalArea = sprintf('Area: %3.0f pix', totalArea);
messageArea=sprintf('MeansArea: %3.0f pix',dataAnalisisLiq(n, 4));
messagenumArea = sprintf('Count LP: %3.0f ',dataAnalisisLiq(n,3));
text(10, 10, messageTotalArea, 'Color', 'b', 'Fontsize',9,
'FontWeight', 'bold');
text(10, 25, messageArea, 'Color', 'b', 'Fontsize', 9,
'FontWeight', 'bold');
text(180, 10, messagenumArea, 'Color', 'b', 'Fontsize', 9,
'FontWeight', 'bold');
text(180, 25, messageSdevArea, 'Color', 'b', 'Fontsize', 9,
'FontWeight', 'bold')

5.5.4 Proses Final

Proses ini merupakan tahap akhir yng meliputi perhitungan lamanya waktu
pemrosesan (TP = Time Processing), kalkulasi jumlah area obyek tiap framenya,
kalkulasi nilai rata-rata luasan tiap obyek dan standar deviasi, dan kalkulasi nilai
standar deviasi tiap komponen warna RGB dan menampilannya pada GUI.
Penyimpanan data dalam berkas file berekstensi *.xls yang berupa jumlah area
tiap framenya, rata-rata luasan area tiap framenya, dan nilai rata-rata standar
deviasi intensitas obyek pada tiap framenya.
Hasil perhitungan akhir ditampilkan baik seluruh informasi luas dan standar
deviasinya untuk limbah cair maupun limbah padat. Tahapan selanjutnya adalah
proses penyimpanan data luas area limbah. Variabel filename adalah input string
146

dari user untuk nama file yang akan disimpan. Untuk limbah cair variabel yang
disimpan adalah dataAnalisisLiq, mean_sdevObj1, data properties yang meliputi:
Listing 5.41 Perhitungan standar deviasi luas area limbah padat

outputSol = bwcount(gabung3);
% ------ filter Area obyek agar menghilangkan noise ----
ind2 = find(outputSol.Area > 50 & outputSol.Area < 5000);
totalArea2 = sum(outputSol.Area(ind2));
dataAnalisisSol(n, 2) = totalArea2;
dataAnalisisSol(n, 3) = length(ind2);
dataAnalisisSol(n, 4) = totalArea2/length(ind2);
if isnan(dataAnalisisSol(n, 4))
dataAnalisisSol(n, 4) = 0.00005;
end
% ----------- hitung standar deviasi luas area ----------
diff_AreaMean2 = zeros(size(ind2, 2), 1);
for i = 1:size(ind2, 2)
diff_AreaMean2(i, :) = (outputSol.Area(ind2(:, i)) –
dataAnalisisSol(n, 4)).^2;
end
jml_diff_AreaMean2 = sum(diff_AreaMean2);
diff_numArea2 = (length(ind2) - 1);
if isnan(diff_numArea2)
diff_numArea2 = 0.00005;
end
SDArea2 = sqrt((1/diff_numArea2)*jml_diff_AreaMean2);
if isnan(SDArea2)
SDArea2 = 0.00005;
end
dataAnalisisSol(n, 5) = SDArea2;

TP, n, numArea1_perFrame, MeanSdevArea1_perFrame, untuk limbah padat


variabel yang disimpan adalah dataAnalisisSol, mean_sdevObj2,
numArea2_perFrame, MeanAreaSol_perFrame, dan MeanSdevArea2_perFrame.
Listing 5.46 adalah program proses final untuk menghitung analisis akhir saat
program berhenti. Proses penyimpanan data dilakukan melalui menu simpan pada
form GUI, filename adalah nama data yang akan disimpan yang diinputkan oleh
pemakai. Semua data yang disimpan akan digunkan untuk proses analisis citra.
Listing 5.43 dan listing 5.45 menunjukkan program untuk menyimpan data hasil
analisis pendeteksian.
147

Listing 5.42 Perhitungan standar deviasi intensitas pixel obyek limbah padat

% ------ search nilai pixel tiap region -----


pixelValue2 = cell(size(ind2, 2), 1);
for obj = 1:(outputSol.numArea)
for i = 1:size(ind2, 2)
if obj == ind2(:, i)
koorPixel2 = cell2mat(outputSol.koorPosisi(obj));
koorPixel2 = koorPixel2';
pixelValue2(i) = {zeros(outputSol.Area(obj), 3)};
sumPix = size(pixelValue2{i}, 1);
for p = 1:sumPix
pixelValue2{i}(p,1)= polR(koorPixel2(p,1), koorPixel2(p,2));
pixelValue2{i}(p,2)= polG(koorPixel2(p,1), koorPixel2(p,2));
pixelValue2{i}(p,3)= polB(koorPixel2(p,1), koorPixel2(p,2));
end
end
end
end

% ----kalkulasi nilai standard deviasi intensitas obyek --------


sdevObj2 = zeros(length(ind2), size(polut,3));
for q = 1:length(ind2)
sdevObj2(q,:) = std(pixelValue2{q});
end
mean_sdevObj2(n, :) = mean(sdevObj2);
if isnan(mean_sdevObj2(n, :))
mean_sdevObj2(n, :) = 0.00005;
end

Listing 5.43 Program penyimpanan data untuk limbah cair


% ---------- simpan data analisis limbah cair ------------
[filename, pathname, filterindex] = uiputfile( ...
{'*.xls', 'Excel97-2003 Workbook (*.xls)';...
'*.cvs','unix format (*.cvs)';...
'*.*', 'All Files (*.*)'},...
'Simpan data');
if isequal(filename,0) || isequal(pathname,0)
disp('User selected Cancel')
else
disp(['User selected',fullfile(pathname,filename)])
xlswrite(filename, dataAnalisisLiq, 'dataAnalisis', 'C1');
xlswrite(filename, mean_sdevObj1,'sdev_intensitas', 'C1');
properties = {'TP', 'n', 'numArea1', 'MeanAreaLiq',
'MeanSdevArea'; TP n numArea1_perFrame MeanAreaLiq_perFrame
MeanSdevArea1_perFrame};
xlswrite(filename, properties, 'infoLiquid', 'C1');
end
148

Listing 5.44 Dekripsi obyek limbah padat


[boundaries2] = bwboundaries(gabung3);
set(gcf, 'CurrentAxes', handles.axes3);
imshow(polutan, 'Parent', handles.axes3);
axis off;
hold on
% ---- menampilkan gesture (edgeline) obyek pada citra RGB -----
for k = 1:length(boundaries2)
for i = 1:size(ind2, 2)
if k == ind2(:, i)
bnd = boundaries2{k};
plot(bnd(:,2),bnd(:,1),'g','LineWidth',2);
end
end
end
% --------- memberi pesan analisis pada tiap frame -------
messageSdevArea = sprintf('sdArea: %3.0f ', SDArea2);
messageTotalArea = sprintf('Area: %3.0f pix', totalArea2);
messageArea = sprintf('MeansArea: %3.0f pix', . . .
dataAnalisisSol(n, 4));
messagenumArea = sprintf('Count LP: %3.0f’,dataAnalisisSol(n, 3));
text(10, 10, messageTotalArea, 'Color', 'r', 'Fontsize',9,
'FontWeight', 'bold');
text(10, 25, messageArea, 'Color', 'r', 'Fontsize', 9,
FontWeight', 'bold');
text(180, 10, messagenumArea, 'Color', 'r', 'Fontsize', 9,
'FontWeight', 'bold');
text(180, 25, messageSdevArea, 'Color', 'r', 'Fontsize', 9,
'FontWeight', 'bold')

Listing 5.45 Program penyimpanan data untuk limbah padat


% ---------- simpan data analisis limbah cair ------------
[filename, pathname, filterindex] = uiputfile( ...
{'*.xls', 'Excel97-2003 Workbook (*.xls)';...
'*.cvs','unix format (*.cvs)';...
'*.*', 'All Files (*.*)'},...
'Simpan data');
if isequal(filename,0) || isequal(pathname,0)
disp('User selected Cancel')
else
% -------- simpan data analisis limbah padat ------
xlswrite(filename, dataAnalisisSol, 'dataAnalisis', 'C1');
xlswrite(filename, mean_sdevObj2,'sdev_intensitas', 'C1');
properties = {'numArea2', 'MeanAreaSol', 'MeanSdevAreaSol';
numArea2_perFrame MeanAreaSol_perFrame MeanSdevArea2_perFrame};
xlswrite(filename, properties, 'infoLiquid', 'C1');
end
149

Listing 5.46 Proses analisis akhir

tElapsed1 = toc(tStart1);
TP = round(tElapsed1/n);
% -------- proses final limbah cair -----------------
numArea1_perFrame = round(sum(dataAnalisisLiq(:, 3))/n);
MeanAreaLiq_perFrame = round(sum(dataAnalisisLiq(:, 2))/
sum(dataAnalisisLiq(:, 3));
MeanSdevArea1_perFrame = round(sum(dataAnalisisLiq(:, 5))/n);
SDLiq_perFrame = sum(mean_sdevObj1)./n;
set(handles.sumObj, 'String', [num2str(numArea1_perFrame), '
/frame']);
set(handles.meanArea, 'String', [num2str(MeanAreaLiq_perFrame), '
/obyek']);
set(handles.meanSdevArea1, 'String',
[num2str(MeanSdevArea1_perFrame), ' /frame']);
set(handles.sdevi, 'String', [num2str(SDLiq_perFrame), '
/frame']);

% ------- proses final limbah padat ------


SDSol_perFrame = sum(mean_sdevObj2)./n;
numArea2_perFrame = round(sum(dataAnalisisSol(:, 3))/n);
MeanAreaSol_perFrame = round(sum(dataAnalisisSol(:, 2))/
sum(dataAnalisisSol(:, 3));
MeanSdevArea2_perFrame = round(sum(dataAnalisisSol(:, 5))/n);
set(handles.numObj2, 'String', [num2str(numArea2_perFrame), '
/frame']);
set(handles.meanArea2, 'String', [num2str(MeanAreaSol_perFrame), '
/obyek']);
set(handles.meanSdevArea2, 'String',
[num2str(MeanSdevArea2_perFrame), ' /frame']);
set(handles.sdevi2, 'String', [num2str(SDSol_perFrame), '
/frame']);

5.6 User Interface


Program GUI berfungsi untuk melakukan pemilihan input data dan mode
pendeteksian yang terintegrasi dalam fungsi-fungsi GUI Matlab serta digunakan
untuk memanggil program-program lain dalam melakukan fungsi pendeteksian.
5.6.1 Pemilihan data input video dan metode pendeteksian
Bagian ini merupakan rutin program untuk pemilihan data dan mode deteksi
yang dipilih dengan perbandingan data string, menggunakan fasilitas visual
modals (questdlg). Pada saat program dijalankan seluruh tombol diset dalam
keadaan off (tidak dapat ditekan) kecuali pushbutton Load Video sehingga rutin
awal ini akan dijalankan saat pushbutton pilihVideo ditekan.
150

Gambar 5.1 Questdlg pemilihan video dan mode deteksi


Program selanjutnya tidak akan dieksekusi sebelum data dan mode
pendeteksian dipilih. Setelah proses pemilihan maka variabel input mode deteksi,
file data video (waterPolut), jumlah frame (numFrames), dan frame rate
(frameRate) dan frame pertama (first), disimpan sebagai variabel bertipe global
agar dapat diakses oleh fungsi-fungsi lainnya. Pilihan kategori mode pendeteksian
yang ditampilkan pada questdlg meliputi putih, biru, merah, ungu, dan Motion.
Tampilan questdlg terlihat pada gambar 5.1. Agar lebih jelasnya listing 5.47
adalah pseudocode program alir data pada GUI.
5.6.2. Proses berdasarkan kategori mode deteksi limbah
Variabel mode digunakan untuk tahap selanjutnya setelah proses pemilihan
katagori deteksi sebagai syarat pemilihan fungsi program. Setiap mode terdiri dari
program inisialisasi parameter GMM, dan pemrosesan tiap frame video yang
terdiri dari preprocessing, program segmentasi limbah cair, program segmentasi
limbah padat berbasis GMM, program analisis dan deskripsi citra (perhitungan
jumlah obyek, luas area), perhitungan standar deviasi luas area obyek,
perhitungan standar deviasi intensitas obyek, pemberian tanda dan pesan hasil
analisis citra, serta tahap akhir yang disebut sebagai proses final. Implementasi
program untuk melakukan proses deteksi dan analisis citra pada mode “Putih”,
“Ungu”, “Merah”, dan “Biru” terlihat pada listing 5.48, pseudocode program
proses yang berjalan pada GUI.
Khusus mode ‘Motion’, dirancang hanya terdiri dari program segmentasi
limbah padat berbasis GMM, tanpa proses deteksi dengan segmentasi warna
limbah cair. Tahap selanjutnya adalah memilih metode deteksi, melalui tombol
radiobutton, tombol proses akan aktif jika radiobutton Thresholding dan motion
151

Detection diaktifkan, jika hanya salah satunya saja yang aktif maka tombol proses
tidak dapat di-klik. Jika hanya tombol motion detection yang aktif maka tombol
run saja yang akan aktif, untuk eksekusi program berbasis fitur gerak saja.
Listing 5.47 Pemilihan data & mode deteksi pada GUI (function: pilihVideo)
a. Deklarasi variabel global (waterPolut numFrames frameRate first mode)
b. pilihan = questdlg('Putih-biru', 'MerahUngu', ‘Motion’)
c. Jika pilihan = “Putih-biru” (strcmpi(pilihan, 'Putih-Biru')), maka
c.1 pilihan2 = questdlg(‘Putih’, ‘Biru’ )
c.1.1 Jika pilihan2 = “Putih” (strcmpi(pilihan2, 'Putih')), maka
c.1.1.1 mode = 'Putih';
c.1.1.2 pengarah lokasi folder (path) video limbah putih
c.1.1.3 ambil video sampel dari direktori penyimpan
c.1.2 Jika pilihan2 = “Biru” (strcmpi(pilihan2, 'Biru’)), maka
c.1.2.1 mode = 'Biru';
c.1.2.2 pengarah lokasi folder (path) video limbah Biru
c.1.2.3 ambil video sampel dari direktori penyimpan
d. Jika pilihan = “Merah-Ungu” (strcmpi(pilihan, 'Merah-Ungu')), maka
d.1 buat pilihan2 = questdlg( ‘Merah’, ‘Ungu’)
d.1.1 Jika pilihan2 = “Merah” (strcmpi(pilihan2, 'Merah')), maka
d.1.1.1 mode = 'Merah';
d.1.1.2 pengarah lokasi folder (path) video limbah merah
d.1.1.3 ambil video sampel dari direktori penyimpan
d.1.2 Jika pilihan2 = “Ungu” (strcmpi(pilihan2, 'Ungu')), maka
d.1.2.1 mode = 'Ungu';
d.1.2.2 pengarah lokasi folder (path) video limbah ungu
d.1.2.3 ambil video sampel dari direktori penyimpan
e. Jika pilihan = “Motion” (strcmpi(pilihan, 'Motion')), maka
e.1 mode = ‘motion’;
e.2 me-nonaktifkan radiobutton thersholding dan pushbutton proses
e.3 pengarah lokasi folder (path) video limbah kamera statis
e.4 ambil video sampel dari direktori penyimpan
f. lainya
warndlg('Masukkan input video dulu..','!! Wadugh... !!', 'modal');
g. jika input path video ada, maka
h.1 baca input video (selectedFile = fullfile (folder, namaFile))
waterPolut = mmreader(selectedFile);
numFrames = get(waterPolut, 'NumberOfFrames');
frameRate = round(get(waterPolut, 'FrameRate'));
h.2 baca dan tampilkan frame pertama (first)
h.3 Menampilkan informasi video pada panel properties GUI
i. lainnya
return;
152

Listing 5.48 Proses deteksi dan analisis citra pada tiap mode
a. global waterPolut numFrames TP n mode polR polG polB ro col first miu_diff
sdev_init miu bobot sdev persen persenPrev ipersen
b. global numArea2_perFrame SDSol_perFrame mean_sdevObj2
MeanAreaSol_perFrame dataAnalisisLiq
c. global numArea1_perFrame SDLiq_perFrame mean_sdevObj1
MeanAreaLiq_perFrame dataAnalisisSol
d. jika video tidak ada, maka
d.1 menampilkan pesan error: errordlg('input video belum ada','error');
e. switch mode
e.1 jika case ‘Putih’, maka lakukan
e.1.1 Preallocating matriks dataAnalisisLiq dan dataAnalisisSol
e.1.2 Inisialisasi parameter GMM
e.1.3 Mulai dari n = 1 sampai dengan numFrames lakukan
Proses deteksi pada mode “Putih” (Listing 5.49)
e.1.4 Proses Final
e.2 jika case ‘Merah’, maka lakukan
e.2.1 Preallocating matriks dataAnalisisLiq dan dataAnalisisSol
e.2.2 Inisialisasi parameter GMM
e.2.3 Mulai dari n = 1 sampai dengan numFrames lakukan
Proses deteksi pada mode “Merah” (Listing 5.50)
e.2.4 Proses Final
e.3 jika case ‘Ungu’, maka lakukan
e.3.1 Preallocating matriks dataAnalisisLiq dan dataAnalisisSol
e.3.2 Inisialisasi parameter GMM
e.3.3 Mulai dari n = 1 sampai dengan numFrames lakukan
Proses deteksi pada mode “Ungu” (Listing 5.51)
e.3.4 Proses Final
e.4 jika case ‘Biru’, maka lakukan
e.4.1 Preallocating matriks dataAnalisisLiq dan dataAnalisisSol
e.4.2 Inisialisasi parameter GMM
e.4.3 Mulai dari n = 1 sampai dengan numFrames lakukan
Proses deteksi pada mode “Biru” (Listing 5.52)
e.4.4 Proses Final

Pada proses pendeteksian berbasis fitur gerak saja, dilakukan pada fungsi
pushbutton run, tahapannya sama seperti program pada tiap mode hanya saja tidak
terdapat fungsi deteksi berbasis fitur warna yakni terdiri dari inisialisasi parameter
GMM, preprocessing, segmentasi berbasis fitur gerak, analisis dan deskripsi citra,
menampilkan hasil dan pesan analisis pada citra asli dan proses final. Pada fungsi
ini digunakan GMM murni tanpa pemfilteran area. Listing program pada setiap
proses mode pendeteksian terdapat pada Listing 5.49 – Listing 5.52
153

Listing 5.49. Proses deteksi pada mode “Putih”


e.1.3.1 Tampilkan frame yang sedang diproses pada GUI
dan simpan nomer frame pada dataAnalisisLiq(n, 1)
dan dataAnalisisSol(n, 1).
e.1.3.2 Baca tiap frame: polutan = read (waterPolut, n);
e.1.3.3 Preprocessing
kernel = kernelGauss(5, 0.6);
polut = FilterGauss31(polutan, kernel);
e.1.3.4 [gabung gabung2] = segmenLiquidPutih(polut);
e.1.3.5 [fg bw] = GMM_Motion(polut, K, alpha1, thresh, M, D, n);
e.1.3.6 gabung2 = medfilt2(gabung2); gabung3 = gabung & bw;
e.1.3.7 mask citra asli dengan citra biner limbah cair dan padat
e.1.3.8 outputLiq = bwcount(gabung2);
e.1.3.8.1 jika outputLiq.Area > 50 pixel, maka
Hitung dan simpan total area, jumlah obyek, rata-rata
luas area , dan standar deviasi luas area
dataAnalisisLiq(n, 2:5)
Hitung dan simpan standar deviasi intensitas obyek
e.1.3.9 [boundaries1] = bwboundaries(gabung2)
Tampilkan pesan deskripsi & gesture obyek pada citra asli
e.1.3.10 outputSol = bwcount(gabung3);
e.1.3.10.1 jika (outputSol.Area > 50), maka
Hitung dan simpan total area, rata-rata luas area ,
dan standar deviasi luas area
(dataAnalisisSol(n, 2:5))
Hitung standar deviasi intensitas obyek
mean_sdevObj1(n, :)
e.1.3.11 [boundaries2] = bwboundaries(gabung2)
Tampilkan pesan deskripsi & gesture obyek pada citra asli
e.1.3.12 jika tombol stop ditekan (stop = 1), maka
break;
154

Listing 5.50. Proses deteksi pada mode “Merah”


e.2.3.1 Tampilkan frame yang sedang diproses pada GUI
simpan nomer frame pada dataAnalisisLiq(n, 1) dan
dataAnalisisSol(n, 1)
e.2.3.2 Baca tiap frame: polutan = read (waterPolut, n);
e.2.3.3 Preprocessing
kernel = kernelGauss(5, 0.6);
polut = FilterGauss31(polutan, kernel);
e.2.3.4 [gabung gabung2] = segmenLiquidMerah(polut, n,
numFrames);
e.2.3.5 [fg bw] = GMM_Motion(polut, K, alpha1, thresh, M, D, n);
e.2.3.6 gabung2 = medfilt2(gabung2); gabung3 = bw;
e.2.3.7 mask citra asli dengan citra biner limbah cair dan padat
e.2.3.8 outputLiq = bwcount(gabung2);
e.2.3.8.1 jika outputLiq.Area > 50 pixel, maka
Hitung dan simpan total area, jumlah obyek, rata-
rata luas area , dan standar deviasi luas area
dataAnalisisLiq(n, 2:5)
Hitung dan simpan standar deviasi intensitas obyek
e.2.3.9 [boundaries1] = bwboundaries(gabung2)
Tampilkan pesan deskripsi & gesture obyek pada citra asli
e.2.3.10 outputSol = bwcount(gabung3);
e.2.3.10.1 jika (outputLiq.Area > 20 pixel), maka
Hitung dan simpan total area, rata-rata luas area,
dan standar deviasi luas area (dataAnalisisSol(n, 2:5))
Hitung standar deviasi intensitas obyek
mean_sdevObj1(n, :)
e.2.3.11 [boundaries2] = bwboundaries(gabung2)
Tampilkan pesan deskripsi & gesture obyek pada citra asli
e.2.3.12 jika tombol stop ditekan (stop = 1), maka
break;
155

Listing 5.51. Proses deteksi pada mode “Ungu”

e.3.3.1 Tampilkan frame yang sedang diproses pada GUI


simpan nomer frame pada dataAnalisisLiq(n, 1) dan
dataAnalisisSol(n, 1)
e.3.3.2 Baca tiap frame: polutan = read (waterPolut, n);
e.3.3.3 Preprocessing
kernel = kernelGauss(5, 0.6);
polut = FilterGauss31(polutan, kernel);
e.3.3.4 [gabung gabung2] = segmenLiquidUngu(polut, n,
numFrames);
e.3.3.5 [fg bw] = GMM_Motion(polut, K, alpha1, thresh, M, D, n);
e.3.3.6 gabung2 = medfilt2(gabung2); gabung3 = gabung & bw;
e.3.3.7 mask citra asli dengan citra biner limbah cair dan padat
e.2.3.8 outputLiq = bwcount(gabung2);
e.2.3.8.1 jika outputLiq.Area > 50 pixel, maka
Hitung dan simpan total area, jumlah obyek, rata-
rata luas area , dan standar deviasi luas area
dataAnalisisLiq(n, 2:5)
Hitung dan simpan standar deviasi intensitas obyek
e.2.3.9 [boundaries1] = bwboundaries(gabung2)
Tampilkan pesan deskripsi & gesture obyek pada citra asli
e.2.3.10 outputSol = bwcount(gabung3);
e.2.3.10.1 jika (outputLiq.Area > 20 pixel ), maka
Hitung dan simpan total area, rata-rata luas area,
dan standar deviasi luas area (dataAnalisisSol(n, 2:5))
Hitung standar deviasi intensitas obyek
mean_sdevObj1(n, :)
e.2.3.11 [boundaries2] = bwboundaries(gabung2)
Tampilkan pesan deskripsi & gesture obyek pada citra asli
e.2.3.12 jika tombol stop ditekan (stop = 1), maka
break;
e.2.4 Proses Final
156

Listing 5.52. Proses deteksi pada mode “Biru”

e.4.3.1 Tampilkan frame yang sedang diproses pada GUI


simpan nomer frame pada dataAnalisisLiq(n, 1) dan
dataAnalisisSol(n, 1)
e.4.3.2 Baca tiap frame: polutan = read (waterPolut, n);
e.4.3.3 Preprocessing
kernel = kernelGauss(5, 0.6);
polut = FilterGauss31(polutan, kernel);
e.4.3.4 [gabung gabung2] = segmenLiquidBiru(polut, n,
numFrames);
e.4.3.5 [fg bw] = GMM_Motion(polut, K, alpha1, thresh, M, D, n);
e.4.3.6 gabung2 = medfilt2(gabung2);
gabung3 = ~gabung2 & gabung & bw;
e.4.3.7 mask citra asli dengan citra biner limbah cair dan padat
e.4.3.8 outputLiq = bwcount(gabung2);
e.2.3.8.1 jika outputLiq.Area > 150 pixel, maka
Hitung dan simpan total area, jumlah obyek, rata-
rata luas area , dan standar deviasi luas area
dataAnalisisLiq(n, 2:5)
Hitung dan simpan standar deviasi intensitas obyek
mean_sdevObj2(n, :)
e.4.3.9 [boundaries1] = bwboundaries(gabung2)
Tampilkan pesan deskripsi & gesture obyek pada citra asli
e.4.3.10 outputSol = bwcount(gabung3);
e.2.3.10.1 jika (outputLiq.Area > 20 pixel , maka
Hitung dan simpan total area, rata-rata luas area,
dan standar deviasi luas area
(dataAnalisisSol(n, 2:5))
Hitung dan simpan standar deviasi intensitas obyek
mean_sdevObj2(n, :)
e.4.3.11 [boundaries2] = bwboundaries(gabung2)
Tampilkan pesan deskripsi & gesture obyek pada citra asli
e.4.3.12 jika tombol stop ditekan (stop = 1), maka
break;
BAB VI
HASIL DAN PEMBAHASAN

Dalam bab ini akan disajikan hasil pengujian dan pembahasan mengenai hasil
penelitian yang akan diawali dengan metode deteksi limbah cair berbasis fitur
warna, berdasarkan katagori mode program warna limbah, dan metode GMM
untuk deteksi limbah padat yang bergerak.
6.1 Kategori mode “Putih”
6.1.1 Pengujian pada sampel video
Hasil proses pendeteksian melalui program GUI untuk mode “Putih”. Program
bernama prosesLimbah, gambar 6.1 menunjukkan contoh tampilan GUI limbah
cair dapat terdeteksi dengan baik.

Gambar 6.1 Tampilan hasil deteksi limbah putih pada GUI

157
158

Pengujian dilakukan terhadap 4 sampel video yang memiliki kesamaan


karakteristik limbah cair warna putih. Hasil pengujian dapat dilihat pada tabel 6.1.

Tabel 6.1 Hasil Pengujian Deteksi Limbah warna Putih

Jumlah frame

Total terdeteksi
limbah dan
Frame pengujian ada limbah cair obyek lain
obyek lain
terdeteksi tetapi tidak
limbah cair yang ikut
benar terdapat
terdeteksi
limbah
Sampel 1587 240 0
1827 1827
1 (86,87%) ( 13,13% ) (0%)
Sampel 354 0 0
354 354
2 (100 %) (0%) ( 0% )
Sampel 291 122 0
413 413
3 (70,50%) ( 29,50% ) (0%)
Sampel 304 0 0
304 304
4 (100%) (0%) (0%)

Dari 4 sampel video yang diujikan, didapatkan keberhasilan deteksi limbah


cair warna putih memberikan hasil yang cukup baik antara 70,50% - 100%. Rata-
rata tingkat kesalahan deteksi pada dua sampel video adalah 21,06%. Sampel 1
adalah video dengan pengambilan video pada kamera yang bergerak dimana
kondisi beberapa frame yang terdapat didalamnya sama dengan citra sampel
pembentukkan metode, ketiga sampel video lainnya berbeda lokasi pengambilan
dengan sampel video pertama.
6.1.2 Analisis Hasil Pengujian Sistem
Analisis yang dilakukan disini bertitik tolak dari beberapa hasil pengujian yang
telah dilakukan terhadap sampel video pada daerah dan kondisi yang berbeda,
karena setiap video memiliki keaadaan limbah yang berbeda-beda. Gambar 6.2
adalah contoh hasil deteksi limbah pada beberapa kondisi frame.
159

Kondisi Pengujian Hasil Deteksi

Dinding dominan

Ada tumbuhan dipinggir sungai

Hanya limbah saja

Memperbesar area limbah

Memperkecil area limbah

Saat Blur

Gambar 6.2 Contoh limbah yang berhasil dideteksi


160

Analisis terhadap luas area limbah hasil pengujian, berdasarkan hasil uji
terhadap beberapa kondisi diperoleh data pada Tabel 6.2
Tabel 6.2 Data luas area hasil pengujian

Frame Total Rata-rata Rata-rata SD per


Total obyek
data Area luas area limbah frame

Sampel 1 (a) 13550702 2435 5564,970021 10057,25809

Sampel 1 (b) 1944610 357 5447,08 9392,616079

Sampel 2 7238514 3667 1973,96 6108,752

Sampel 3 7234692 8688 832,72 2951,246

Sampel 4 5334670 2735 1950,52 5330,449

Dari tabel diatas terlihat bahwa pada sampel 1 rata-rata luas area limbah
cair pada lokasi tersebut lebih dari 5000 pixel. Sedangkan untuk lokasi
pendeteksian pada sampel 2, 3 dan 4 limbah cair dideskripsikan memiliki luas
rata-rata > 800 hingga ± 2000 pixel.
Analisis sampel video 1(a)
Pada sampel 1(a) digunakan 701 frame sebagai model untuk pembahasan,
mulai dari frame ke- 420 – 1120. Pemilihan frame tersebut berdasarkan kondisi
kamera pada saat deteksi yang relatif statis, jika ada pergerakan tidak ada proses
zooming yang dapat merubah luas area hasil deteksi. Kondisi pendeteksian
dilakukan pada beberapa daerah sungai, untuk mengetahui luas area limbahnya.
Kondisi pertama saat pendeteksian berada pada daerah saluran limbah. Dari
grafik terlihat bahwa frekuensi rata-rata luas area limbah pada frame ke-420 - 600
banyak berada pada nilai lebih dari 15000 pixel. Kondisi selanjutnya hingga akhir
frame ke-1120, daerah yang dideteksi berdasarkan gerakan kamera. Pada tiap
frame tersebut rentang rata-rata luas area limbah yang terdeteksi adalah 5000 –
10000 pixel.
Dari hasil pengujian dapat dideskripsikan rata-rata luas area limbah sampel
1(a) adalah 5564,97 dengan nilai standar deviasi pada tiap framenya 10057,25
161

pixel. Waktu pemrosesan adalah 8 detik/frame, karena dilakukan 2 pemrosesan


sekaligus yakni untuk limbah cair dan limbah padat yang akan dibahas pada sub
bab deteksi limbah padat berbasis fitur gerak. Saat uji coba proses deteksi pada
limbah cair saja waktu pemrosesannya adalah 4 sekon/frame. Gambar 6.3 adalah
grafik data untuk sampel 1 (a). Dari grafik terlihat nilai standar deviasi yang
terlihat menggambarkan variasi luas area limbah tiap framenya.

total area jumlah obyek rata-rata area SD


25000
1120, 16060
20000

15000
1120;
8066,154371
10000
1120, 5353.33333
5000 3

0 1120, 3
400 500 600 700 800 900 1000 1100 1200
frame ke-

Gambar 6.3 Grafik data luas area sampel video putih 1 (a)
Analisis sampel 1(b)
Sampel 1 (b) digunakan 103 frame, mulai dari frame ke- 1480 – 1583. Kondisi
deteksi pada saat kamera bergerak tanpa zooming untuk melihat keadaan sungai
yang tercemar pada wilayah lain yang masih satu lokasi sungai. Berdasarkan
analisis data dapat dideskripsikan bahwa rata-rata luas area per obyeknya adalah
5447,08 dengan rata-rata standar deviasi per frame adalah 9392,62. Gambar 6.4
menunjukkan grafik informasi data luas area limbah yang berhasil terdeteksi.
Dari Gambar 6.3 dan 6.4 terlihat bahwa rata-rata luas area pada saat
pendeteksian pada lokasi sampel video berada > 5000 pixel dengan nilai standar
deviasi luas area tiap framenya berada diatas 10000 pixel dan < 15000 pixel. Hal
ini menggambarkan kondisi pencemaran dan polutan cair yang terdapat pada
sungai. Sebagai data informasi tambahan, diperoleh variasi nilai intensitas obyek
162

terdeteksi yang digambarkan dalam nilai standar deviasi intensitas obyek yakni
memiliki variasi yang sama untuk masing-masing komponen warna adalah R G B
= [28 28 28].

Total area luas jumlah obyek rata-rata-Area standar deviasi


25000

20000
1583, 17434
15000

10000 1583, 7687.41241


7
5000 1583, 4358.5

0 1583, 4
1460 1480 1500 1520 1540 1560 1580 1600
frame ke-

Gambar 6.4 Grafik data luas area sampel video putih 1 (b)

Sampel Video 2
Sampel 2, kondisi pendeteksian pada kamera yang statis, rata-rata standar
deviasi per frame dan rata-rata luas area limbah terlihat pada tabel 6.2, dari
gambar 6.5 terlihat bahwa, rata-rata luas area dan standar deviasi (SD) di setiap
framenya berada pada reantang < 5000 dan 5000 < SD < 10000. Hal ini terjadi
karena jumlah obyek yang terdeteksi pada tiap framenya relatif banyak dengan
luasan per individu yang beragam, dari gambar 6.5 terlihat jumlah obyek pada
frame terakhir nilainya adalah 10. Waktu pemrosesannya adalah 10 sekon/frame,
untuk 2 pemrosesan dalam satu frame. Dari data yang diperoleh diketahui bahwa
obyek memiliki variasi intensitas yang sama untuk masing-masing komponen
warna RGB = [21 21 21].
Sampel Video 3
Sampel 3, kondisi pendeteksian juga pada kamera yang relatif statis. Hasil
perhitungan standar deviasi per frame dan rata-rata luas area limbah terlihat pada
tabel 6.2. Nilai ini diperoleh karena kondisi pendeteksian limbah yang terdapat
163

banyak obyek dengan luas yang bervariasi. Waktu pemrosessannya adalah 10


detik/frame pada pemrossesan 2 metode deteksi sekaligus, sebagai informasi
tambahan diperoleh variasi intensitas yang berdekatan digambarkan dengan nilai
standar deviasi pada masing-masing komponen warna RGB = [39 38 38]. Gambar
6.6 menunjukkan grafik data luas area limbah hasil pengujian, memperlihatkan
bahwa luas area dan standar deviasi berada pada nilai < 5000 pixel. Jumlah obyek
yeng terdeteksi memiliki jumlah yang cukup banyak, seperti terlihat pada frame
terakhir adalah 20 obyek.
Sampel Video 4

Sampel 4, kondisi pendeteksian terdapat dinding sungai, kondisi kamera relatif


statis. Obyek terdeteksi terdiri dari banyak variasi luas area, obyek seperti buih
yang terdapat kemiripan dengan warna limbah berhasil diabaikan, tidak dihitung
luasnya. Standar deviasi per framenya dan rata-rata luas area per obyek terlihat
pada tabel 6.2, Dari grafik terlihat kisaran rentang standar deviasi pada setiap
frame sebesar 3765,31- 8690,49. Waktu proses untuk 2 metode bersamaan adalah
9 detik/frame. Variasi intensitas digambarkan dengan nilai standar deviasi pada
masing-masing komponen warna RGB = [34 34 33]. Informasi data luas area
limbah terlihat pada gambar 6.7

total area jumlah obyek rata-rata area SD Area

25000
354, 20596
20000

15000
354, 5887.035836
10000
354, 2059.6
5000
354, 10
0
0 50 100 150 200 250 300 350 400
frame ke-

Gambar 6.5 Grafik luas area sampel video putih 2


164

total Area rata-rata area SD Area Jumlah area


25000

20000

15000 413, 15987

10000
413, 2525.726978
5000
413, 799.35
0 413, 20
0 100 200 300 400 500
frame ke-

Gambar 6.6 Grafik data luas area sampel video putih 3

jumlah Obyek Total Area rata-rata Area SD Area


25000

20000
304, 15302
15000

10000
304, 4816.190423
5000
304, 1700.222222
0 304, 9
0 50 100 150 200 250 300 350
frame ke-

Gambar 6.7 Grafik data luas area sampel video putih 4

6.1.3 Frame yang gagal dalam pendeteksian limbah


Pendeteksian limbah cair yang mengalami kegagalan terjadi pada sampel
video 1 kondisi jalan yang berwarna mirip dengan limbah mengakibatkan
program mendeteksinya sebagai limbah. Adanya refleksi cahaya matahari yang
tidak merata pada permukaan air menyebabkan intensitas berbeda signifikan
(terlalu terang) karena level intensitas warna putihnya meningkat.. Dinding sungai
yang berwarna putih keabuan pada video sampel 3 mengakibatkan beberapa
bagian dari dinding sungai ikut terdeteksi karena memiliki kemiripan dengan
165

karakteristik warna limbah. Rentang nilai batas yang ditentukan sangat sensitif
terhadap obyek-obyek yang mirip dengan karakteristik warna limbah. Gambar 6.8
adalah contoh hasil deteksi yang mengalami kegagalan.

(a) (b)

Gambar 6.8 (a) Kesalahan deteksi pada dinding yang mirip dengan limbah
(b) Kesalahan deteksi karena refleksi cahaya matahari pada permukaan air
sungai

6.2 Kategori mode “Ungu”


6.2.1 Pengujian terhadap sampel video
Pengujian dilakukan terhadap satu sampel video yang terdapat limbah
berwarna ungu, pengambilan video saat ada cahaya matahari dengan kondisi
sampel terdapat dinding sungai. Pengujian dilakukan berdasarkan percobaan
untuk menentukan nilai batas intensitas warna obyek, sehingga diperoleh
persamaan (4.5 – 4.7). Hasil pengujian dapat dilihat pada tabel 6.3.

Tabel 6.3 Hasil pengujian deteksi limbah warna ungu

Jumlah frame
Total limbah dan terdeteksi
Frame limbah cair
pengujian ada obyek lain obyek lain
terdeteksi
limbah cair yang ikut tidak ada
benar
terdeteksi limbah
Sampel 1547 182 0
1729 1729
1 ( 89,47% ) ( 10,53% ) (0%)
166

Gambar 6.9 Tampilan GUI hasil deteksi limbah cair warna ungu

Keberhasilan pendeteksian limbah warna ungu menunjukkan hasil yang cukup


baik yaitu 89,47% dengan tingkat kesalahan 10,53%. Waktu pemrosesannya
adalah 9 detik/framenya. Tampilan pengujian sampel video limbah cair warna
ungu terlihat pada Gambar 6.9. Pembahasan tentang limbah padat pada sampel
video ungu yang sama terdapat pada sub bab pendeteksian berbasis fitur gerak.
6.2.2 Analisis hasil pengujian dan pembahasan
Gambar 6.10 adalah contoh hasil deteksi limbah cair warna ungu, pada
beberapa kondisi intensitas warna yang berbeda. Perhitungan informasi tentang
luas area dilakukan pada tiap framenya. Sampel video limbah terdapat perbedaan
intensitas dari tidak pekat menjadi limbah dengan intensitas warna ungu yang
pekat. Hasil pengujian menunjukkan program dapat mendeteksi limbah cair pada
kondisi level intensitas warna limbah ungu yang berbeda dengan baik. Varisi
intensitas obyek digambarkan dengan nilai standar deviasi yang berdekatan antara
komponen warna RGB sebesar [16 16 16].
167

Kondisi Pengujian Citra Hasil Deteksi

Awal deteksi

Limbah ungu pekat

Gambar 6.10 Contoh frame limbah cair ungu yang berhasil dideteksi

Pada setiap frame video perhitungan luas area, jumlah obyek, rata-rata luas
area, dan standar deviasi luas area.
Tabel 6.4 Data hasil pendeteksian limbah cair ungu
Rata-rata Rata-rata
Frame Total
Total obyek luas area SD per
data Area
per obyek frame
Sampel 1 14250353 2340 6089,89 1387,363

Data luas area yang dianalisis dari frame ke-1 hingga frame ke-1729 hasil
pengujian memperlihatkan adanya kenaikan luas area mulai dari frame ke 700,
sehingga dapat dideskripsikan kuantitas (jumlah) limbah cair yang masuk atau
berada di sungai mengalami peningkatan yang cukup tinggi yakni hingga luasnya
mencapai > 12000 dan < 14000. Tabel 6.4 menunjukkan informasi luas hasil
pendeteksian. Pada kondisi tersebut program dapat mendeteksi limbah dengan
sangat baik karena terlihat pada gambar 6.11 obyek limbah berhasil terdeteksi
168

secara untuh dengan nilai rata-rata area sama dengan total area yang terdeteksi.
Selanjutnya luasnya semakin menurun hingga mencapai kisaran 10000 pixel pada
akhir pendeteksian, hal ini terjadi karena limbah cair akan ikut mengalir
mengikuti aliran sungai.

Total Area jumlah Obyek rata-rata area sdev

16000
14000
1729, 9859
12000
10000
1729, 6742.26315
8000 9
6000
1729, 4929.5
4000
2000
1729, 2
0
0 500 1000 1500 2000
frame ke-

Gambar 6.11 Grafik data luas area limbah warna ungu

6.2.3 Frame yang gagal dalam pendeteksian


Kegagalan proses deteksi terjadi karena adanya kemiripan intensitas pada
obyek lain terlihat pada gambar 6.12. Pada saat limbah padat ungu pekat
dideteksi, pada beberapa kondisi frame. Dari video sampel terlihat terdapat bagian
limbah padat yang ikut terdeteksi yakni pada bagian limbah yang gelap. Hal ini
terjadi pada saat terjadi perubahan cahaya tiba-tiba gelap akibat kepekaan lensa
kamera sehingga bagian yang tadinya terang dan berbeda intensitasnya jadi lebih
gelap terdeteksi mendekati karakteristik warna limbah.

Gambar 6.12 Contoh frame video dengan kesalahan deteksi


169

6.3 Kategori mode “Merah”


6.3.1 Pengujian pada sampel video
Pengujian dilakukan pada 11 sampel video dengan 8 sampel video terdapat
limbah dan 3 sampel video tidak terdapat limbah. Gambar 6.13 menunjukkan
contoh tampilan GUI limbah cair warna merah yang dapat terdeteksi dengan baik.
Keberhasilan deteksi diukur melalui banyaknya frame yang terdeteksi, terhadap
jumlah semua frame uji yang terdapat limbah. Kriteria pengujian sampel yang
digunakan dan hasil pengujian dapat dilihat pada Tabel 6.5. Pada kriteria obyek
lain yang terdeteksi memiliki arti tidak ada limbah tetapi dideteksi sebagai limbah.
Tingkat keberhasilan program dalam mendeteksi limbah cair berwarna merah
menunjukkan hasil yang cukup baik yaitu berkisar pada 75,12 % - 100 %. .
Tingkat kesalahan pendeteksian memiliki rentang bervariasi, dari keempat sampel
video yang terdapat kesalahan diperoleh nilai rata-rata kesalahannya adalah
12,21%. Analisis terhadap kesalahan pendeteksian akan dijelaskan pada bagian
selanjutnya.

Gambar 6.13 Tampilan GUI deteksi limbah mode “Merah”


170

Tabel 6.5 Hasil Pengujian

Jumlah frame
Total limbah dan
Frame pengujian ada limbah cair Obyek lain
obyek lain
terdeteksi yang
limbah cair yang ikut
benar terdeteksi
terdeteksi
Sampel 1819 0 0
1819 1819
1 ( 100% ) (0%) (0%)
Sampel 1744 63 0%
1807 1807
2 ( 96,51 % ) ( 3,49 % ) (0%)
Sampel 1792 31 150
2058 1806
3 ( 98,28 % ) ( 1,72 % ) ( 7,29 % )
Sampel 583 160 0
643 643
4 ( 75,12 % ) ( 24,88 % ) (0%)
Sampel 2988 0 0
2988 2988
5 ( 100 % ) (0%) (0%)

Sampel 1213 280 0


1493 1493
6 ( 81.24 % ) ( 18,75 % ) (0%)

Sampel 2219 0 0
2219 2219
7 ( 100 % ) (0%) (0%)
Sampel 663 0 65
702 680
8 ( 97,5 %) (0 %) (9,25 %)
Sampel 0 0 74
518 0
9 0% 0% ( 14,28 % )
Sampel 0 0 125
622 0
10 0% 0% ( 20,1 % )
Sampel 0 0 1244
1714 0
11 0% 0% ( 72.58 %)
Gambar 6.14 adalah contoh hasil deteksi limbah cair warna merah yang dilakukan
oleh program. Terlihat bahwa program dapat mengatasi beberapa kondisi yang
ada pada saat pendeteksian.
171

Sampel video 1 Sampel video 5

Sampel video 2 Sampel video 6

Sampel video 3 Sampel video 7

Sampel video 4 Sampel video 8

Gambar 6.14 Contoh frame video ada limbah yang berhasil dideteksi
172

Tabel 6.6 Data hasil pendeteksian limbah cair merah


Rata-rata Rata –rata
Jumlah frame Total Total
luas area standar deviasi
data Area obyek
obyek per frame
Sampel 1
6613756 3949 1674,792606 1340,286035
(1819)
Sampel 2
3377381 7382 457,5157139 389,7720606
(1807)
Sampel 3 (a)
2558826 583 4389,066895 1374,8799
(411)
Sampel 3 (b)
2182152 198 11020,9697 3703,929
(131)
Sampel 4
901939 1460 617,7664384 927,0791384
(285)
Sampel 5
13312081 17487 761,2558472 1214,066714
(2988)
Sampel 6
3822387 11197 341,3759936 425,3570343
(1493)
Sampel 7
98171387 2970 33054,33906 8595,46683
(2219)
Sampel 8
168243 415 405,4048193 67,67227772
(304)

6.3.2. Analisis hasil pengujian dan pembahasan


Tabel 6.6 adalah data informasi luas area dari hasil pengujian sampel yang
terdapat limbah cair yang akan dianalisis. Pembahasan dilakukan terhadap tiap
sampel video pengujian karena setiap sampel video memiliki karakteristik sungai
yang berbeda-beda.
Analisis sampel 1
Kondisi video pendeteksian pada kamera yang relatif statis.. Terlihat pada
tabel 6.6 rata-rata luas limbah cair pada saat pendeteksian adalah 1674,79 pixel,
dengan rata-rata standar deviasi pada setiap framenya adalah 1340,28 pixel.
Waktu pemrosesannya adalah 16 detik/frame, informasi tambahan diperoleh data
variasi intensitas obyek memiliki nilai untuk masing-masing komponen warna
RGB sebesar [13 12 12], menunjukkan variasi intensitas warna merah lebih besar
diantara kedua warna lainnya.
Gambar 6.14 adalah grafik informasi luas area limbah, terlihat bahwa rata-rata
luas area mengalami peningkatan luas area, dapat dideskripsikan bahwa kuantitas
173

limbah cair pada sungai mengalami peningkatan yakni bekisar pada 3000 hingga
lebih dari 6000, Hal ini menunjukkan volume limbah yang berada pada area
sungai semakin meningkat, kemudian turun kembali karena limbah mengikuti
aliran sungai, dan pada akhir sampel nilai rata-rata luas limbah adalah 1600 pixel.

Area Total Jumlah Objek Area rata-rata SD


7000
6000
5000
4000
3000 1819, 1600
2000
1819, 1600
1000
1819, 5E-05
0 1819, 1
0 500 1000 1500 2000
Frame ke-

Gambar 6.15 Grafik informasi luas area sampel merah 1

Analisis sampel 2
Kondisi pada sampel video 2 limbah bagian dari limbah cair yang terdeteksi
secara baik adalah pada saluran pembuangan limbah karena kriteria warna
limbahnya memenuhi persyaratan yang telah ditentukan. Dari gambar 6.15 terlihat
bahwa grafik luas area limbah semakin menurun dari kondisi awalnya karena
terjadi proses perbesaran area limbah namun kriteria yang ditetapkan tidak dapat
mendeteksi bagian limbah yang terkena pantulan warna tembok yang berwarna
putih sehingga warna limbah terkesan jingga keluar dari jangkauan warna
pendeteksian. Tabel 6.6 menunjukkan rata-rata luas area per obyek dan standar
deviasi per framenya.
Dari gambar 6.15 terlihat bahwa area limbah yang dapat terdeteksi adalah pada
setiap framenya memiliki rata-rata luas area dibawah 1000 pixel. Dengan nilai
standar deviasi berada pada kisaran 0 hingga maximum berada pada lebih dari
3000 pixel. Waktu pemrosesan untuk mendeteksi pada sampel video ini adalah 17
detik/frame. Sebagai informasi tambahan diperoleh nilai variasi intensitas obyek
174

pada tiap komponen warna RGB yang digambarkan dengan nilai satndar deviasi
per framenya adalah [12 11 11], terlihat niali variasi limbah merah paling besar
dibandingkan nilai kedua komponen lainnya.

Area Total Jumlah Objek Area Rata-rata SD


7000

6000

5000

4000
1807, 605
3000
1807, 201.666666
2000 7
1000 1807, 125.802755
7
0 1807, 3
0 200 400 600 800 1000 1200 1400 1600 1800 2000
Frame ke-

Gambar 6.16 Grafik informasi luas area sampel merah 2

Analisis sampel 3 (a)


Kondisi pendeteksian pada sampel 3(a) adalah pada kamera bergerak. Analisa
luas area dilakukan terhadap cuplikan data yakni pada frame ke 550 – 960
cuplikan tersebut kamera dalam keadaan relatif statis. Lokasi pengambilan sampel
berada tepat pada bagian saluran pembuangan limbah, sehingga luasan awal pada
frame ke 550, relatif kecil karena limbah yang masuk ke dalam area sungai telah
mengalir mengikuti aliran air. Nilai variasi intensitas pada sampel 3a ditunjukkan
dengan nilai standar deviasi pada komponen warna RGB yakni [18 18 18], maka
dapat dideskripsikan bahwa obyek memilki tingkat kemiripan intensitas yang
sama.
Dari gambar 6.16 diketahui bahwa rata-rata luas area pada tiap framenya berada
pada rentang lebih dari 2000 dengan luas area terbesar mencapai lebih dari 10000
pixel. Pada kondisi tersebut program dapat mendeteksi dengan baik diperlihatkan
175

dengan nilai total area yang hampir sama dengan rata-rata luas area limbah yang
artinya nilai standar deviasinya adalah tak hingga (pada program didefinisikan
0.000005). Luas limbah semakin lama semakin besar, yang menandakan polutan
cair pada sungai semakin meningkat. Terlihat pada frame ke-700, luasan limbah
mencapai 10817. Dari data yang yang ditampilkan pada grafik tersebut diperoleh
nilai rata-rata luas dan nilai rata-rata standar deviasi pada 411 frame yang terlihat
pada tabel 6.6

Area Total Jumlah Objek Area rata-rata SD


12000
10000
8000
6000
960, 4616
4000
960, 4616
2000
960, 5E-05
0 960, 1
500 600 700 800 900 1000 1100
frame ke-

Gambar 6.17 Data informasi luas limabah sampel merah 3 (a)

Analisis sampel 3 (b)


Kondisi pendeteksian pada sampel 3(b), adalah pada kamera yang bergerak
tanpa ada proses zooming. Cuplikan data diambil pada frame ke- 1270 – 1400,
dipilih data tersebut karena saat frame tersebut diproses memperlihatkan bagian
sungai yang tercemar air dengan luasan yang lebih besar dari sumber keluarnya
limbah untuk keperluan analisis terhadap variasi luasan limbah cair.
Dari gambar 6.17 terlihat besarnya luasan limbah yang melebihi nilai 15000
pixel pada tiap framenya dari kondisi pendeteksian frame awal hingga frame ke
1320. Rata-rata luasan limbah untuk 131 frame pada sampel 3(b) ini, terlihat pada
tabel 6.6. Variasi intensitas obyek pada saat pendeteksian setiap komponen warna
digambarkan oleh nilai standar deviasi RGB = [15 15 15], terlihat bahwa obyek
memiliki keseragaman intensitas yang dapat terdeteksi dengan baik.
176

Maka jika dibandingkan dengan luasan limbah cair pada sampel 3(a), maka
pencemaan yang terjadi pada lokasi sampel 3(b) lebih besar karena kemungkinan
terjadi akumulasi limbah cair yang makin meluas yang berjalan mengikuti aliran
air.

total area jumlah obyek rata-rata luas area standar deviasi


30000
25000
20000
15000 1400, 6532

10000 1400, 6532

5000 1400, 5E-05


0 1400, 1
1260 1280 1300 1320 1340 1360 1380 1400 1420
frame ke-

Gambar 6.18 Data informasi luas area limbah sampel merah 3(b)

Analisis sampel 4
Analisis luas area limbah pada sampel 4, grafik luas area pada frame ke 313
hingga frame ke-513 terlihat pada gambar 6.18, dan pada frame ke 560 – 643
terlihat pada gambar 6.19. Dari gambar tersebut terlihat bahwa rata-rata luas area
limbah cair pada tiap framenya berada pada rentang 1000 – 2000. Pemilihan
cuplikan sampel frame berdasarkan pengujian, hasil pendeteksian limbah pada
kondisi tersebut dapat mendeteksi limbah dengan baik. Dengan nilai rata-rata
obyek limbah cair sebesar 617 (tabel 6.6). Warna limbah yang cukup pekat
mengakibatkan pendeteksian yang tidak utuh sehingga mempengaruhi jumlah
obyek limbah yang terdeteksi sesuai dengan kriteria yang telah ditetapkan.
Adanya gerakan kamera mempengaruhi intensitas cahaya yang ditangkap lensa
juga berpengaruh terhadap keutuhan obyek pendeteksian.
177

Area total Jumlah Objek Area rata-rata SD

7000
6000
5000
4000
3000 513, 2284

2000
513, 498.6163235
1000
513, 326.2857143
0 513, 7
290 310 330 350 370 390 410 430 450 470 490 510 530
frame ke-

Gambar 6.19 Data informasi luas area limbah sampel 4(a)

Area total Jumlah Objek Area rata-rata SD

7000

6000

5000

4000
643, 3087
3000

2000 643, 1087.70906


1000 643, 1029

0 643, 3
550 570 590 610 630 650
frame ke-

Gambar 6.20 Data informasi luas area limbah sampel 4(b)

Analisis sampel 5
Kondisi video sampel 5 pada saat pendeteksian, kamera relatif statis dan
berada pada daerah saluran pembuangan limbah. Tabel 6.6 (sampel 5)
menunjukkan rata-rata luas area limbah per obyeknya dan rata-rata standar deviasi
luas per frame yang dianalisis. Dari Gambar 6.20 terlihat kenaikkan nilai luas area
dan standar deviasi luasan obyek dari frame pertama hingga frame terakhir hal ini
178

menunjukkan adanya penambahan jumlah volume limbah pada air sungai. Variasi
luas area obyek terbesar terjadi pada frame ke 2300 – 2400 nilainya hingga
mencapai 5000. Berdasarkan uji coba terhadap pendeteksian limbah cair saja
waktu pemrosesan yang dibutuhkan adalah 1 detik/frame. Sebagai informasi
tambahan variasi intensitas obyek terdeteksi yang sama pada setiap komponen
warna RGB, ditunjukkan dengan nilai standar deviasi perframenya adalah [6 6 6].

Area Total Jumlah Objek Area Rata-rata SD

9000
8000
7000
6000 2988, 5798
5000
4000
3000 2988, 2393.71461
2000 7
2988, 1449.5
1000
0 2988, 4
0 500 1000 1500 2000 2500 3000 3500
Frame ke-

Gambar 6.21 Data informasi luas area limbah sampel 5


Analisis sampel 6
Kondisi pendeteksian pada sampel video 6, warna limbahnya berhasil
terdeteksi dengan baik pada saluran keluarnya limbah, pada limbah yang memiliki
karakteristik intensitas warna yang sesuai dengan implementasi metode. Terlihat
pada gambar 6.21 besarnya standar deviasi obyek yang berhasil terdeteksi pada
setiap framenya kurang dari 1000 pixel. Besarnya rata-rata luas area per obyek
dan standar deviasi luas area tiap framenya terlihat pada tabel 6.6 (sampel 6).
Variasi intensitas obyek pada setiap komponen warna RGB diperoleh [15 13 13],
dapat dideskripsikan obyek memiliki intensitas warna merah yang lebih besar dari
kedua warna lainnya.
Pada awal pendeteksian diperoleh luas area yang besar, yang kemudian
menurun drastis, karena pada saat itu terjadi perubahan cahaya yang tiba-tiba
179

menjadi gelap kehitaman sehingga warna limbah menjadi gelap dan keluar dari
karakteristik metode deteksi warna limbah. Akibatnya daerah yang berhasil
terdeteksi adalah daerah yang sesuai dengan karakteristik limbah merah.

Area Total Jumlah Objek Area rata-rata SD

18000
16000
14000
12000
10000
8000 1493, 2321
6000 1493, 290.125
4000
1493, 8
2000 1493, 333.996765
0 4
0 200 400 600 800 1000 1200 1400 1600
frame ke-

Gambar 6.22 Data informasi luas area limbah sampel 6


Analisis sampel 7
Kondisi pendeteksian pada sampel 7, kamera dalam keadaan statis terdapat
dinding sungai, dan refleksi dinding yang berwarna putih pada permukaan air
sungai. Secara visual limbah terlihat mendominasi sebagian besar area sungai.
Dari hasil pengujian program berhasil mendeteksi limbah merah dengan baik
lebih dari 95 persen area limbah dapat terdeteksi, selain itu pada saat terjadi
perubahan cahaya yang tiba-tiba terang ataupun tiba-tiba gelap limbah tetap dapat
terdeteksi. Kondisi pada sampel 7 ini mencerminkan keadaan pencemaran air
sungai yang sangat parah dibandingkan sampel video lainnya. Tabel 6.6 (sampel
7) memperlihatkan rata-rata luas area per obyek dan standar deviasi per framenya.
Variasi intensitas obyek digambarkan dengan nilai standar deviasinya pada
komponen warna RGB sebesar [12 11 11]. Grafik luas area limbah (Gambar
6.22), terlihat bahwa rata-rata luas area limbah pada setiap frame berada diatas
40000. Dan luas area terbesar mencapai lebih dari 50000.
180

Area Total Jumlah Objek Area Rata-rata SD

60000
50000
2230, 44338
40000 2230, 44338
30000
20000
10000 2230, 5E-05
0 2230, 1
0 500 1000 1500 2000 2500
Frame ke-

Gambar 6.23 Data informasi luas area limbah sampel 7

Analisis sampel 8
Kondisi saat pendeteksian terdapat banyak gerakan kamera, berada pada jarak
yang cukup jauh sehingga banyak terjadi proses zooming. Gambar 6.23
menunjukkan hasil perhitungan informasi luas area limbah pada frame ke-75
hingga frame ke-378. Pemilihan cuplikan frame tersebut berdasarkan kondisi
kamera yang relatif statis tanpa ada proses zooming. Rata-rata luas area tiap
obyeknya dan besarnya standar deviasi tiap frame terlihat pada Tabel 6.6 (Sampel
6). Berdasarkan hasil pengujian, daerah limbah yang berhasil dideteksi adalah
pada bagian saluran pembuangan limbah.
Dari gambar 6.23 terlihat fluktuasi luas area limbah yang terdeteksi, karena
debit air pada saluran pembuangan limbah yang bervariasi. Luas area rata-rata
pada setiap framenya berada pada jangkauan 200 – 700 pixel. Dengan nilai
standar deviasi berada pada rentang hingga 300 pixel. Variasi intensitas obyek
digambarkan dengan nilai standar deviasi RGB sebesar [15 14 14], dengan waktu
yang dibutuhkan untuk pemrosesan adalah 5 detik/framenya.
181

Total Area jumlah obyek mean area SD


1000

800

600
378, 321
400
378, 160.5
200
378, 55.86143571
0 378, 2
50 100 150 200 250 300 350 400
frame ke-

Gambar 6.24 Data informasi luas area limbah sampel 8


6.3.3 Frame yang gagal dalam pendeteksian
Kesalahan deteksi pada sampel video tidak ada limbah
Kegagalan pendeteksian banyak dikarenakan obyek yang mirip dengan
karakteristik warna limbah yang ikut terdeteksi. Pada 3 sampel video yang tidak
terdapat limbah. Pada sampel ke-9 Kesalahan pendeteksian lebih disebabkan pada
banyaknya pergerakkan kamera pada saat itu, banyak terjadi perubahan intensitas
tiba-tiba gelap atau terang sehingga apabila terjadi kemiripan dengan warna
limbah obyek tersebut akan terdeteksi.
Kesalahan pendeteksian pada sampel video ke-10 adalah terjadi karena pada
saat pendeteksian ada endapan pada dasar sungai yang berwarna kemerahan aliran
air sungai menyebabkan perubahan intensitas, yang membuatnya terkadang
terdeteksi sebagai limbah.
Kesalahan pendeteksian limbah untuk sampel ke-11 mencapai 72,58 % hal ini
terjadi karena adanya bayangan gedung yang mendominasi kondisi frame saat
pendeteksian, kemudian pada saat ada perubahan cahaya yang tiba-tiba terang
maka bayangan gedung yang berwarna mirip dengan karakteristik limbah akan
terdeteksi.
Kesalahan deteksi pada sampel video ada limbah
Kesalahan pendeteksian pada sampel ada limbah terjadi pada dinding yang
berwarna gelap kemerahan yang ikut terdeteksi, kemudian limbah terendap yang
182

berwarna mirip dengan karakteristik limbah juga ikut terdeteksi pada beberapa
kondisi frame. Pengaruh perubahan cahaya yang tiba-tiba terang atau gelap
menyebabkan bagian air sungai juga dapat terdeteksi sebagai obyek limbah.
Keberhasilan pendeteksian juga dipengaruhi oleh pencahayaan jika terlalu terang
maka warna air akan berkilau keputihan sehingga warna limbah tidak dapat
terdeteksi.
Gambar 6.25 adalah contoh hasil deteksi limbah yang mengalami kegagalan

Keterangan Hasil deteksi


Bayangan gedung pada permukaan air

Bagian air sungai yang ikut terdeteksi

Obyek mirip dengan warna limbah

Gambar 6.25 Contoh hasil deteksi limbah cair yang mengalami kegagalan

6.4 Kategori mode “Biru”


6.4.1 Pengujian pada sampel video
Pengujian dilakukan pada 3 sampel video yang terdapat limbah. Gambar 6.26
menunjukkan contoh tampilan GUI limbah cair warna biru yang dapat terdeteksi
183

dengan baik. Hasil dari pengujian keberhasilan program dapat dilihat pada Tabel
6.7. Dari hasil pengujian pada video pertama dan kedua memliki tingkat
keberhasilan yang cukup baik yakni mencapai nilai antara 70,36 % - 92,98 %
pada kamera yang relatif statis dan 21,52 % untuk deteksi limbah pada kamera
yang bergerak. Waktu pemrosesan pada video pertama adalah 8 detik/framenya
sedangkan untuk video sampel kedua waktu prosesnya adalah 4 detik/framenya.
Analisis kegagalan pendeteksian akan dibahas pada bagian berikutnya.

Gambar 6.26 Tampilan GUI deteksi limbah cair mode “Biru”

6.4.2 Analisis hasil pengujian


Analisis berupa deskripsi luas area limbah hasil pengujian, berdasarkan hasil
uji terhadap beberapa kondisi terlihat pada Tabel 6.7. Sampel 1 digunakan video
dengan tipe kamera yang relatif statis. Program juga diujicobakan terhadap video
yang kameranya bergerak.
Gambar 6.27 adalah contoh frame limbah yang berhasil terdeteksi secara
benar. Dari tabel dapat diketahui rata-rata luas area limbah adalah sebebesar 4873
dengan nilai standar deviasi berada pada nilai maksimum 16465,6 dan
minimumnya 5498,6. Hal ini terjadi karena jumlah obyek yang terdeteksi pada
184

tiap frame sampel video memiliki variasi luas yang beragam dengan perbedaan
luas area limbah yang cukup jauh satu sama yang digambarkan dalam nilai
standar deviasi yang besar.

Tabel 6.7 Hasil pengujian deteksi limbah warna Biru

Jumlah frame
Total limbah dan obyek lain
Frame pengujian ada limbah cair
obyek lain terdeteksi,
terdeteksi
limbah cair yang ikut tidak ada
benar
terdeteksi limbah
Sampel 1294 545 0
1839 1839
1 ( 70,36 % ) ( 29,64 % ) (0%)
Sampel 662 50 0
712 712
2 ( 92,98% ) ( 7,02 % ) (0%)
Sampel 105 383 76
711 488
3 ( 21,52 % ) ( 78,48 % ) ( 10,68% )

Tabel 6.8 Data luas area hasil pengujian


jumlah
Total Mean Standar
Frame Total obyek
Area luas area Deviasi
data
Sampel 1
43158316 8855 4873,892 10235,53288
(1839)
Sampel 2
9120363 2970 3070,829 4823,866
(104)
Sampel 3
65510 81 808,7654321 822,3357157
(23)

Analisis sampel video 1

Dari gambar 6.28 terlihat rata-rata luas area berada pada kisaran 3000 –
10000, dengan nilai standar deviasi berada pada kisaran 8000 – 15000. Total area
limbah dari awal frame pendeteksian nilainya > 20000. Sehingga dapat dituliskan
185

luas area limbah cair misalnya pada frame ke 1839 adalah rata-rata luas area
limbah sebesar 6005,5
keterangan Hasil deteksi

Sampel Video 1
(Kamera Statis )

Sampel Video 2
(Hanya limbah saja)

Sampel Video 2
(ada dinding sungai)

Sampel Video 3
(ada dinding sungai)

Gambar 6.27 Contoh hasil deteksi yang berhasil dengan benar


186

dengan standar deviasi luas area limbah cair sebesar 11777, 79. Hal ini
menunjukkan variasi luas tiap obyeknya memiliki rentang yang berbeda jauh satu
sama lain.
Sampel Video 2
Pada sampel 2 diambil beberapa frame video yang bergerak untuk dianalisa
luas area limbahnya. Frame sampel yang diambil adalah frame ke 260 -363.
Kondisi limbah pada awal pendeteksian memiliki nilai rata-rata luas area ± 5000
pixel. Kemudian pergerakkan kamera menyebabkan kenaikkan luas area hingga >
20000. Luas area berkurang seiiring dengan pergerakkan kamera yang menjauhi
sumber limbah sehingga luas areanya semakin kecil karena limbah ikut mengalir
bersama aliran air sungai.

Area Total Jumlah objek Area rata-rata SD

30000
1839, 24022
25000
20000
1839, 11777.798
15000 28
10000 1839, 6005.5
5000
1839, 4
0
0 200 400 600 800 1000 1200 1400 1600 1800 2000

frame ke-

Gambar 6.28 Grafik data informasi luas area video sampel biru 1

Analisis sampel video 3


Dari hasil pengujian deperoleh keberhasilan pendeteksian hanya 21 %,
kesalahan terjadi karena adanya warna dinding pada jembatan yang berwarna
kebiruan sehingga menyerupai karakteristik warna limbah. Dari gambar 6.30
terlihat bahwa grafik luas area yang sangat fluktuatif hal ini menandakan
banyaknya gerakan kamera sehingga program tidah dapat menaggulangi kondisi-
kondisi tersebut karena keloar dari pola pendeteksian.
187

total area jumlah obyek rata-rata area SD area


25000

20000

15000
363, 7639
10000
363, 5084.804864
5000
363, 3819.5
0 363, 2
250 300 350
frame ke-

Gambar 6.29 Grafik data informasi luas area video sampel biru 2

Area Total Jumlah Objek Area Rata-rata SD

16000
14000
12000
10000
8000
6000 711, 733
4000 711, 1466

2000 711, 697.2072862


0 711, 2
0 100 200 300 400 500 600 700 800
Frame ke-

Gambar 6.30 Grafik data informasi luas area seluruh frame sampel biru 3

Analisis dilakukan pada 23 frame ada limbah yang berhasil terdeteksi dengan
benar. Dari tabel 6.8 terlihat bahwa rata-rata luas area pada setiap framenya
berada pada kisaran 800 pixel.
188

6.4.3 Frame yang gagal dalam pendeteksian

Gambar 6.31 menunjukkan contoh frame yang mengalami kesalahn


pendeteksian. Pada kasus pertama yaitu adanya bayangan bangunan pada air yang
tampak kebiruan.
kondisi Hasil deteksi

Bayangan bangunan pada air yang


tampak kebiruan

Refleksi warna langit

Dinding yang mirip dengan warna


limbah

Gambar 6.31 Contoh hasil deteksi limbah biru yang gagal

Pada kondisi tersebut program akan mengenalinya sebagai limbah karena


menimbulkan pantulan cahaya yang mirip dengan karakteristik warna limbah biru.
Rentang pendeteksian yang lebar dibuat agar limbah pada saat kondisi tidak pekat
sampai pekat dapat terdeteksi.
189

Pada kasus kedua adalah refleksi warna langit mengganggu proses


pendeteksian sifat intensitas permukaan air sungai menjadi berbeda- beda refleksi
langit yang mirip dengan karakteristik limbah akan dideteksi sebagai limbah oleh
program.

6.5 Deteksi Limbah Padat Berbasis Fitur Gerak


Pada deteksi limbah padat ini 8 sampel akan dianalisis hanya pada video yang
relatif statis saja. Dari hasil percobaan metode GMM untuk mendeteksi limbah
padat bergerak setting inisial parameter GMM memberikan hasil terbaik pada
nilai K = 5, alpha = 0,005, dan nilai threshold = 0,25. Pada percobaan inisial K =
3, jumlah obyek yang terdeteksi memiliki akurasi yang rendah jika dibandingkan
saat K = 5. Pada percobaan nilai alpha = 0,01 obyek bergerak bukan limbah
banyak terdeteksi karena kecepatan adaptasi terhadap semua obyek bergerak
makin besar.
6.5.1 Pengujian pada sampel video
Dari hasil pengujian pada video yang bergerak pada setiap mode hasil deteksi
tidak dapat dideskripsikan karena pergerakan kamera akan dianggap sebagai
obyek limbah yang bergerak sehingga menimbulkan hasil perhitungan luas yang
acak dengan fluktuasi nilai luas yang sangat besar, terjadi perbedaan besar dengan
luas area hasil deteksi pada kamera yang relatif statis.
Nilai keberhasilan pendeteksian limbah padat dihitung dari jumlah frame
terdeteksi dengan benar per pengujian ada limbah padat. Pada kriteria obyek lain
yang terdeteksi tidak ada limbah dihitung dari jumlah frame yang mendeteksi
obyek lain pada saat tidak terdapat limbah. Tabel 6.9 adalah tabel hasil pengujian
deteksi limbah padat berbasis fitur gerak.
Dari tabel 6.10, diperoleh keberhasilan sistem dalam mendeteksi limbah padat
memberikan hasil yang cukup baik untuk mendeteksi limbah padat, yakni pada
kisaran 34,58 % - 79,04%. Kesalahan deteksi terbesar terjadi pada saat
pendeteksian tidak ada limbah
190

Tabel 6.9 Data luas area limbah padat pada cuplikan frame sampel
Rata-rata Rata –rata
Jumlah frame Total Total
luas area standar deviasi
data Area obyek
obyek per frame
Sampel 1
352105 35816 46,15954379 30,15022635
(457)
Sampel 2
463322 5097 90,90092211 44,38119519
(1680)
Sampel 3
57084 593 96,26307 98,19025
(187)
Sampel 4
43713 1225 35,68408 12,2750436
(280)
Sampel 5
58206 822 70,81021898 11,84934661
(338)
Sampel 6
4327 36 120,1944444 8,322881451
(30)
Sampel 7
0 0 0 0
Sampel 8
5524 65 84,98462 0,00005
(65)

Sampel 1 Sampel 2

Sampel 3 Sampel 6

Gambar 6.32 Contoh hasil deteksi limbah biru yang berhasil terdeteksi
191

Tabel 6.10 Hasil pengujian deteksi limbah padat berbasis fitur gerak.

Jumlah frame
Total Obyek lain
Frame limbah limbah dan
pengujian yang
diproses padat obyek lain
ada limbah terdeteksi
terdeteksi yang ikut
padat tapi tidak
benar terdeteksi
ada limbah
Sampel 1 1166 563 0
1729 1729
(ungu) (67,44 %) (32,56 %) (0 %)
Sampel 2 1024 459 195
1680 1680
(merah 1) (60,95 %) (27,32 %) (11,61 %)
Sampel 3 215 47 178
1807 314
(merah 2) (68,47 %) (14,97 %) (9,85 %)
Sampel 4 1103 578 0
2219 2219
(merah 7) (49, 71) (26,04 %) (0 %)
Sampel 5 578 166 0
1388 1388
(merah 5) (34,58 %) (11,95) (0 %)

Sampel 6 83 12 173
951 105
(merah 6) (79,04 %) (11,43%) (18,19 %)

Sampel 7 0 0 1476
1839 0
(biru 1) (0%) ( 0 %) 80,26 %
Sampel 8 65 0 318
1714 65
(merah 11) 100 % (0 %) (18,55 %)

6.5.2 Analisis hasil pengujian


Analisis hasil pengujian dilakukan untuk mengetahui luas area limbah padat
pada setiap sampel video.
Analisis sampel 1
Kondisi sampel video sama seperti sampel video mode “Ungu”, limbah padat
didominasi oleh limbah berwarna hijau lumut. Dari hasil pengujian diperoleh nilai
192

keberhasilan program cukup baik yaitu 67,44 %, Dari tabel 6.10 diambil 457
sampel frame untuk mendeskripsikan luas area limbah padat.
Filter area yang digunakan pada sampel ini adalah obyek yang luasannya > 20
pixel. Pemilihan cuplikan sampel ini berdasarkan obyek yang terdeteksi secara
benar yang dianggap dapat mewakili obyek limbah padat, terlihat bahwa obyek
memiliki rata-rata luas sebesar 46 pixel. Dengan nilai standar deviasi obyek
terdeteksi perframenya adalah 30,15.
Dari gambar 6.33 terlihat bahwa terjadi kenaikan luas yang sangat signifikan
pada frame ke 1106 – 1167. Hal ini terjadi karena adanya perubahan cahaya tiba-
tiba karena kepekaan sensor kamera namun program dapat beradaptasi kembali
sehingga dianggap bakground kembali. Kemudian program akan mendeteksi
limbah padat bergerak.

Total area jumlah obyek rata-rata Area SD


20000
18000
16000
14000
12000
10000 1729, 57.1193681
8000 9
6000 1729, 70.8
4000
1729, 708
2000
0 1729, 10
0 500 1000 1500 2000
frame ke-

Gambar 6.33 Grafik informasi luas area limbah padat sampel 1

Analisis sampel 2

Kondisi limbah padat pada sampel 2 didominasi oleh limbah lumut yang
berwarna kehijauan. Dari gambar 6.34 terlihat bahwa rata-rata luas area limbah
padat berada pada nilai dibawah 100. Dari hasil pengujian program GMM mulai
193

beradaptasi untuk mendeteksi gerakan limbah padat mulai terdeteksi dari frame ke
-16. Waktu pemrosesan saat uji coba deteksi limbah padat saja sebesar 8
detik/frame. Dapat dideskripsikan bahwa limbah padat air sungai pada saat
pendeteksian memiliki Rata-rata luas area per obyek limbah padat yang terdeteksi
adalah 91, dengan standar deviasi luas per frame obyek yang terdeteksi adalah
44,20.
Lonjakan luas area terjadi signifikan terjadi kurang lebih pada frame ke 900.
Hal ini terjadi karena adanya sudden ilumination change yang disebabkan oleh
kepekaan sensor kamera. Ritme grafik kembali turun karena program mampu
beradaptasi dengan perubahan yang terjadi sehingga bagian yang salah kembali
dianggap background, walaupun pada saat tersebut pendeteksian limbah padat
dianggap gagal. Setelah itu program mampu mendeteksi kembali limbah padat
yang bergerak,

total area jumlah obyek rata-rata area SD

6000

5000

4000

3000

2000 1680, 5.00E-05


191, 22.4535885 1680, 0
1000

0 1680, 0
-100 100 300 500 700 900 1100 1300 1500 1700
1680, 0
frame ke-

Gambar 6.34 Grafik data informasi luas area limbah padat sampel 2
(video sampel merah 1)
Analisis sampel 3
Deskripsi kondisi pendeteksian sama seperti sampel merah 2, dimana limbah
padat bergerak tidak tampak terlihat. Program GMM mulai mendeteksi gerakan
setelah 16 frame terproses. Dari hasil pengujian diketahui bahwa GMM pada
194

awalnya gelombang air sungai mengganggu, karena dideteksi sebagai obyek yang
bergerak namun lama kelamaan akan dianggap sebagai bagian dari background
karena gerakannya yang berulang. Bayangan yang bergerak pada dinding sungai
dan permukaan air sungai mengakibatkan pada beberapa kondisi frame terdeteksi
sebagai limbah yang bergerak. Dari gambar 6.35 terlihat grafik luas area limbah
padat pada cuplikan frame ke 190 – 376. Luas area limbah padat sebesar 96 pixel,
sebagai informasi tambahan variasi intensitas pada masing-masing komponen
warna pada obyek yang terdeteksi adalah [31 31 18], terlihat bahwa warna merah
dan hijau lebih bervariasi dibanding komponen warna biru.

Total area jumlah obyek mean area SD


800
700
600
500
400
376, 195
300
200 376, 34.36446808
100 376, 48.75
0 376, 4
170 220 270 320 370 420
frame ke-

Gambar 6.35 Grafik data informasi luas area limbah padat sampel 3

Analisis sampel 4
Pada saat pendeteksian limbah padat yang ada pada sampel video adalah
limbah padat berupa lumut yang berwarna kehijauan filter area diterapkan > 20
untuk menghilangkan noise. Gambar 6.36 adalah grafik informasi luas area frame
sampel video 4. Terlihat bahwa terjadi kenaikan yang signifikan sekitra frame ke
700, frame ke- 1500 dan 2000. Hal ini terjadi karena perubahan cahaya yang tiba
tiba menjadi terang sehingga background dianggap sebagai foreground.
195

total Area jumlah obyek mean area SD


60000
50000
2219, 7.91833315
40000 8
30000
2219, 32.5
20000
2219, 6
10000
0 2219, 195
0 500 1000 1500 2000 2500
frame ke-

Gambar 6.36 Grafik data informasi luas area limbah padat sampel 4
Analisis sampel 5
Kondisi pendeteksian sama seperti sampel 5, digunakan filter area > 50 pixel,
yang bertujuan untuk mengurangi noise dan kesalahan pendeteksian. Sehingga
jumlah limbah yang terdeteksi hanya yang memenuhi filter tersebut. Terlihat pada
gambar 6.37 luas area rata-rata limbah padat berada pada kisaran 100 pixel.

total area jumlah obyek rata-rata luas SD

8000
7000 1388, 6964
6000
5000
4000 1388, 534.65101
72
3000
2000 1388, 290.16666
67
1000
0 1388, 24
-1000 0 200 400 600 800 1000 1200 1400 1600
frame ke-

Gambar 6.37 Grafik data informasi luas area limbah padat sampel 5

Analisis sampel 6
Kondisi pendeteksian pada sampel 6 sama dengan kondisi sampel merah 6.
Pada saat pengujian diambil 951 frame, pada saat tidak terjadi zooming agar
196

keberadaan limbah padat dapat terdeteksi. Sama seperti sampel 3 gelombang air
sungai pada awalnya terdeteksi damun lama-lama terdeteksi sebagai background.
Limbah padat yang terdeteksi adalah limbah plastik. Untuk analisis luasan area
limbah padat diambil 30 frame sampel yang paling bagus hasil deteksinya.
Gambar 6.38 terlihat grafik luas area limbah padat. Terlihat bahwa rata-rata luas
area limbah plastik pada tiap framenya berada pada rentang 100 – 150.

Total area jumlah obyek rata-rata area SD


300
250
200
150
369, 62
100
50 369, 62
369, 5E-05
0 369, 1
338 341 344 347 350 353 356 359 362 365 368 371 374
frame ke-

Gambar 6.38 Grafik data informasi luas area limbah padat sampel 6

Analisis sampel 7
Kondisi video sampel 7 sama dengan sampel biru 1, perubahan cahaya tiba-
tiba menyebabkan kesalahan pendeteksian pada beberapa frame namun dapat
segera diadaptasi oleh GMM, kemudian dianggap sebagai background.
Gelombang air yang cukup besar ternyata akan terdeteksi sebagai gerakan obyek
sehingga menyebabkan kesalahan pendeteksian. Pada kasus video ini padatan
bergerak berupa koloid menyerupai buih dapat terdeteksi dengan baik akan tetapi
bukan merupakan limbah padat maka tetap dikategorikan terjadi kesalahan
pendeteksian. Gambar 6.39 adalah grafik luas area pada setiap frame sampel 7.

Analisis sampel 8
Kondisi pendeteksian pada sampel 8, sebagian besar tidak ada limbah dan
terjadi perubahan cahaya matahari secara bertahap akibat perubahan cahaya
matahari. Dari hasil pengujian terlihat bahwa limbah yang bergerak terdeteksi
197

pada frame ke 360 hingga 410. Gambar 6.40 menampilkan grafik luas area hasil
pendeteksian terlihat terjadi fluktuasi luas area yang sangat besar hal ini terjadi
karena adanya perubahan cahaya tiba-tiba, sehingga bagian yang berubah
keadaanya dianggap sebagai obyek, kemudian program akan beradaptasi kembali
dan menunjukkan tidak ada limbah yang bergerak. Waktu pemrosesan saat uji
coba limbah padat saja adalah 9 detik/frame. Berdasarkan hasil perhitungan luas
diketahui bahwa rata-rata luas area limbah padat sebesar 84,98 pixel.

total area jumlah obyek rata-rata luas SD

25000
20000
15000 1839, 10713
1839, 1804.968
10000
169
5000 1839, 973.9090
909
0 1839, 11
0 500 1000 1500 2000
frame ke-

Gambar 6.39 Luas area pada setiap frame sampel 7

Total Area jumlah obyek rata-rata Area SD

15000

10000

1714, 0
5000
1714, 5E-05
1714, 0
0 1714, 0
0 200 400 600 800 1000 1200 1400 1600 1800
-5000
frame ke-

Gambar 6.40 Grafik data informasi luas area limbah padat sampel 8
(video merah 11)
198

6.5.3 Frame yang gagal dalam pendeteksian

Kesalahan dalam pendeteksian disebabkan oleh banyak faktor. Kesalahan


terbesar terjadi pada sampel 7, Kesalahan terbesar terjadi pada sampel tidak ada
limbah akan tetapi banyak sekali obyek yang bergerak. Hal ini disebabkan adanya
perubahan cahaya secara tiba-tiba, bergerakkan obyek lain seperti buih yang
bergerak akan terdeteksi. Meskipun program benar mendeteksi gerakan namun
tetap dikatagorikan salah dalam mendeteksi limbah padat.
Gerakkan pada dedauan yang ada dipinggir sungai juga ikut terdeteksi akan
tetapi hanya beberapa saat karena program akan segera beradaptasi dan
menggapnya sebagai bagian dari background. Gambar 6.41 Menunjukkan contoh
frame yang mengalami kesalahan pendeteksian.
Karakteristik kondisi sungai pada setiap pengambilan data video
mempengaruhi tingkat keberhasilan dari program untuk mendeteksi limbah padat.

Kondisi Hasil deteksi

Perubahan cahaya secara tiba-tiba


Terang atau tiba-tiba gelap

Gerakan pohon yang semula diam


tertiup angin

Gambar 6.41 Contoh frame yang mengalami kesalahn pendeteksian


BAB VII
KESIMPULAN

7.1 Kesimpulan
Berdasarkan hasil penelitian dan pembahasan yang dilakukan, maka dapat
diambil kesimpulan sebagai berikut:
1. Tingkat keberhasilan metode deteksi limbah cair berbasis fitur warna kategori
warna putih terhadap 4 buah sampel video, memiliki persentase antara 70,5 %
- 100 %. Metode ini dapat mendeteksi limbah dengan baik pada kamera yang
bergerak, dan dapat mendeteksi saat terjadi efek blur pada frame video.
Diketahui pula bahwa rata-rata luas area limbah cair lebih besar dari 5000
pixel dengan standar deviasi per framenya lebih besar dari 9000 pixel.
2. Tingkat keberhasilan metode deteksi limbah cair pada kategori warna ungu
adalah 89,47 %. Metode ini dapat mendeteksi limbah dengan baik pada warna
limbah ungu yang pekat dan tidak pekat dan tahan terhadap perubahan cahaya
secara tiba-tiba. Rata-rata luas area limbah perobyeknya berada pada nilai
lebih besar dari 6000 pixel dengan standar deviasi per framenya lebih besar
dari 1000 pixel.
3. Tingkat keberhasilan metode deteksi limbah cair pada kategori warna merah
terhadap 11 sampel video memiliki persentase antara 75,12 % - 100 %.
Metode ini mampu mendeteksi limbah dengan baik pada kondisi terdapat
refleksi dinding pada permukaan air dan pada saat kamera mengalami
pergerakan. Pencahayaan matahari yang terlalu terang atau berubah tiba-tiba
keberhasilan proses deteksi warna limbah. Rata-rata luas area limbah
perobyeknya pada setiap sampel video berbeda-beda tergantung pada volume
limbah saat pendeteksian.
4. Tingkat keberhasilan metode deteksi limbah cair pada kategori warna biru
adalah 70,36 % - 92,98 %, sedangkan pada kamera yang bergerak hanya
21,52 %. Keberadaan dinding dan refleksi warna langit yang memiliki warna

199
200

mirip dengan karakteristik limbah mengganggu proses deteksi karena kedua


obyek akan berwarna kebiruan. Pada 2 sampel video rata-rata luas area
limbah perobyeknya berada pada nilai lebih besar dari 3000 pixel dengan
standar deviasi per framenya lebih besar dari 3000 pixel.
5. Tingkat keberhasilan metode deteksi limbah berbesis fitur gerak berada pada
nilai persentase sebesar 34,58 % - 79,04% . Metode ini dapat beradaptasi
dengan perubahan lingkungan yang terjadi pada daerah sungai seperti adanya
repetitive motion yang ditimbulkan oleh gelombang air dan perubahan cahaya
bertahap seperti pencahayaan matahari. Deskripsi limbah padat yang
terdeteksi berdasarkan pengujian diperoleh besarnya nilai rata-rata luas
limbah padat mirip lumut dideskripsikan berkisar dari 46,16 – 90,90 pixel
dengan nilai standar deviasi perframenya adalah 11, 85 - 30,15 pixel. Limbah
berupa plastik yang terdeteksi memiliki rata-rata luas area sebesar 96,26 –
120,19 pixel dengan rata-rata standar deviasi perframenya sebesar 11,84 –
98,19 pixel.

7.2 Saran
Untuk penelitian selanjutnya, sebaiknya ditambahkan beberapa hal yang dapat
meningkatkan kinerja ataupun mengatasi kendala-kendala dalam pendeteksian,
antara lain:
1. Jarak antara sudut pengambilan video dengan daerah sungai sebaiknya
ditentukan agar diperoleh hasil pendeteksian yang lebih baik.
2. Pendeteksian limbah pada malam hari.
3. Mampu mengukur kecepatan air sungai dan proses tracking object
4. Mampu mengatasi permasalahan perubsahan cahaya secara tiba-tiba dan
adanya refleksi warna langit serta pencahayaan yang tidak merata pada
permukaan air.
DAFTAR PUSTAKA

Ahmad, U., 2005, Pengolahan Citra Digital & Teknik Pemogramannya, Penerbit
Graha Ilmu, Yogyakarta.

Arhami, M., dan Desiani, A., Pemograman MATLAB, Penerbit Andi, Yogyakarta

Bruce, J., Balch , T., and Veloso, M., 2000, Fast and Inexpensive Color Image
Segmentation for Interactive Robots, In: Proceeding of the 2000
IEEE/RSJ International conference on Intelligent Robots and Systems.

Bouwmans, T., El Baf, F., and Vachon, B., 2008, Background Modeling using
Mixture of Gaussians for Foreground Detection – A Survey, Recent
Patents on Computer Science 1, 219-237.

Fanning, D.W., 2002, Convert RGB Image to Grayscale,


http://www.dfanning.com/ip_tips/color2gray.html, diakses pada 18
Desember 2010.

Fardiaz, S., 1992, Polusi Air dan Udara, Penerbit Kanusius, Yogyakarta.

Gonzalez, R.C., and Woods, R.E., 2008, Digital Image Processing Third
Edition, Pearson Prenctice Hall, New Jearsy.

Heuvalmans, 2005, Fast Color Threshold Calculation,


http://knorretje.hku.nl/~toine/files/ColorThreshold.pdf, diakses 28 Oktober
2010.

Kasam, Yulianto A., dan Rahmayanti A.E., Penurunan COD dan Warna pada
Limbah Cair Industri Batik dengan Menggunakan Aerobic Roughing Filter
Aliran Horizontal, http://jurnal.pdii.lipi.go.id/admin/jurnal/61092731.pdf,
diakses 12 Januari 2011

Ling, Chi-Ming., 2004, Motion Object Detection and Tracking Based on


Adaptive Background Substraction, Thesis., Institute of Computer Science
and Information Engineering National Central University, Taiwan.

M. Harville, G. Gordon, and J. Woodfill., 2001, Foreground segmentation using


adaptive mixture models in color and depth, In: Procedding of the IEEE
Workshop on Detection and Recognition of Events in Video”. Diakses pada
22 September 2010.

201
202

Power, P.W., Schoonees, J.A., 2002, Understanding background mixture models


for foreground segmentation, Proceeding Image and Vision Computing
New Zealand (IVCNZ 2002), Auckland, NZ, November 2002, 267-271.
http://www.is.irl.cri.nz/pubdoc/2002/JSPP2002.pdf, diakses pada 22
September 2010.

Ribeiro, H.L, and Gonzaga, A., 2006, Hand Image Segmentation in Video
Sequence by GMM: a comparative analysis,
http://sibgrapi.sid.inpe.br/col/sid.inpe.br/sibgrapi80/2006/06.26.11.48/doc
/Ribeiro-HandImageSegmentationInVideoSequenceByGMM.pdf, diakses
pada 28 Oktober 2010.

Sastrawijaya, A.T., 2000, Pencemaran Lingkungan, Penerbit Rineka Cipta,


Jakarta.

Stauffer , C., and Grimson W.E.L, 1999, Adaptive background mixture models
for real-time tracking, Artificial Intelligence Laboratory, MIT, Cambridge
http://www.ai.mit.edu/projects/vsam/Publications/stauffer_cvpr98_track.p
df, diakses pada 28 Oktober 2010.

Sugiyono, 2009, Statistika untuk Penelitian, Penerbit ALFABETA, Bandung.

Suksmono, 2010, Pendahuluan Pengenalan Pola


http://radar.ee.itb.ac.id/~suksmono/Lectures/ec4041/ppt/PP1.%20Pendahul
uan%20Pengenalan%20Pola.pdf, diakses 28 Oktober 2010.

Teknomo, kardi. 2010. K-means Algorithm. http://karditeknomo.com, diakses 28


Oktober 2010.

Wijaya, Ch. M., dan Agus Prijono, 2007, Pengolahan Citra Digital Menggunakan
MATLAB, Penerbit Informatika, Bandung.