python 动物分类_使用LBP实现动物分类:matlab版本

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

2.代码部分

1)训练部分代码:training.m

%% 该函数是使用LBP来提取test_images下图片的特征的,代码编写参考matlab官方文档

%% 1.获取图片以及相关的分类

currentPath = pwd; % 获得当前的工作目录

imdsTrain = imageDatastore(fullfile(pwd,'train_images'),...

'IncludeSubfolders',true,...

'LabelSource','foldernames'); % 载入图片集合

%% 2 对训练集中的每张图像进行hog特征提取,测试图像一样

% 预处理图像,主要是得到features特征大小,此大小与图像大小和Hog特征参数相关

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,[]);

% 提示信息

disp('开始训练数据...');

% 对所有训练图像进行特征提取

numImages = length(imdsTrain.Files);

featuresTrain = zeros(numImages,size(lbpFeatures,2),'single'); % featuresTrain为单精度

for i = 1:numImages

imageTrain = readimage(imdsTrain,i);

imageTrain = imresize(imageTrain,imageSize);

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,[]);

featuresTrain(i,:) = lbpFeatures;

end

% 所有训练图像标签

trainLabels = imdsTrain.Labels;

% 开始svm多分类训练,注意:fitcsvm用于二分类,fitcecoc用于多分类,1 VS 1方法

classifer = fitcecoc(featuresTrain,trainLabels);

save classifer

% 提示信息

disp('训练阶段结束!!!');

2)测试部分代码:classify.m

%% 该函数用来对图片进项分类 LBP + SVM

%% 1.读入待分类的图片集合

currentPath = pwd;

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

%% 2.分类,预测并显示预测效果图

% 载入分类器

load classifer

correctCount = 0;

%% 预测并显示预测效果图

numTest = length(imdsTest.Files);

for i = 1:numTest

testImage = readimage(imdsTest,i); % imdsTest.readimage(1)

scaleTestImage = imresize(testImage,imageSize);

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));

featureTest = reshape(lbpCellHists,1,[]);

[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(['分类结果: ',tt2,'--',char(predictIndex)]);

fprintf('%s == %s \n',tt2,char(predictIndex));

end

% 显示正确率

fprintf('分类结束,正确了为:%.1f%%\n',correctCount * 100.0 / numTest);

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值