Professional Documents
Culture Documents
IKA CANDRADEWI
06/194507/PA/10988
2011
SKRIPSI
Diajukan untuk memenuhi salah satu syarat memperoleh derajat Sarjana Sains
Program Studi Elektronika dan Instrumentasi
IKA CANDRADEWI
06/194507/PA/10988
2011
HALAMAN PENGESAHAN
SKRIPSI
IKA CANDRADEWI
06/194507/PA/10988
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.
Ika Candradewi
iii
HALAMAN MOTO DAN PERSEMBAHAN
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
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
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
xiii
DAFTAR LISTING
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
Oleh
Ika Candradewi
06/194507/PA/10988
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
By
Ika Candradewi
06/194507/PA/10988
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
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.
2. Dapat digunakan sebagai salah satu metode untuk segmentasi citra limbah
3. Dapat digunakan sebagai salah satu metode pendeteksian berbasis
pemrosesan citra digital.
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).
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
11
12
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
Titik origin
(0,0) x
f(x,y)
(a) (b)
Gambar 3.2 (a) Citra RGB, (b) Array pixel RGB
(sumber: www.mathworks.com)
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.
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).
Gambar 3.6 Aspek fitur : (a) vector, (b) ruang fitur dan (c) scatter plot
(sumber: Suksmono, 2010)
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 :
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
Hijau
Kuning
(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
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)
1
̅= (3.5)
23
1
= ( − ̅) (3.6)
−1
1
= ( − ̅) (3.7)
−1
‖ ‖=( /
) sebagai persamaan Euclidean normal. Rumusnya adalah sebagai
berikut:
= − = ( − ) + …+ ( − ) (3.8)
≥ ℎ ℎ, AND
≤ ℎ ℎ, AND
≥ ℎ ℎ, AND
≤ ℎ ℎ, AND
≥ ℎ ℎ, AND
≤ ℎ ℎ, (3.9)
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
{ ⃗ , ,…, ⃗ , } = { ⃗( , , ): 1 ≤ ≤ − 1} (3.11)
Dimana ⃗ adalah frame sequence, nilai pixel adalah sample dari variabel ⃗ ,
S, , = , , . atau S = [ ] (3.12)
⃗ , − ⃗, , ≤b , (3.13)
, , = (1 − ) , , + , , (3.14)
30
⃗, , = (1 − ) ⃗, , + (3.15)
= (3.16)
,
, , = (1 − ) , , + ⃗ , − ⃗, , (3.17)
memiliki nilai yang sama dengan nilai parameter sebelumnya. Sedangkan nilai
yang diupdate adalah nilai weight saja ( ) dengan persamaan:
, , = (1 − ) , , + (3.18)
Keterangan:
ω , = bobot. = learning rate pertama untuk bobot.
= , > (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).
1 2 3
8 (x,y) 4
7 6 5
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)
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
35
36
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.
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.
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
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.
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:
(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:
Ada
dinding tumbuhan
dominan di pinggir
sungai
Mirip
Hanya
dengan
limbah saja
warna
limbah
(a) (b)
(c) (d)
(e)
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:
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
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.10 Diagram alir pengecekkan kondisi deteksi limbah cair ungu
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
Refleksi dinding
pada permukaan air
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.
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.27 Diagram alir utama proses pendeteksian limbah mode “Biru”
73
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.56
4. Tampilan rancangan user interface
100
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
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
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
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.
Listing 5.7 Deteksi dinding dan hitung nilai persen mode merah
function [gabung gabung2] = segmenLiquidMerah(polut, n, numFrames)
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
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
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
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
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
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 =
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
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
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
liquid8 = (polR > 150) & (polG > 150) & (polB > 160);
gabung2 = detectColor & gabung & ~liquid8;
end
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
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
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
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
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;.
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 -------------
D = 2.5;
Sdev_init = 6;
kernel = kernelGauss(5, 0.6);
polutFil = FilterGauss31(first, kernel);
polut = rgb2gray(polutFil);
[ro col dimensi] = size(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);
keadaan awal sama dengan 0 jika terdapat beda pixel ke-k yang tidak memenuhi
syarat pencocokan.
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 =
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.
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
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 = [];
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
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
outputLiq = bwcount(gabung2);
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
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 -----
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;
Listing 5.42 Perhitungan standar deviasi intensitas pixel obyek limbah padat
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']);
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
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.
157
158
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%)
Dinding dominan
Saat Blur
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
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
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].
20000
1583, 17434
15000
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
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-
20000
10000
413, 2525.726978
5000
413, 799.35
0 413, 20
0 100 200 300 400 500
frame ke-
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-
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
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
Awal deteksi
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.
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-
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 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
Gambar 6.14 Contoh frame video ada limbah yang berhasil dideteksi
172
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.
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.
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-
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
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.
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
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-
7000
6000
5000
4000
643, 3087
3000
0 643, 3
550 570 590 610 630 650
frame ke-
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].
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-
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.
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-
60000
50000
2230, 44338
40000 2230, 44338
30000
20000
10000 2230, 5E-05
0 2230, 1
0 500 1000 1500 2000 2500
Frame ke-
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
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-
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
Gambar 6.25 Contoh hasil deteksi limbah cair yang mengalami kegagalan
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.
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.
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% )
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)
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.
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
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
16000
14000
12000
10000
8000
6000 711, 733
4000 711, 1466
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
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 %)
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.
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,
6000
5000
4000
3000
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.
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
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.
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.
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.
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-
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
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
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.
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.
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
201
202
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.
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.
Wijaya, Ch. M., dan Agus Prijono, 2007, Pengolahan Citra Digital Menggunakan
MATLAB, Penerbit Informatika, Bandung.