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存储图像路径的过程:



测试图像分布为:



  
  
  1. %% 用hog特征对图像进行多分类,svm训练, 1 VS 1  
  2. %% 1 数据集,包括训练的和测试的 (注意自己图片存放路径,附录我给出示例下载图片链接) 
  3. imdsTrain = imageDatastore( 'F:\svm_images\train_images',...  
  4.     'IncludeSubfolders', true,...  
  5.     'LabelSource', 'foldernames');  
  6. imdsTest = imageDatastore( 'F:\svm_images\test_image');  
  7. %% 显示训练的图片种类Labels和数量Count
  8. Train_disp = countEachLabel(imdsTrain);
  9. disp(Train_disp);
  10.   
  11. %%   2 对训练集中的每张图像进行hog特征提取,测试图像一样  
  12. % 预处理图像,主要是得到features特征大小,此大小与图像大小和Hog特征参数相关  
  13. imageSize = [ 256, 256];% 对所有图像进行此尺寸的缩放  
  14. image1 = readimage(imdsTrain, 1);  
  15. scaleImage = imresize(image1,imageSize);  
  16. [ features, visualization] = extractHOGFeatures(scaleImage);  
  17. imshow(scaleImage);hold on; plot(visualization)  
  18.   
  19. % 对所有训练图像进行特征提取  
  20. numImages = length(imdsTrain.Files);  
  21. featuresTrain = zeros(numImages,size(features, 2), 'single'); % featuresTrain为单精度  
  22. for i = 1:numImages  
  23.     imageTrain = readimage(imdsTrain,i);  
  24.     imageTrain = imresize(imageTrain,imageSize);  
  25.     featuresTrain(i,:) = extractHOGFeatures(imageTrain);  
  26. end  
  27.   
  28. % 所有训练图像标签  
  29. trainLabels = imdsTrain.Labels;  
  30.   
  31. % 开始svm多分类训练,注意:fitcsvm用于二分类,fitcecoc用于多分类, 1 VS 1方法  
  32. classifer = fitcecoc(featuresTrain,trainLabels);  
  33.   
  34. %% 预测并显示预测效果图  
  35. numTest = length(imdsTest.Files);  
  36. for i = 1:numTest  
  37.     testImage = readimage(imdsTest,i);  
  38.     scaleTestImage = imresize(testImage,imageSize);  
  39.     featureTest = extractHOGFeatures(scaleTestImage);  
  40.     [ predictIndex,score] = predict(classifer,featureTest);  
  41.     figure;imshow(testImage);  
  42.     title([ 'predictImage: ', char(predictIndex)]);  
  43. end  
  44.   

命令行对训练集imdsTrain
统计输出结果如下:





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




猜你喜欢

转载自blog.csdn.net/qq_42708383/article/details/81068916