Viola dan Jones
memperkenalkan metode yang akurat untuk mendeteksi wajah melalui sebuah citra.
teknik ini dapat diadaptasi untuk mendeteksi pula fitur dari wajah tersebut.
Bagian atau daerah wajah yang telah terdeteksi dianalisis kemungkinan untuk
ditemukan fitur sangat tinggi. Sebagai contoh dari fitur tersebut adalah fitur
mata dan mulut. Hal ini menyebabkan pemrosesan akan berjalan dengan lebih
cepat. Wajah manusia memiliki kompleksitas permasalahn pemrosesan karena wajah
manusia merupakan objek dinamis yang memiliki banyak macam dan warna. Oleh
karenanya facial detection memiliki banyak pengaruh. Walaupun terdapat banyak
algoritma untuk pemrosesan citra digital dan facial detection, tetapi banyak
diantaranya yang memiliki kekurangan dan kelebihan[1].
1.
Inisialisasi Kamera
Inisialisasi kamera dimulai dari menginisialisasi
video masukan sampai dengan pemrosesan citra. pada proses ini citra wajah
secara fisik ditangkap dari capture device berupa webcam dengan resolusi 320 x
240 piksel. Citra wajah diambil untuk citra training berdasarkan posisi wajah
yaitu posisi tegak lurus, rotasi sejajar 15* ke kanan, rotasi sejajar 15* ke
kiri, mengangkat dagu ke atas 15* ke atas dan menundukkan kepala 15* ke bawah
serta berdasarkan tiga jarak objek wajah, yaitu 100 cm, 150 cm dan 200 cm.
2.
Tahap Scalling
Scalling
merupakan proses mengubah ukuran digital, hal ini perlu dilakukan agar semua
citra digital memiliki ukuran yang sama. Untuk melakukan scaling di sistem ini
dapat memanfaatkan package displau object. Citra digital tersebut diperkecil
dengan menggunakan metode interpolasi. Metode ini menggunakan rata-rata suatu
daerah yang mewakili daerah yang lebih besar. Berikut ini merupakan citra hasil
interpolasi:
Gambar asli 320x240 piksel
Gambar dengan
ukuran tersebut discan dan dikonversi ke dalam bentuk matriks 320 x 240 yang
berisi nilai piksel dari masing-masing komponen piksel.
Proses
pengubahan resolusi dari gambar dengan ukuran m x n tersebut terlihat pada
tabel berikut, yaitu:
k
|
Resolusi-k
(m), diambil ukuran panjang (Rk/2k)
|
Nilai
Rata-rata
|
0
|
320
|
12 10 | 4 6
|13 59 |12 12 | ... |14 15|
|
1
|
160
|
11 8|36
12|...|14 15|
|
2
|
...
|
...
|
3
|
...
|
...
|
3.
Tahap Grayscaling
citra digital
yang telah melalui proses scaling kemudian diubah menjadi citra dua warna
dengan proses grayscaling. Masing-masing chanel piksel dengan komponen R,G dan
B diproses dengan rumus sebagai berikut:
W= 0.2989 R +
0.5870 G + 0.1140 B
Sehingga
diperoleh citra hasil grayscaling sebagai berikut:
Gambar hasil grascaling 20 x 20 piksel
4.
Pendeteksian dengan Haar Cascade Classifier
metode ini
menggunakan haar-like features dimana perlu dilakukan training terlebih dahulu
untuk mendapatkan suatu pohon keputusan dengan nama cascade classifier sebagai
penentu apakah ada obyek atau tidak dalam setiap frame yang di proses. Terdapat
3 jenis fitur berdasarkan jumlah persegi panjang yang terdapat di dalamnya
(Krishna & Srinivasulu, 2012), seperti yang dapat dilihat pada gambar di
bawah ini:
5.
Proses menghitung Integral Image
citra integral
adalah sebuah citra yang nilai setiap pikselnya merupakan akumulasi dari nilai
piksel atas dan kirinya. Sebagai contoh, piksel (a,b) memiliki nilai akumulatif
untuk semua piksel (x,y) dimana x<=a dan y <= b. Salah satu contoh
seperti perhitungan berikut:
Gambar sampel perhitungan citra integral
Maka hasil
perhitungan citra integralnya adalah:
Nilai fitur = |total piksel hitam- total piksel
putih|
= |(6+0-(0+0))+(25+3-(15+0))-(15+1-(6+0))|
= |6+13-10|
= 9
Nilai Haar feature yang didapatkan di atas yaitu 9 adalah
nilai perbedaan antar kotak (fitur puih dan fitur hitam) yang biasa disebut
threshold. Threshold ini digunakan sebagai parameter klasifikasi objek yang
terdeteksi sebagai wajah atau tidak.
Kemudian dengan Eclipse dan bahasa pemrograman Java serta Library OpenCV, ketikkan program seperti di bawah ini:
package latihan;
import java.io.File;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.highgui.Highgui;
import org.opencv.objdetect.CascadeClassifier;
public class FaceDetector {
public static String filename = "IMG_4936.png";
public static void main(String[] args) {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
System.out.println("\nRunning FaceDetector");
CascadeClassifier faceDetector = new CascadeClassifier("xml/haarcascade_frontalface_alt.xml");
File file=new File("images/abc.JPG");
Mat image=null;
if(file.exists()){
image = Highgui.imread(file.getAbsolutePath());
}else{
System.out.println("Image doesn't exists!");
}
MatOfRect faceDetections = new MatOfRect();
faceDetector.detectMultiScale(image, faceDetections);
System.out.println(String.format("Detected %d faces", faceDetections.toArray().length));
for (Rect rect : faceDetections.toArray()) {
Core.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
new Scalar(0, 255, 0));
}
System.out.println(String.format("Writing %s", filename));
Highgui.imwrite(filename, image);
}
}
Kode di atas digunakan untuk mendeteksi lebih dari
satu foto dengan ukuran yang beraneka ragam.
dan hasilnya sebagai berikut:
[1]. Ian, Philip Wilson, Fernandez John, Dr. 2006. Facial
Feature Detection Using Haar Classifier
[2]. Gunawan, Hendra. 1997. Matematika di balik Citra
Digital. Bandung :
[3].Viola, P. & Jones, M., 2001. Robust Realtime
Object Detection. Second International Workshop On Statistical And
Computational Theories Of Vision – Modeling, Learning, Computing And Sampling
Vancouver, Canada, July 13, 2001.
sipppp, LANJUTKAN!!!!
ReplyDeletetengkyu, kritik saran ditunggu :))
DeleteThanks ,. Sangat membantu..
ReplyDeletePengolahan Citra :)
are you a software engineer?
Deletemantep .
ReplyDeletemau tanya dong untuk pemotongan pixel tau gak mbak?makasih
Wah maap nih kayanya notif di gmail saya lagi error. Maksudnya pixel yang udah atomik dipotong? Atau di cari RGB nya?
Deletesngat membntu,, tp da yg msih bgug,,
ReplyDeletecra menghitung Integral Image tu gmnan ya msih bgung, di jelasn dr awal donk,soal msih awam ne,,, bru blajar,,
trims sblumx,,,
Mungkin biar ga pusing-pusing dan langsung ke bagian Integral Image-nya, silakan mengunjungi https://computersciencesource.wordpress.com/2010/09/03/computer-vision-the-integral-image/
DeleteNanti kalau udah ada waktu saya rangkum lagi ya materinya :)
Maaf sebelumnya, untuk penjelasan mengenai cascade classifier nya dimana ya ? terus rumus untuk meghitung akurasi nya bagai mana mbak ?
ReplyDeleteDi atas cuman integral image aja mas. Itu udah ngerti btw?
DeleteSetelah ada nilai treshold, nanti jadi inputan waktu nentuin itu wajah atau bukan. Sebelah situnya ya?
tanya dong
ReplyDeleteNilai fitur = |total piksel hitam- total piksel putih|
= |(6+0-(0+0))+(25+3-(15+0))-(15+1-(6+0))|
= |6+13-10|
= 9
yang pixel hitam nilai dapet 0 dari mana yah ?
perasaan setelah di integral image gak ada nlai 0 di pixel nya