网上看到关于用opencv对图像进行分类的不少,这次用MATLAB做了些尝试,图像数据集为:链接: https://pan.baidu.com/s/1i5OhC7z 密码: utn7,其他MATLAB版本http://blog.csdn.net/libin88211/article/details/19968205 ,点击打开链接,http://blog.csdn.net/jcy1009015337/article/details/53763484 另外opencv版本的为:点击打开链接,http://blog.csdn.net/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可以预览到特征分别合适。