Klasifikasi Tingkat Kematangan Pada Tanaman Cabai Rawit (Capsicum Frutescens) Berdasarkan Fitur Warna Dengan Metode Support Vector Machine (SVM)
Cabai rawit (Capsicum frutescens) merupakan salah satu komoditas hortikultura yang memiliki peran penting dalam industri pangan. Penentuan tingkat kematangan cabai berpengaruh langsung terhadap kualitas produk dan nilai jual. Dalam praktiknya, sortasi cabai di lapangan masih banyak dilakukan secara manual oleh petani atau pekerja sortasi dengan mengandalkan penglihatan manusia. Metode manual ini rawan kesalahan karena faktor kelelahan, pencahayaan yang tidak seragam, serta perbedaan persepsi warna. Oleh karena itu, diperlukan sistem otomatis berbasis pengolahan citra yang mampu memberikan hasil klasifikasi yang konsisten.

Penelitian ini bertujuan untuk mengklasifikasikan tingkat kematangan cabai rawit secara otomatis dengan memanfaatkan fitur warna dari citra digital dan metode Support Vector Machine (SVM). Dataset yang digunakan terdiri dari 36 citra cabai rawit yang terbagi menjadi empat kelas, yaitu mentah, setengah matang, matang, dan busuk.
1. Akuisisi Data
Dataset terdiri dari 36 citra cabai rawit yang diambil dalam kondisi pencahayaan yang baik. Keempat kelas yang digunakan adalah:
Mentah – cabai berwarna hijau dominan
Setengah matang – cabai berwarna hijau kekuningan atau oranye
Matang – cabai berwarna merah merata
Busuk – cabai dengan bercak hitam/cokelat atau warna tidak merata

2. Pra-pemrosesan
Setiap citra di-resize menjadi ukuran lebih kecil untuk mempercepat komputasi. Citra RGB dikonversi menjadi HSV, kemudian dihitung rata-rata nilai Hue, Saturation, dan Value. Nilai-nilai ini digunakan sebagai ciri utama yang merepresentasikan warna cabai.

3. Ekstraksi Fitur
Selain fitur warna, penelitian ini juga menghitung ciri tekstur menggunakan Gray Level Co-occurrence Matrix (GLCM) pada empat arah (0°, 45°, 90°, dan 135°). Fitur yang diambil meliputi: Contrast, Correlation, Energy, Inverse Difference Moment (IDM), dan Entropy. Sehingga setiap citra memiliki total 8 fitur numerik (5 fitur tekstur + 3 fitur warna).

4. Klasifikasi SVM
Fitur yang diekstraksi digunakan sebagai input untuk algoritma SVM. Klasifikasi dilakukan menggunakan fungsi fitcecoc pada MATLAB dengan kernel standar. Proses pelatihan menghasilkan model klasifikasi yang kemudian diuji pada data yang sama (hold-out tidak dilakukan karena dataset relatif kecil).

5. Evaluasi
Hasil pelatihan menunjukkan bahwa metode SVM mampu mengklasifikasikan tingkat kematangan cabai rawit dengan akurasi 88,89%. Meskipun dataset yang digunakan relatif kecil (36 citra), hasil ini membuktikan bahwa kombinasi fitur warna dan tekstur sudah cukup representatif untuk membedakan empat kelas kematangan.

