1. Import Library
- argparse → untuk parsing argumen dari command line (CLI).
- os & sys → mengatur path, direktori, dan sistem.
- cv2 → OpenCV, dipakai untuk manipulasi dan konversi citra (misalnya RGB ke grayscale).
- tkinter → GUI sederhana (popup dialog, pesan info).
- filedialog & messagebox → komponen GUI untuk memilih file dan menampilkan pesan.
2. Setup path agar bisa impor modul lokal
- _FILE_DIR → folder tempat file Python ini berada.
- _ROOT_DIR → folder induk (parent) dari file ini.
- sys.path.insert(...) → menambahkan root project ke path Python, supaya bisa impor modul common.
3. Import modul internal
- read_image → fungsi khusus untuk membaca gambar dari path.
- show → fungsi khusus untuk menampilkan gambar (dengan jendela GUI/plot).
4. Fungsi utilitas: statistik
- Input: channel (array piksel, misalnya R, G, B atau grayscale).
- Output: string berisi statistik → nilai minimum, maksimum, dan rata-rata intensitas.
- Contoh output: R -> min:0 max:255 mean:123.45.
5. Fungsi utama
- args.image → path gambar dari CLI (jika ada).
a. Pilih file lewat GUI jika tidak ada argumen
- Jika tidak ada argumen --image atau user pakai --gui, maka buka dialog pilih file.
- Jika user batal → tampilkan pesan "Tidak ada file yang dipilih.".
b. Baca gambar & pisahkan channel
- read_image → membaca gambar ke array numpy.
- R, G, B → ekstrak tiap channel warna.
- gray → konversi ke grayscale dengan OpenCV.
c. Hitung statistik intensitas
- Menghitung statistik tiap channel.
- Cetak ke terminal.
d. Tampilkan statistik lewat GUI
- Cek apakah ada root Tkinter aktif.
- Jika tidak, buat root baru sementara.
- Tampilkan statistik dalam popup GUI.
- Hancurkan root sementara setelah selesai agar tidak ada jendela kosong.
e. Tampilkan channel satu per satu
- Memanggil show untuk menampilkan tiap channel dengan labelnya.
6. Entry Point (jalankan script)
- Membuat parser argumen:
- --image → path file gambar (opsional).
- --gui → flag untuk membuka dialog file.
- Panggil main(args) dengan argumen tersebut.
Ringkasan
Script ini berfungsi untuk:
- Membaca gambar dari argumen CLI atau dialog GUI.
- Memisahkan channel R, G, B, Grayscale.
- Menghitung statistik intensitas (min, max, mean).
- Menampilkan statistik di terminal dan GUI popup.
- Menampilkan channel secara visual satu per satu.