[OpenCV Java] FaceDetection – Croping


Setelah sebelum nya kita sudah mendeteksi wajah, sekarang kita mau cropping setiap wajah tersebut secara otomatis.


import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Rect;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.objdetect.CascadeClassifier;

public class FaceCrop {

public static void main(String[] args) {

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
System.out.println("\nRunning FaceDetector");

CascadeClassifier faceDetector = new CascadeClassifier("/media/ratjoen/DATA/javaFiles/WebCamSec/src/lbpcascade_frontalface.xml");
Mat image = Imgcodecs.imread("/media/ratjoen/DATA/javaFiles/WebCamSec/Arsenal-Team-Photo.jpg");

MatOfRect faceDetections = new MatOfRect();
faceDetector.detectMultiScale(image, faceDetections);

System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));
//Rect rect_Crop=null;
int ii=0;
for (Rect rect : faceDetections.toArray()) {
Rect rectCrop = new Rect(rect.x, rect.y, rect.width, rect.height);
Mat image_roi = new Mat(image,rectCrop);//matrix image yang telah terdeteksi dan tercrop
Imgcodecs.imwrite("cropimage"+ii+".png",image_roi);

}

}
}

Advertisements

[OpenCV Java] FaceDetection


kali ini kita mencoba  bagaimana menggunakan library openCV di java untuk aplikasi Face Detection:

Source code:

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.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;
 
public class FaceDetector {
 
    public static void main(String[] args) {
 
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        System.out.println("\nRunning FaceDetector");
 
        CascadeClassifier faceDetector = new CascadeClassifier("direktori/lbpcascade_frontalface.xml"); //isi direktori dimana lbpcascade_frontalface.xml berada
        Mat image = Imgcodecs.imread("direktori/xxxx.png");//isi direktori dimana gambar berada
 
        MatOfRect faceDetections = new MatOfRect();
        faceDetector.detectMultiScale(image, faceDetections);
 
        System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));
 
        for (Rect rect : faceDetections.toArray()) {
        	Imgproc.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
                    new Scalar(0, 255, 0));
        }
 
        String filename = "ouput.png";
        System.out.println(String.format("Writing %s", filename));
        Imgcodecs.imwrite(filename, image);
    }
}

File output.png
ouput

Flag Filter / Image Fusion


Pergantian profil image di facebook dengan menyertakan bendera atau yang sering dibilang “flag filter”. sekitar beberapa bulan yang lalu rainbow flag dan sekarang france flag.

bagaimana cara kerja “flag filter”?
“flag filter” dalam bahasa lainnya dikenal dengan image fusion, image fusion ini terdiri dari bermacam macam metode: Simple Average, Maximum Selected High pass filtering, IHS Transform, PCA, Wavelet, dll. Semakin aneh namanya semakin aneh cara kerjanya, lengkapnya bisa digoogle “image fusion”

Sekarang kita coba lihat metode yang paling simple yaitu Simple average. Dari namanya kita sudah bisa tahu bahwa cara kerja nya adalah dengan merata-ratakan.

Dalam Citra Digital setiap pixel di representasikan dengan nilai pixel, gampangnya jika kita punya Citra digital 16 pixel maka ada 16 nilai pixel atau 16×3 nilai pixel (jika citra direprentasikan dalam layer warna)

Contoh:
Citra Background = Ig (dalam hal ini adalah citra flag)
Citra Foreground = In (dalam hal ini adalah citra profil)
Citra Fused = fusedImg (dalam hal ini adalah citra yg sudah terfused)

bgImg=representasi nilai pixel Ig
fgImg=representasi nilai pixel In

jika kita anggap Ig dan In memiliki panjang dan lebar yang sama,
maka setiap nilai pixel yang terfused adalah IfusedImg = (bgImg+fgImg)/2.

Tetapi kita bisa memodifikasi tingkat ketebalan atau tingkat transparansi dari Ig atau In dengan formula sederhana sebagai berikut:
0<=alphaFactor<=1 (semakin tinggi nilai alphaFactor semakin transparan bgImgAlpha (Flag)

fgImgAlpha = alphaFactor .* fgImg;
bgImgAlpha = (1 – alphaFactor) .* bgImg;

berikut script yang dijalankan dimatlab dengan alphaFactor =0.4,
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc, clear all, close all
Ig=imread(‘Indonesia_flagx.png’);
If=imread(‘n.png’);

bgImg = double(Ig);
fgImg = double(If);

alphaFactor = 0.4;

fgImgAlpha = alphaFactor .* fgImg;
bgImgAlpha = (1 – alphaFactor) .* bgImg;

fusedImgt = fgImgAlpha + bgImgAlpha;
fusedImg = uint8(fusedImgt);

figure;
subplot(131);imshow(Ig);title(‘BackGround’);
subplot(132);imshow(If);title(‘ForeGround’);
subplot(133);imshow(fusedImg);title(‘Fused’);

figure;imshow(fusedImg)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Screenshot from 2015-11-15 11:04:48