SVM+HOG对图像进行分类(MATLAB实现)

网上看到关于用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存储图像路径的过程:

SVM+HOG对图像进行分类(MATLAB实现)_第1张图片


测试图像分布为:

SVM+HOG对图像进行分类(MATLAB实现)_第2张图片

%% 用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
统计输出结果如下:

SVM+HOG对图像进行分类(MATLAB实现)_第3张图片

SVM+HOG对图像进行分类(MATLAB实现)_第4张图片

SVM+HOG对图像进行分类(MATLAB实现)_第5张图片

SVM+HOG对图像进行分类(MATLAB实现)_第6张图片

SVM+HOG对图像进行分类(MATLAB实现)_第7张图片

SVM+HOG对图像进行分类(MATLAB实现)_第8张图片

第一张图像显示的是提取到的HOG特征,这个主要可以初步了解下特征是否选择的合适,不合适可以调节extractHOGFeatures里面的参数,如cellsize,blocksize,bins等,具体可以参考这个点击打开链接 http://cn.mathworks.com/help/vision/ref/extracthogfeatures.html?searchHighlight=extractHOGFeatures&s_tid=doc_srchtitle。本程序选择的默认参数,从图1可以预览到特征分别合适。




你可能感兴趣的:(SVM,hog,matlab)