Multi-Level Thresholding


Multi-level thresholding merupakan metode segmentasi citra thresholding yang menggunakan dua atau lebih nilai threshold. Persamaan yang digunakan untuk mengkonversi nilai piksel citra grayscale menjadi biner pada metode multi-level thresholding adalah:

di mana
f(x,y) adalah citra grayscale
g(x,y) adalah citra biner
T1 adalah nilai threshold bawah
T2 adalah nilai threshold atas

Ilustrasi perubahan nilai piksel pada proses multi-level thresholding ditunjukkan pada gambar di bawah ini

Berikut ini merupakan contoh pengolahan citra digital beserta pemrograman MATLAB untuk melakukan segmentasi warna kulit menggunakan metode multi-level thresholding.

Langkah-langkahnya adalah sebagai berikut:

1. Membaca citra RGB asli

clc; clear; close all; warning off all;
 
%read the image
I = imread('selena gomez.jpg');
figure; imshow(I);

2. Mengkonversi ruang warna citra yang semula berada pada ruang warna RGB menjadi YCbCr

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);

3. Mengekstrak masing-masing komponen Y, Cb, dan Cr

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

Komponen Y

Komponen Cb

Komponen Cr

4. Melakukan multi-level thresholding pada komponen Cb dan Cr

Pada komponen Cb dilakukan thresholding dengan nilai T1 = 77 dan T2 = 127. Sedangkan pada komponen Cr dilakukan thresholding dengan nilai T1 = 133 dan T2 = 193

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

5. Melakukan operasi morfologi berupa filling holes untuk mengisi region objek yang kosong

bin = imfill(bin,'holes');
figure, imshow(bin);

6. Melakukan operasi morfologi berupa area opening untuk menghilangkan noise (region yang bukan objek)

bin = bwareaopen(bin,1000);
figure; imshow(bin);

7. Memvisualisasikan hasil segmentasi kulit pada citra RGB

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

8. Memvisualisasikan hasil segmentasi kulit dalam bentuk bounding box

s = regionprops(bin,'BoundingBox');
bbox = cat(1, s.BoundingBox);
 
RGB = insertShape(I, 'rectangle', bbox, 'LineWidth', 5);
figure, imshow(RGB);

Hasil pengolahan citra di atas menunjukkan bahwa metode yang diterapkan mampu untuk melakukan deteksi warna kulit dengan baik. Hasil deteksi ini dapat dikembangkan lebih lanjut dalam tahapan computer vision.

Source code dan citra yang digunakan pada pemrograman di atas dapat diunduh melalui halaman berikut ini: Source Code MATLAB

Posted on July 26, 2017, in Pengenalan Pola, Pengolahan Citra and tagged , , , , , , , , , , , , , , , , , , , , , , , , , , , . Bookmark the permalink. 4 Comments.

  1. Mas untuk multilevel thresholding ini kenapa menggunakan ruang warna YCbCr ya?

  2. Mas Adi
    Mau nanya mengenai SOM
    Bagaimana cara menampilkan pelabelan pada SOM secara otomatis yang berfungsi untuk membedakan suatu gambar normal dan tidak normal
    Terima kasih

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: