Pengolahan Video untuk Mendeteksi Warna Kulit
Deteksi warna kulit dapat dilakukan dengan cara melakukan transformasi ruang warna citra. Berikut ini merupakan contoh aplikasi pemrograman matlab mengenai deteksi warna kulit pada ruang warna YCbCr yang terdiri dari luminance (Y) dan chrominance (Cb dan Cr). Langkah-langkah pemrogramannya adalah sebagai berikut:
1. Membaca video asli
2. Mengekstrak setiap frame pada video asli
3. Melakukan transformasi ruang warna citra yang semula berada pada ruang warna RGB menjadi ruang warna YCbCr
4. Melakukan segmentasi warna kulit pada ruang warna YCbCr berdasarkan nilai Y (20 s.d 60), Cb (117 s.d 127) dan Cr (133 s.d 153)
5. Menjalankan seluruh frame hasil pengolahan secara sekuensial dalam bentuk video
Pada contoh ini digunakan video dengan spesifikasi:
Property | Nilai |
Title | Maze Runner The Scorch Trials 2015.mp4 |
Durasi | 10 detik |
Panjang frame | 640 |
Lebar frame | 480 |
Frame rate | 23 frame/ detik |
Jumlah frame | 246 |
Tampilan video yang digunakan yaitu
Sedangkan tampilan source code pengolahan video adalah:
clc;clear;close all;warning off all; vid = VideoReader('Maze Runner The Scorch Trials 2015.mp4'); vidWidth = vid.Width; vidHeight = vid.Height; vidFrameRate = vid.FrameRate; mov = struct('cdata',zeros(vidHeight,vidWidth,3,'uint8'),... 'colormap',[]); k = 1; while hasFrame(vid) Img = readFrame(vid); out = uint8(zeros(size(Img,1), size(Img,2), size(Img,3))); %R,G,B components of the input image R = Img(:,:,1); G = Img(:,:,2); B = Img(:,:,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); Y = img_ycbcr(:,:,1); Cb = img_ycbcr(:,:,2); Cr = img_ycbcr(:,:,3); %Detect Skin [r,c,v] = find(Y>=20 & Y<=60 & Cb>=117 & Cb<=127 & Cr>=133 & Cr<=153); numind = size(r,1); bin = false(size(Img,1), size(Img,2)); %Mark Skin Pixels for i=1:numind bin(r(i),c(i)) = 1; end bin = imfill(bin,'holes'); bin = bwareaopen(bin,4000); str = strel('disk',10); bin = imdilate(bin,str); stats = regionprops(bin,'All'); bbox = cat(1, stats.BoundingBox); RGB = insertShape(Img,'rectangle',bbox,'color','yellow','LineWidth',5); mov(k).cdata = RGB; k = k+1; end hf = figure; set(hf,'position',[150 150 vidWidth vidHeight]); movie(hf,mov,1,vidFrameRate);
Langkah-langkah pengolahan pada setiap frame adalah sebagai berikut:
1. Membaca frame citra
2. Melakukan normalisasi citra RGB
3. Melakukan transformasi ruang warna citra yang semula berada pada ruang warna RGB menjadi ruang warna YCbCr
4. Tampilan masing-masing kanal Y, Cb, dan Cr
Kanal Luminance (Y)
Kanal Chrominance (Cb) yang merepresentasikan perbedaan antara komponen biru dan nilai referensi
Kanal Chrominance (Cr) yang merepresentasikan perbedaan antara komponen merah dan nilai referensi
5. Melakukan segmentasi warna kulit pada ruang warna YCbCr berdasarkan nilai Y (20 s.d 60), Cb (117 s.d 127) dan Cr (133 s.d 153) sehingga diperoleh citra biner
6. Melakukan operasi morfologi filling holes
7. Menghilangkan object yang luasnya kurang dari 4000 piksel. Proses tersebut dilakukan dengan tujuan untuk menghilangkan noise
8. Melakukan operasi morfologi dilasi untuk menyempurnakan hasil segmentasi
9. Citra biner hasil operasi morfologi di atas kemudian dijadikan sebagai masking untuk memvisualisasikan bounding box pada frame citra asli
Sedangkan hasil pengolahan frame yang diperoleh ditunjukkan pada tabel berikut ini:
Urutan frame | Frame asli | Frame hasil pengolahan |
1 | ![]() |
![]() |
60 | ![]() |
![]() |
120 | ![]() |
![]() |
180 | ![]() |
![]() |
240 | ![]() |
![]() |
Tampilan video hasil pengolahan yaitu
File source code beserta video pada pemrograman di atas dapat diperoleh pada halaman berikut ini: Source Code
Tutorial pengolahan video untuk mendeteksi warna kulit dapat dilihat pada video berikut ini:

Posted on December 18, 2016, in Pengolahan Video and tagged analisis video menggunakan matlab, contoh aplikasi matlab pengolahan video, contoh koding pengolahan video, deteksi warna kulit, ekstraksi citra matlab, ekstraksi frame matlab, ekstraksi video matlab, frame citra, frame video, Matlab, olah video matlab, pemrograman matlab, Pengolahan Video, pengolahan video matlab, program pengolahan video matlab, segmentasi warna kulit, source code pengolahan video matlab, transformasi ruang warna, video matlab, video processing matlab. Bookmark the permalink. 1 Comment.
Permisi kak mau tanya, kalau untuk merubah frame yg telah ubah menjadi kebentuk video lagi, lalu di imshow, caranya gimana kak?