hog matlab代码1——实现hog+svm图像二分类
2017-07-04 21:51
991 查看
最近因为需要实现hog+svm的分类代码,网上找了一些例子,觉得这篇博客还不错:http://blog.csdn.net/libin88211/article/details/19968205,下面结合该博客写一下步骤,供新手们交流学习~~(如果侵犯了版权问题的话,可以联系删除,尊重作者原创~~)
hog干嘛的?hog就是提取图片特征的。hog源程序参考http://blog.csdn.net/huangli19870217/article/details/7695458
准备工作:
1、创建正阳本文件夹“pos”将正阳本放入
pos文件夹用来存放正阳样本的,下图是我自己准备的(就是一些狗狗的图像)
2、创建负样本文件夹“neg”将负样本放入
neg文件夹用来存放负样本,下图准备的是一些猫的(当然,负样本嘛,随便的,可以是其他的东东,不一定非要是猫,只要正阳样本是狗就行~~)
这里正负样本都是20个。
3、制作正阳本文件列表pos_list.txt
制作参考下图:
4、制作负样本文件列表neg_list.txt
制作参考下图:
5、执行下面程序进行训练,测试
[plain]
view plain
copy
print?
clc;
clear ;
%% 训练阶段
ReadList1 = textread('pos_list.txt','%s','delimiter','\n');%载入正样本列表
sz1=size(ReadList1);
label1=ones(sz1(1),1); %正阳本标签
ReadList2 = textread('neg_list.txt','%s','delimiter','\n');%载入负样本列表
sz2=size(ReadList2);
label2=zeros(sz2(1),1);%负样本标签
label=[label1',label2']';%标签汇总
total_num=length(label);
data=zeros(total_num,1764);
%读取正样本并计算hog特征
for i=1:sz1(1)
name= char(ReadList1(i,1));
image=imread(strcat('D:\daily\冰\机器学习\pos\',name));
im=imresize(image,[64,64]);
img=rgb2gray(im);
hog =hogcalculator(img);
data(i,:)=hog;
end
%读取负样本并计算hog特征
for j=1:sz2(1)
name= char(ReadList2(j,1));
image=imread(strcat('D:\daily\冰\机器学习\neg\',name));
im=imresize(image,[64,64]);
img=rgb2gray(im);
hog =hogcalculator(img);
data(sz1(1)+j,:)=hog;
end
[train, test] = crossvalind('holdOut',label);
cp = classperf(label);
svmStruct = svmtrain(data(train,:),label(train));
save svmStruct svmStruct
classes = svmclassify(svmStruct,data(test,:));
classperf(cp,classes,test);
cp.CorrectRate
%% 训练完成后保存 svmStruct即可对新输入的对象进行分类了无需再执行上面训练阶段代码
load svmStruct
test=imread('test.jpg');
im=imresize(test,[64,64]);
figure;
imshow(im);
img=rgb2gray(im);
hogt =hogcalculator(img);
classes = svmclassify(svmStruct,hogt);%classes的值即为分类结果
源代码以及图片文件已经上传CSDN,这里给出链接~~
http://download.csdn.net/detail/jcy1009015337/9716482
hog干嘛的?hog就是提取图片特征的。hog源程序参考http://blog.csdn.net/huangli19870217/article/details/7695458
准备工作:
1、创建正阳本文件夹“pos”将正阳本放入
pos文件夹用来存放正阳样本的,下图是我自己准备的(就是一些狗狗的图像)
2、创建负样本文件夹“neg”将负样本放入
neg文件夹用来存放负样本,下图准备的是一些猫的(当然,负样本嘛,随便的,可以是其他的东东,不一定非要是猫,只要正阳样本是狗就行~~)
这里正负样本都是20个。
3、制作正阳本文件列表pos_list.txt
制作参考下图:
4、制作负样本文件列表neg_list.txt
制作参考下图:
5、执行下面程序进行训练,测试
[plain]
view plain
copy
print?
clc;
clear ;
%% 训练阶段
ReadList1 = textread('pos_list.txt','%s','delimiter','\n');%载入正样本列表
sz1=size(ReadList1);
label1=ones(sz1(1),1); %正阳本标签
ReadList2 = textread('neg_list.txt','%s','delimiter','\n');%载入负样本列表
sz2=size(ReadList2);
label2=zeros(sz2(1),1);%负样本标签
label=[label1',label2']';%标签汇总
total_num=length(label);
data=zeros(total_num,1764);
%读取正样本并计算hog特征
for i=1:sz1(1)
name= char(ReadList1(i,1));
image=imread(strcat('D:\daily\冰\机器学习\pos\',name));
im=imresize(image,[64,64]);
img=rgb2gray(im);
hog =hogcalculator(img);
data(i,:)=hog;
end
%读取负样本并计算hog特征
for j=1:sz2(1)
name= char(ReadList2(j,1));
image=imread(strcat('D:\daily\冰\机器学习\neg\',name));
im=imresize(image,[64,64]);
img=rgb2gray(im);
hog =hogcalculator(img);
data(sz1(1)+j,:)=hog;
end
[train, test] = crossvalind('holdOut',label);
cp = classperf(label);
svmStruct = svmtrain(data(train,:),label(train));
save svmStruct svmStruct
classes = svmclassify(svmStruct,data(test,:));
classperf(cp,classes,test);
cp.CorrectRate
%% 训练完成后保存 svmStruct即可对新输入的对象进行分类了无需再执行上面训练阶段代码
load svmStruct
test=imread('test.jpg');
im=imresize(test,[64,64]);
figure;
imshow(im);
img=rgb2gray(im);
hogt =hogcalculator(img);
classes = svmclassify(svmStruct,hogt);%classes的值即为分类结果
clc; clear ; %% 训练阶段 ReadList1 = textread('pos_list.txt','%s','delimiter','\n');%载入正样本列表 sz1=size(ReadList1); label1=ones(sz1(1),1); %正阳本标签 ReadList2 = textread('neg_list.txt','%s','delimiter','\n');%载入负样本列表 sz2=size(ReadList2); label2=zeros(sz2(1),1);%负样本标签 label=[label1',label2']';%标签汇总 total_num=length(label); data=zeros(total_num,1764); %读取正样本并计算hog特征 for i=1:sz1(1) name= char(ReadList1(i,1)); image=imread(strcat('D:\daily\冰\机器学习\pos\',name)); im=imresize(image,[64,64]); img=rgb2gray(im); hog =hogcalculator(img); data(i,:)=hog; end %读取负样本并计算hog特征 for j=1:sz2(1) name= char(ReadList2(j,1)); image=imread(strcat('D:\daily\冰\机器学习\neg\',name)); im=imresize(image,[64,64]); img=rgb2gray(im); hog =hogcalculator(img); data(sz1(1)+j,:)=hog; end [train, test] = crossvalind('holdOut',label); cp = classperf(label); svmStruct = svmtrain(data(train,:),label(train)); save svmStruct svmStruct classes = svmclassify(svmStruct,data(test,:)); classperf(cp,classes,test); cp.CorrectRate %% 训练完成后保存 svmStruct即可对新输入的对象进行分类了无需再执行上面训练阶段代码 load svmStruct test=imread('test.jpg'); im=imresize(test,[64,64]); figure; imshow(im); img=rgb2gray(im); hogt =hogcalculator(img); classes = svmclassify(svmStruct,hogt);%classes的值即为分类结果
源代码以及图片文件已经上传CSDN,这里给出链接~~
http://download.csdn.net/detail/jcy1009015337/9716482
相关文章推荐
- matlab实现hog+svm图像二分类
- SVM+HOG对图像进行分类(MATLAB实现)
- SVM+HOG对图像进行多分类(OpenCV实现)
- matlab版hog+svm图像二分类
- SVM中图像常用的HOG特征描述及实现
- SVM实现多分类的程序基础工作(一)——安装libsvm以及libsvm和matlab自带的svm的区别
- 一个用BoW|Pyramid BoW+SVM进行图像分类的Matlab Demo
- [数字图像处理]常见噪声的分类与Matlab实现
- [图像]Canny检测的Matlab实现(含代码)
- BOF算法+K-Means算法实现图像检索(Matlab实现代码)
- [数字图像处理]常见噪声的分类与Matlab实现
- Matlab 支持向量机(SVM)实现多分类
- 二分类SVM方法Matlab实现
- 图像特征检测描述(一):SIFT、SURF、ORB、HOG、LBP特征的原理概述及OpenCV代码实现
- 逻辑回归和朴素贝叶斯算法实现二值分类(matlab代码)
- 多分类问题中,实现不同分类区域颜色填充的MATLAB代码(demo:Random Forest)
- Matlab实现Hough变换检测图像中的直线 分类: 图像处理 2014-06-14 22:07 641人阅读 评论(0) 收藏
- 用MatLab实现SVM分类
- 图像Ostu二值化原理及matlab实现代码
- 朴素贝叶斯算法实现分类问题(三类)matlab代码