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

Posted on December 26, 2016, in Pengolahan Citra and tagged , , , , , , . Bookmark the permalink. 12 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…

  4. Sehabis divisualisasikan dengan bounding box bagaimana cara croping imagenya semisal imagenya yg terditeksi lebih dari 1?.. terimakasih

  5. Assalamualaikum Ka. saya mau nanya apakah benar langkah saya ini, jika saya akan membuat file .mat dalam untuk tujuan menyimpan database citra yang akan digunakan untuk mencocokan citra yang akan diinput saat proses identifikasi ?

    • Waalaikumsalam Wr. Wb.
      untuk database dalam sistem identifikasi, citra dapat disimpan dalam format .mat
      tetapi pada umumnya yg disimpan dalam database berformat .mat adalah ciri yg diekstrak dari citra training
      jadi bukan seluruh nilai intensitas piksel citranya yg disimpan tetapi hanya ciri nya saja yg diekstrak
      mengenai ekstraksi ciri, azkya bisa membaca materinya pada halaman berikut ini
      https://pemrogramanmatlab.wordpress.com/pengolahan-citra-digital/ekstraksi-ciri-citra-digital/

    • wah iya Ka saya sudah baca dan saya juga udah liat contohnya program yang citra daun. saya jd pengen minta saran nih ka untuk tugas akhir saya sedang bikin program finger vein dan untuk identifikasinya kalau bikin net.mat kaya dicitra daun gmn ya Ka ? tp saya liat citra daun terbilang dikit baris kodenya, sedangkan program fingervein yg sedang saya buat itu lebih dari satu file .m nya……. bisakah dibikin file .mat atau memungkinkan bikin perbadingan folder pathname gitu memang bs ka untuk matching image nya? mohon sarannya Ka.

    • untuk saran saya, lebih baik koding ekstraksi ciri dijadikan satu dalam satu mfile sehingga ciri yg diekstrak bisa disimpan dalam satu file .mat
      dibandingkan dg menjalankan beberapa mfile kemudian menggabungkan ciri-ciri yg terpisah ke dalam satu file .mat

  6. Siap.. Terima kasih banyak atas jawaban dan sarannya Ka Adi.

  7. sama sama azkya
    sukses utk penelitiannya

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: