101 lines
3.8 KiB
Markdown
101 lines
3.8 KiB
Markdown
# Color Processor: Pemrosesan Citra Warna dan Pengubahan Warna Wajah
|
|
|
|
Tugas mata kuliah **Pengolahan Citra Digital** (Gonzalez & Woods, Bab 6: *Color Image Processing*), ditulis dengan C++17 dan OpenCV.
|
|
|
|
Program menerapkan enam operasi pemrosesan citra warna, lalu mendeteksi wajah dan mengubah warna kulitnya. Masukan dapat berupa berkas gambar atau kamera (*webcam*).
|
|
|
|
- **Nama:** Efraim Melvyn Rafelino Lahai
|
|
- **NRP:** 5803024009
|
|
- **Program Studi:** Informatika
|
|
- **Dosen Pengajar:** Ir. Drs. Peter Rhatodirdjo Angka, M.Kom., IPM., ASEAN Eng.
|
|
|
|
## Fitur
|
|
|
|
| No | Operasi | Fungsi |
|
|
|----|---------|--------|
|
|
| 1 | Komplemen warna | `computeComplement` |
|
|
| 2 | Kurva S (penyesuaian nada) | `adjustToneSCurve` |
|
|
| 3 | Ekualisasi histogram kanal *Value* (HSV) | `equalizeIntensityHSI` |
|
|
| 4 | Pengirisan warna berbentuk bola 3D | `sliceColorSphere` |
|
|
| 5 | Penajaman Laplacian | `sharpenLaplacian` |
|
|
| 6 | Pseudowarna (JET) | `generatePseudocolor` |
|
|
| 7 | Deteksi wajah (Haar cascade + CLAHE) | `detectFaces` |
|
|
| 8 | Ubah warna kulit wajah (rotasi *Hue* di HSV, masker kulit YCrCb) | `recolorFace` |
|
|
|
|
Pengubahan warna wajah memutar *Hue* sebesar 60 dan mengalikan *Saturation* dengan 1,3, sehingga kulit menjadi hijau. Nilai ini dapat diubah lewat `kHueShift` dan `kSatScale` di `color_processor.cpp`.
|
|
|
|
## Kebutuhan
|
|
|
|
- Kompilator C++17 (diuji dengan MinGW-w64 GCC 16.1)
|
|
- CMake 3.10 atau lebih baru
|
|
- OpenCV 4.x dengan modul `core`, `imgproc`, `imgcodecs`, `videoio`, `highgui`, `objdetect` (diuji dengan 4.10.0)
|
|
- Berkas `haarcascade_frontalface_default.xml` (ada di folder `etc/haarcascades` atau `data/haarcascades` pada instalasi OpenCV)
|
|
|
|
> Catatan: pada MinGW, OpenCV harus dikompilasi dengan kompilator yang sama. Pada pengujian, MSMF dimatikan (`-DWITH_MSMF=OFF`) karena gagal dikompilasi dengan MinGW, sehingga kamera memakai DirectShow.
|
|
|
|
## Kompilasi
|
|
|
|
```
|
|
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DOpenCV_DIR=<folder OpenCVConfig.cmake>
|
|
cmake --build build
|
|
```
|
|
|
|
Contoh `OpenCV_DIR` pada Windows dengan MinGW: `D:/opencv/install/x64/mingw/lib`.
|
|
|
|
Setelah *build*, CMake menyalin `haarcascade_frontalface_default.xml` dan DLL OpenCV ke folder `build/`. Jika berkas XML tidak ditemukan, program menampilkan pesan kesalahan; gunakan opsi `--cascade`.
|
|
|
|
## Penggunaan
|
|
|
|
Jalankan dari dalam folder `build`, karena program mencari berkas XML di folder kerja.
|
|
|
|
```
|
|
# Mode berkas: jalankan semua operasi pada satu gambar
|
|
.\color_processor.exe path\ke\foto.jpg
|
|
|
|
# Mode kamera
|
|
.\color_processor.exe --cam
|
|
|
|
# Tentukan lokasi berkas cascade sendiri
|
|
.\color_processor.exe foto.jpg --cascade path\ke\haarcascade_frontalface_default.xml
|
|
```
|
|
|
|
Tanpa argumen, program membuka kamera.
|
|
|
|
**Mode berkas** menyimpan hasil ke `output_results/` dengan format PNG:
|
|
|
|
```
|
|
<nama>_complement.png
|
|
<nama>_tone_scurve.png
|
|
<nama>_hsi_equalized.png
|
|
<nama>_color_sliced.png
|
|
<nama>_sharpened.png
|
|
<nama>_pseudocolor.png
|
|
<nama>_face_recolor.png
|
|
```
|
|
|
|
**Mode kamera:** tekan `s` untuk menyimpan bingkai (`output_results/webcam_N.png`), `q` atau `Esc` untuk keluar.
|
|
|
|
## Struktur Proyek
|
|
|
|
```
|
|
.
|
|
├── color_processor.cpp # kode program
|
|
├── CMakeLists.txt
|
|
├── report/ # laporan LaTeX dan gambar hasil
|
|
└── README.md
|
|
```
|
|
|
|
## Keterbatasan
|
|
|
|
- Haar cascade bergantung pada pencahayaan. Pada ruangan redup, wajah dapat gagal terdeteksi.
|
|
- Wajah yang menunduk, miring, atau tertutup (misalnya topi) sulit dideteksi.
|
|
- Menurunkan ambang deteksi menambah kemungkinan positif palsu.
|
|
- Rentang warna kulit di YCrCb bersifat tetap, sehingga objek berwarna serupa di dalam kotak wajah (misalnya tepi topi krem) dapat ikut berubah.
|
|
- Pengirisan warna memakai satu warna prototipe tetap, sehingga hanya cocok untuk satu nada kulit.
|
|
- Mode kamera belum diuji ulang pada kondisi redup setelah penggantian ke CLAHE.
|
|
|
|
## Referensi
|
|
|
|
- R. C. Gonzalez dan R. E. Woods, *Digital Image Processing*, Bab 6.
|
|
- OpenCV: <https://opencv.org>
|