RANCANG BANGUN APLIKASI PERHITUNGAN LUAS DAUN BERBASIS ANDROID
TUGAS AKHIR
Disusun sebagai salah satu syarat untuk menyelesaikan Program Strata Satu (S1) pada Program Studi Teknik Elektro
Universitas Muhammadiyah Yogyakarta
Disusun oleh :
FADHOLI ZULFAN AHMAD
20110120005
JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNIK
UNIVERSITAS MUHAMMADIYAH YOGYAKARTA
(2)
i
TUGAS AKHIR
Disusun sebagai salah satu syarat untuk menyelesaikan Program Strata Satu (S1) pada Program Studi Teknik Elektro
Universitas Muhammadiyah Yogyakarta
Disusun oleh:
FADHOLI ZULFAN AHMAD 20110120005
JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNIK
UNIVERSITAS MUHAMMADIYAH YOGYAKARTA
(3)
iii
yang secara tertulis dijadikan acuan dalam penulisan naskah ini dan disebutkan dalam daftar pustaka. Apabila di kemudian hari pernyataan ini tidak benar, maka saya siap menerima sanksi dari Universitas Muhammadiyah Yogyakarta sesuai dengan peraturan yang berlaku.
Yogyakarta, 26 Desember 2016
(4)
iv
Alhamdulillah, puji syukur penulis panjatkan kehadirat Allah SWT, yang telah memberikan kebaikannya, sehingga atas kehendak-Nya penulis dapat menyelesaikan laporan Tugas Akhir ini dengan judul “Rancang Bangun Aplikasi Perhitungan Luas Daun Berbasis Android”.
Laporan Skripsi ini dimaksudkan untuk memenuhi persyaratan mendapatkan gelar Sarjana Teknik Program Strata 1 (S1) yang telah ditetapkan oleh Jurusan Teknik Elektro Universitas Muhammadiyah Yogyakarta.
Penulis menyadari terselesaikannya laporan ini tidak terlepas dari dukungan, bantuan, dan bimbingan, saran-saran yang berharga dari semua pihak, oleh karena itu dengan tulus hati penulis ingin mengucapkan terima kasih kepada : 1. Bapak dan Ibu saya, Mucharom S. dan Almh. Noor Endrartie N. yang senantiasa memberikan penulis nasehat, motivasi dan petuah teramat besar untuk hidup ini.
2. Kedua saudara tersayang, Fadhila Sanaz A. dan Fayeza Shasliz A. yang selalu memberikan semangat dan motivasi kepada penulis.
3. Pak Ir. Tony K. Hariadi, M. T. dan Bu Anna Nur Nazilah Chamim, S.T., M.Eng selaku Dosen Pembimbing yang telah berkenan meluangkan banyak waktu dan pikiran dalam penyelesaian tugas akhir ini.
(5)
v
5. Teman – teman PAGARDEPAN 53RDADU.
6. Semua Dosen Jurusan Teknik Elektro Universitas Muhammadiyah Yogyakarta.
7. Teman - teman Angkatan 2011 dan 2012 Teknik Elektro UMY, Keluarga Besar Teknik Elektro UMY, Laboran, Staff Lab Elektro dan Karyawan yang senantiasa memberikan dukungan selama penulis kuliah di Universitas Muhammadiyah Yogyakarta.
8. Semua pihak yang telah membantu baik secara langsung maupun tidak langsung dalam penulisan laporan ini.
Selanjutnya penulis sangat mengharapkan kritik dan saran untuk memperbaiki laporan ini yang masih jauh dari sempurna. Semoga laporan skripsi ini dapat bermanfaat.
Wassalamu’alaikum Wr. Wb.
Yogyakarta, 26 Desember 2016
(6)
vi
Program Studi : Teknik Elektro Fakultas : Teknik
Jenis karya : Skripsi
Judul karya : Rancang Bangun Aplikasi Perhitungan Luas Daun Berbasis Android
Menyatakan dengan benar dan tanpa paksaan bahwa:
1. Karya ini adalah asli hasil karya saya sendiri dengan arahan dan bimbingan dosen pembimbing dan merupakan sebagian hasil dari penelitian di
Universitas Muhammadiyah Yogyakarta dengan:
Judul : Sistem Aplikasi Mobile Untuk Penggunaan Praktis Pada Penghitungan
Luas Daun Sumber
dana
: LP3M UMY Tahun : 2015
Ketua Peneliti
: Ir. Tony K. Hariadi, M.T.
2. Karya ini tidak memuat hasil karya orang lain kecuali acuan atau kutipan yang telah disebutkan sumbernya.
3. Karya ini belum pernah diajukan untuk memperoleh gelar akademik (sarjana, magister dan/doktor) di Universitas Muhammadiyah Yogyakarta atau institusi lainnya.
4. Demi pengembangan ilmu pengetahuan, saya menyetujui memberikan hak kepada dosen pembimbing dan Universitas Muhammadiyah Yogyakarta untuk menyimpan, menggunakan dan mengelola karya ini dan perangkat lainnya (jika ada) serta mempublikasikannya dalam bentuk lain baik itu semua maupun sebagian dengan tetap mencantumkan nama saya.
Yogyakarta, 26 Desember 2016 Yang menyatakan,
(7)
vii
HALAMAN PERNYATAAN ... iii
KATA PENGANTAR ... iv
SURAT PERNYATAAN KEASLIAN DAN PERSETUJUAN PUBLIKASI ... vi
DAFTAR ISI ... vii
DAFTAR GAMBAR ... ix
DAFTAR TABEL ... xi
INTISARI ... xii
ABSTRACT ... xiii
BAB I PENDAHULUAN ... 1
1.1 Latar Belakang Masalah ... 2
1.2 Rumusan Masalah ... 2
1.3 Tujuan Penelitian ... 2
1.4 Batasan Masalah ... 2
1.5 Manfaat Penelitian ... 2
1.6 Sistematika Penulisan ... 2
BAB II TINJAUAN PUSTAKA DAN LANDASAN TEORI ... 4
2.1 Tinjauan Pustaka ... 4
2.2 Landasan Teori ... 6
2.2.1 Umum ... 6
2.2.2 Model Citra ... 7
2.2.3 Citra Digital ... 7
2.2.4 Piksel ... 9
2.2.5 Smartphone ... 11
2.2.5.1 Android ... 12
2.2.5.2 Device Android ... 13
2.2.5.3 Android Studio ... 13
2.2.6 Pustaka OpenCV ... 15
2.2.6.1 Segmentasi Citra ... 17
2.2.6.2 Thresholding ... 17
2.2.6.2.1 Dasar Thresholding ... 17
(8)
viii
3.2.1.1 Android Studio 1.5 ... 21
3.2.1.2 Pustaka OpenCV ... 25
3.2.1.3 Algoritma Program ... 29
3.2.1.3.1 Algoritma Pengambilan Citra ... 30
3.2.1.3.2 Algoritma Pemotongan Citra ... 30
3.2.1.3.3 Algoritma Pemilihan Citra ... 31
3.2.1.3.4 Algoritma Threshold Citra ... 31
3.2.1.3.5 Algoritma Penghitungan Luas Citra(Daun) ... 32
BAB IV HASIL AKHIR DAN ANALISIS ... 34
4.1 Prinsip Kerja Perangkat Lunak Leaf App ... 34
4.2 Analisis ... 34
4.2.1 Pengujian Tiap Fungsi ... 34
4.3 Pengukuran Luas Citra Terhadap Objek Citra... 53
4.4 Pengujian Aplikasi Terhadap Citra Daun ... 58
4.5 Prosedur Penempatan Objek Yang Akan Dihitung ... 59
4.6 Prosedur Penggunaan Aplikasi Perhitungan Luas Daun ... 59
BAB V KESIMPULAN DAN SARAN ... 60
5.1 Kesimpulan ... 60
5.2 Saran ... 60
DAFTAR PUSAKA ... 61 LAMPIRAN - LAMPIRAN
(9)
ix
Gambar 2.3 Citra Biner dan Representasinya Dalam Data Digital ... 8
Gambar 2.4 Representasi Citra Digital Dalam Berbagai Macam Ukuran Piksel ... 10
Gambar 2.5 Lokasi Dalam Setiap Piksel ... 10
Gambar 2.6 Struktur Proyek Android Studio ... 14
Gambar 2.7 Antarmuka Android Studio ... 15
Gambar 2.8 Histogram Derajat Keabuan yang dapat dibagi oleh (a) single threshold , dan (b) multi threshold ... 18
Gambar 2.9 Gambar Formula Threshold ... 18
Gambar 2.10 Gambar Formula Citra Setelah Threshold ... 18
Gambar 2.11 Hasil Segmentasi Menggunakan Adaptive Thresholding. (a) Gambar Asli. (b) Gambar Setelah Proses Adaptive Threshold... 19
Gambar 3.1 Diagram Alir Penelitian ... 20
Gambar 3.2 Jendela Start Menu ... 21
Gambar 3.3 Tampilan Android Studio ... 22
Gambar 3.4 Jendela Android Studio Untuk Memulai Project Baru... 22
Gambar 3.5 Jendela Untuk Memberi Nama Project yang Akan Dibuat ... 23
Gambar 3.6 Jendela Untuk Memilih API ... 23
Gambar 3.7 Jendela Untuk Memilih Activity yang Digunakan ... 24
Gambar 3.8 Jendela Untuk Mengakhiri Penyetelan Pada Project... 24
Gambar 3.9 Jendela Untuk Menulis Kode Sumber Program ... 25
Gambar 3.10 Jendela Android Studio untuk mengkonfigurasi OpenCV ... 25
Gambar 3.11 Jendela Android Studio Mencari Pustaka OpenCV... 26
Gambar 3.12 Jendela Android Studio Memilih Pustaka OpenCV ... 26
Gambar 3.13 Jendela Android Studio Setelah Memilih Pustaka OpenCV ... 27
Gambar 3.14 Jendela Untuk Mengakahiri Penyetelan Pada Module ... 27
Gambar 3.15 Jendela Untuk Mengintegrasi Pustaka OpenCV dan Android Studio ... 28
Gambar 3.16 Jendela Untuk Mengkonfigurasi Pustaka OpenCV ... 28
Gambar 3.17 Jendela Untuk Mengakhiri Konfigurasi Pustaka OpenCV ... 29
Gambar 3.18 Flowchart Algoritma Singkat Program ... 29
Gambar 3.19 Flowchart Algoritma Pengambilan Citra ... 30
Gambar 3.20 Flowchart Algoritma Pemotongan Citra ... 31
Gambar 3.21 Flowchart Algoritma Pemilihan Citra ... 31
Gambar 3.22 Flowchart Algoritma Threshold Citra ... 32
Gambar 3.23 Flowchart Algoritma Penghitungan Luas Daun ... 32
Gambar 4.1 Blok Pengujian Mendapatkan Citra Gambar ... 35
Gambar 4.2 Pengambilan Citra dan Pemotongan Citra ... 48
Gambar 4.3 Blok Pengujian Gambar Threshold dan Luas Citra ... 49
Gambar 4.4 Penggunaan Threshold Pada Citra ... 53
(10)
x
Gambar 4.11 Hasil Threshold pada Luas A4 ... 56
(11)
xi
Tabel 4.3 Pengukuran Citra Bintang ... 54
Tabel 4.4 Pengukuran Citra Lingkaran ... 55
Tabel 4.5 Pengukuran Citra Waru ... 55
Tabel 4.6 Pengukuran Citra Segitiga ... 56
(12)
ii
BERBASIS ANDROID
Disusun oleh:
FADHOLI ZULFAN AHMAD 20110120005
Telah Dipertahankan Didepan Tim Penguji Pada Tanggal 14 Desember 2016 Susunan Tim Penguji
Tugas Akhir ini telah dinyatakan sah sebagai salah satu Persyaratan Untuk Memperoleh Gelar Sarjana Teknik
Penguji,
Rama Okta Wiyagi, S.T.,M.Eng NIK. 19861017201504 123 070
Dosen Pembimbing II
Anna Nur Nazilah Chamim, S.T.,M.Eng. NIK. 197608062005012001
Dosen Pembimbing I
Ir. Tony K. Hariadi, M.T. NIK. 196803271999 123 039
Yogyakarta, 26 Desember 2016 Mengesahkan
Ketua Program Studi Teknik Elektro
Ir. Agus Jamal, M.Eng. NIK. 19660829199502123020
(13)
xii
Daun juga memiliki fungsi sebagai pembuat makanan yang utama. Luas daun adalah parameter yang sangat penting dalam ilmu nutrisi tanaman, pengukuran proteksi tanaman, hubungan antara air dan tanah dalam tanaman, ekosistem hasil panen, kesuburan tanaman, dll.
Penggunaan alat pengukuran luas daun yang ada saat ini memiliki kekurangan dari segi portabilitas dan praktibilitas. Dengan semakin berkembangnya teknologi
smartphone, maka salah satu solusi yang bisa digunakan untuk mengatasi hal tersebut
adalah dengan merancang perangkat lunak (software) untuk mengukur luas daun
dengan memanfaatkan kamera smartphone yang berbasiskan Android.
Dalam penelitian ini telah berhasil dibuat aplikasi perhitungan luas daun yang memanfaatkan kamera smartphone dengan menggunakan pustaka OpenCV. Aplikasi
yang diberikan pada penelitian ini menampilkan operasi Adaptive Threshold seperti
perubahan warna pada citra daun.
(14)
xiii
function as a major food maker. Leaf area is a very important parameter in the science of plant nutrition, plant protection measurement, the relationship between water and land in crops, crop ecosystem, the fertility of crops, etc.
The use of leaf area measurement tools available today have shortcomings in terms of portability and practicability. With the development of smartphone technology, then one solution that can be used to overcome this is by designing software to measure leaf area by utilizing the camera-based Android smartphone.
In this research has been successfully made the leaf area calculation application that utilizes the smartphone's camera using OpenCV library. Applications are given in this study featuring Adaptive Threshold operations such as discoloration on the leaf image.
(15)
BAB I PENDAHULUAN
1.1Latar Belakang Masalah
Pertumbuhan adalah proses dalam kehidupan tanaman yang mengakibatkan perubahan ukuran tanaman semakin besar dan juga yang menentukan hasil tanaman. Pertambahan ukuran tubuh tanaman secara keseluruhan merupakan hasil dari pertambahan ukuran bagian-bagian (organ-organ) tanaman akibat dari pertambahan jaringan sel yang dihasilkan oleh pertambahan ukuran sel.
Daun adalah organ tumbuhan yang paling penting dalam proses fotosintesis dan hal tersebut akan mempengaruhi pertumbuhan hasil panen dan produktivitasnya. Daun juga memiliki fungsi sebagai pembuat makanan yang utama. Luas daun adalah parameter yang sangat penting dalam ilmu nutrisi tanaman, pengukuran proteksi tanaman, hubungan antara air dan tanah dalam tanaman, ekosistem hasil panen, kesuburan tanaman, dll.
Saat ini untuk mengukur luas daun digunakan alat elektronik yang dikenal dengan nama leaf area meter. Alat ini bekerja berdasarkan transmisi cahaya yang
dimonitor oleh suatu lensa. Secara teratur, alat ini perlu dikalibrasi dengan mengukur suatu luas lempengan yang telah diketahui.
Alat tersebut mempunyai kekurangan dari segi praktibilitas dan portabilitas untuk mengukur luas daun. Pengukuran luas daun menggunakan leaf area meter yang hanya dilakukan di laboratorium atau jika tidak tersedianya alat
ini, maka diperlukan suatu solusi untuk mengatasi hal tersebut.
Dengan semakin berkembangnya teknologi smart phone, maka salah satu solusi yang bisa digunakan untuk mengatasi hal tersebut adalah dengan merancang perangkat lunak (software) untuk mengukur luas daun dengan
(16)
1.2Rumusan Masalah
Berdasarkan latar belakang yang dikemukakan di atas, rumusan masalahnya adalah meningkatkan portabilitas dan praktibilitas aplikasi pengukuran luas daun yang berbasis smartphone.
1.3Tujuan Penelitian
Tujuan dari penelitian ini adalah merancang perangkat lunak (software)
untuk menghitung luas daun dengan menggunakan smartphone dengan
memanfaatkan kamera yang terintegrasi. 1.4Batasan Masalah
Luas daun merupakan luas suatu bidang yang memiliki bentuk tak tentu. Salah satu metode yang bisa diterapkan untuk mencari luasan bidang tak tentu tersebut adalah dengan menggunakan metode Adaptive Threshold yang
memanfaatkan Pustaka OpenCV yang diintegrasikan dengan kamera smartphone.
Dalam penelitian ini, waktu yang digunakan untuk pengambilan luas citra daun dilakukan pada kondisi intensitas cahaya matahari yang mencukupi.
1.5Manfaat Penelitian
Aplikasi pengukuran luas daun berbasis smartphone ini diharapkan dapat
digunakan sebagai alternatif untuk pengukuran daun sehingga memudahkan pengguna dalam mengukur luas daun di dalam ruangan maupun di lapangan. 1.6Sistematika Penulisan
Sistematika penulisan skripsi ini adalah sebagai berikut: 1. BAB I PENDAHULUAN
Bab ini berisi latar belakang masalah, rumusan masalah, tujuan penelitian, batasan masalah, manfaat penelitian, dan sistematika penulisan.
2. BAB II TINJAUAN PUSTAKA DAN LANDASAN TEORI
Bab ini menjelaskan mengenai teori – teori penunjang yang digunakan dalam mengerjakan skripsi ini.
3. BAB III METODE PENELITIAN
Bab ini berisi tentang uraian mengenai alat dan bahan yang digunakan, langkah – langkah penelitian, perancangan sistem dan pembuatan alat.
(17)
4. BAB IV HASIL AKHIR DAN ANALISIS
Bab ini berisi data – data pengamatan pengujian pada bagian – bagian tertentu dari keseluruhan program, serta pembahasan atau analisis data hasil pengujian dengan melakukan perbandingan terhadap teori yang mendukung.
5. BAB V KESIMPULAN DAN SARAN
Bab ini berisi kesimpulan, saran dan rekomendasi untuk penelitian selanjutnya.
(18)
BAB II
TINJAUAN PUSTAKA DAN LANDASAN TEORI
2.1. Tinjauan Pustaka
Berikut beberapa penelitian atau karya yang berkaitan dengan pengolahan citra untuk pengukuran luas daun dan pengolahan citra berbasis Android :
Mahdi M. Ali, Ahmed Al – Ani, Derek Eamus dan Daniel K.Y. Tan (2012) dalam penelitiannya A New Image-Processing-Based Technique for Measuring Leaf Dimension memaparkan bahwa untuk mencari teknik baru dalam pengukuran
luas daun dengan memanfaatkan pengolahan citra. Metode yang digunakan adalah dengan menggunakan metode konvensional yaitu metode Non – Digital dan metode Digital sebagai pendekatannya sedangkan untuk metode yang digunakan adalah sebuah software yang diintegrasikan dengan alat digital yang ada. Hasilnya
menunjukkan perbedaan atau error yang kecil pada pengukuran luas daun.
Sapan Thakker dan Prof. Harsh Kapadia (2015) dalam penelitiannya Image Processing on Embedded Platfrom Android memaparkan bahwa pendekatan
inovatif terhadap desain, perkembangan, dan implementasi dari pengolahan citra berbasis aplikasi embedded vision platform. Dengan menggunakan library
OpenCV, pengolahan citra berbasis algoritma dapat diaplikasikan pada perangkat
android. Dengan menggunakan OpenCV dan android yang berbasis sistem embedded vision dapat dikembangkan yang mana dapat menggantikan sistem
berbasis machine vision. Android berbasis sistem embedded vision mengurangi
ukuran dari sistem dan juga solusi biaya efektif untuk industri. Aplikasi android
yang diberikan pada penelitian ini menampilkan operasi dasar seperti perubahan warna, deteksi tepi, operasi morfologi, dll.
Piyush Chaudhary, Sharda Godara, A.N. Cheeran, dan Anand K. Chaudhari (2012) dalam penelitiannya Fast and Accurate Method for Leaf Area Measurement memaparkan bahwa implementasikan pengolahan citra secara
sederhana, cepat, dan algoritma yang akurat untuk menghitung luas daun. Citra diambil menggunakan kamera digital dan disimpan dalam format JPEG. Citra RGB diubah warnanya ke dalam ruang warna CIELAB. Citra yang telah diubah
(19)
warnanya disegmentasi menggunakan teknik threshold. Threshold dihitung
menggunakan metode OTSU. Lubang di dalam area daun diisi menggunakan
region filling technique. Jumlah piksel di dalam objek kotak dan area daun
dihitung dan luas daun diukur dengan menggunakan statistik jumlah pikselnya. Keakuratan dari algoritmanya diatas 99% yang mana dibuktikan dengan menbandingkan hasil dari algoritma yang digunakan dengan metode hitungan
grid.
Parmar D. K., Ghodasara Y.R., Patel K. P., Patel K. V., dan Kathiriya D. R. (2015) dalam penelitiannya Estimation of Plant Leaf Area using Java Image Processing Techniques memaparkan bahwa luas daun merepresentasikan jumlah
dari material daun dalam ekosistem dan mengendalikan hubungan antara biosfer dan atmosfer melalui berbagai macam proses seperti fotosintesis, respirasi, transpirasi dan penangkapan air hujan. Hal tersebut juga membantu parameter dalam mengevaluasi kerusakan yang disebabkan penyakit daun, kekurangan mikronutrisi, air dan tekanan lingkungan, kebutuhan fertilisasi untuk pengelolaan yang efektif dan pemeliharaan. Produksi ketelitian pertanian mengadopsi metode kecepatan dan keakuratan untuk menghitung luas daun tanaman. Pada saat ini, penghitungan grid dan Leaf Area Meter (Li3100) digunakan sebagai metode
konvensional untuk estimasi luas daun. Metode ini sederhana dalam prinsip dan sangat akurat tetapi cenderung menghabiskan waktu. Permasalahan di atas dapat diatasi dengan Leaf Area Meter yang rancang; Aplikasi Pengolahan Citra Berbasis Java. Aplikasi tersebut memiliki banyak keuntungan seperti User Friendly, cepat,
akurat dan reusable. Jurnal ini mendiskusikan perbedaan metode estimasi luas
daun yang menggunakan Mesin Li 3100, Metode Manual Grafir dan Metode berbasis Software. Hasil menunjukkan bahwa software luas daun memberikan hasil 99.96% sampai 95.31% keakurasiannya untuk daun yang berbeda kecuali Jasud. Diantara format dua citra, .jpg menunjukkan komparasi yang lebih sedikit eror dibanding format .png.
Wang Jingwen dan Liu Hong (2012) dalam penelitiannya Measurement and Analysis of Plant Leaf Area Based on Image Processing memaparkan bahwa
(20)
dari luas daun tanaman berbasis dari Snake Model diadaptasi dalam studi ini.
Dalam jurnal ini, kita mengambil kontur daun dengan peningkatan Snake Model,
membuat tabel kode berantai 8 arah, menghitung luas daun dengan piksel di kontur daun dan menvisualkan hasilnya secara statistik dengan histogram area. Metode ini membuktikan lebih akurat dari metode pada umumnya, yang mana memiliki potensi yang baik untuk aplikasi praktis.
Hsien Ming Easlon dan Arnold J. Bloom (2014) dalam penelitiannya Easy Leaf Area : Automated Digital Image Analysis for Rapid and Accurate Measurement of Leaf Area memaparkan bahwa pengukuran luas daun dari foto
digital membutuhkan masukan dari pengguna secara signifikan kecuali latar dari gambar di hilangkan. Easy Leaf Area dikembangkan untuk sejumlah proses dari
Arabidopsis dalam hitungan menit, menghilangkan latar dari gambar daun dan
menyimpan hasilnya ke dalam sebuah file CSV. Easy Leaf Area menggunakan
rasio warna dari setiap piksel untuk membedakan daun dan area kalibrasi dari latar gambar dan membandingkan jumlah piksel daun dengan kalibrasi warna merah untuk mengeliminasi kebutuhan jarak kamera dari latarnya atau skala manual dengan penggaris yang mana software lainnya membutuhkannya. Leaf
Area menaksir dengan software ini gambar yang di ambil menggunakan ponsel kamera lebih akurat dari pada ImageJ yang menggunkan flatbed scanner. Easy Leaf Area menyediakan easy-to-use metode untuk pengukuran cepat dari luas
daun dan penaksiran non destruktif dari daerah canopy dari gambar digital.
2.2 Landasan Teori 2.2.1 Umum
Pengolahan citra (image processing) merupakan proses mengolah
piksel-piksel yang terdapat didalam citra digital( Ir. Balza Achmad, M.Sc.E dan Kartika Firdausy, S.T.,M.T, 2005). Dengan adanya informasi yang bisa diperoleh dari suatu citra digital dan telah dikembangkannya beberapa metode numerik yang diformulasikan untuk perhitungan integral, maka hal tersebut dapat digunakan untuk tujuan tertentu. Dapat digambarkan pada blok diagram berikut ini:
(21)
Gambar 2.1 Pemrosesan citra digital
2.2.2 Model Citra
Citra ada dua macam, yaitu citra kontinyu dan citra diskrit. Citra kontinyu dihasilkan dari sistem optik yang menerima sinyal analog, misalnya mata manusia, dan kamera analog. Citra diskrit dihasilkan melalui proses digitalisasi terhadap citra kontinyu. Beberapa sistem optik dilengkapi dengan fungsi digitalisasi sehingga ia mampu menghasilkan citra diskrit, misalnya kamera digital dan scanner. Citra diskrit disebut juga citra digital.
Citra agar dapat diolah dengan komputer, maka harus direpresentasikan secara numerik dengan nilai-nilai diskrit. Representasi citra dari fungsi kontinyu menjadi diskrit disebut digitalisasi. Citra yang dihasilkan inilah yang disebut citra digital (digital image). Pada umumnya citra digital berbentuk empat persegi
panjang, dan dimensi ukurannya dinyatakan sebagai lebar x tinggi ( Rinaldi
Munir, 2004).
Citra digital yang berukuran N x M lazim dinyatakan dengan matrik yang
berukuran N baris dan M kolom sebagai berikut:
Gambar 2.2 Matrik Citra Digital
2.2.3 Citra Digital 1. Pengertian Citra digital
Citra digital adalah gambar pada bidang dua dimensi, merupakan representasi keadaan visual yang disimpan secara elektronik dengan bit data
Image processing Metode numerik
Citra digital Informasi keluaran
1 , 1 ... 1 , 1 0 , 1 ... ... ... ... , 1 ... 1 , 1 0 , 1 , 0 ... 1 , 0 0 , 0 , M N f N f N f M f f f M f f f y x f(22)
yang merepresentasikan warna. Seringkali citra digital mengalami penurunan mutu (degradasi), misalnya mengandung cacat atau derau (noise) sehingga
sulit diinterpretasi karena informasi yang disampaikan oleh citra tersebut menjadi berkurang. Agar citra yang mengalami gangguan mudah diinterpretasi baik oleh manusia maupun mesin, maka citra digital perlu dimanipulasi menjadi citra digital lain yang kualitasnya lebih baik atau disebut pengolahan citra (image processing).
2. Format Citra digital
Format citra digital yang banyak dipakai adalah: 1. Citra Biner
Pada citra biner, setiap titik bernilai 0 atau 1, masing-masing merepresentasikan warna tertentu. Contoh yang paling lazim: warna hitam bernilai 0 dan warna putih bernilai 1. Setiap titik pada citra hanya membutuhkan 1 bit, sehingga seitap byte dapat menampung informasi 8 titik. Gambar berikut
menunjukkan contoh representasi citra biner kedalam data digital.
Gambar 2.3 Citra biner dan representasinya dalam data digital
2. Citra skala keabuan (grayscale)
Citra skala keabuan memberi kemungkinan warna yang lebih banyak daripada citra biner, karena ada nilai-nilai lain diantara nilai minimum (biasanya = 0) dan nilai maksimumnya. Banyaknya kemungkinan nilai dan nilai maksimumnya bergantung pada jumlah bit yang digunakan. Contohnya untuk skala keabuan 4 bit, maka jumlah kemungkinan nilainya adalah 24 = 16, dan nilai maksimumnya adalah 24-1 = 15; sedangkan untuk skala keabuan 8 bit, maka jumlah kemungkinan nilainya adalah 28 = 256, dan nilai maksimumnya adalah 28 -1 = 255.
= 01101110 = 01101101 = 10011110 = 10011101
(23)
Format citra ini disebut skala keabuan karena pada umumnya warna yang dipakai adalah antara hitam sebagai warna minimal dan warna putih sebagai warna maksimalnya, sehingga warna antaranya adalah abu-abu. Namun pada prakteknya warna yang dipakai tidak terbatas pada warna abu-abu; sebagai contoh dipilih warna minimalnya adalah putih dan warna maksimalnya adalah merah, maka semakin besar nilainya semakin besar pula intensitasnya warna merahnya. Format citra ini sering juga disebut citra intensitas.
3. Citra warna (true color)
Pada citra warna, setiap titik mempunyai warna yang spesifik yang merupakan kombinasi dari 3 warna dasar, yaitu: merah, hijau, dan biru. Format citra ini sering disebut sebagai citra RGB (red-green-blue). Setiap warna dasar
mempunyai intensitas sendiri dengan nilai maksimum 255 (8 bit). Jumlah kombinasi warna yang mungkin untuk format citra ini adalah 224 atau lebih dari 16 juta warna, dengan demikian bisa dianggap mencakup semua warna yang ada, inilah sebabnya format ini dinamakan true color.
4. Citra warna berindeks
Pada format ini, informasi setiap titik merupakan indeks dari suatu tabel yang berisi informasi warna yang tersedia, yang disebut palet warna (color map).
Jumah bit yang dibutuhkan oleh setiap titik pada citra bergantung pada jumlah warna yang tersedia dalam palet warna. Sebagai contoh, untuk palet berukuran 16 warna, setiap titik membutuhkan 4 bit; dan untuk palet berukuran 256 warna, setiap titik membutuhkan 8 bit atau 1 byte. Palet warna merupakan bagian dari
cira warna berindeks, sehingga pada saat menyimpan citra ini kedalam file,
informasi palet warna juga harus disertakan ( Ir. Balza Achmad, M.Sc.E dan Kartika Firdausy, S.t.,MT, 2005).
2.2.4 Piksel
Piksel adalah unsur citra atau representasi sebuah titik terkecil dalam sebuah citra digital yang dihitung perinci. Piksel berasal dari akronim bahasa inggris yaitu Picture Element yang disingkat menjadi Pixel.
(24)
Dimensi dari setiap piksel dapat ditentukan ukurannya sesuai dengan kebutuhan. Ukuran piksel menentukan bagaimana kasar atau halusnya citra yang akan di representasikan. Semakin banyak piksel yang digunakan, maka akan semakin halus atau lebih detail citra yang ditampilkan dan akan berpengaruh terhadap penyimpanan dan kecepatan proses. Apabila semakin sedikit piksel yang digunakan, maka akan tejadi kehilangan informasi atau kehalusan citra akan terlihat lebih kasar.
Gambar 2.4 Representasi citra digital dalam berbagai macam ukuran piksel
Lokasi dalam setiap piksel di definisikan dalam bentuk baris dan kolom dimana didalamnya terdapat informasi mengenai posisi piksel. Apabila piksel memuat sistem koordinat kartesian, maka setiap baris merupakan paralel dengan sumbu x (x-axis), dan kolom paralel dengan sumbu y (y-axis).
Gambar 2.5 Lokasi dalam Setiap Piksel
Luas suatu citra digital direpresentasikan dalam setiap piksel dengan lebar dan panjang yang sama. Sebagai contoh : 92 x 92 piksel, berarti 92 titik pada
(25)
bidang horizontal dan 92 titik pada bidang vertikal, atau sama dengan 8464 piksel persegi ( www.ilmukomputer.com).
DPI (dots per inch) menunjukkan banyaknya titik per inchi, merupakan
ukuran penskalaan resolusi citra yang digunakan sebagai patokan untuk kualitas pencetakan suatu citra digital dari scanner atau printer. Tiap dots dari scanner
akan menjadi piksel pada citra digital. Scanner adalah alat yang digunakan untuk
membuat citra digital dari sumber asli, sehingga diperlukan penskalaan resolusi citra sebagai patokan untuk kualitas pencetakan atau sering disebut dpi (dots per inch). Formula hubungannya adalah sebagai berikut:
Detail akurasi (dpi) = dimensi citra digital (piksel) ÷ dimensi asli (inch)
(http://fred.dsimprove.be).
Piksel tidak memiliki ukuran dalam sebuah komputer dan tidak juga memiliki ukuran digital. Komputer mengkonversi piksel kedalam angka, dan susunan angka ini dikenali sebagai citra digital. (http://202.46.4.53/ Suplemen Petunjuk Teknis Pencitraan Digital 20 JIKN-2007.pdf).
2.2.5 Smartphone
Ponsel pintar atau yang lebih populer dengan smartphone merupakan
sebuah ponsel yang memiliki OS (Operating System) yang terdiri dari atas
kombinasi dari fitur sebuah PC (Personal Computer) dan fitur yang terdapat pada
ponsel juga tentunya. Sebagian besar smartphone dapat digunakan untuk
mengakses internet, dengan layar sentuh, dan dilengkapi dengan kamera.
Mobile Operating System yang digunakan untuk smartphone terdiri dari
beberapa jenis, yaitu: 1. Android
2. iOS
3. Windows Phone 4. Blackberry 5. Firefox OS 6. Sailfish OS 7. Ubuntu Touch
(26)
2.2.5.1Android
Android adalah sebuah operating sistem yang digunakan untuk menjalankan sebuah smartphone. Android pada awalnya dikembangkan oleh
Android Inc., yang kemudian dibeli oleh google pada tahun 2005 setelah
diberikan dukungan secara finansial oleh google. Sistem operasi Android tersebut
resmi dirilis pada tahun 2007, bersamaan dengan didirikannya sebuah perusahaan Open Handset Alliance, konsorsium dari beberapa perusahaan – perusahaan perangkat keras, perangkat lunak, serta telekomunikasi yang memiliki tujuan untuk memajukan standar terbuka dari perangkat seluler.
Android adalah sistem operasi yang bersifat open source, yang berarti,
bahwa perangkat lunaknya dapat dimodifikasi dan dikembangkan secara bebas. Saat ini sudah ada banyak sekali komunitas pengembang aplikasi (apps) yang memperluas fungsionalitas perangkat, umumnya ditulis dalam versi kustomisasi bahasa pemrograman Java. Pada bulan Oktober 2013, ada lebih dari satu juta
aplikasi yang tersedia untuk Android, dan sekitar 50 miliar aplikasi telah diunduh dari Google Play, toko aplikasi Android.
Sejak tahun 2008, Android mulai secara bertahap melakukan sejumlah pembaruan atau update untuk meningkatkan kinerja dari sistem operasi tersebut dengan menambahkan fitur baru, memperbaiki bug pada versi android yang
sebelumnya. Setiap vesi yang dirilis dinamakan secara alfabetis dengan berdasarkan nama sebuah makanan pencuci mulut, seperti cupcake, donut, dan sebagainya. Berikut nama – nama versi android:
a. Android (1.0) b. Cupcake (1.2 – 1.5) c. Donut (1.6)
d. Èclair (2.0 – 2.1) e. Froyo (2.2 – 2.2.3) f. Gingerbread (2.3 – 2.3.7) g. Honeycomb (3.0 – 3.2.6)
h. Ice Cream Sandwich (4.0 – 4.0.4) i. Jelly Bean (4.1 – 4.3)
(27)
j. Kit Kat (4.4+) k. Lollipop (5.0) l. Marshmallow (6.0) 2.2.5.2Device Android
Device android yang digunakan untuk penelitian skripsi adalah ponsel pintar dengan merk Sony dengan tipe ST27i dan menggunakan OS android dengan
versi JellyBean.
2.2.5.3Android Studio
Android Studio adalah lingkungan pengembangan terpadu – Integrated Development Environment (IDE) untuk pengembangan aplikasi Android,
berdasarkan IntelliJ IDEA. Selain merupakan editor kode IntelliJ dan alat
pengembang yang berdaya guna, Android Studio menawarkan fitur lebih banyak
untuk meningkatkan produktivitas saat membuat aplikasi Android., misalnya :
1. Sistem pembuatan berbasis Gradle yang fleksibel
2. Emulator yang cepat dan kaya fitur
3. Lingkungan yang menyatu untuk pengembangan bagi semua perangkat
Android
4. Instan Run untuk mendorong perubahan ke aplikasi yang berjalan tanpa
membuat APK baru
5. Template kode dan integrasi Github untuk membuat fitur aplikasi yang
sama dan mengimpor kode contoh.
6. Alat penguji dan kerangka kerja yang ekstensif 7. Dukungan C++ dan NDK
(28)
Struktur Proyek
Gambar 2.6 Struktur Proyek Android Studio
Setiap proyek di Android Studio berisi satu atau beberapa modul dengan file kode
sumber dan file sumber daya. Jenis – jenis modul mencakup :
Modul Aplikasi Android Modul Perpustakaan
Modul Google App Engine
Secara default, Android Studio menampilkan file proyek dalam tampilan proyek Android seperti yang ditunjukkan dalam gambar 1. Tampilan ini diatur menurut
modul untuk memberi akses cepat ke file sumber kunci proyek.
Semua file versi terlihat di bagian atas di bawah Gradle Scripts dan
masing - masing modul aplikasi berisi folder berikut :
Manifest : berisi file AndroidManifest.xml.
Java : berisi file kode sumber Java, termasuk kode pengujian Junit. Res : berisi semua sumber daya bukan kode, seperti tata letak XML, string UI, dan gambar bitmap.
(29)
Antarmuka Pengguna
Gambar 2.7 Antarmuka Android Studio
1. Bilah alat : Untuk melakukan berbagai jenis tindakan, termasuk menjalankan aplikasi dan meluncurkan alat Android.
2. Bilah Navigasi : Untuk menavigasi di antara proyek dan file yang dibuka untuk pengeditan. Di sini tampilan struktur yang terlihat tampak lebih ringkas dari pada jendela Project.
3. Jendela editor : Untuk membuat dan mengubah kode. Bergantung pada jenis file saat ini, editor dapat berubah. Misalnya, ketika melihat file tata letak, editor akan menampilkan Layout Editor.
4. Jendela alat : Untuk memberi akses ke tugas – tugas spesifik pengelolaan proyek, penelusuran, kontrol versi, dan banyak lagi.
5. Bilah status : menampilkan status proyek dan IDE itu sendiri, serta setiap
peringatan pesan.
2.2.6 Pustaka OpenCV
OpenCV adalah singkatan dari Open Source Computer Vision Library
(30)
dinamis secara real time yang dibuat oleh Intel dan saat ini didukung oleh Willow
Garage and Itseez. Program ini bebas dan berada dalam naungan sumber terbuka dari lisensi BSD. Pustaka ini merupakan pustaka lintas platform. Program ini didedikasikan sebagian besar untuk pengolah citra secara real time. OpenCV
pertama kali diluncurkan secara resmi pada tahun 1999 oleh Inter Research sebagai lanjutan dari bagian proyek bertajuk aplikasi intensif berbasis CPU, real tim ray tracking, dan tembok penampil 3D. Para kontributor utama dalam proyek
ini termasuk mereka yang berkecimpung dalam bidang optimasi di Intel Rusia dan juga tim pustaka performasi intel. Pada awalnya tujuan utama dari proyek OpenCV ini dideskripsikan sebagai berikut :
a. Penelitian penginderaan citra lanjutan tidak hanya melalui kode program terbuka, tetapi juga kode yang telah teroptimasi untuk infrastruktur penginderaan citra
b. Menyebarluaskan ilmu penginderaan citra dengan menyediakan infrastruktur bersama di mana para pengembang dapat menggunakan secara bersama – sama sehingga kode akan tampak lebih mudah dibaca dan ditransfer
c. Membuat aplikasi komersial berbasiskan penginderaan citra, di mana kode yang telah teroptimasi tersedia secara bebas dengan lisensi yang tersedia secara bebas yang tidak mensyaratkan program harus terbuka atau gratis.
OpenCV dioptimasikan dengan 2.500 lebih pustaka algoritma OpenCV menyediakan fitur Integrated Performance Primitive (IPP) Intel sehingga bisa
lebih mengoptimalisasikan aplikasi vision jika menggunakan processor Intel.
OpenCV terdiri dari lima pustaka yaitu :
CV : pustaka untuk algoritma pengolahan citra dan penglihatan
ML : pustaka untuk pembelajaran mesin
Highgui : pustaka untuk GUI, gambar, video input/output
CXCORE : pustaka untuk struktur data, mendukung XML, dan fungsi – fungsi grafis
(31)
2.2.6.1Segmentasi Citra
Segmentasi dikaitkan dengan pemilah – pemilah atau pengelompokkan suatu objek di dalam citra ke dalam segmen - segmen (area atau region) di mana
masing – masing segmen mempunyai sifat – sifat yang berbeda dengan segmen yang menjadi tetangganya. Ini merupakan bagian dasar di dalam analisis scene –
di dalam menjawab pertanyaan – pertanyaan seperti di mana dan sebagaimana besarkah objek tersebut, di manakah latar belakangnya, berapa banyakkah objek yang berada di dalamnya, berapa banyakkah permukaan yang meliputinya, dan lain – lain. Segmentasi merupakan kebutuhan yang sangat mendasar untuk pengidentifikasian dan pengklasifikasian objek di dalam scene, dan memfokuskan
tugasnya pada algoritma – algoritma subsekuensial pada bentuk, tekstur, atau warna dari suatu area yang homogen.
2.2.6.2Thresholding
2.2.6.2.1 Dasar Thresholding
Dimisalkan bahwa histogram derajat keabuan yang ditampilkan pada
gambar 2.8 sesuai dengan gambar, f(x,y), yang terdiri dari benda yang terpapar
cahaya pada latar yang gelap, yang sedemikian rupa pada piksel objek dan latarnya memiliki pengelompokkan tingkat keabuan pada dua model yang dominan. Satu cara yang pasti untuk mengekstrak objek dari latarnya adalah dengan memilih threshold T yang mana memisahkan dua model tersebut. Yang
kemudian titik (x,y) untuk setiap f(x,y) > T disebut sebagai titik objek.
Gambar 2.8(b) menunjukkan contoh yang sedikit lebih umum, dimana tiga model dominan mencirikan histogram gambar(untuk contoh, dua tipe dari objek cahaya
(32)
(a) (b)
Gambar 2.8 Histogram derajat keabuan yang dapat dibagi oleh (a) single threshold, dan (b) multiple threshold.
Dalam hal ini, multilevel thresholding mengklasifikasikan sebuah titik(x,y)
sebagai milik salah satu objek jika T< (x,y) < T, ke objek yang lain jika f(x,y) > T,
dan ke latar jika f(x,y) < T. Thresholding dapat ditampilkan sebagai operasi yang
melibatkan fungsi T pada formula :
Gambar 2.9 Gambar Formula Threshold
Dimana f(x,y) adalah tingkat keabuan dari titik (x,y) dan p(x,y)
menandakan beberapa ciri pada titik ini, sebagai contoh, tingkat rata – rata keabuan dari neighborhood terpusat pada (x,y). Citra yang sudah di threshold
g(x,y) didefiniskan sebagai
Gambar 2.10 Gambar Formula Citra Setelah Threshold
Sehinggapiksel berlabel 1sesuai dengan objek dimana piksel berlabel 0 sesuai dengan latarnya. Ketika T bergantung pada koordinat spasial x dan y, thresholdnya disebut dengan dinamis atau adaptive.
(33)
2.2.6.2.2 Adaptive Thresholding
Untuk membagi gambar asli ke dalam subimage dan kemudian memanfaatkan ambang batas yang berbeda untuk segmen masing-masing
subimage. Isu-isu kunci dalam pendekatan ini adalah bagaimana membagi gambar
dan bagaimana memperkirakan ambang batas untuk setiap subimage dihasilkan. Sejak ambang digunakan untuk setiap pixel tergantung pada lokasi piksel dalam hal subimage, jenis thresholdingnya adalah adapative thresholding. Dalam hal ini
penggambarkan thresholding adaptif dengan menggunakan contoh sederhana.
Sebuah contoh yang lebih komprehensif diberikan pada bagian berikutnya.
Semua subimage yang tidak mengandung batas antara objek dan latar
belakang memiliki variasi yang kurang dari 75. Semua subimage berisi
batas-batas yang memiliki variasi lebih dari 100. Setiap subimage dengan variasi lebih
besar dari 100 yang tersegmentasi dengan ambang batas dihitung untuk setiap subimage menggunakan algoritma pada dasar thresholding. Awal nilai T dalam
setiap kasus terpilih sebagai titik tengah antara minimum dan tingkat keabua - abuan maksimum dalam subimage tersebut. Semua subimage dengan variasi
kurang dari 100 diperlakukan sebagai satu gambar komposit, yang tersegmentasi menggunakan threshold tunggal. Hasil segmentasi menggunakan prosedur ini
ditunjukkan pada gambar 2.11.
(a) (b)
Gambar 2.11 Hasil Segmentasi Menggunakan Adaptive Thresholding. (a)
(34)
BAB III
METODE PENELITIAN 3.1Diagram Alir Penelitian
Diagram blok penelitian yang akan dilakukan dapat digambarkan pada gambar berikut:
Gambar 3.1 Diagram Alir Penelitian 3.1.1 Penjelasan Diagram Alir
1. Studi Pustaka
Tahap ini merupakan proses pengumpulan informasi dan data – data yang diambil dari jurnal, paper,makalah, maupun beberapa sumber yang berasal dari situs – situs di internet mengenai teori – teori tentang Pengukuran Luas Daun dan Aplikasi Android yang diterapkan dan Alat bantu berupa algoritma serta bahasa
pemrograman yang akan digunakan. 2. Perancangan Perangkat Lunak
Setelah dilakukan proses studi pustaka maka proses selanjutnya adalah menganalisis informasi untuk perancangan perangkat lunak yakni penentuan teori, algoritma, dan bahasa pemrograman yang akan digunakan.
Studi Pustaka
Perancangan Perangkat Lunak
Pembuatan Sistem Mulai
Selesai
Uji Gagal?
(35)
3. Pembuatan Sistem
Pada tahap ini akan dilakukan pembuatan perangkat lunak yang berbasis
Android.
4. Uji(Pengujian Tiap Fungsi)
Tahap ini akan melakukan pengujian dasar terhadap beberapa fungsi yang membentuk satu kesatuan ketika program dijalankan.
3.2Perancangan
Alat pengukur luas daun secara umum hanya terdiri dari dua perangkat, yakni lunak dan elektronik. Namun demikian sistem ini ditopang hanya 1 sistem, program. Sistem perangkat lunak(Software) dibuat dengan bahasa pemrograman
Java, XML, dan Pustaka OpenCV.
3.2.1 Proses Perancangan Perangkat Lunak
Program dibuat dengan satu program aplikasi yakni Android Studio yang terintegrasi dengan Pustaka OpenCV.
3.2.1.1Android Studio 1.5
Untuk merancang program dengan Android Studio dapat dilakukan dengan cara:
1. Pertama : Aplikasi Android Studio dapat dibuka di jendela Start seperti ditunjukkan pada gambar di bawah ini, arahkan pointer ke shortcut Android
Studio kemudian klik.
(36)
2. Kedua : akan muncul jendela aplikasi Android Studio, tunggu aplikasi beberapa saat.
Gambar 3.3 Tampilan Android Studio
3. Ketiga : Klik File -> New ->New Project seperti di tunjukkan pada gambar di
bawah.
(37)
4. Keempat : Klik pada nomor “1” kemudian edit sesuai dengan nama project yang dinginkan kemudian klik “Next”.
Gambar 3.5 Jendela Untuk Memberi Nama Project yang akan dibuat 5. Kelima : Klik pada scroll down dan pilih API yang akan digunakan dan
kemudian klik “Next”.
(38)
6. Keenam : Klik pada pilihan “Empty Activity” kemudian klik “Next”.
Gambar 3.7 Jendela untuk memilih Activity yang digunakan
7. Ketujuh : Klik pada tombol “Finish”.
(39)
8. Kedelapan : Setelah tombol “Finish” di klik akan muncul jendela seperti pada
gambar di bawah ini.
Gambar 3.9 Jendela Untuk Menulis Kode Sumber Program 3.2.1.2Pustaka OpenCV
Library OpenCV merupakan library terpisah sehingga harus dikonfigurasi terlebih dahulu agar dapat diakses oleh Android Studio, berikut cara untuk mengkonfigurasi OpenCV dengan Android Studio :
1. Pertama : Klik File -> New ->Import Module seperti di tunjukkan pada gambar
di bawah.
(40)
2. Kedua : Setelah di klik akan muncul jendela seperti dibawah ini. Kemudian klik seperti gambar di bawah ini.
Gambar 3.11 Jendela Android Studio Mencari Pustaka OpenCV
3. Ketiga : Setelah di klik akan muncul jendela seperti dibawah kemudian pilih Pustaka OpenCV dan klik OK.
(41)
4. Keempat : Setelah klik “OK” akan muncul jendela seperti gambar di bawah ini dan kemudian klik “Next”.
Gambar 3.13 Jendela Android Studio Setelah Memilih Pustaka OpenCV 5. Kelima : Klik pada tombol “Finish”.
(42)
6. Keenam : Klik File -> Project Structure seperti di tunjukkan pada gambar di
bawah.
Gambar 3.15 Jendela untuk mengintegrasi Pustaka OpenCV dan Android Studio 7. Ketujuh : Setelah di klik akan muncul jendela seperti dibawah ini. Pada nomor
“1” untuk memilih direktori aplikasi yang akan digunakan, nomor “2” pilih bagian ini untuk mengkonfigurasi, nomor “3” klik pada bagian ini untuk memasukkan Pustaka OpenCV untuk digunakan dalam aplikasi.
(43)
8. Kedelapan : Kemudian akan muncul jendela dibawah ini dan klik “OK”.
Gambar 3.17 Jendela Untuk Mengakhiri Konfigurasi Pustaka OpenCV 3.2.1.3Algoritma Program
Algoritma pengukuran luas daun yang diterapkan adalah algoritma
Adaptive Threshold. Untuk memudahkan dalam pembuatan alur program maka
penulis membuat flowchart sebagai perancangan awal untuk memudahkan dalam
proses penentuan alur program yang akan dibuat.
Gambar 3.18 Flowchart Algoritma Singkat Program
Mulai
Pengambilan Citra Pemotongan Citra
Pemilihan Citra
Penghitungan Luas Citra (Daun)
Selesai
(44)
Flowchart di atas adalah penjelasan algoritma singkat bagaimana program
ini berjalan. Dimana dimulai dengan pengambilan citra terlebih dahulu, pemotongan citra sesuai dengan luasan objek referensi, pemilihan citra yang telah di ambil, kemudian penghitungan luas citra(dalam hal ini citra daun).
Pada flowchart kedua hingga flowchart keenam adalah deskripsi algoritma
lengkap penghitungan luas daun berbasis Android. Proses pengambilan citra
merupakan tahap awal proses penghitungan luas daun, tahap sudah tereksekusi secara tuntas dari keseluruhan algortima adalah di tampilkannya hasil threshold
beserta nilai luas daun yang dihitung. 3.2.1.3.1 Algoritma Pengambilan Citra
Pada algoritma pengambilan citra yang dilakukan adalah pengambilan citra melalui kamera smartphone yang kemudian akan terdapat pilihan setelah
pengambilan citra dilakukan, yaitu delete atau edit. Untuk pilihan delete, akan
menghapus hasil pengambilan citra yang telah dilakukan dan untuk pilihan
edit,akan memodifikasi hasil pengambilan citra yang telah dilakukan.
Gambar 3.19 Flowchart Algoritma Pengambilan Citra
3.2.1.3.2 Algoritma Pemotongan Citra
Pada algoritma pemotongan citra yang dilakukan adalah pemotongan citra terhadap citra yang telah diambil. Pemotongan yang dilakukan adalah untuk
Pilihan Delete?
Ambil Citra
Edit? Mulai
(45)
menentukan luasan citra yang nantinya akan diproses pada tahap selanjutnya dan disimpan media penyimpanan smartphone.
Gambar 3.20 Flowchart Algoritma Pemotongan Citra
3.2.1.3.3 Algoritma Pemilihan Citra
Pada algoritma pemilihan citra yang dilakukan adalah mengakses gallery
pada smartphone untuk memilih citra yang telah disimpan pada media
penyimpanan smartphone yang kemudian akan dilanjutkan ke dalam proses
selanjutnya.
Gambar 3.21 Flowchart Algoritma Pemilihan Citra
3.2.1.3.4 Algoritma Threshold Citra
Pada algoritma threshold citra yang dilakukan adalah proses pengubahan
warna citra yang telah dipilih ke dalam warna hitam putih. Proses yang dilakukan Pemotongan Citra
Tentukan Area Pemotongan Citra
Simpan Citra Edit
Selesai
Threshold
Mulai Buka Gallery
(46)
adalah pengubahan citra yang memiliki format citra bitmap ke dalam data matrix.
Kemudian citra yang sudah diubah ke dalam data matrix dikonversi nilai
warnanya dari RGB ke Gray(Keabu-abuan). Dilanjutkan dengan proses penentuan
nilai ambangnya(Threshold).
Gambar 3.22 Flowchart Algoritma Threshold Citra
3.2.1.3.5 Algoritma Penghitungan Luas Citra(Daun)
Pada algoritma penghitungan luas citra yang dilakukan adalah
Gambar 3.23 Flowchart Algoritma Penghitungan Luas Daun
Mulai
Input a,r,n
Luas = (a/r) x n
Tampilkan Luas Daun
Selesai Mulai
Pilih Citra Daun
Citra Daun Dibuat Data Matrik
Konversi Gambar RGB ke Gray Dalam Bentuk Matrik
Threshold Gambar
(47)
Pada algoritma penghitungan luas citra yang dilakukan adalah proses penghitungan luas dengan memberikan input a,r,dan n sebagai variabel luas area A4, besar resolusi hasil penangkapan kamera smartphone, dan nilai piksel yang
didapat pada hasil threshold citra. Untuk menghitung luas citra, variabel yang
telah di masukkan kemudian diproses dalam perhitungan aritmatika yang telah ditentukan dalam algoritma. Dan hasil akhirnya akan menampilkan luas citra yang telah diproses.
(48)
BAB IV
HASIL AKHIR DAN ANALISIS
4.1 Prinsip Kerja Perangkat Lunak Leaf App
Aplikasi yang dibuat memiliki cara kerja dalam penggunaannya. Prosesnya adalah pertama pengambilan citra gambar dengan menggunakan kamera
smartphone kemudian setelah gambar diambil citranya, citra dipotong besarnya
sesuai dengan background yang berbentuk A4 sebagai luas referensinya. Langkah
berikutnya adalah pemilihan citra gambar untuk dihitung luasnya yang kemudian di threshold untuk mengubah citra yang ada ke dalam warna putih-hitam.
Langkah terakhir adalah penghitungan luas daun dengan menghitung piksel warna putih hasil threshold dengan faktor pengali pikselnya maka akan ditampilkan luas
citra daun yang ada. 4.2 Analisis
Analisis merupakan salah satu bagian hal yang penting yang harus dilakukan untuk mengetahui apakah alat yang telah direncanakan mampu beroperasi dengan hal yang telah direncanakan dan diharapkan. Hal itu dapat dilihat dari hasil – hasil yang telah dicapai selama pengujian alat. Selain untuk mengetahui apakah alat sudah bekerja dengan baik sesuai dengan yang diharapkan, pengujian juga bertujuan untuk mengetahui kelebihan dan kekurangan dari alat yang dibuat. Hasil – hasil pengujian tersebut nantinya akan dianalisa agar dapat diketahui mengapa terjadi kekurangan. Pengujian pertama dilakukan secara terpisah, dalam artian pengujian tiap fungsi. Kemudian dilakukan pengujian secara keseluruhan ketika semua fungsi sudah disatukan. Pengujian yang telah dilakukan pada bab ini antara lain :
4.2.1 Pengujian Tiap Fungsi
Fungsi Untuk Mendapatkan Citra Gambar Melalui Kamera
Pengujian ini adalah pengujian awal yang harus dilakukan untuk memastikan kamera dapat bekerja dan mengambil citra gambar.
Komponen yang terlibat :
(49)
Pustaka OpenCV 2.4.9
Kode Sumber Class“Application.java dan LabActivity.java”
Alur :
Gambar 4.1 Blok Pengujian Mendapatkan Citra Gambar
Kamera Smartphone yang dipakai memiliki resolusi terbesar 320 x 240 piksel.
Smartphone akan mendapatkan inputan dari kamera, diolah oleh software Leaf App, dan hasil ditampilkan ke LCD Smartphone.
Kode Sumber Program Class ini adalah: file source code Application.java:
package com.example.leafapp;
import java.io.File;
import java.util.List;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.provider.MediaStore.Images;
import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.content.Intent;
import android.hardware.Camera;
import android.hardware.Camera.CameraInfo;
import android.hardware.Camera.Parameters;
import android.hardware.Camera.Size;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
(50)
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame;
import
org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.JavaCameraView;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;
// Use the deprecated Camera class.
@SuppressWarnings("deprecation")
public final class Application extends ActionBarActivity
implements CvCameraViewListener2 {
// A tag for log output.
private static final String TAG =
MainActivity.class.getSimpleName();
// A key for storing the index of the active camera. private static final String STATE_CAMERA_INDEX =
"cameraIndex";
// A key for storing the index of the active image size. private static final String STATE_IMAGE_SIZE_INDEX = "imageSizeIndex";
// An ID for items in the image size submenu. private static final int MENU_GROUP_ID_SIZE = 2;
// The index of the active camera. private int mCameraIndex;
(51)
private int mImageSizeIndex;
// Whether the active camera is front-facing. // If so, the camera view should be mirrored. private boolean mIsCameraFrontFacing;
// The number of cameras on the device. private int mNumCameras;
// The image sizes supported by the active camera. private List<Size> mSupportedImageSizes;
// The camera view.
private CameraBridgeViewBase mCameraView;
// Whether the next camera frame should be saved as a photo. private boolean mIsPhotoPending;
// A matrix that is used when saving photos. private Mat mBgr;
// Whether an asynchronous menu action is in progress. // If so, menu interaction should be disabled.
private boolean mIsMenuLocked; // The OpenCV loader callback.
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(final int status) { switch (status) {
case LoaderCallbackInterface.SUCCESS: Log.d(TAG, "OpenCV loaded
successfully");
mCameraView.enableView();
//mCameraView.enableFpsMeter(); mBgr = new Mat();
(52)
default: super.onManagerConnected(status); break; } } };
// Suppress backward incompatibility errors because we provide // backward-compatible fallbacks.
@SuppressLint("NewApi") @Override
protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState);
final Window window = getWindow(); window.addFlags(
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
if (savedInstanceState != null) {
mCameraIndex = savedInstanceState.getInt( STATE_CAMERA_INDEX, 0);
mImageSizeIndex = savedInstanceState.getInt( STATE_IMAGE_SIZE_INDEX, 0);
} else {
mCameraIndex = 0; mImageSizeIndex = 0; }
final Camera camera;
if (Build.VERSION.SDK_INT >=
Build.VERSION_CODES.GINGERBREAD) { CameraInfo cameraInfo = new CameraInfo();
Camera.getCameraInfo(mCameraIndex, cameraInfo); mIsCameraFrontFacing =
(cameraInfo.facing ==
CameraInfo.CAMERA_FACING_FRONT); mNumCameras = Camera.getNumberOfCameras();
(53)
} else { // pre-Gingerbread
// Assume there is only 1 camera and it is rear-facing.
mIsCameraFrontFacing = false; mNumCameras = 1;
camera = Camera.open(); }
final Parameters parameters = camera.getParameters(); camera.release();
mSupportedImageSizes =
parameters.getSupportedPreviewSizes(); final Size size =
mSupportedImageSizes.get(mImageSizeIndex);
mCameraView = new JavaCameraView(this, mCameraIndex); mCameraView.setMaxFrameSize(size.width, size.height); mCameraView.setCvCameraViewListener(this);
setContentView(mCameraView); }
public void onSaveInstanceState(Bundle savedInstanceState) { // Save the current camera index.
savedInstanceState.putInt(STATE_CAMERA_INDEX,
mCameraIndex);
// Save the current image size index.
savedInstanceState.putInt(STATE_IMAGE_SIZE_INDEX, mImageSizeIndex);
super.onSaveInstanceState(savedInstanceState); }
// Suppress backward incompatibility errors because we provide // backward-compatible fallbacks.
@SuppressLint("NewApi") @Override
public void recreate() {
(54)
Build.VERSION_CODES.HONEYCOMB) { super.recreate();
} else { finish();
startActivity(getIntent()); }
}
@Override
public void onPause() {
if (mCameraView != null) { mCameraView.disableView(); }
super.onPause(); }
@Override
public void onResume() { super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback);
mIsMenuLocked = false; }
@Override
public void onDestroy() { if (mCameraView != null) { mCameraView.disableView(); }
super.onDestroy(); }
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.activity_camera, menu); int numSupportedImageSizes = mSupportedImageSizes.size(); if (numSupportedImageSizes > 1) {
(55)
menu.addSubMenu(R.string.menu_image_size);
for (int i = 0; i < numSupportedImageSizes; i++) { final Size size = mSupportedImageSizes.get(i); sizeSubMenu.add(MENU_GROUP_ID_SIZE, i, Menu.NONE, String.format("%dx%d", size.width,
size.height)); }
}
return true; }
// Suppress backward incompatibility errors because we provide // backward-compatible fallbacks (for recreate).
@SuppressLint("NewApi") @Override
public boolean onOptionsItemSelected(final MenuItem item) { if (mIsMenuLocked) {
return true; }
if (item.getGroupId() == MENU_GROUP_ID_SIZE) { mImageSizeIndex = item.getItemId();
recreate();
return true; }
switch (item.getItemId()) { case R.id.menu_take_photo: mIsMenuLocked = true;
// Next frame, take the photo. mIsPhotoPending = true;
return true; default:
return super.onOptionsItemSelected(item); }
(56)
@Override
public void onCameraViewStarted(final int width, final int height) { }
@Override
public void onCameraViewStopped() { }
@Override
public Mat onCameraFrame(final CvCameraViewFrame inputFrame) { final Mat rgba = inputFrame.rgba();
if (mIsPhotoPending) {
mIsPhotoPending = false; takePhoto(rgba);
}
if (mIsCameraFrontFacing) {
// Mirror (horizontally flip) the preview. Core.flip(rgba, rgba, 1);
}
return rgba; }
private void takePhoto(final Mat rgba) {
// Determine the path and metadata for the photo.
final long currentTimeMillis = System.currentTimeMillis(); final String appName = getString(R.string.app_name);
final String galleryPath =
Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES).toString();
final String albumPath = galleryPath + File.separator + appName;
(57)
currentTimeMillis + LabActivity.PHOTO_FILE_EXTENSION;
final ContentValues values = new ContentValues(); values.put(MediaStore.MediaColumns.DATA, photoPath); values.put(Images.Media.MIME_TYPE,
LabActivity.PHOTO_MIME_TYPE); values.put(Images.Media.TITLE, appName);
values.put(Images.Media.DESCRIPTION, appName);
values.put(Images.Media.DATE_TAKEN, currentTimeMillis); // Ensure that the album directory exists.
File album = new File(albumPath);
if (!album.isDirectory() && !album.mkdirs()) {
Log.e(TAG, "Failed to create album directory at " + albumPath);
onTakePhotoFailed(); return;
}
// Try to create the photo.
Imgproc.cvtColor(rgba, mBgr, Imgproc.COLOR_RGBA2BGR, 3); if (!Highgui.imwrite(photoPath, mBgr)) {
Log.e(TAG, "Failed to save photo to " + photoPath); onTakePhotoFailed();
}
Log.d(TAG, "Photo saved successfully to " + photoPath);
// Try to insert the photo into the MediaStore. Uri uri;
try {
uri = getContentResolver().insert(
Images.Media.EXTERNAL_CONTENT_URI, values); } catch (final Exception e) {
Log.e(TAG, "Failed to insert photo into MediaStore"); e.printStackTrace();
// Since the insertion failed, delete the photo. File photo = new File(photoPath);
(58)
Log.e(TAG, "Failed to delete non-inserted photo"); }
onTakePhotoFailed(); return;
}
// Open the photo in LabActivity.
final Intent intent = new Intent(this, LabActivity.class); intent.putExtra(LabActivity.EXTRA_PHOTO_URI, uri);
intent.putExtra(LabActivity.EXTRA_PHOTO_DATA_PATH, photoPath);
runOnUiThread(new Runnable() { @Override
public void run() {
startActivity(intent); }
}); }
private void onTakePhotoFailed() { mIsMenuLocked = false;
// Show an error message. final String errorMessage =
getString(R.string.photo_error_message); runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(Application.this, errorMessage, Toast.LENGTH_SHORT).show();
} }); }
(59)
file source code LabActivity.java:
package com.example.leafapp;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.provider.MediaStore.Images;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;
public final class LabActivity extends ActionBarActivity {
public static final String PHOTO_FILE_EXTENSION = ".png"; public static final String PHOTO_MIME_TYPE = "image/png";
public static final String EXTRA_PHOTO_URI =
"com.nummist.secondsight.LabActivity.extra.PHOTO_URI"; public static final String EXTRA_PHOTO_DATA_PATH =
"com.nummist.secondsight.LabActivity.extra.PHOTO_DATA_PATH";
private Uri mUri;
private String mDataPath; @Override
protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState);
final Intent intent = getIntent();
mUri = intent.getParcelableExtra(EXTRA_PHOTO_URI);
(60)
final ImageView imageView = new ImageView(this); imageView.setImageURI(mUri);
setContentView(imageView); }
@Override
public boolean onCreateOptionsMenu(final Menu menu) { getMenuInflater().inflate(R.menu.activity_lab, menu); return true;
}
@Override
public boolean onOptionsItemSelected(final MenuItem item) { switch (item.getItemId()) {
case R.id.menu_delete: deletePhoto(); return true; case R.id.menu_edit: editPhoto(); return true; default:
return super.onOptionsItemSelected(item); }
}
/*
* Show a confirmation dialog. On confirmation ("Delete"), the * photo is deleted and the activity finishes.
*/
private void deletePhoto() {
final AlertDialog.Builder alert = new AlertDialog.Builder( LabActivity.this);
alert.setTitle(R.string.photo_delete_prompt_title); alert.setMessage(R.string.photo_delete_prompt_message); alert.setCancelable(false);
alert.setPositiveButton(R.string.delete,
(61)
@Override
public void onClick(final DialogInterface dialog,
final int which) { getContentResolver().delete(
Images.Media.EXTERNAL_CONTENT_URI, MediaStore.MediaColumns.DATA +
"=?",
new String[]{mDataPath}); finish();
} });
alert.setNegativeButton(android.R.string.cancel, null); alert.show();
}
/*
* Show a chooser so that the user may pick an app for editing * the photo.
*/
private void editPhoto() {
final Intent intent = new Intent(Intent.ACTION_EDIT); intent.setDataAndType(mUri, PHOTO_MIME_TYPE);
startActivity(Intent.createChooser(intent,
getString(R.string.photo_edit_chooser_title))); }
@Override
protected void onDestroy() { super.onDestroy();
finish(); }
}
(62)
Hasil dan Analisa :
Pada LCD Smartphone akan ditampilkan hasil capture dari kamera
smartphone berupa citra 2 dimensi. Gambar di bawah ini merupakan hasil sebelum diintegrasikan dengan fungsi lain.
Gambar 4.2 Pengambilan Citra dan Pemotongan Citra
Pada gambar di atas menampilkan hasil tangkapan dari kamera smartphone, jendela dengan nama “Leaf App” jendela kiri atas adalah screenshot
tangkapan dari kamera smartphone pada saat fungsi kamera dijalankan, jendela kanan atas adalah hasil tangkapan dari kamera smartphone yang kemudian dapat di edit ataupun di hapus, jendela kiri bawah adalah tampilan pada saat akan
melakukan pemotongan citra dengan menggunakan fungsi edit, dan jendela kanan
bawah adalah hasil dari pemotongan citra yang sudah dilakukan proses pemotongan sebelumnya.
Fungsi Untuk Mendapatkan Gambar Threshold dan Luas Citra
Pengujian ini untuk menguji apakah kode sumber mampu menghasilkan gambar
Threshold dan menampilkan luas citra gambar.
Komponen yang terlibat :
Smartphone Android Sony Xperia ST27i
(63)
Kode Sumber Class“MainActivity.java”
Alur :
Gambar 4.3 Blok Pengujian Gambar Threshold dan Luas Citra
Citra yang di ambil pada Gallery di Smartphone.
Citra akan diolah oleh software Leaf App, dan hasil ditampilkan ke LCD
Smartphone.
Kode Sumber Program Class ini adalah: file source code MainActivity.java:
package com.example.leafapp;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;
import java.io.FileNotFoundException;
public class MainActivity extends Activity { Button bCapt, bPickCal;
ImageView iv;
(64)
Uri source;
Bitmap bitmap, bitmapMaster; TextView Result;
private static final int LOAD_IMAGE = 100;
private static final String TAG = "MainActivity";
static {
if (!OpenCVLoader.initDebug()) { Log.d(TAG, "OpenCV not loaded"); } else {
Log.d(TAG, "OpenCV loaded"); }
}
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bCapt = (Button) findViewById(R.id.bCapture); bPickCal = (Button) findViewById(R.id.bPick); iv = (ImageView) findViewById(R.id.imageView); Result = (TextView) findViewById(R.id.source);
bitmap = BitmapFactory.decodeResource(this.getResources(), R.id.imageView);
bCapt.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, Application.class);
startActivity(intent); }
});
bPickCal.setOnClickListener(new View.OnClickListener() { @Override
(65)
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, LOAD_IMAGE); }
});
}
@Override
protected void onActivityResult(int requestCode, int
resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) { switch (requestCode) { case LOAD_IMAGE:
source = data.getData(); try {
bitmapMaster =
BitmapFactory.decodeStream(getContentResolver().openInputStream( source));
LoadBitmap(bitmapMaster);
} catch (FileNotFoundException e) { // TODO Auto-generated catch block
e.printStackTrace(); } break; } } }
private void LoadBitmap(Bitmap bitmap) {
(66)
CvType.CV_8UC1); // Convert
Utils.bitmapToMat(bitmap, mat);
Mat gray = new Mat(bitmap.getWidth(), bitmap.getHeight(), CvType.CV_8UC1);
// Convert the color
Imgproc.cvtColor(mat, gray, Imgproc.COLOR_RGB2GRAY); // Convert back to bitmap
Mat purpose = new Mat(gray.rows(), gray.cols(), gray.type());
Imgproc.adaptiveThreshold(gray, purpose, 255,
Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY_INV, 255,
5);
Utils.matToBitmap(purpose, bitmap); iv.setImageBitmap(bitmap);
Mat m = new Mat();
Core.extractChannel(purpose, m, 0); int n = Core.countNonZero(m);
int integer = Integer.parseInt(String.valueOf(n)); // A4 Area in cm2
float a = 623.7f;
//Pixel Value A4 Area in 226x320 resolution int r = 72320;
double result = (a / r) * integer; Result.setText(String.valueOf(result)); }
}
(67)
Hasil dan Analisa :
Gambar 4.4 Penggunaan Threshold Pada Citra
Ini adalah hasil ketika program dijalankan, hasil menunjukkan perubahan pada citra yang semula berwarna hijau berubah menjadi warna putih yang disebabkan digunakannya fungsi Threshold pada citra. Setelah citra dirubah ke
dalam warna hitam putih, citra kemudian dihitung jumlah nilai piksel yang berwarna putih yang dikalikan dengan faktor pengkali pikselnya sehingga di dapatkan nilai luasan dari citra.
4.3 Pengukuran Luas Citra Terhadap Objek Citra 1. Pengukuran Luas Citra Bentuk Persegi Panjang
Tabel 4.1 Pengukuran Citra Persegi Panjang
Gambar 4.5 Hasil Threshold pada Bentuk Persegi Panjang
No. Manual (Cm2)
Leaf App
(Cm2) 1 234,0 234,7 2 234,0 234,1 3 234,0 235,3
(68)
2. Pengukuran Luas Citra Bentuk Ellips
Tabel 4.2 Pengukuran Citra Ellips
Gambar 4.6 Hasil Threshold pada Bentuk Ellips
3. Pengukuran Luas Citra Bentuk Bintang
Tabel 4.3 Pengukuran Citra Bintang
Gambar 4.7 Hasil Threshold pada Bentuk Bintang
No. Manual (Cm2)
Leaf App
(Cm2) 1 183,8 180,7 2 183,8 180,8 3 183,8 188,2
No. Manual (Cm2)
Leaf App
(Cm2) 1 100,1 101,5 2 100,1 101,8 3 100,1 101,2
(69)
4. Pengukuran Luas Citra Bentuk Lingkaran
Tabel 4.4 Pengukuran Citra Lingkaran
Gambar 4.8 Hasil Threshold pada Bentuk Lingkaran
5. Pengukuran Luas Citra Bentuk Waru
Tabel 4.5 Pengukuran Citra Waru
Gambar 4.9 Hasil Threshold pada Bentuk Waru
No. Manual (Cm2)
Leaf App
(Cm2) 1 254,5 251,2 2 254,5 256,5 3 254,5 256,1
No. Manual (Cm2)
Leaf App
(Cm2) 1 177,3 175,1 2 177,3 176,7 3 177,3 174,3
(70)
6. Pengukuran Luas Citra Bentuk Segitiga
Tabel 4.6 Pengukuran Citra Segitiga
Gambar 4.10 Hasil Threshold pada Bentuk Segitiga
7. Pengukuran Luas Citra Dengan Luas A4
Gambar 4.11 Hasil Threshold pada Luas A4
Ini adalah hasil ketika program dijalankan pada bentuk bidang yang memiliki luas area sama dengan luas A4 yang digunakan sebagai referensi. Dari hasil menunjukkan bahwa dalam pengukuran ini, referensi A4 sebagai alas pada saat pengambilan memiliki sebagai bidang yang dikenai fungsi threshold sehingga
luas area objek yang akan dihitung tidak diperbolehkan sama dengan sama luas A4 yang berfungsi sebagai bidang referensinya agar pengukuran dapat dilakukan.
No. Manual (Cm2)
Leaf App
(Cm2) 1 105,4 104,5 2 105,4 103,8 3 105,4 103,5
(71)
Tabel 4.7 Data Pengukuran Luas Citra Terhadap Objek Citra
Bentuk
Luas
Perbedaan Luas (Manual
– Leaf App)
Kesalahan(%) Manual (cm2) Leaf App (cm2) Persegi Panjang
Besar 468 434,6 33,4 7,14
Sedang 234 234,7 0,7 0,3
Kecil 117 119,7 2,7 2,3
Ellips
Besar 367,6 362,6 5 1,36
Sedang 183,8 183,2 0,5 0,27
Kecil 91,9 94,2 2,3 2,5
Bintang
Besar 100,17 101,5 1,4 1,39
Sedang 56,3 56,5 0,3 0,53
Kecil 25,0 25,4 0,4 1,6
Besar 254,5 254,6 0,1 0,04
Lingkaran Sedang 143,1 145,6 2,5 1,74
Kecil 63,6 64,9 1,3 2,04
Waru
Besar 177,3 175,4 1,9 1,07
Sedang 99,7 101.9 2,2 2,2
Kecil 44,3 45,4 1,1 2,48
Segitiga
Besar 140,4 139,2 1,2 0,85
Sedang 105,4 103,9 1,5 1,42
Kecil 35,1 36,5 1,4 3,99
Pada tabel di atas, terdapat 5 kolom, kolom pertama adalah bentuk citra bidang datar yang digunakan, kolom kedua adalah data luas sesungguhnya dari citra bidang datar, kolom ketiga adalah hasil pengukuran yang didapat dari penghitungan citra bidang datar menggunakan software Leaf App, selanjutnya
adalah kolom selisih luas sesungguhnya dengan luas berdasarkan software, dan yang terakhir adalah nilai presentase nilai selisih luas. Pada pengambilan data ini nilai yang terdapat di kolom 3 adalah nilai yang muncul pada LCD Smartphone.
(1)
XML Layout
(2)
(3)
leaf.xml
(4)
Menu
activity_camera.xml
(5)
Value strings.xml
(6)