Mata Kuliah : Pengolahan Citra Digital
Mini Project
Klasifikasi Daun Sehat dan Daun Tidak Sehat Menggunakan Pengolahan Citra Digital
A. Latar Belakang
Teknologi pengolahan citra digital telah banyak dimanfaatkan pada bidang pertanian untuk membantu petani dalam memantau kesehatan tanaman secara otomatis. Salah satu penerapannya adalah mengidentifikasi kondisi daun berdasarkan warna, tekstur, maupun bentuknya.
Pada mini project ini Anda diminta untuk mengembangkan sebuah aplikasi sederhana berbasis Python yang mampu melakukan proses pengolahan citra serta mengklasifikasikan daun menjadi Daun Sehat atau Daun Tidak Sehat.
Sebagai referensi awal, dosen telah menyediakan starter code yang menampilkan proses dasar pengolahan citra menggunakan OpenCV dan Tkinter. Namun, aplikasi tersebut masih menggunakan metode klasifikasi sederhana sehingga perlu dikembangkan lebih lanjut.
B. Studi Kasus
Sebuah kelompok tani ingin memiliki aplikasi sederhana yang dapat membantu mengidentifikasi kondisi daun tanaman melalui foto yang diambil menggunakan kamera atau diperoleh dari dataset.
Aplikasi harus mampu menampilkan tahapan pengolahan citra sebelum menghasilkan keputusan apakah daun termasuk Sehat atau Tidak Sehat.
Sebagai seorang pengembang sistem Computer Vision, Anda diminta untuk menyempurnakan aplikasi tersebut agar memberikan hasil yang lebih baik dibandingkan contoh yang telah diberikan.
C. Tujuan
Setelah menyelesaikan mini project ini mahasiswa diharapkan mampu:
-
Memahami konsep dasar pengolahan citra digital.
-
Menggunakan OpenCV untuk memproses citra.
-
Melakukan preprocessing citra.
-
Mengimplementasikan operasi morfologi.
-
Melakukan segmentasi objek.
-
Mengembangkan metode klasifikasi sederhana menjadi lebih baik.
-
Mendesain antarmuka aplikasi berbasis Tkinter.
D. Starter Code
Dosen telah menyediakan contoh source code yang memiliki fitur berikut.
-
Mengunggah gambar daun.
-
Menampilkan gambar asli.
-
Mengubah gambar menjadi grayscale.
-
Melakukan proses Erosion.
-
Melakukan proses Dilation.
-
Melakukan Morphological Closing.
-
Menampilkan hasil klasifikasi sederhana berdasarkan rata-rata intensitas piksel.
Catatan: Source code tersebut hanya sebagai referensi awal dan tidak boleh dikumpulkan tanpa pengembangan.
E. Tugas Pengembangan
Setiap mahasiswa wajib melakukan pengembangan terhadap starter code dengan ketentuan sebagai berikut.
Wajib
-
Memodifikasi tampilan GUI agar lebih menarik.
-
Menambahkan minimal dua metode preprocessing selain yang sudah tersedia.
-
Menambahkan minimal satu metode segmentasi.
-
Mengubah metode klasifikasi sederhana agar menghasilkan keputusan yang lebih baik.
-
Menampilkan hasil klasifikasi pada aplikasi.
Pilihan Pengembangan (Minimal 4 Fitur)
Pilih minimal empat pengembangan berikut.
-
Median Filter
-
Gaussian Blur
-
Bilateral Filter
-
Histogram Equalization
-
CLAHE
-
Thresholding
-
Adaptive Threshold
-
HSV Color Segmentation
-
Contour Detection
-
Edge Detection
-
Ekstraksi warna hijau
-
Ekstraksi tekstur
-
Perhitungan luas objek daun
-
Persentase warna hijau
-
Histogram citra
-
Penyimpanan hasil klasifikasi
-
Batch Processing (lebih dari satu gambar)
-
Kamera/Webcam
-
Dataset Training
-
K-Nearest Neighbor (K-NN)
-
Support Vector Machine (SVM)
-
Decision Tree
-
Random Forest
-
CNN (nilai bonus)
F. Output Program
Aplikasi minimal mampu menampilkan:
-
Gambar Asli
-
Grayscale
-
Hasil Preprocessing
-
Hasil Segmentasi
-
Hasil Klasifikasi
Contoh informasi hasil:
-
Nama file
-
Status daun
-
Nilai rata-rata intensitas
-
Persentase warna hijau
-
Waktu proses
G. Dataset
Mahasiswa bebas menggunakan dataset dari:
-
Kaggle
-
PlantVillage
-
Dataset pribadi
-
Dataset yang disediakan dosen
Minimal terdiri dari:
-
20 gambar daun sehat
-
20 gambar daun tidak sehat
Semakin banyak dataset yang digunakan akan semakin baik.
H. Laporan
Laporan minimal berisi:
-
Cover
-
Pendahuluan
-
Studi Kasus
-
Analisis Permasalahan
-
Flowchart Sistem
-
Algoritma Pengolahan Citra
-
Penjelasan Pengembangan Program
-
Hasil Pengujian
-
Analisis Hasil
-
Kesimpulan
-
Daftar Pustaka
I. Video Presentasi
Buat video presentasi berdurasi 5–10 menit yang berisi:
-
Penjelasan program
-
Demo aplikasi
-
Penjelasan metode yang digunakan
-
Hasil pengujian
J. Ketentuan Penilaian
| Komponen | Bobot |
|---|---|
| GUI Aplikasi | 10% |
| Pengolahan Citra | 20% |
| Pengembangan Fitur | 30% |
| Klasifikasi | 20% |
| Laporan | 10% |
| Presentasi | 10% |
K. Ketentuan Akademik
-
Mahasiswa wajib memahami setiap bagian program yang dikembangkan.
-
Tidak diperkenankan mengumpulkan hasil yang sama dengan starter code tanpa modifikasi.
-
Setiap pengembangan harus dijelaskan pada laporan.
-
Kesamaan kode antar mahasiswa akan menjadi bahan evaluasi akademik sesuai ketentuan yang berlaku.
-
Kreativitas, inovasi, dan kualitas analisis akan menjadi nilai tambah dalam penilaian.
L. Bonus Nilai
Bonus nilai akan diberikan apabila mahasiswa berhasil mengembangkan aplikasi dengan salah satu fitur berikut:
-
Menggunakan Machine Learning (K-NN, SVM, Decision Tree, Random Forest).
-
Menggunakan Deep Learning (CNN).
-
Menggunakan webcam secara real-time.
-
Menampilkan tingkat akurasi klasifikasi.
-
Menampilkan confusion matrix.
-
Menampilkan grafik evaluasi model.
-
Mengembangkan aplikasi menjadi sistem deteksi penyakit daun secara otomatis.
Target Pembelajaran
Melalui mini project ini mahasiswa diharapkan tidak hanya mampu menjalankan program, tetapi juga memahami konsep preprocessing, operasi morfologi, segmentasi, ekstraksi fitur, dan klasifikasi citra, sehingga memiliki kemampuan untuk mengembangkan aplikasi Computer Vision sederhana secara mandiri menggunakan Python dan OpenCV.
Lampiran A
Starter Code Mini Project
Klasifikasi Daun Sehat dan Daun Tidak Sehat Menggunakan Python OpenCV
Source code berikut merupakan starter code yang digunakan sebagai dasar pengembangan aplikasi klasifikasi daun. Program ini terdiri dari beberapa bagian utama, yaitu import library, deklarasi class, pengaturan GUI, proses pengolahan citra, proses klasifikasi, dan menjalankan aplikasi.
Mahasiswa diharapkan memahami setiap bagian program sebelum melakukan pengembangan.
1. Import Library
import tkinter as tk
from tkinter import filedialog
import numpy as np
from PIL import Image, ImageTk
import cv2
Penjelasan
Bagian ini digunakan untuk mengimpor pustaka (library) yang diperlukan oleh program.
| Library | Fungsi |
|---|---|
| tkinter | Membuat antarmuka (GUI) aplikasi. |
| filedialog | Membuka jendela pemilihan file gambar. |
| numpy | Mengolah data citra dalam bentuk matriks. |
| PIL (Pillow) | Mengubah format gambar agar dapat ditampilkan pada Tkinter. |
| OpenCV (cv2) | Melakukan proses pengolahan citra digital. |
2. Deklarasi Class
class AplikasiKlasifikasiDaun:
Penjelasan
Class merupakan cetak biru (blueprint) dari aplikasi yang akan dibuat.
Semua fungsi dalam aplikasi, seperti membuka gambar, menampilkan gambar, melakukan preprocessing, hingga klasifikasi, disimpan di dalam class ini agar program lebih terstruktur dan mudah dikembangkan.
3. Constructor
def __init__(self, root):
Penjelasan
Method __init__() merupakan constructor yang akan dijalankan secara otomatis ketika objek dibuat.
Pada bagian ini dilakukan:
-
inisialisasi jendela utama,
-
pemanggilan pengaturan GUI,
-
pembuatan Frame,
-
pembuatan Label,
-
pembuatan Button,
-
serta menyiapkan komponen yang akan digunakan selama aplikasi berjalan.
4. Pengaturan GUI
self.root.title("Klasifikasi Daun")
self.root.geometry("1400x600")
self.root.resizable(False, False)
Penjelasan
Bagian ini mengatur tampilan aplikasi.
-
title() memberikan judul aplikasi.
-
geometry() menentukan ukuran jendela.
-
resizable() mengatur apakah ukuran jendela dapat diubah oleh pengguna.
5. Frame
self.frame_gambar = tk.Frame(root)
Penjelasan
Frame berfungsi sebagai wadah untuk menempatkan beberapa komponen GUI agar lebih rapi.
Pada aplikasi ini frame digunakan untuk menampilkan seluruh gambar hasil pengolahan.
6. Label
self.label_gambar_asli
self.label_gambar_abu
self.label_gambar_eroded
self.label_gambar_dilated
self.label_gambar_closing
Penjelasan
Label digunakan sebagai tempat menampilkan gambar maupun teks.
Pada aplikasi ini terdapat lima label utama yang digunakan untuk menampilkan:
-
Gambar asli
-
Gambar grayscale
-
Hasil erosi
-
Hasil dilasi
-
Hasil closing
7. Button
self.tombol_unggah
self.tombol_klasifikasi
Penjelasan
Button digunakan untuk menjalankan suatu proses.
Tombol pertama digunakan untuk memilih gambar.
Tombol kedua digunakan untuk melakukan klasifikasi.
8. Method unggah_gambar()
def unggah_gambar(self):
Penjelasan
Method ini digunakan untuk membaca gambar dari komputer.
Tahapan yang dilakukan:
-
Memilih file gambar.
-
Membaca gambar menggunakan OpenCV.
-
Menampilkan gambar asli.
-
Mengubah gambar menjadi grayscale.
-
Melakukan erosi.
-
Melakukan dilasi.
-
Melakukan morphological closing.
-
Menampilkan seluruh hasil pada GUI.
9. Konversi Grayscale
gray = cv2.cvtColor(self.gambar, cv2.COLOR_BGR2GRAY)
Penjelasan
Grayscale mengubah citra RGB menjadi citra satu kanal (intensitas keabuan).
Tujuannya adalah menyederhanakan proses pengolahan citra sehingga komputasi menjadi lebih cepat.
10. Operasi Erosi
cv2.erode()
Penjelasan
Erosi digunakan untuk mengurangi ukuran objek putih pada citra.
Fungsi utama:
-
menghilangkan noise kecil,
-
memisahkan objek yang saling menempel,
-
memperkecil objek.
11. Operasi Dilasi
cv2.dilate()
Penjelasan
Dilasi merupakan kebalikan dari erosi.
Fungsi utamanya:
-
memperbesar objek,
-
menutup celah kecil,
-
memperjelas bentuk objek.
12. Morphological Closing
cv2.morphologyEx(gray, cv2.MORPH_CLOSE, kernel)
Penjelasan
Closing merupakan kombinasi:
Dilasi
↓
Erosi
Operasi ini digunakan untuk:
-
menutup lubang kecil pada objek,
-
memperhalus bentuk objek,
-
menghubungkan bagian objek yang terputus.
13. Method klasifikasi_gambar()
def klasifikasi_gambar(self):
Penjelasan
Method ini melakukan proses identifikasi kondisi daun.
Pada starter code, klasifikasi masih menggunakan pendekatan sederhana, yaitu membandingkan nilai rata-rata intensitas piksel.
Apabila rata-rata intensitas lebih besar dari nilai tertentu, maka daun dianggap Sehat. Sebaliknya, apabila lebih kecil dari nilai ambang, maka daun dianggap Tidak Sehat.
Metode ini hanya digunakan sebagai contoh implementasi awal dan belum menggunakan algoritma Machine Learning.
14. Main Program
if __name__ == "__main__":
Penjelasan
Bagian ini merupakan titik awal eksekusi program.
Program akan:
-
Membuat jendela utama (Tkinter).
-
Membuat objek dari class
AplikasiKlasifikasiDaun. -
Menjalankan aplikasi menggunakan
mainloop()sehingga GUI dapat menerima interaksi dari pengguna.
Kesimpulan
Starter code ini memberikan contoh implementasi dasar aplikasi pengolahan citra digital berbasis Python. Program telah menerapkan beberapa konsep penting, seperti pembacaan citra, konversi grayscale, operasi morfologi (erosi, dilasi, dan closing), serta klasifikasi sederhana berbasis nilai intensitas piksel. Mahasiswa diharapkan memahami fungsi setiap deklarasi dan method yang ada, kemudian mengembangkan aplikasi dengan menambahkan metode preprocessing, segmentasi, ekstraksi fitur, maupun algoritma klasifikasi yang lebih baik sehingga menghasilkan sistem yang lebih akurat dan informatif.