Abstrak— Pencemaran udara merupakan salah satu masalah Ringelmann Smoke Chart.
yang ditimbulkan oleh pembakaran bahan bakar pada proses
industri. Untuk mencegah pencemaran udara, dilakukan
kegiatan pengamatan cerobong asap oleh Badan Lingkungan
Hidup. Pengamat Badan Lingkungan Hidup akan mengukur
tingkat kepekatan asap dari cerobong industri untuk
mengetahui apakah asap yang dihasilkan oleh cerobong industri
di melebihi batas aman yang sudah ditetapkan atau tidak.
Badan Lingkungan Hidup menggunakan skala Ringelmann
Smoke Chart untuk menentukan tingkat kepekatan asap.
Selama ini pengukuran tingkat kepekatan asap dilakukan
pengamat dengan melihat citra asap melalui teropong dan
kemudian membandingkannya dengan Ringelmann Smoke
Chart secara manual. Pengukuran dengan cara tersebut
memiliki keterbatasan. Pengamatan tidak dapat dilakukan Gambar 1 Digital Ringelmann Smoke Opacity Meter
ketika penglihatan pengamat tidak dalam kondisi yang bagus.
Selain itu data pengamatan masih ditulis tangan pada kertas Untuk mengetahui tingkat kepekatan asap sulit dilakukan
laporan pengamatan, sehingga pengguna kesulitan dalam dengan tanpa alat bantu. Salah satu alat bantu yang
melihat perkembangan kepekatan asap dari cerobong. Untuk
memudahkan untuk mengetahui tingkat kepekatan dari asap
mengatasi permasalahan tersebut, dibuatlah aplikasi
pengukuran tingkat kepekatan asap dan pencatatan data adalah Digital Ringelmann Smoke Opacity Meter. Digital
pengamatan yang berjalan pada smartphone berbasis Windows Ringelmann Smoke Opacity Meter yang ditunjukkan oleh
Phone. Gambar 1 merupakan sebuah alat yang terdiri dari
Aplikasi ini mengukur tingkat kepekatan asap dengan teropong, indikator tingkat kepekatan asap dan kamera.
menghitung euclidean distance histogram RGB (Red, Green, Indikator tingkat kepekatan asap terdiri dari 5 tingkatan
Blue) citra asap dengan masing-masing tingkatan pada sesuai dengan Ringelmann Smoke Chart. Sedangkan kamera
Ringelmann Smoke Chart. Tingkat kepekatan asap diambil digunakan untuk mendokumentasikan citra asap yang sedang
berdasarkan tingkatan pada Ringelmann Smoke Chart yang diukur tingkat kepekatannya. Cara menentukan tingkat
memiliki euclidean distance terendah terhadap citra asap. kepekatan asap adalah pengamat melihat asap melalui
Selain pengukuran tingkat kepekatan asap, aplikasi ini juga
teropong dan membandingkan asap tersebut sesuai dengan
memiliki beberapa fitur lain, yaitu penyimpanan data
pengamatan pada server, menampilkan riwayat pengukuran,
skala Ringlemann.
dan benchmark nilai kepekatan asap.
Selama ini pengukuran tingkat kepekatan asap masih
Kata Kunci— Pengukuran tingkat kepekatan asap, dilakukan secara manual. Yaitu pengamat melihat asap
Ringelmann Smoke Chart, Histogram, Windows Phone. melalui teropong dan membandingkannya dengan
Ringelmann Smoke Chart. Kamera hanya digunakan
I. PENDAHULUAN untuk mendokumentasikan kegiatan pengamatan asap.
Pengukuran dengan cara tersebut memiliki keterbatasan.
S EIRING dengan meningkatnya kegiatan industri,
khususnya industri yang melakukan pembakaran bahan
bakar, maka pencemaran udara pun semakin meningkat.
Pengamatan tidak dapat dilakukan ketika penglihatan
pengamat tidak dalam kondisi yang bagus. Selain itu data
Hal tersebut mendorong pemerintah untuk membuat aturan pengamatan masih dicatat dengan tulisan tangan pada kertas
mengenai pengendalian pencemaran udara yang tertuang laporan pengamatan, sehingga pengguna kesulitan dalam
pada Keputusan Kepala Bapedal No. 205 Tahun 1996 [1]. melihat perkembangan kepekatan asap dari cerobong.
Dari peraturan tersebut maka dilakukanlah pengukuran Untuk mengatasi permasalahan di atas, maka akan
tingkat kepekatan asap oleh Badan Lingkungan Hidup dibuat sistem untuk melakukan pengukuran tingkat
berdasarkan kepekatan asap secara otomatis dan juga pencatatan data
Engineering Software Requirements Vol. 1, No. 1, 2018 (eISSN: 1234-5678) 8
pengamatan. Pengukuran dengan sistem yang yang akan C. Windows Communication Foundation (WCF)
dibangun ini dilakukan dengan cara memotret asap Windows Communication Foundation (WCF) adalah suatu
menggunakan kerangka kerja untuk membangun aplikasi berorientasi
layanan. Menggunakan WCF, pengembang dapat mengirim
data sebagai pesan asynchronous dari satu endpoint layanan
lain.
aktor dengan use case. Diagram use case aplikasi ini dapat 6. Menghitung euclidean distance antara histogram RGB
dilihat pada Gambar 3. citra asap dengan histogram RGB citra masing-masing
Pada aplikasi ini pengguna dapat mengukur tingkat skala pada Ringelmann Smoke Chart.
kepekatan asap dan mengunggah data pengamatannya ke 7. Tingkat kepekatan asap didapatkan dari skala pada
server, mengunggah rekaman data ke server, menampilkan Ringelmann Smoke Chart yang memiliki euclidean
distance terkecil terhadap citra asap.
SISTEM PENGUKUR TINGKAT KEPEKATAN ASAP
<<extend>>
B. Implementasi Pengukuran Tingkat Kepekatan Asap for (var x = 0; x <= height - 1; x++)
{
Implementasi pengukuran tingkat kepekatan asap var sourceIndex = xOffset + (yOffset + x) *
ditunjukkan oleh Kode Sumber 1. Fungsi CropImage sourceWidth;
var destinationIndex = x * width;
merupakan fungsi untuk memotong citra menjadi berukuran Array.Copy(source.Pixels, sourceIndex,
512x512 pixel. Fungsi ConvertToWbmp merupakan fungsi result.Pixels, destinationIndex, width);
}
untuk mengubah skala Ringelmann Smoke Chart berupa .png DataSingleton.Instance.Pic = result;
menjadi bertipe WriteableBitmap. Fungsi getQuant return result;
merupakan fungsi untuk menormalisasikan histogram RGB }
ke dalam array dengan panjang 16. Fungsi public static WriteableBitmap ConvertToWbmp(string
GetCumulativeHistogram merupakan fungsi untuk filename)
{
menggabungkan masing komponen RGB ke dalam 1 array. StreamResourceInfo sri =
Fungsi GetEuclideanDistance merupakan fungsi untuk Application.GetResourceStream(new
menghitung euclidean distance antara 2 histogram RGB. Uri("Images/"+filename, UriKind.Relative));
BitmapImage src = new BitmapImage();
Fungsi GetOpacity merupakan fungsi untuk mendapatkan src.SetSource(sri.Stream);
nilai kepekatan asap berdasarkan euclidean distance yang WriteableBitmap bitmapImage = new
WriteableBitmap(src);
terkecil. return bitmapImage;
}
private const int QUANT = 16;
public static int[]
public static void GetOpacity(WriteableBitmap GetCumulativeHistogram(WriteableBitmap bitmapImage)
ImageSource) {
{ int[][] arr = getQuant(bitmapImage);
DataSingleton.Instance.ChartHistogram = new int[] r = new int[QUANT];
int[5][]; int[] g = new int[QUANT];
DataSingleton.Instance.ChartHistogram[0] = int[] b = new int[QUANT];
OpacityMeasurement.GetCumulativeHistogram(OpacityMea for (int j = 0; j < arr[0].Length; j++)
surement.ConvertToWbmp("20.png")); {
DataSingleton.Instance.ChartHistogram[1] = r[arr[0][j]]++;
OpacityMeasurement.GetCumulativeHistogram(OpacityMea g[arr[1][j]]++;
surement.ConvertToWbmp("40.png")); b[arr[2][j]]++;
DataSingleton.Instance.ChartHistogram[2] = }
OpacityMeasurement.GetCumulativeHistogram(OpacityMea int[] output = new int[r.Length + g.Length +
surement.ConvertToWbmp("60.png")); b.Length];
DataSingleton.Instance.ChartHistogram[3] = r.CopyTo(output, 0);
OpacityMeasurement.GetCumulativeHistogram(OpacityMea g.CopyTo(output, r.Length);
surement.ConvertToWbmp("80.png")); b.CopyTo(output, r.Length + g.Length);
DataSingleton.Instance.ChartHistogram[4] = return output;
OpacityMeasurement.GetCumulativeHistogram(OpacityMea }
surement.ConvertToWbmp("100.png"));
int[] chart = { 20, 40, 60, 80, 100 }; private static int[][] getQuant(WriteableBitmap img)
{
int[] smokeImage = int[][] feature = new int[3][];
GetCumulativeHistogram(CropImage(ImageSource, 768, int[] r = new int[img.Pixels.Length];
512, 512, 512)); int[] g = new int[img.Pixels.Length];
int[] b = new int[img.Pixels.Length];
double min = Double.MaxValue;
int index = -1; for (int i = 0; i < img.Pixels.Length; i++)
for (int i = 0; i < 5; i++) {
{ var pixelbytes =
double has = BitConverter.GetBytes(img.Pixels[i]);
GetEuclideanDistance(DataSingleton.Instance.ChartHis r[i] = pixelbytes[0] * (QUANT - 1) / 255;
togram[i], smokeImage); g[i] = pixelbytes[1] * (QUANT - 1) / 255;
if (has < min) b[i] = pixelbytes[2] * (QUANT - 1) / 255;
{ }
min = has;
index = i; feature[0] = r;
} feature[1] = g;
} feature[2] = b;
return feature;
}
Engineering Software Requirements Vol. 1, No. 1, 2018 (eISSN: 1234-5678) 11
Tabel 1
Kesimpulan Pengujian Fungsionalitas
ID Nama Skenario Hasil
UJ.UC- Pengujian fitur Skenario 1 Berhasil Tabel 3
0001 mengukur tingkat Akurasi Pengukuran Oleh Aplikasi
Skenario 2 Berhasil
kepekatan asap Jumlah Pengukuran
Skenario 3 Berhasil Jumlah
Pengamat yang Sama dengan Akurasi
Foto
UJ.UC- Pengujian fitur Skenario 1 Berhasil Aplikasi
0002 mengunggah rekaman Pengamat 1 30 42 71%
data ke server Pengamat 2 31 42 74%
UJ.UC- Pengujian fitur Skenario 1 Berhasil Pengamat 3 31 42 74%
0003 menampilkan riwayat
Pengamat 4 30 42 71%
pengukuran
UJ.UC- Pengujian fitur Skenario 1 Berhasil Pengamat 5 30 42 71%
0004 menampilkan Rata-rata 72%
benchmark nilai
kepekatan asap
C. Pengujian Hasil Pengukuran Tingkat Kepekatan Asap
Evaluasi hasil pengukuran tingkat kepekatan asap
V. PENGUJIAN & EVALUASI dilakukan dengan membandingkan hasil pengukuran yang
dilakukan oleh aplikasi dengan hasil pengukuran yang
A. Pengujian Fungsionalitas dilakukan dengan membandingkan antara foto asap dan skala
Pengujian aplikasi menggunakan metode black box untuk pada Ringelmann Smoke Chart secara manual. Pengukuran
mengetahui apakah keluaran dari aplikasi yang telah secara manual dilakukan oleh 5 pengamat. Dari masing-
dibangun sesuai. Pengujian fungsionalitas sistem dilakukan masing pengukuran oleh pengamat didapatkan akurasi
dengan menyiapkan sejumlah skenario sebagai tolok ukur dengan membagi jumlah foto yang yang memiliki hasil yang
keberhasilan pengujian. Kesimpulan dari pengujian sama antara pengukuran aplikasi dan pengukuran manual
fungsionalitas dapat dilihat pada Tabel 1. dengan jumlah foto yang diuji. Dari akurasi tersebut dirata-
rata dan didapatkan hasil akurasinya adalah 72%. Dengan
B. Pengujian Kegunaan & Kemudahan
nilai akurasi tersebut, dapat dikatakan aplikasi dapat
Berdasarkan hasil dari kuesioner yang diisi oleh pengguna mengimplementasikan metode Image Retrieval Based on
maka didapatkan kesimpulan bahwa aplikasi ini cukup Color Histogram dengan baik, di mana akurasi hasil
membantu pengguna dalam mengukur tingkat kepekatan pengujian metode tersebut pada paper sebesar 66% [6]. Hasil
asap, mencatat data pengamatan, melihat riwayat akurasi pengukuran aplikasi dibandingkan dengan
pengamatan, dan melihat benchmark kepekatan asap. pengukuran secara manual ditunjukkan oleh Tabel 3.
Persentase dari hasil pengujian kegunaan dapat dilihat pada
Tabel 2. VI. KESIMPULAN & SARAN
Tabel 2 Berdasarkan proses perancangan, implementasi dan
Hasil Pengujian Kegunaan & Kemudahan pengujian yang dilakukan, maka kesimpulan-kesimpulan
No. Kegunaan Persentase yang dapat diambil adalah:
1. Pengukuran tingkat kepekatan asap dapat 80%
1. Pengukuran tingkat kepekatan asap berdasarkan
dilakukan dengan mudah menggunakan
aplikasi ini. Ringelmann Smoke Chart dapat dilakukan dengan mudah
2. Pengisian data pengamatan melalui 88% menggunakan aplikasi ini. Aplikasi dapat
aplikasi ini lebih mudah dan cepat mengimplementasikan metode pengukuran Image
dibandingkan dengan pengisian secara Retrieval Based on Color Histogram dengan akurasi
manual pada kertas laporan pengamatan. sebesar 72%.
3. Fitur rekaman data membantu pengguna 88%
2. Penyimpanan data pengukuran tingkat kepekatan asap
untuk tidak mengulang proses
Engineering Software Requirements Vol. 1, No. 1, 2018 (eISSN: 1234-5678) 12
DAFTAR PUSTAKA