Program Segmentasi Citra Dengan Metode K-Means Clustering Menggunakan Matlab
Desember 18, 2017
Add Comment
Semangat pagi temen-temen, pada senin pagi yang cerah ini, kembali saya akan membagikan tutorial coding tentang segmentasi citra menggunakan matlab.
Kalau sebelumnya saya telah menjelaskan tentang segmentasi citra dengan metode thresholding, kali ini saya tetap akan menjelaskan tentang segmentasi citra, namun menggunakan metode K-Means Clustering.
Metode K-Means Clustering sendiri digunakan untuk memisahkan antar region dalam citra berdasarkan pada perbedaan warna.
Citra asli yang semula dalam ruang warna RBG di konversi menjadi ruang warna L*a*b kemudian dilakukan klustering dengan menggunakan komponen a dan b.
Berikut langkah-langkah pemrograman segmentasi citra dengan metode K-Means Clustering menggunakan matlab.
:: Membaca dan menampilkan citra asli.
Sehingga diperoleh tampilan sebagai berikut.
:: Mengkonversi ruang warna citra yang semula berada pada ruang warna RBG menjadi ruang warna L*a*b
Kalau sebelumnya saya telah menjelaskan tentang segmentasi citra dengan metode thresholding, kali ini saya tetap akan menjelaskan tentang segmentasi citra, namun menggunakan metode K-Means Clustering.
Metode K-Means Clustering sendiri digunakan untuk memisahkan antar region dalam citra berdasarkan pada perbedaan warna.
Citra asli yang semula dalam ruang warna RBG di konversi menjadi ruang warna L*a*b kemudian dilakukan klustering dengan menggunakan komponen a dan b.
Berikut langkah-langkah pemrograman segmentasi citra dengan metode K-Means Clustering menggunakan matlab.
:: Membaca dan menampilkan citra asli.
Img = imread('orange.jpg');
axes(handles.axes1);
imshow(Img);
Sehingga diperoleh tampilan sebagai berikut.
:: Mengkonversi ruang warna citra yang semula berada pada ruang warna RBG menjadi ruang warna L*a*b
cform = makecform('srgb2lab');
lab = applycform(Img,cform);
axes(handles.axes2);
imshow(lab);
Hasil konversi ruang warna citra adalah sebagai berikut.
:: 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);
axes(handles.axes3);
imshow(RGB,[]), title('image labeled by cluster index');
Hasil segmentasi yang diperoleh adalah sebagai berikut.
:: 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
Hasil yang diperoleh adalah sebagai berikut.
Berikut code lengkap Program Segmentasi Citra Dengan Metode K-Means Clustering Menggunakan Matlab.
function varargout = KMeans(varargin)
% KMEANS M-file for KMeans.fig
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @KMeans_OpeningFcn, ...
'gui_OutputFcn', @KMeans_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before KMeans is made visible.
function KMeans_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% Choose default command line output for KMeans
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% --- Outputs from this function are returned to the command line.
function varargout = KMeans_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in KMeans.
function KMeans_Callback(hObject, eventdata, handles)
% hObject handle to KMeans (see GCBO)
Img = imread('orange.jpg');
axes(handles.axes1);
imshow(Img);
%Mengkonversi ruang warna citra yang semula berada pada ruang warna RGB menjadi ruang warna L*a*b
cform = makecform('srgb2lab');
lab = applycform(Img,cform);
axes(handles.axes2);
imshow(lab);
%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);
axes(handles.axes3);
imshow(RGB,[]), title('image labeled by cluster index');
%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
% --- Executes on button press in Exit.
function Exit_Callback(hObject, eventdata, handles)
% hObject handle to Exit (see GCBO)
msgbox('Thanks for using Image Editor tool');
pause(1);
close();
close();
Berikut screenshoot hasil running program.
:: Tampilan awal
:: K-Means
:: Exit
0 Response to "Program Segmentasi Citra Dengan Metode K-Means Clustering Menggunakan Matlab"
Posting Komentar