Pengolahan Citra untuk Deteksi Warna Kulit (Skin Detection)


Deteksi warna kulit (skin color detection) merupakan salah satu proses segmentasi yang memisahkan region objek dalam citra berdasarkan pada perbedaan warna. Objek yang memiliki warna tertentu dipisahkan dengan objek yang memiliki warna lainnya. Hasil segmentasi dapat digunakan untuk proses selanjutnya seperti ekstraksi ciri atau klasifikasi citra. Pada contoh ini, warna kulit didefiniskan dalam ruang warna  YCbCr dengan nilai Cb antara 77 s.d 127 dan nilai Cr antara 133 s.d 173.

Deteksi warna kulit merupakan salah satu tahapan awal dalam computer vision untuk mendeteksi hal-hal yang berkaitan dengan manusia (people detection). Deteksi warna kulit dapat dijadikan sebagai metode segmentasi  untuk pengenalan wajah (face recognition) maupun pengenalan organ tubuh lainnya. Sistem tersebut dapat dikembangkan lebih lanjut untuk sistem biometrik.

Langkah-langkah proses segmentasi warna kulit adalah sebagai berikut:
1. Melakukan penyeimbangan warna RGB (Color Balanced 24-bit RGB Image)
2. Melakukan transformasi ruang warna RGB menjadi YCbCr
3. Melakukan segmentasi warna kulit berdasarkan nilai Cb antara 77 s.d 127 dan nilai Cr antara 133 s.d 173
4. Menampilkan hasil segmentasi

Hasil segmentasi ditunjukkan pada gambar berikut:

No                     Citra Asli      Hasil Deteksi Warna Kulit
1 image1 image1out
2 image2 image2out
3 image3 image3out
4 image4 image4out

Koding untuk melakukan deteksi warna kulit adalah:

clc;clear;close all;warning off all;

%read the image
I = imread('image1.jpg');

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);
Cb = img_ycbcr(:,:,2);
Cr = img_ycbcr(:,:,3);

%Detect Skin
[r,c,v] = find(Cb>=77 & Cb<=127 & Cr>=133 & Cr<=173);
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

bin = imfill(bin,'holes');
R(~bin) = 0;
G(~bin) = 0;
B(~bin) = 0;
out = cat(3,R,G,B);

imshow(I);
figure; imshow(out);

Koding tersebut merupakan modifikasi dari koding yang diunggah oleh Gaurav Jain pada http://www.mathworks.com/matlabcentral/fileexchange/28565-skin-detection

Sedangkan source code dan citra untuk mendeteksi kulit pada pemrograman matlab di atas dapat diunduh pada laman berikut ini: Source Code

Posted on October 10, 2016, in Pengenalan Matlab, Pengolahan Citra and tagged , , , , , , , , , . Bookmark the permalink. Leave a comment.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: