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 aplikasi pemrograman matlab mengenai segmentasi citra grayscale dengan metode k-means clustering. File citra yang digunakan adalah ‘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

File source code lengkap beserta citra pada pemrograman di atas dapat diperoleh melalui halaman berikut ini: Source Code

Sedangkan tampilan source code nya adalah

clc; clear; close all;

Img = imread('cat.jpg');
grayImage = 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 = medfilt(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');

Penerapan algoritma k-means clustering untuk segmentasi citra grayscale dapat dilihat pada video tutorial berikut ini:

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

  8. ada gak ya contoh program penerapan menggunakan kalman filter ?

  9. kalau penerapannya mudah kalman filter atau background subtraction dalam deteksi objek ?

  10. selamat pagi, mau tanya apa itu function parula? apa itu function sendiri? trims

  11. kalau mau dibikin GUI, gimana ya caranya?
    trimakasih 😀

  12. asslamuallaikum bang, saya ini eror di bbox, apakah jika berbeda versi matlab akan berpengaruh pada codingnya? terimakasih
    wassalamuallaikum

    • Waalaikumsalam
      Source code di atas tidak bisa dijalankan jika hanya dicopypaste saja
      Source code lengkap bisa diperoleh melalui tokopedia sehingga bisa langsung dirunning dan dikembangkan

  13. siang kak saya mau bertanya, kalau metode yg cocok untuk segmentasi citra telapak tangan kira2 apa ya ? makasih kak

  14. Astri Novilia Prayuni

    selamat malam bang, saya mau nanya.. cara menghilangkan background dahak pada citra tbc agar yg tersisa hanya bakterinya itu gimana ya?
    makasih bang.

  15. Fawaz Bahreisy

    mau tanya apakah bisa dilakukan proses morfologi setelah k-means?kalau boleh tau gimana caranya ya?

  16. Maaf Pak Mau Tanya
    Persamaan Grayscale = 0.2989 * R + 0.5870 * G + 0.1140 * B itu dapat dari mana Ya Pak
    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 )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: