Segmentasi Citra Grayscale dengan Metode K-Means Clustering


K-means clustering merupakan salah satu algoritma yang dapat mempartisi data menjadi beberapa region kluster. Proses partisi data didasarkan pada jarak terdekat antara data dengan centroid masing-masing kluster. Berikut ini merupakan salah satu contoh pemrograman matlab mengenai segmentasi citra grayscale dengan metode k-means clustering. Citra yang digunakan adalah citra cat.jpg di mana objek yang ingin disegmentasi adalah berupa hewan kucing, sedangkan background adalah berupa rumput.

Langkah-langkah segmentasi citra adalah sebagai berikut:
1. Membaca citra rgb asli

2. Mengkonversi citra RGB menjadi citra grayscale menggunakan persamaan

Grayscale = 0.2989 * R + 0.5870 * G + 0.1140 * B

3. Melakukan segmentasi citra grayscale dengan metode k-means clustering. Algoritma k-means digunakan untuk mempartisi dua region kluster

Pada citra hasil segmentasi di atas, kluster 1 direpresentasikan oleh region berwarna biru, sedangkan kluster 2 direpresentasikan oleh region berwarna kuning

4. Memilih region kluster yang memiliki luas paling kecil. Hal tersebut dilakukan agar diperoleh region object yaitu hewan kucing

5. Melakukan filtering menggunakan median filter untuk menyempurnakan hasil segmentasi

6. Melakukan operasi morfologi berupa area opening dengan tujuan untuk menghilangkan noise

7. Citra biner hasil operasi morfologi kemudian dijadikan sebagai masking untuk memvisualisasikan bounding box pada citra rgb asli

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

Sedangkan tampilan source code nya adalah

clc; clear; close all;

Img = imread('cat.jpg');
grayImage = double(rgb2gray(Img));

subplot(2, 2, 1);
imshow(Img, []);
title('Original Image');

subplot(2, 2, 2);
imshow(grayImage, []);
title('Grayscale Image');

numberOfClasses = 2;
indexes = kmeans(grayImage(:), numberOfClasses);
classImage = reshape(indexes, size(grayImage));

h = subplot(2, 2, 3);
imshow(classImage, []);
title('Classified Image');
colormap(h,parula);

class = zeros(size(grayImage));
area = zeros(numberOfClasses,1);

for n = 1:numberOfClasses
    class(:,:,n) = classImage==n;
    area(n) = sum(sum(class(:,:,n)));
end

[~,min_area] = min(area);

object = classImage==min_area;
bw = medfilt2(object,[5 5]);
bw = bwareaopen(bw,5000);
s = regionprops(bw,'BoundingBox');
bbox = cat(1, s.BoundingBox);
RGB = insertShape(Img, 'FilledRectangle', bbox, 'Color', 'yellow', 'Opacity', 0.3);
RGB = insertObjectAnnotation(RGB,'rectangle',bbox,'Object','TextBoxOpacity',0.9,'FontSize',18);
subplot(2, 2, 4);
imshow(RGB,[]);
title('Detected Object');

Posted on December 26, 2016, in Pengolahan Citra and tagged , , , , , , . Bookmark the permalink. 4 Comments.

  1. assalamuallaikum mas

    maaf, kira2 ini salah di mananya ya mas

    ??? Error: File: segmentasi2.m Line: 33 Column: 3
    Expression or statement is incorrect–possibly unbalanced (, {, or
    [.

    trimakasih mas

  2. error pas di code ini mas
    [~,min_area] = min(area);

  3. assalamualaikum bang adi mohon pencerahannya mungkin ada contoh program kmeans klastering yg pengelompokkannya berdasarkan nilai rgb…terimakasih…

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: