安装

1. 在http://www.csie.ntu.edu.tw/~cjlin/ 中下载libsvm

2. 按照http://zjhello123.blog.163.com/blog/static/25495143201251792625811/ 中的安装方法安装libsvm

3. 设置路径。 如果不设置的话会报错:Error using svmtrain (line 233) Y must be a vector or a character array.

我开始设置了也报错,后来重新make了一下,就好了。不知道为什么。

使用

用libsvm对人和车分类

1. 先分别在两个文件夹下放入若干张人和车的图片,做训练样本。再用两个文件夹中放若干图片做测试样本。

2. 读入图片,保存成mat数据。具体代码如下:

clc;clear;
pathname=uigetdir(cd,'请选择文件夹');
if pathname==0
msgbox('您没有正确选择文件夹');
return;
end % pathnamesub=uigetdir(cd,'请选择文件夹');
% if pathname==0
% msgbox('您没有正确选择文件夹');
% return;
% end % 可以打开几乎所有的图像类型
filesbmp=ls(strcat(pathname,'\*.bmp'));
filesjpg=ls(strcat(pathname,'\*.jpg'));
filesjpeg=ls(strcat(pathname,'\*.jpeg'));
filesgif=ls(strcat(pathname,'\*.gif'));
filestif=ls(strcat(pathname,'\*.tif'));
filespng=ls(strcat(pathname,'\*.png'));
files=[cellstr(filesbmp);cellstr(filesjpg);...
cellstr(filesjpeg);cellstr(filesgif);...
cellstr(filestif);cellstr(filespng)];
len=length(files);
flag=[]; % 开始批量处理图像,转换格式
num=0;
for ii=1:len
if strcmp(cell2mat(files(ii)),'')
continue;
end
num=num+1;
Filesname{num}=strcat(pathname,'\',files(ii));
page{num}=imread(cell2mat(Filesname{num})); end filename=input('outputfilename:','s');
save (['C:\Documents\MATLAB\svm数据\',filename],'page');

对训练和测试的四个文件夹分别调用上面代码,会把每个文件夹中的图片都存在 page里面 自己再改名字 我分别命名为

3.

将上面的数据转换成svmtrain调用时需要的数据: 包括灰度化、统一大小、提取特征(这里用的hog特征)、生成label数据等

%获取训练数据
load('C:\Users\Documents\MATLAB\svm数据\car_train_svm_rgb.mat');
load('C:\Users\Documents\MATLAB\svm数据\person_train_svm_rgb.mat'); num_train_car = size(car_train_svm_rgb);
num_train_person = size(person_train_svm_rgb);
train_num = num_train_car(1, 2) + num_train_person(1, 2); %总训练样本数目
train_data = zeros(train_num, 1);
train_label = zeros(train_num, 1); for i = 1 : 1 : num_train_car(1, 2)
data_gray=rgb2gray(car_train_svm_rgb{1,i});
data_resize=double(imresize(data_gray,[64 64])); %把数据都转为64 * 64大小的灰度图
feature_of_one = hog(data_resize); %获取hog特征
[m1, n1] = size(feature_of_one);
for j = 1 : 1 : n1
oneline = feature_of_one{1, j};
[m, n] = size(oneline);
colb = (j - 1) * n + 1;
cole = j * n;
train_data(i, colb : cole) = oneline;
train_label(i, 1) = 1; %car的标签为1
end
end for i = 1 : 1 : num_train_person(1, 2)
data_gray=rgb2gray(person_train_svm_rgb{1,i});
data_resize=double(imresize(data_gray,[64 64])); %把数据都转为64 * 64大小的灰度图
feature_of_one = hog(data_resize); %获取hog特征
[m1, n1] = size(feature_of_one);
for j = 1 : 1 : n1
oneline = feature_of_one{1, j};
[m, n] = size(oneline);
colb = (j - 1) * n + 1;
cole = j * n;
train_data(i + num_train_car(1, 2), colb : cole) = oneline;
train_label(i + num_train_car(1, 2), 1) = 2; %person的标签为2
end
end %获取测试数据
load('C:\Users\Documents\MATLAB\svm数据\car_test_svm_rgb.mat');
load('C:\Users\Documents\MATLAB\svm数据\person_test_svm_rgb.mat'); num_test_car = size(car_test_svm_rgb);
num_test_person = size(person_test_svm_rgb);
test_num = num_test_car(1, 2) + num_test_person(1, 2); %总训练样本数目
test_data = zeros(test_num, 1);
test_label = zeros(test_num, 1); for i = 1 : 1 : num_test_car(1, 2)
data_gray=rgb2gray(car_test_svm_rgb{1,i});
data_resize=double(imresize(data_gray,[64 64])); %把数据都转为64 * 64大小的灰度图
feature_of_one = hog(data_resize); %获取hog特征
[m1, n1] = size(feature_of_one);
for j = 1 : 1 : n1
oneline = feature_of_one{1, j};
[m, n] = size(oneline);
colb = (j - 1) * n + 1;
cole = j * n;
test_data(i, colb : cole) = oneline;
test_label(i, 1) = 1; %car的标签为1
end
end for i = 1 : 1 : num_test_person(1, 2)
data_gray=rgb2gray(person_test_svm_rgb{1,i});
data_resize=double(imresize(data_gray,[64 64])); %把数据都转为64 * 64大小的灰度图
feature_of_one = hog(data_resize); %获取hog特征
[m1, n1] = size(feature_of_one);
for j = 1 : 1 : n1
oneline = feature_of_one{1, j};
[m, n] = size(oneline);
colb = (j - 1) * n + 1;
cole = j * n;
test_data(i + num_test_car(1, 2), colb : cole) = oneline;
test_label(i + num_test_car(1, 2), 1) = 2; %person的标签为2
end
end

hog特征提取代码: 网上找的,可以用。抱歉不记得来源了。

function feature = hog(img)

[m n]=size(img);

img=sqrt(img);      %伽马校正

%下面是求边缘
fy=[-1 0 1]; %定义竖直模板
fx=fy'; %定义水平模板
Iy=imfilter(img,fy,'replicate'); %竖直边缘
Ix=imfilter(img,fx,'replicate'); %水平边缘
Ied=sqrt(Ix.^2+Iy.^2); %边缘强度
Iphase=Iy./Ix; %边缘斜率,有些为inf,-inf,nan,其中nan需要再处理一下 %下面是求cell
step=16; %step*step个像素作为一个单元
orient=9; %方向直方图的方向个数
jiao=360/orient; %每个方向包含的角度数
Cell=cell(1,1); %所有的角度直方图,cell是可以动态增加的,所以先设了一个
ii=1;
jj=1;
for i=1:step:m - step %如果处理的m/step不是整数,最好是i=1:step:m-step
ii=1;
for j=1:step:n - step %注释同上
tmpx=Ix(i:i+step-1,j:j+step-1);
tmped=Ied(i:i+step-1,j:j+step-1);
tmped=tmped/sum(sum(tmped)); %局部边缘强度归一化
tmpphase=Iphase(i:i+step-1,j:j+step-1);
Hist=zeros(1,orient); %当前step*step像素块统计角度直方图,就是cell
for p=1:step
for q=1:step
if isnan(tmpphase(p,q))==1 %0/0会得到nan,如果像素是nan,重设为0
tmpphase(p,q)=0;
end
ang=atan(tmpphase(p,q)); %atan求的是[-90 90]度之间
ang=mod(ang*180/pi,360); %全部变正,-90变270
if tmpx(p,q)<0 %根据x方向确定真正的角度
if ang<90 %如果是第一象限
ang=ang+180; %移到第三象限
end
if ang>270 %如果是第四象限
ang=ang-180; %移到第二象限
end
end
ang=ang+0.0000001; %防止ang为0
Hist(ceil(ang/jiao))=Hist(ceil(ang/jiao))+tmped(p,q); %ceil向上取整,使用边缘强度加权
end
end
Hist=Hist/sum(Hist); %方向直方图归一化
Cell{ii,jj}=Hist; %放入Cell中
ii=ii+1; %针对Cell的y坐标循环变量
end
jj=jj+1; %针对Cell的x坐标循环变量
end %下面是求feature,2*2个cell合成一个block,没有显式的求block
[m n]=size(Cell);
feature=cell(1,(m-1)*(n-1));
for i=1:m-1
for j=1:n-1
f=[];
f=[f Cell{i,j}(:)' Cell{i,j+1}(:)' Cell{i+1,j}(:)' Cell{i+1,j+1}(:)'];
feature{(i-1)*(n-1)+j}=f;
end
end %到此结束,feature即为所求
%下面是为了显示而写的
% l=length(feature);
% f=[];
% for i=1:l
% f=[f;feature{i}(:)'];
% end
% figure
% mesh(f)
end

4.训练预测

model = svmtrain(train_label, train_data, '-s 0 -t 2 -c 1 -g 0.1');
[predicted_label, accuracy, decision_values] = svmpredict(test_label, test_data, model);

结果如下:

【matlab】libsvm-3.18安装与使用的更多相关文章

  1. Apache2.4.23+PHP5.6.30+MySQL5.7.18安装教程

    最近在工作中常常接触到PHP,自己也写过一些简单的PHP页面.我们知道PHP是在服务器端运行的脚本语言,因此我们需要配置服务器环境.之前为了省事直接使用的是wamp集成环境,但是突然某一天领导要求我们 ...

  2. matlab怎么查看已安装哪些工具箱和…

    问题描述:matlab怎么查看已安装哪些工具箱和它们相应的版本 解决方法:在命令行里敲击der,回车 效果:

  3. Centos7.3下mysql5.7.18安装并修改初始密码的方法

    Centos7.3下mysql5.7.18安装并修改初始密码的方法 原文链接:http://www.jb51.net/article/116032.htm 作者:Javen205 字体:[增加 减小] ...

  4. windows版mysql5.7.18安装

    windows版mysql5.7.18安装 初始化命令:C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld.exe --defaults-file=& ...

  5. CentOS 6.9上安装Mysql 5.7.18 安装

    CentOS 6.9上安装Mysql 5.7.18 安装 下载地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18-linux-g ...

  6. Ubuntu 18 安装搜狗输入法

    Ubuntu 18 安装搜狗输入法: 1. 搜狗输入法官网下载对应的Linux输入法 2. 双击 刚刚下载好的 deb 文件 3. 点击 install(安装) 4. 在 settings(系统设置) ...

  7. libSVM在matlab下的使用安装

    1) 从LIBSVM的官网http://www.csie.ntu.edu.tw/~cjlin/libsvm/上下载最新版本的LIBSVM,当前版本为libsvm-3.18.zip 2) 解压压缩包到电 ...

  8. Matlab2012a下配置LibSVM—3.18

    1.下载最新版LibSVM 点击此处打开网页,点击zip file下载最新版的文件并解压放在任何目录下,建议放在安装目录便于查找.如我的文件解压在路径C:\ProgramFiles\MATLAB\R2 ...

  9. CentOS x64上Matlab R2015b的镜像安装方法与卸载

    0. 原料 (1). CentOS_x64系统 CentOS 2.6.32-573.el6.x86_64 (2). Matlab  R2015b_glnxa64.iso,可以从百度网盘下载到:链接: ...

随机推荐

  1. sql sever 字符串函数

    SQL Server之字符串函数   以下所有例子均Studnet表为例:  计算字符串长度len()用来计算字符串的长度 select sname ,len(sname) from student ...

  2. CodeForces 353B Two Heaps

    B. Two Heaps   Valera has 2·n cubes, each cube contains an integer from 10 to 99. He arbitrarily cho ...

  3. mongodb安装 window

    安装MongoDB 1.按照操作系统下载http://www.mongodb.org/downloads. 2.在D盘新建MongoDB文件夹(此文件夹为自定义的数据库安装目录D:\MongoDB)把 ...

  4. Codeforces 260 A - A. Laptops

    题目链接:http://codeforces.com/contest/456/problem/A 解题报告:有n种电脑,给出每台电脑的价格和质量,要你判断出有没有一种电脑的价格小于另一种电脑但质量却大 ...

  5. css position:absolute 如何居中对齐

    写死宽度,就好弄了 position: absolute;left: 50%;width: 980px;margin-left: -490px; text-algin:center

  6. unity销毁层级物体及 NGUI 深度理解总结

    http://www.2cto.com/kf/201311/258811.html 1.想找到层级面板中某个物体,并销毁,利用下面的代码:    GameObject  obj = GameObjec ...

  7. 关于promise(一)

    该新特性属于 ECMAScript 2015(ES6)规范,在使用时请注意浏览器兼容性. 由于ES6原生提供Promise,所以无需安装Promise库.但在ES5环境下我们可以使用bluebird库 ...

  8. Homework

    #include<stdio.h> #include<math.h> int main() { int a,b,c,l,p,s; printf("请输入三个数:&qu ...

  9. HTTP头部详解

    因为之后的HTTP头注入要学习这些所以就看了.觉得很不错,算是学习前的科普. <HTTP头部详解>转载自:http://www.cnblogs.com/lcamry/p/5763040.h ...

  10. Linux搭建一个FTP服务器

    1.安装vsftp 2.配置vsftpd.conf, vim /etc/vsftpd.conf 下面说说里面比较重要的选项 1 anonymous_enable=NO #不允许匿名用户 2 3 loc ...