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 folderetc/haarcascadesataudata/haarcascadespada 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