Source Code:
function varargout = pelatihan(varargin)
% PELATIHAN MATLAB code for pelatihan.fig
% PELATIHAN, by itself, creates a new PELATIHAN or raises the existing
% singleton*.
%
% H = PELATIHAN returns the handle to a new PELATIHAN or the handle to
% the existing singleton*.
%
% PELATIHAN('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in PELATIHAN.M with the given input arguments.
%
% PELATIHAN('Property','Value',...) creates a new PELATIHAN or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before pelatihan_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to pelatihan_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help pelatihan
% Last Modified by GUIDE v2.5 05-Aug-2023 07:14:54
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @pelatihan_OpeningFcn, ...
'gui_OutputFcn', @pelatihan_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 pelatihan is made visible.
function pelatihan_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to pelatihan (see VARARGIN)
% Choose default command line output for pelatihan
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
movegui(hObject,'center');
% UIWAIT makes pelatihan wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = pelatihan_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% load folder kelas busuk
image_folder1 = uigetdir();
% jika ada folder yg dipilih maka akan mengeksekusi perintah di bawah ini
if ~isequal(image_folder1,0)
% membaca nama file yg berekstensi .jpg
filenames1 = dir(fullfile(image_folder1, '*.jpg'));
% menghitung jumlah file
total_images1 = numel(filenames1);
% menginisialisasi variabel data_cabai
data_cabai = cell(total_images1,11);
% menyusun nama file dan target pada variabel data_cabai
for n = 1:total_images1
data_cabai{n,1} = filenames1(n).name;
data_cabai{n,10} = 'busuk';
row_cell = cell(n,1);
for i = 1:n
row_cell{i} = num2str(i);
end
% menampilkan variabel data_cabai pada tabel
set(handles.uitable1,'Data',data_cabai,'RowName',row_cell)
% menyimpan variabel2 pada lokasi handles
handles.image_folder1 = image_folder1;
handles.total_images1 = total_images1;
handles.data_cabai = data_cabai;
guidata(hObject, handles)
end
% mereset GUI
set(handles.pushbutton2,'Enable','on')
set(handles.pushbutton10,'Enable','off')
set(handles.pushbutton11,'Enable','off')
set(handles.pushbutton4,'Enable','off')
set(handles.pushbutton5,'Enable','off')
set(handles.pushbutton6,'Enable','off')
set(handles.pushbutton7,'Enable','off')
else
return
end
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% memanggil variabel data_cabai yg ada di lokasi handles
data_cabai = handles.data_cabai;
total_images1 = handles.total_images1;
% load folder kelas matang
image_folder2 = uigetdir();
% jika ada folder yg dipilih maka akan mengeksekusi perintah di bawah ini
if ~isequal(image_folder2,0)
% membaca nama file yg berekstensi .jpg
filenames2 = dir(fullfile(image_folder2, '*.jpg'));
% menghitung jumlah file
total_images2 = numel(filenames2);
% menyusun nama file dan target pada variabel data_cabai
for n = total_images1+1:total_images1+total_images2
data_cabai{n,1} = filenames2(n-total_images1).name;
data_cabai{n,10} = 'matang';
row_cell = cell(n,1);
for i = 1:n
row_cell{i} = num2str(i);
end
% menampilkan variabel data_cabai pada tabel
set(handles.uitable1,'Data',data_cabai,'RowName',row_cell)
% menyimpan variabel2 pada lokasi handles
handles.image_folder2 = image_folder2;
handles.total_images2 = total_images2;
handles.data_cabai = data_cabai;
guidata(hObject, handles)
end
% mereset GUI
set(handles.pushbutton10,'Enable','on');
set(handles.pushbutton11,'Enable','off');
set(handles.pushbutton3,'Enable','off');
set(handles.pushbutton4,'Enable','off')
set(handles.pushbutton5,'Enable','off')
set(handles.pushbutton6,'Enable','off')
set(handles.pushbutton7,'Enable','off')
else
return
end
% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% memanggil variabel2 yg ada di lokasi handles
data_cabai = handles.data_cabai;
image_folder1 = handles.image_folder1;
filenames1 = dir(fullfile(image_folder1, '*.jpg'));
total_images1 = numel(filenames1);
image_folder2 = handles.image_folder2;
filenames2 = dir(fullfile(image_folder2, '*.jpg'));
total_images2 = numel(filenames2);
image_folder3 = handles.image_folder3;
filenames3 = dir(fullfile(image_folder3, '*.jpg'));
total_images3 = numel(filenames3);
image_folder4 = handles.image_folder4;
filenames4 = dir(fullfile(image_folder4, '*.jpg'));
total_images4 = numel(filenames4);
% kelas busuk
% melakukan pengolahan citra terhadap seluruh file
for n = 1:total_images1
full_name = fullfile(image_folder1, filenames1(n).name);
% membaca file citra rgb
Img = imread(full_name);
% meresize citra
Img = imresize(Img,.1);
% mengkonversi citra rgb menjadi grayscale
Img = rgb2gray(Img);
% membentuk matriks kookurensi pada masing2 sudut
mk000=ko000(Img);
mk045=ko045(Img);
mk090=ko090(Img);
mk135=ko135(Img);
% merata2 matriks kookurensi pada semua sudut
MatKook=(mk000+mk045+mk090+mk135)/4;
CiriIDM=0;CiriENT=0;
for i=1:256
for j=1:256
TempIDM = (MatKook(i,j))/(1+(i-j)*(i-j));
TempENT = -(MatKook(i,j))*(log2(MatKook(i,j)+eps));
CiriIDM = CiriIDM + TempIDM;
CiriENT = CiriENT + TempENT;
end
end
pixel_dist = 1;
GLCM = graycomatrix(Img,'Offset',[0 pixel_dist;...
-pixel_dist pixel_dist; -pixel_dist 0; -pixel_dist -pixel_dist]);
stats = graycoprops(GLCM,{'contrast','correlation','energy','homogeneity'});
% menghitung nilai ciri GLCM
Contrast = mean(stats.Contrast);
Correlation = mean(stats.Correlation);
Energy = mean(stats.Energy);
% menyusun nilai ciri GLCM pada variabel data_cabai
data_cabai{n,2} = num2str(Contrast);
data_cabai{n,3} = num2str(Correlation);
data_cabai{n,4} = num2str(Energy);
data_cabai{n,5} = num2str(CiriIDM);
data_cabai{n,6} = num2str(CiriENT);
end
% kelas matang
% melakukan pengolahan citra terhadap seluruh file
for n = 1:total_images2
full_name = fullfile(image_folder2, filenames2(n).name);
% membaca file citra rgb
Img = imread(full_name);
% meresize citra
Img = imresize(Img,.1);
% mengkonversi citra rgb menjadi grayscale
Img = rgb2gray(Img);
% membentuk matriks kookurensi pada masing2 sudut
mk000=ko000(Img);
mk045=ko045(Img);
mk090=ko090(Img);
mk135=ko135(Img);
% merata2 matriks kookurensi pada semua sudut
MatKook=(mk000+mk045+mk090+mk135)/4;
CiriIDM=0;CiriENT=0;
for i=1:256
for j=1:256
TempIDM = (MatKook(i,j))/(1+(i-j)*(i-j));
TempENT = -(MatKook(i,j))*(log2(MatKook(i,j)+eps));
CiriIDM = CiriIDM + TempIDM;
CiriENT = CiriENT + TempENT;
end
end
pixel_dist = 1;
GLCM = graycomatrix(Img,'Offset',[0 pixel_dist;...
-pixel_dist pixel_dist; -pixel_dist 0; -pixel_dist -pixel_dist]);
stats = graycoprops(GLCM,{'contrast','correlation','energy','homogeneity'});
% menghitung nilai ciri GLCM
Contrast = mean(stats.Contrast);
Correlation = mean(stats.Correlation);
Energy = mean(stats.Energy);
% menyusun nilai ciri GLCM pada variabel data_cabai
data_cabai{n+total_images1,2} = num2str(Contrast);
data_cabai{n+total_images1,3} = num2str(Correlation);
data_cabai{n+total_images1,4} = num2str(Energy);
data_cabai{n+total_images1,5} = num2str(CiriIDM);
data_cabai{n+total_images1,6} = num2str(CiriENT);
end
% kelas mentah
% melakukan pengolahan citra terhadap seluruh file
for n = 1:total_images3
full_name = fullfile(image_folder3, filenames3(n).name);
% membaca file citra rgb
Img = imread(full_name);
% meresize citra
Img = imresize(Img,.1);
% mengkonversi citra rgb menjadi grayscale
Img = rgb2gray(Img);
% membentuk matriks kookurensi pada masing2 sudut
mk000=ko000(Img);
mk045=ko045(Img);
mk090=ko090(Img);
mk135=ko135(Img);
% merata2 matriks kookurensi pada semua sudut
MatKook=(mk000+mk045+mk090+mk135)/4;
CiriIDM=0;CiriENT=0;
for i=1:256
for j=1:256
TempIDM = (MatKook(i,j))/(1+(i-j)*(i-j));
TempENT = -(MatKook(i,j))*(log2(MatKook(i,j)+eps));
CiriIDM = CiriIDM + TempIDM;
CiriENT = CiriENT + TempENT;
end
end
pixel_dist = 1;
GLCM = graycomatrix(Img,'Offset',[0 pixel_dist;...
-pixel_dist pixel_dist; -pixel_dist 0; -pixel_dist -pixel_dist]);
stats = graycoprops(GLCM,{'contrast','correlation','energy','homogeneity'});
% menghitung nilai ciri GLCM
Contrast = mean(stats.Contrast);
Correlation = mean(stats.Correlation);
Energy = mean(stats.Energy);
% menyusun nilai ciri GLCM pada variabel data_cabai
data_cabai{n+total_images1+total_images2,2} = num2str(Contrast);
data_cabai{n+total_images1+total_images2,3} = num2str(Correlation);
data_cabai{n+total_images1+total_images2,4} = num2str(Energy);
data_cabai{n+total_images1+total_images2,5} = num2str(CiriIDM);
data_cabai{n+total_images1+total_images2,6} = num2str(CiriENT);
end
% kelas set. matang
% melakukan pengolahan citra terhadap seluruh file
for n = 1:total_images4
full_name = fullfile(image_folder4, filenames4(n).name);
% membaca file citra rgb
Img = imread(full_name);
% meresize citra
Img = imresize(Img,.1);
% mengkonversi citra rgb menjadi grayscale
Img = rgb2gray(Img);
% membentuk matriks kookurensi pada masing2 sudut
mk000=ko000(Img);
mk045=ko045(Img);
mk090=ko090(Img);
mk135=ko135(Img);
% merata2 matriks kookurensi pada semua sudut
MatKook=(mk000+mk045+mk090+mk135)/4;
CiriIDM=0;CiriENT=0;
for i=1:256
for j=1:256
TempIDM = (MatKook(i,j))/(1+(i-j)*(i-j));
TempENT = -(MatKook(i,j))*(log2(MatKook(i,j)+eps));
CiriIDM = CiriIDM + TempIDM;
CiriENT = CiriENT + TempENT;
end
end
pixel_dist = 1;
GLCM = graycomatrix(Img,'Offset',[0 pixel_dist;...
-pixel_dist pixel_dist; -pixel_dist 0; -pixel_dist -pixel_dist]);
stats = graycoprops(GLCM,{'contrast','correlation','energy','homogeneity'});
% menghitung nilai ciri GLCM
Contrast = mean(stats.Contrast);
Correlation = mean(stats.Correlation);
Energy = mean(stats.Energy);
% menyusun nilai ciri GLCM pada variabel data_cabai
data_cabai{n+total_images1+total_images2+total_images3,2} = num2str(Contrast);
data_cabai{n+total_images1+total_images2+total_images3,3} = num2str(Correlation);
data_cabai{n+total_images1+total_images2+total_images3,4} = num2str(Energy);
data_cabai{n+total_images1+total_images2+total_images3,5} = num2str(CiriIDM);
data_cabai{n+total_images1+total_images2+total_images3,6} = num2str(CiriENT);
end
row_cell = cell(size(data_cabai,1),1);
for i = 1:size(data_cabai,1)
row_cell{i} = num2str(i);
end
% menampilkan data_cabai pada tabel
set(handles.uitable1,'Data',data_cabai,'RowName',row_cell)
% mereset GUI
set(handles.pushbutton4,'Enable','on')
set(handles.pushbutton5,'Enable','off')
set(handles.pushbutton6,'Enable','off')
set(handles.pushbutton7,'Enable','off')
% menyimpan variabel2 pada lokasi handles
handles.data_cabai = data_cabai;
guidata(hObject, handles);
% --- Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% memanggil variabel2 yg ada di lokasi handles
data_cabai = handles.data_cabai;
image_folder1 = handles.image_folder1;
filenames1 = dir(fullfile(image_folder1, '*.jpg'));
total_images1 = numel(filenames1);
image_folder2 = handles.image_folder2;
filenames2 = dir(fullfile(image_folder2, '*.jpg'));
total_images2 = numel(filenames2);
image_folder3 = handles.image_folder3;
filenames3 = dir(fullfile(image_folder3, '*.jpg'));
total_images3 = numel(filenames3);
image_folder4 = handles.image_folder4;
filenames4 = dir(fullfile(image_folder4, '*.jpg'));
total_images4 = numel(filenames4);
% kelas busuk
% melakukan pengolahan citra terhadap seluruh file
for n = 1:total_images1
full_name = fullfile(image_folder1, filenames1(n).name);
% membaca file citra rgb
Img = imread(full_name);
% meresize citra
Img = imresize(Img,.1);
% mengkonversi citra rgb menjadi hsv
Img = rgb2hsv(Img);
H = Img(:,:,1);
S = Img(:,:,2);
V = Img(:,:,3);
% ekstraksi ciri nilai rata2 hsv
H = mean2(H);
S = mean2(S);
V = mean2(V);
% menyusun ciri hsv pada data_cabai
data_cabai{n,7} = num2str(H);
data_cabai{n,8} = num2str(S);
data_cabai{n,9} = num2str(V);
end
% kelas matang
% melakukan pengolahan citra terhadap seluruh file
for n = 1:total_images2
full_name = fullfile(image_folder2, filenames2(n).name);
% membaca file citra rgb
Img = imread(full_name);
% meresize citra
Img = imresize(Img,.1);
% mengkonversi citra rgb menjadi hsv
Img = rgb2hsv(Img);
H = Img(:,:,1);
S = Img(:,:,2);
V = Img(:,:,3);
% ekstraksi ciri nilai rata2 hsv
H = mean2(H);
S = mean2(S);
V = mean2(V);
% menyusun ciri hsv pada data_cabai
data_cabai{n+total_images1,7} = num2str(H);
data_cabai{n+total_images1,8} = num2str(S);
data_cabai{n+total_images1,9} = num2str(V);
end
% kelas mentah
% melakukan pengolahan citra terhadap seluruh file
for n = 1:total_images3
full_name = fullfile(image_folder3, filenames3(n).name);
% membaca file citra rgb
Img = imread(full_name);
% meresize citra
Img = imresize(Img,.1);
% mengkonversi citra rgb menjadi hsv
Img = rgb2hsv(Img);
H = Img(:,:,1);
S = Img(:,:,2);
V = Img(:,:,3);
% ekstraksi ciri nilai rata2 hsv
H = mean2(H);
S = mean2(S);
V = mean2(V);
% menyusun ciri hsv pada data_cabai
data_cabai{n+total_images1+total_images2,7} = num2str(H);
data_cabai{n+total_images1+total_images2,8} = num2str(S);
data_cabai{n+total_images1+total_images2,9} = num2str(V);
end
% kelas set. matang
% melakukan pengolahan citra terhadap seluruh file
for n = 1:total_images4
full_name = fullfile(image_folder4, filenames4(n).name);
% membaca file citra rgb
Img = imread(full_name);
% meresize citra
Img = imresize(Img,.1);
% mengkonversi citra rgb menjadi hsv
Img = rgb2hsv(Img);
H = Img(:,:,1);
S = Img(:,:,2);
V = Img(:,:,3);
% ekstraksi ciri nilai rata2 hsv
H = mean2(H);
S = mean2(S);
V = mean2(V);
% menyusun ciri hsv pada data_cabai
data_cabai{n+total_images1+total_images2+total_images3,7} = num2str(H);
data_cabai{n+total_images1+total_images2+total_images3,8} = num2str(S);
data_cabai{n+total_images1+total_images2+total_images3,9} = num2str(V);
end
row_cell = cell(size(data_cabai,1),1);
for i = 1:size(data_cabai,1)
row_cell{i} = num2str(i);
end
% menampilkan data_cabai pada tabel
set(handles.uitable1,'Data',data_cabai,'RowName',row_cell)
% mereset GUI
set(handles.pushbutton5,'Enable','on')
set(handles.pushbutton6,'Enable','off')
set(handles.pushbutton7,'Enable','off')
% menyimpan variabel2 pada lokasi handles
handles.data_cabai = data_cabai;
guidata(hObject, handles);
% --- Executes on button press in pushbutton5.
function pushbutton5_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% mereset GUI
set(handles.edit1,'String',[])
set(handles.edit2,'String',[])
set(handles.edit3,'String',[])
set(handles.edit4,'String',[])
% memanggil variabel2 yg ada di lokasi handles
data_cabai = handles.data_cabai;
[row,~] = size(data_cabai);
A = cell(row,8);
for m = 1:row
for n = 2:9
A{m,n-1} = data_cabai{m,n};
end
end
[x,y] = size(A);
B = zeros(x,y);
for i = 1:x
for j = 1:y
B(i,j) = str2double(A{i,j});
end
end
C = cell(row,1);
for m = 1:row
C{m,1} = data_cabai{m,10};
end
% melakukan klasifikasi SVM
c = fitcecoc(B,C,'Learners',templateSVM('Standardize',true));
% membaca kelas keluaran
Class = predict(c,B);
% menyusun kelas keluaran pada data_cabai
row_cell = cell(row,1);
for n = 1:row
data_cabai{n,11} = Class{n};
row_cell{n} = num2str(n);
end
% menampilkan data_cabai pada tabel
set(handles.uitable1,'Data',data_cabai,'RowName',row_cell)
% menghitung akurasi
jumlah_benar = 0;
for a = 1:row
kelas = strcmp(data_cabai{a,10},data_cabai{a,11});
jumlah_benar = jumlah_benar+kelas;
end
total_data = row;
jumlah_salah = total_data-jumlah_benar;
akurasi = sum(jumlah_benar)/total_data*100;
% menyimpan variabel2 pada lokasi handles
handles.total_data = total_data;
handles.jumlah_benar = jumlah_benar;
handles.jumlah_salah = jumlah_salah;
handles.akurasi = akurasi;
handles.c = c;
guidata(hObject, handles);
% mereset GUI
set(handles.pushbutton6,'Enable','on')
set(handles.pushbutton7,'Enable','off')
% --- Executes on button press in pushbutton6.
function pushbutton6_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton6 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% memanggil variabel2 yg ada di lokasi handles
total_data = handles.total_data;
jumlah_benar = handles.jumlah_benar;
jumlah_salah = handles.jumlah_salah;
akurasi = handles.akurasi;
% menampilkan akurasi pada edit text
set(handles.edit1,'String',total_data)
set(handles.edit2,'String',jumlah_benar)
set(handles.edit3,'String',jumlah_salah)
set(handles.edit4,'String',[num2str(akurasi),' %'])
% mereset GUI
set(handles.pushbutton7,'Enable','on')
% --- Executes on button press in pushbutton7.
function pushbutton7_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton7 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% memanggil variabel2 yg ada di lokasi handles
c = handles.c;
% menyimpan model klasifikasi KNN
[file,~] = uiputfile({'*.mat'});
if ~isequal(file,0)
save(file,'c');
else
return
end
% --- Executes on button press in pushbutton8.
function pushbutton8_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton8 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% mereset GUI
set(handles.pushbutton2,'Enable','off')
set(handles.pushbutton10,'Enable','off')
set(handles.pushbutton11,'Enable','off')
set(handles.pushbutton3,'Enable','off')
set(handles.pushbutton4,'Enable','off')
set(handles.pushbutton5,'Enable','off')
set(handles.pushbutton6,'Enable','off')
set(handles.pushbutton7,'Enable','off')
set(handles.edit1,'String',[])
set(handles.edit2,'String',[])
set(handles.edit3,'String',[])
set(handles.edit4,'String',[])
set(handles.uitable1,'Data',[],'RowName',{'' '' '' ''})
function edit1_Callback(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit1 as text
% str2double(get(hObject,'String')) returns contents of edit1 as a double
% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit2_Callback(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit2 as text
% str2double(get(hObject,'String')) returns contents of edit2 as a double
% --- Executes during object creation, after setting all properties.
function edit2_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit3_Callback(hObject, eventdata, handles)
% hObject handle to edit3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit3 as text
% str2double(get(hObject,'String')) returns contents of edit3 as a double
% --- Executes during object creation, after setting all properties.
function edit3_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit4_Callback(hObject, eventdata, handles)
% hObject handle to edit4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit4 as text
% str2double(get(hObject,'String')) returns contents of edit4 as a double
% --- Executes during object creation, after setting all properties.
function edit4_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --------------------------------------------------------------------
function Halaman_Utama_Callback(hObject, eventdata, handles)
% hObject handle to Halaman_Utama (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
close all;
guidata(home_page);
% --------------------------------------------------------------------
function Pengujian_Callback(hObject, eventdata, handles)
% hObject handle to Pengujian (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
close all;
guidata(pengujian);
% --- Executes on button press in pushbutton10.
function pushbutton10_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton10 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% memanggil variabel data_cabai yg ada di lokasi handles
data_cabai = handles.data_cabai;
total_images1 = handles.total_images1;
total_images2 = handles.total_images2;
% load folder kelas mentah
image_folder3 = uigetdir();
% jika ada folder yg dipilih maka akan mengeksekusi perintah di bawah ini
if ~isequal(image_folder3,0)
% membaca nama file yg berekstensi .jpg
filenames3 = dir(fullfile(image_folder3, '*.jpg'));
% menghitung jumlah file
total_images3 = numel(filenames3);
% menyusun nama file dan target pada variabel data_cabai
for n = total_images1+total_images2+1:total_images1+total_images2+total_images3
data_cabai{n,1} = filenames3(n-total_images1-total_images2).name;
data_cabai{n,10} = 'mentah';
row_cell = cell(n,1);
for i = 1:n
row_cell{i} = num2str(i);
end
% menampilkan variabel data_cabai pada tabel
set(handles.uitable1,'Data',data_cabai,'RowName',row_cell)
% menyimpan variabel2 pada lokasi handles
handles.image_folder3 = image_folder3;
handles.total_images3 = total_images3;
handles.data_cabai = data_cabai;
guidata(hObject, handles)
end
% mereset GUI
set(handles.pushbutton11,'Enable','on');
set(handles.pushbutton3,'Enable','off');
set(handles.pushbutton4,'Enable','off')
set(handles.pushbutton5,'Enable','off')
set(handles.pushbutton6,'Enable','off')
set(handles.pushbutton7,'Enable','off')
else
return
end
% --- Executes on button press in pushbutton11.
function pushbutton11_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton11 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% memanggil variabel data_cabai yg ada di lokasi handles
data_cabai = handles.data_cabai;
total_images1 = handles.total_images1;
total_images2 = handles.total_images2;
total_images3 = handles.total_images3;
% load folder kelas set. matang
image_folder4 = uigetdir();
% jika ada folder yg dipilih maka akan mengeksekusi perintah di bawah ini
if ~isequal(image_folder4,0)
% membaca nama file yg berekstensi .jpg
filenames4 = dir(fullfile(image_folder4, '*.jpg'));
% menghitung jumlah file
total_images4 = numel(filenames4);
% menyusun nama file dan target pada variabel data_cabai
for n = total_images1+total_images2+total_images3+1:total_images1+...
total_images2+total_images3+total_images4
data_cabai{n,1} = filenames4(n-total_images1-total_images2-total_images3).name;
data_cabai{n,10} = 'set. matang';
row_cell = cell(n,1);
for i = 1:n
row_cell{i} = num2str(i);
end
% menampilkan variabel data_cabai pada tabel
set(handles.uitable1,'Data',data_cabai,'RowName',row_cell)
% menyimpan variabel2 pada lokasi handles
handles.image_folder4 = image_folder4;
handles.total_images4 = total_images4;
handles.data_cabai = data_cabai;
guidata(hObject, handles)
end
% mereset GUI
set(handles.pushbutton3,'Enable','on');
set(handles.pushbutton4,'Enable','off')
set(handles.pushbutton5,'Enable','off')
set(handles.pushbutton6,'Enable','off')
set(handles.pushbutton7,'Enable','off')
else
return
end
Posted on September 13, 2025, in Pengenalan Pola, Pengolahan Citra and tagged pemrograman matlab, pengolahan citra, Pengolahan Citra Digital, pengolahan citra digital menggunakan matlab, segmentasi citra. Bookmark the permalink. Leave a comment.














































Leave a comment
Comments 0