网上看到关于用opencv对图像进行分类的不少,这次用MATLAB做了些尝试,图像数据集为:链接: https://pan.baidu.com/s/1i5OhC7z 密码: utn7,其他MATLAB版本http://blog.youkuaiyun.com/libin88211/article/details/19968205 ,点击打开链接,http://blog.youkuaiyun.com/jcy1009015337/article/details/53763484 另外opencv版本的为:点击打开链接,http://blog.youkuaiyun.com/always2015/article/details/47107129
废话就不说,直接上代码(适合MATLAB 2016b版本及以上),代码有相应注释。
我训练的图像在磁盘上位置如下,包含5个类别,省去了前人制作txt存储图像路径的过程:
测试图像分布为:
%% 用hog特征对图像进行多分类,svm训练,1 VS 1
%% 1 数据集,包括训练的和测试的 (注意自己图片存放路径,附录我给出示例下载图片链接)
imdsTrain = imageDatastore('F:\svm_images\train_images',...
'IncludeSubfolders',true,...
'LabelSource','foldernames');
imdsTest = imageDatastore('F:\svm_images\test_image');
%% 显示训练的图片种类Labels和数量Count
Train_disp = countEachLabel(imdsTrain);
disp(Train_disp);
%% 2 对训练集中的每张图像进行hog特征提取,测试图像一样
% 预处理图像,主要是得到features特征大小,此大小与图像大小和Hog特征参数相关
imageSize = [256,256];% 对所有图像进行此尺寸的缩放
image1 = readimage(imdsTrain,1);
scaleImage = imresize(image1,imageSize);
[features, visualization] = extractHOGFeatures(scaleImage);
imshow(scaleImage);hold on; plot(visualization)
% 对所有训练图像进行特征提取
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);
end
% 所有训练图像标签
trainLabels = imdsTrain.Labels;
% 开始svm多分类训练,注意:fitcsvm用于二分类,fitcecoc用于多分类,1 VS 1方法
classifer = fitcecoc(featuresTrain,trainLabels);
%% 预测并显示预测效果图
numTest = length(imdsTest.Files);
for i = 1:numTest
testImage = readimage(imdsTest,i);
scaleTestImage = imresize(testImage,imageSize);
featureTest = extractHOGFeatures(scaleTestImage);
[predictIndex,score] = predict(classifer,featureTest);
figure;imshow(testImage);
title(['predictImage: ',char(predictIndex)]);
end
命令行对训练集imdsTrain
统计输出结果如下:
第一张图像显示的是提取到的HOG特征,这个主要可以初步了解下特征是否选择的合适,不合适可以调节extractHOGFeatures里面的参数,如cellsize,blocksize,bins等,具体可以参考这个点击打开链接 http://cn.mathworks.com/help/vision/ref/extracthogfeatures.html?searchHighlight=extractHOGFeatures&s_tid=doc_srchtitle。本程序选择的默认参数,从图1可以预览到特征分别合适。