SVM+HOG對影象進行分類(MATLAB實現)
阿新 • • 發佈:2019-01-05
網上看到關於用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可以預覽到特徵分別合適。