TIF_E41201549/PengujianData.m

117 lines
3.6 KiB
Matlab

% Direktori gambar
folderTembakau = 'F:\SKRIPSI\MATLAB\Matlab Batik\Data Latih_1\Tembakau\';
folderKopi = 'F:\SKRIPSI\MATLAB\Matlab Batik\Data Latih_1\Kopi\';
% Membaca daftar gambar
imagesTembakau = dir(fullfile(folderTembakau, '*.jpg'));
imagesKopi = dir(fullfile(folderKopi, '*.jpg'));
% Inisialisasi variabel untuk menyimpan fitur dan label
features = [];
labels = [];
% Ukuran resize
resizeSize = [300, 300];
% Ekstraksi fitur dari gambar motif batik tembakau
for i = 1:length(imagesTembakau)
img = imread(fullfile(folderTembakau, imagesTembakau(i).name));
% Resize gambar
imgResized = imresize(img, resizeSize);
% Ubah menjadi grayscale
imgGray = rgb2gray(imgResized);
glcm = graycomatrix(imgGray, 'Offset', [0 1; -1 1; -1 0; -1 -1]);
stats = graycoprops(glcm);
% Menghitung entropi untuk setiap arah
entropy_vals = zeros(1, 4);
for j = 1:4
P = glcm(:, :, j) / sum(glcm(:, :, j), 'all');
entropy_vals(j) = -sum(P(:) .* log2(P(:) + eps)); % menambahkan eps untuk menghindari log(0)
end
featureVector = [mean(stats.Contrast), mean(stats.Correlation), mean(stats.Energy), mean(stats.Homogeneity), mean(entropy_vals)];
features = [features; featureVector];
labels = [labels; 1]; % Label untuk batik tembakau
end
% Ekstraksi fitur dari gambar motif batik kopi
for i = 1:length(imagesKopi)
img = imread(fullfile(folderKopi, imagesKopi(i).name));
% Resize gambar
imgResized = imresize(img, resizeSize);
% Ubah menjadi grayscale
imgGray = rgb2gray(imgResized);
glcm = graycomatrix(imgGray, 'Offset', [0 1; -1 1; -1 0; -1 -1]);
stats = graycoprops(glcm);
% Menghitung entropi untuk setiap arah
entropy_vals = zeros(1, 4);
for j = 1:4
P = glcm(:, :, j) / sum(glcm(:, :, j), 'all');
entropy_vals(j) = -sum(P(:) .* log2(P(:) + eps)); % menambahkan eps untuk menghindari log(0)
end
featureVector = [mean(stats.Contrast), mean(stats.Correlation), mean(stats.Energy), mean(stats.Homogeneity), mean(entropy_vals)];
features = [features; featureVector];
labels = [labels; 2]; % Label untuk batik kopi
end
% Persentase pembagian data latih dan data uji
splitRatio = 0.8;
fprintf('Pembagian data latih dan data uji: %.0f:%.0f\n', splitRatio*100, (1-splitRatio)*100);
% Bagi data menjadi data latih dan data uji
cv = cvpartition(labels, 'HoldOut', 1 - splitRatio);
XTrain = features(training(cv), :);
YTrain = labels(training(cv), :);
XTest = features(test(cv), :);
YTest = labels(test(cv), :);
% Tampilkan pembagian data
disp('XTrain:');
disp(XTrain);
disp('YTrain:');
disp(YTrain);
disp('XTest:');
disp(XTest);
disp('YTest:');
disp(YTest);
% Latih model KNN
k = 5; % Nilai k yang digunakan
knnModel = fitcknn(XTrain, YTrain, 'NumNeighbors', k);
% Prediksi dan evaluasi pada data latih
YTrainPred = predict(knnModel, XTrain);
trainConfMat = confusionmat(YTrain, YTrainPred);
disp('Confusion Matrix pada data training:');
disp(trainConfMat);
figure;
confusionchart(YTrain, YTrainPred);
title('Confusion Matrix pada Data Training');
% Hitung akurasi pada data latih
trainAccuracy = sum(diag(trainConfMat)) / sum(trainConfMat(:)) * 100;
fprintf('Akurasi pada data training: %.2f%%\n', trainAccuracy);
% Prediksi dan evaluasi pada data uji
YTestPred = predict(knnModel, XTest);
testConfMat = confusionmat(YTest, YTestPred);
disp('Confusion Matrix pada data testing:');
disp(testConfMat);
figure;
confusionchart(YTest, YTestPred);
title('Confusion Matrix pada Data Testing');
% Hitung akurasi pada data uji
testAccuracy = sum(diag(testConfMat)) / sum(testConfMat(:)) * 100;
fprintf('Akurasi pada data testing: %.2f%%\n', testAccuracy);