Segmentasi Warna menggunakan Algoritma Fuzzy C-Means Clustering


Fuzzy c-means clustering merupakan algoritma klustering yang mempartisi data berdasarkan pada jarak antara data masukan dengan pusat kluster terdekat. Sama seperti pada algoritma k-means clustering, pusat cluster selalu diupdate berulang-ulang hingga dihasilkan pembagian kluster yang optimal. Pada algoritma ini, perulangan didasarkan pada minimisasi fungsi objektif.

Berikut ini merupakan contoh pemrograman matlab untuk melakukan segmentasi warna suatu citra digital menggunakan algoritma fuzzy c-means clustering. Citra yang digunakan adalah citra sky-grass.jpg yang memuat dua buah objek yaitu langit dan rumput seperti ditunjukkan pada gambar di bawah ini.

Pada contoh ini dilakukan segmentasi warna citra untuk memisahkan antara kedua objek tersebut. Langkah-langkah pemrogramannya adalah:
1. Membaca dan menampilkan citra asli

clc; clear; close all;

Img = imread('sky-grass.jpg');
figure, imshow(Img), title('Original image');

sehingga diperoleh tampilan

2. Melakukan transformasi ruang warna citra yang semula berada pada ruang warna RGB (red, green, blue) menjadi ruang warna HSV (hue, saturation, value)

HSV = rgb2hsv(Img);
figure, imshow(HSV), title('HSV image');

Citra HSV yang dihasilkan adalah

3. Melakukan klustering menggunakan algoritma fuzzy c-means, dengan masukan berupa nilai hue dan saturation dari citra HSV

HS = double(HSV(:,:,1:2));
nrows = size(HS,1);
ncols = size(HS,2);
HS = reshape(HS,nrows*ncols,2);
nColors = 2;
[centers,U] = fcm(HS,nColors);

maxU = max(U);
index1 = find(U(1,:) == maxU);
index2 = find(U(2,:) == maxU);

figure,
plot(HS(index1,1),HS(index1,2),'ob')
hold on
plot(HS(index2,1),HS(index2,2),'or')
plot(centers(1,1),centers(1,2),'xk','MarkerSize',15,'LineWidth',3)
plot(centers(2,1),centers(2,2),'xk','MarkerSize',15,'LineWidth',3)
title('Fuzzy c-means clustering')
hold off

dihasilkan grafik seperti tampak pada gambar berikut

Berdasarkan pada grafik di atas, tampak bahwa algoritma fuzzy c-means berhasil mempartisi data masukan menjadi dua buah kluster.

4. Menampilkan citra hasil segmentasi yang terlabelli

cluster_idx = zeros(nrows,ncols);
cluster_idx(index1) = 1;
cluster_idx(index2) = 2;
pixel_labels = reshape(cluster_idx,nrows,ncols);
RGB = label2rgb(pixel_labels);
figure, imshow(RGB,[]), title('Image labeled by cluster index');

Citra hasil segmentasi

5. Menampilkan citra hasil segmentasi pada masing-masing kluster

segmented_images = cell(1,3);
rgb_label = repmat(pixel_labels,[1 1 3]);

for k = 1:nColors
    color = Img;
    color(rgb_label ~= k) = 0;
    segmented_images{k} = color;
end

figure,imshow(segmented_images{1}), title('Object in cluster 1');
figure,imshow(segmented_images{2}), title('Object in cluster 2');

kluster 1

kluster 2
6

Berdasarkan pada gambar hasil segmentasi tersebut, terlihat bahwa algoritma fuzzy c-means clustering mampu untuk memisahkan objek langit dan rumput berdasarkan pada perbedaan warna.

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

Posted on November 5, 2016, in 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: