% 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);