首页 > 代码库 > 使用HOG+LBP实现动物分类:matlab版本

使用HOG+LBP实现动物分类:matlab版本

1.训练集测试集划分(同上一篇)

2.代码部分

%% 利用HOG + LBP分类

%% 1 数据集,包括训练的和测试的  
currentPath = pwd;  % 获得当前的工作目录

imdsTrain = imageDatastore(fullfile(pwd,‘train_images‘),...  
    ‘IncludeSubfolders‘,true,...  
    ‘LabelSource‘,‘foldernames‘);   % 载入图片集合

imdsTest = imageDatastore(fullfile(pwd,‘test_image‘)); 

% imdsTrain = imageDatastore(‘C:\Program Files\MATLAB\R2017a\bin\proj_xiangbin\train_images‘,...  
%     ‘IncludeSubfolders‘,true,...  
%     ‘LabelSource‘,‘foldernames‘);  
% imdsTest = imageDatastore(‘C:\Program Files\MATLAB\R2017a\bin\proj_xiangbin\test_image‘);  
  
%%   2 对训练集中的每张图像进行hog特征提取,测试图像一样  
% 预处理图像,主要是得到features特征大小,此大小与图像大小和Hog特征参数相关  

%% LBP参数
imageSize = [256,256];% 对所有图像进行此尺寸的缩放  
I = readimage(imdsTrain,1);
I = imresize(I,imageSize);  
I = rgb2gray(I);
lbpFeatures = extractLBPFeatures(I,‘CellSize‘,[16 16],‘Normalization‘,‘None‘);
numNeighbors = 8;
% Upright = false;
numBins = numNeighbors*(numNeighbors-1)+3; % numNeighbors+2;
lbpCellHists = reshape(lbpFeatures,numBins,[]);
lbpCellHists = bsxfun(@rdivide,lbpCellHists,sum(lbpCellHists));
lbpFeatures = reshape(lbpCellHists,1,[]);
% 对所有训练图像进行特征提取  
numImages = length(imdsTrain.Files);  
featuresTrain1 = zeros(numImages,size(lbpFeatures,2),‘single‘); % featuresTrain为单精度 

  
scaleImage = imresize(image1,imageSize);  
[features, visualization] = extractHOGFeatures(scaleImage,‘CellSize‘,[8,8]);
featuresTrain2 = zeros(numImages,size(features,2),‘single‘); % featuresTrain为单精度 
 
for i = 1:numImages  
    imageTrain = readimage(imdsTrain,i);  
    imageTrain = imresize(imageTrain,imageSize);  
    % LBP
    I = rgb2gray(imageTrain);
    lbpFeatures = extractLBPFeatures(I,‘CellSize‘,[16 16],‘Normalization‘,‘None‘);
    numNeighbors = 8;
    numBins = numNeighbors*(numNeighbors-1)+3;
    lbpCellHists = reshape(lbpFeatures,numBins,[]);
    lbpCellHists = bsxfun(@rdivide,lbpCellHists,sum(lbpCellHists));
    lbpFeatures = reshape(lbpCellHists,1,[]);
    featuresTrain1(i,:) = lbpFeatures;  
    
    % HOG
    featuresTrain2(i,:) = extractHOGFeatures(imageTrain,‘CellSize‘,[8,8]);    
    
end  

% 特征合并
featuresTrain = [featuresTrain1,featuresTrain2];

% 所有训练图像标签  
trainLabels = imdsTrain.Labels;  
  
% 开始svm多分类训练,注意:fitcsvm用于二分类,fitcecoc用于多分类,1 VS 1方法  
classifer = fitcecoc(featuresTrain,trainLabels);  
  
correctCount = 0;
%% 预测并显示预测效果图  
numTest = length(imdsTest.Files);  
for i = 1:numTest  
    testImage = readimage(imdsTest,i);  %  imdsTest.readimage(1)
    scaleTestImage = imresize(testImage,imageSize);  
    % LBP
    I = rgb2gray(scaleTestImage);
    lbpFeatures = extractLBPFeatures(I,‘CellSize‘,[16 16],‘Normalization‘,‘None‘);
    numNeighbors = 8;
    numBins = numNeighbors*(numNeighbors-1)+3;
    lbpCellHists = reshape(lbpFeatures,numBins,[]);
    lbpCellHists = bsxfun(@rdivide,lbpCellHists,sum(lbpCellHists));
    featureTest1 = reshape(lbpCellHists,1,[]);
    
    % HOG
    featureTest2 = extractHOGFeatures(scaleTestImage,‘CellSize‘,[8,8]); 
    % 合并
    featureTest = [featureTest1,featureTest2];
    
    [predictIndex,score] = predict(classifer,featureTest);  
    figure;imshow(imresize(testImage,[256 256]));
    
    imgName = imdsTest.Files(i);
    tt = regexp(imgName,‘\‘,‘split‘);
    cellLength =  cellfun(‘length‘,tt);
    tt2 = char(tt{1}(1,cellLength));
        % 统计正确率
    if strfind(tt2,char(predictIndex))==1
        correctCount = correctCount+1;
    end
    title([‘predictImage: ‘,tt2,‘--‘,char(predictIndex)]);  
    fprintf(‘%s == %s\n‘,tt2,char(predictIndex));
end  

% 显示正确率
fprintf(‘分类结束,正确了为:%.3f%%\n‘,correctCount * 100.0 / numTest);

  

使用HOG+LBP实现动物分类:matlab版本