Segmentasi Citra dengan Metode Multi Thresholding dan K-Means Clustering


Berikut ini merupakan contoh aplikasi pemrograman matlab untuk melakukan segmentasi citra dengan menggunakan dua buah metode yang berbeda. Metode yang pertama yaitu multi thresholding, sedangkan metode yang kedua adalah k-means clustering. Segmentasi dilakukan terhadap citra rose.jpg yang ditunjukkan pada gambar di bawah ini.

rose.jpg

A. Multi thresholding
Pada contoh ini, metode multi thresholding digunakan untuk memisahkan antar region dalam suatu citra berdasarkan pada perbedaan nilai intensitas piksel dari citra grayscale. Prinsip dari metode ini sama seperti metode thresholding pada umumnya namun yang membedakan adalah jumlah nilai threshold yang digunakan. Pada contoh ini digunakan dua buah nilai threshold untuk memisahkan antar region.

Langkah-langkah pemrogramannya adalah sebagai berikut:
1. Membaca dan menampilkan citra asli

clc;clear;close all;

Img = imread('rose.jpg');
figure, imshow(Img);

sehingga diperoleh tampilan sebagai berikut

2. Mengekstrak dan menampilkan komponen red dari citra asli

red = Img(:,:,1);
figure, imshow(red);

sehingga diperoleh komponen red dalam bentuk citra grayscale

3. Melakukan multi thresholding pada komponen red dengan nilai threshold 100 dan 240.
Nilai intensitas piksel dari komponen red antara 0-100 akan masuk dalam region 1
Nilai intensitas piksel antara 100-240 akan masuk dalam region 2
Nilai intensitas piksel antara 240-255 akan masuk dalam region 3

seg_I = imquantize(red,[100 240]);

RGB = label2rgb(seg_I);
figure,imshow(RGB);

sehingga diperoleh citra hasil segmentasi sebagai berikut:

pada gambar di atas, region 1 direpresentasikan oleh objek berwarna biru, region 2 berwarna cyan, dan region 3 berwarna kuning.

4. Menampilkan hasil segmentasi pada masing-masing region

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

nRegions = 3;

for k = 1:nRegions
    color = Img;
    color(rgb_label ~= k) = 0;
    segmented_images{k} = color;
    figure,imshow(segmented_images{k}), title(strcat(['objects in region ',num2str(k)]));
end

Citra hasil segmentasi ditunjukkan pada gambar di bawah ini:

Region 1

Region 2

Region 3

B. K-means Clustering
Pada contoh ini, metode k-means clustering digunakan untuk memisahkan antar region dalam citra berdasarkan pada perbedaan warna. Citra asli yang semula dalam ruang warna RGB dikonversi menjadi ruang warna L*a*b kemudian dilakukan klustering dengan menggunakan komponen a dan b.

Langkah-langkah pemrogramannya adalah sebagai berikut:
1. Membaca dan menampilkan citra asli

clc;clear;close all;

Img = imread('rose.jpg');
figure, imshow(Img);

sehingga diperoleh tampilan sebagai berikut

2. Mengkonversi ruang warna citra yang semula berada pada ruang warna RGB menjadi ruang warna L*a*b

cform = makecform('srgb2lab');
lab = applycform(Img,cform);
figure, imshow(lab);

hasil konversi ruang warna citra adalah

3. Melakukan klustering dengan masukan berupa komponen a dan b dari citra L*a*b. Jumlah kluster yang digunakan adalah 3.

ab = double(lab(:,:,2:3));
nrows = size(ab,1);
ncols = size(ab,2);
ab = reshape(ab,nrows*ncols,2);

nColors = 3;
[cluster_idx, cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean', ...
                                      'Replicates',3);

pixel_labels = reshape(cluster_idx,nrows,ncols);
RGB = label2rgb(pixel_labels);
figure, imshow(RGB,[]), title('image labeled by cluster index');

Citra hasil segmentasi ditunjukkan pada gambar berikut:

Pada gambar di atas, kluster 1 direpresentasikan oleh objek berwarna biru, kluster 2 berwarna cyan, dan kluster 3 berwarna kuning.

4. Menampilkan 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;
    figure,imshow(segmented_images{k}), title(strcat(['objects in cluster ',num2str(k)]));
end

Kluster 1

Kluster 2

Kluster 3

Segmentasi citra dengan metode multi thresholding dan k-means clustering dapat diterapkan untuk memisahkan antar region dalam suatu citra. Pada contoh di atas, multi thresholding memisahkan antar region berdasarkan perbedaan terang gelap dari citra grayscale. Sedangkan k-means clustering memisahkan antar region berdasarkan pada perbedaan warna citra. Pemilihan metode segmentasi citra selalu disesuaikan dengan karakteristik dari citra asli yang akan diolah.

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

Posted on October 29, 2016, in Pengenalan Matlab, Pengolahan Citra and tagged , , , , , , , , , , , , , , , . Bookmark the permalink. 10 Comments.

  1. permisi pak. mau tanya, apakah dengan menggabungkan 2 metode segmentansi citra diatas dapat membuat hasil yang lebih akurat? apakah tidak terjadi error saat menggunakan kedua segmentasi secara berurutan?

  2. Fawaz Bahreisy

    saya punya tugas untuk skripsi segmentasi wajah dengan k-means tetapi colorspacenya l*a*b?apakah tahapan diatas ini bisa untuk memisah backgroundnya?

  3. Fawaz Bahreisy

    mas adi mau tanya saya dpet error kyak gini mksudx apa ya?
    cluster_idx, cluster_center] = kmeans(ab,nColors,’distance’,’sqEuclidean’, …

  4. Fawaz Bahreisy

    oiya ini yang diapakai matlab versi berapa ya?

  5. Fawaz Bahreisy

    mas adi mau tanya ada ndak tutorial yang k-means nya tanpa library alias manual perhitunganx?

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: