使用HOG实现动物分类:matlab版本
1.将图片分为测试和验证集合,分别为train_images和test_image
2.代码编写(HOG思想不做介绍,网上太多)
1)训练部分代码:training.m
%% 该函数是使用HOG来提取test_images下图片的特征的,代码编写参考matlab官方文档 %% 1.获取图片以及相关的分类 currentPath = pwd; % 获得当前的工作目录 imdsTrain = imageDatastore(fullfile(pwd,'train_images'),... 'IncludeSubfolders',true,... 'LabelSource','foldernames'); % 载入图片集合 %% 2 对训练集中的每张图像进行hog特征提取 % 预处理图像,主要是得到features特征大小,此大小与图像大小和Hog特征参数相关 imageSize = [256,256];% 对所有图像进行此尺寸的缩放 image1 = readimage(imdsTrain,1); scaleImage = imresize(image1,imageSize); features = extractHOGFeatures(scaleImage,'CellSize',[4,4]); % 提示信息 disp('开始训练数据...'); % 对所有训练图像进行特征提取 numImages = length(imdsTrain.Files); featuresTrain = zeros(numImages,size(features,2),'single'); % featuresTrain为单精度 for i = 1:numImages imageTrain = readimage(imdsTrain,i); imageTrain = imresize(imageTrain,imageSize); featuresTrain(i,:) = extractHOGFeatures(imageTrain,'CellSize',[4,4]); end % 所有训练图像标签 trainLabels = imdsTrain.Labels; % 开始svm多分类训练,注意:fitcsvm用于二分类,fitcecoc用于多分类,1 VS 1方法 classifer = fitcecoc(featuresTrain,trainLabels); save classifer % 提示信息 disp('训练阶段结束!!!');
2)分类部分代码:classify.m
%% 该函数用来对图片进项分类 HOG + SVM %% 1.读入待分类的图片集合 currentPath = pwd; imdsTest = imageDatastore(fullfile(pwd,'test_image')); %% 2.分类,预测并显示预测效果图 % 载入分类器 load classifer numTest = length(imdsTest.Files); % correctCount:正确图片张数 correctCount = 0; for i = 1:numTest testImage = readimage(imdsTest,i); % imdsTest.readimage(1) scaleTestImage = imresize(testImage,imageSize); featureTest = extractHOGFeatures(scaleTestImage,'CellSize',[4,4]); [predictIndex,score] = predict(classifer,featureTest); figure;imshow(imresize(testImage,[256,256])); imgName = imdsTest.Files(i); tt = regexp(imgName,'\','split'); cellLength = cellfun('length',tt); tt2 = char(tt{1}(1,cellLength)); % 统计正确率 if strfind(tt2,char(predictIndex))==1 correctCount = correctCount+1; end title(['分类结果: ',tt2,'--',char(predictIndex)]); fprintf('%s === %s \n',tt2,char(predictIndex)); end % 显示正确率 fprintf('分类结束,正确了为:%.1f%%\n',correctCount * 100.0 / numTest);