1. 程式人生 > >SVM+HOG對影象進行分類(MATLAB實現)

SVM+HOG對影象進行分類(MATLAB實現)

網上看到關於用opencv對影象進行分類的不少,這次用MATLAB做了些嘗試,影象資料集為:,其他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可以預覽到特徵分別合適。