Penggunaan fungsi Fuzzy C Means pada Matlab untuk segmentasi gambar Sekedar Coretan

Penggunaan fungsi Fuzzy C­Means pada Matlab untuk
segmentasi gambar
This entry was posted on April 12, 2012, in Kode. Bookmark the permalink. Leave a comment

Untuk memanggil fungsi Fuzzy C­Means pada Matlab dapat menggunakan syntax:
[center,U,obj_fcn] = fcm(data,cluster_n)
Dengan cluster_n adalah banyaknya cluster,center adalah matrix akhir pusat cluster, U adalah
matrix keanggotaan dan obj_fcn adalah objective function setiap iterasi.
Pada contoh ini fungsi Fuzzy C­Means digunakan untuk mensegmentasi gambar. Gambar yang
disegmentasi seperti contoh pada postingan K­Means sebelumnya.
Setelah gambar dibaca dan diambil fiturnya (sebagai contoh fitur nilai RGB gambar) kemudian
dipanggil fungsi Fuzzy C­Means. Pada contoh ini menggunakan 3 cluster
sizes = size(image);
fitur = double(reshape(image,sizes(1)*sizes(2),3));
[center,U,obj_fcn] = fcm(fitur,3)
Kemudian dari membership function yang di dapat akan diolah kembali (sebagai contoh sederhana
disini nilai plausibility dari matrix U diambil yang tertinggi dan dijadikan cluster piksel tersebut) 
dengan kode berikut ini
numPixel=sizes(1)*sizes(2);
kelas=zeros(numPixel,1);
for i=1:numPixel

kelas(i)=find(U(:,i)==max(U(:,i)));
end
final=reshape(kelas,sizes(1),sizes(2));
Setelah itu menggunakan median filter untuk memfilter noise pada gambar. Untuk ukuran
jendela neighborhood pikselnya ([m n]) pada contoh ini adalah [5 5]
finalfilter = medfilt2(final,[5 5]);
Kemudian hasil kelasnya dapat dilihat pada Gambar1
figure;imshow(finalfilter,[])

Gambar1 hasil gambar kelas,natural image dariBerkeley database nomer 25098
hasil gambar kelas dapat ditambahkan contour. Hasil segmentasinya dengan contour ditunjukkan
pada gambar2

Gambar2
Referensi
(1) The Berkeley Segmentation Dataset and Benchmark,