DETEKSI WAJAH DENGAN METODE THRESHOLDING PADA MATLAB

Membuat Pendeteksi Wajah pasti sering kan atau sering kita sebut Image Proccessing on face picture kita akan bahas terlebih dahulu tentang metode yang digunakan 


 Apa yang dimaksud thresholding??

 Thresholding merupakan salah satu cara untuk membedakan/mengelompokkan citra di mana prosesnya didasarkan pada perbedaan derajat keabuan citra atau grayscale.


Tujuan membedakan/mengelompokkan (segmentasi) citra adalah untuk memisahkan antara objek dengan background. Metode segmentasi citra dapat dikembangkan lebih lanjut agar diperoleh hasil segmentasi yang lebih baik lagi. atau mendeteksi objek melalui gambar. hasil akan seperti contoh dibawah ini 




Hal yang perlu diperhatikan Dalam proses ini dibutuhkan suatu nilai batas yang disebut dengan nilai Threshold.
note :
Nilai intensitas citra yang lebih dari atau sama dengan nilai threshold akan diubah menjadi 1 (berwarna putih) sedangkan nilai intensitas citra yang kurang dari nilai threshold akan diubah menjadi 0 (berwana hitam). Sehingga citra keluaran dari hasil thresholding adalah berupa citra biner.

Silahkan open program matlat pilih buka new M.file
Perintah MATLAB yang digunakan untuk melakukan thresholding pada image proceccing di atas ialah:

clc; clear; close all; warning off all;

%read the image
I = imread('satomi.jpg');
figure; imshow(I); %gambar 1

out = uint8(zeros(size(I,1), size(I,2), size(I,3)));

%R,G,B components of the input image
R = I(:,:,1);
G = I(:,:,2);
B = I(:,:,3);

%Inverse of the Avg values of the R,G,B
mR = 1/(mean(mean(R)));
mG = 1/(mean(mean(G)));
mB = 1/(mean(mean(B)));

%Smallest Avg Value (MAX because we are dealing with the inverses)
maxRGB = max(max(mR, mG), mB);

%Calculate the scaling factors
mR = mR/maxRGB;
mG = mG/maxRGB;
mB = mB/maxRGB;

%Scale the values
out(:,:,1) = R*mR;
out(:,:,2) = G*mG;
out(:,:,3) = B*mB;

%Convert the image from RGB to YCbCr
img_ycbcr = rgb2ycbcr(out);
figure, imshow(img_ycbcr); %gambar 2

Y = img_ycbcr(:,:,1);
Cb = img_ycbcr(:,:,2);
Cr = img_ycbcr(:,:,3);

figure, imshow(Y); %gambar 3
figure, imshow(Cb); %gambar 4
figure, imshow(Cr); %gambar 5

%Detect Skin
[r,c,v] = find(Cb>=77 & Cb<=128 & Cr>=133 & Cr<=193);
numind = size(r,1);

bin = false(size(I,1), size(I,2));

%Mark Skin Pixels
for i=1:numind
    bin(r(i),c(i)) = 1;
end

figure, imshow(bin); %gambar 6
% filling holes untuk mengisi objek yang berlubang
bin = imfill(bin,'holes');
figure, imshow(bin); %gambar 7

bin = bwareaopen(bin,500);
figure; imshow(bin); %gambar 8

R(~bin) = 0;
G(~bin) = 0;
B(~bin) = 0;
out = cat(3,R,G,B);
figure; imshow(out); %gambar 9

s = regionprops(bin,'BoundingBox');
bbox = cat(1, s.BoundingBox);

RGB = insertShape(I, 'rectangle', bbox, 'LineWidth', 5);
figure, imshow(RGB); %gambar 10

Silahkan download file satomi.jpg atau rubah dengan file gambar sesuai keinginan 
Penjelasan : 
%Detect Skin
[r,c,v] = find(Cb>=77 & Cb<=128 & Cr>=133 & Cr<=193);
numind = size(r,1);

Dalam nilai batas threshold bisa dirubah sesuai nilai data pixel yang kamu batasi 
bisa dipantau pada bagian workspace pada program Matlab untuk berasan tiap gambar yang diproses

satomi.jpg 


Tutorial lengkap pada video dibawah





0 Comments