end
% 将训练标签转换为分类数组,并指定类别顺序
trainLabels = categorical(trainLabels, 0:9);
% 读取测试集
testData = [];
testLabels = [];
testFiles = dir(fullfile(testPath, '*.bmp')); % 获取所有图像文件
fprintf('测试集包含 %d 张图像\n', length(testFiles));
for i = 1:length(testFiles)
filename = testFiles(i).name;
filepath = fullfile(testPath, filename);
fprintf('读取测试图像: %s\n', filepath);
img = imread(filepath);
if size(img, 3) == 3
img = rgb2gray(img); % 转换为灰度图像
end
img = imresize(img, [50 50]); % 确保图像大小为 50x50
img = double(img(:)'); % 展平并转换为 double 类型
testData = [testData; img];
label = str2double(filename(4)); % 提取文件名中的类别(第 4 个字符表示类
别)
testLabels = [testLabels; label];
end
% 将测试标签转换为分类数组,并指定类别顺序
testLabels = categorical(testLabels, 0:9);
% 使用最近邻分类器进行分类
Mdl = fitcknn(trainData, trainLabels, 'NumNeighbors', 1);
% 进行预测
predictedLabels = predict(Mdl, testData);
% 计算正确识别率
accuracy = sum(predictedLabels == testLabels) / length(testLabels);
fprintf('正确识别率: %.2f%%\n', accuracy * 100);
% 显示结果