[predict_label, accuracy, dec_values] = svmpredict(T,D, model); T2=toc
松竹梅训练样本代码:
clc clear all close all tic
%读入训练图像;
A=dir('D:\\松竹梅gist\\train\\*.jpg'); C=[];
for k=1:size(A)%k为训练图像的总数; B=strcat('D:\\松竹梅gist\\train\\',A(k).name); img=imread(B);
%获取图像的GIST特征向量; Nblocks = 4; imageSize = 60;
orientationsPerScale = [8 8 8 8];%每个数值范围的方向数量 numberBlocks = 4;
createGabor(orientationsPerScale, imageSize); G = createGabor(orientationsPerScale, imageSize); output = prefilt(double(img), 4);
g = gistGabor(output, numberBlocks, G); C(k,:)=g;%C为该图像的特征矩阵; end
%设置训练图像标签; s=[]; for i=1:3
A=i*ones(10,1); s=[s;A]; end
%对图像进行训练; model = svmtrain(s, C); T1=toc
松竹梅测试样本代码: tic
A=dir('D:\\松竹梅gist\\test\\*.jpg'); D=[];
%读入测试图像;
for k=1:size(A)%k为测试图像的总数; B=strcat('D:\\松竹梅gist\\test\\',A(k).name);
img=imread(B);
%获取图像的GIST特征向量; Nblocks = 4; imageSize = 60;
orientationsPerScale = [8 8 8 8];%每个数值范围的方向数量 numberBlocks = 4;
createGabor(orientationsPerScale, imageSize); G = createGabor(orientationsPerScale, imageSize); output = prefilt(double(img), 4); g = gistGabor(output, numberBlocks, G); D(k,:)=g;%C为该图像的特征矩阵; end T=[]; for i=1:3
A=i*ones(30,1); T=[T;A]; end
%对图像进行测试;
[predict_label, accuracy, dec_values] = svmpredict(T,D, model); T2=toc
4.1.2 测试结果
梅兰竹菊gist测试结果:对其进行四分类,其中每一类的训练图像为10幅,测试图像为30幅,测试时间为t=t1+t2=10.5512+20.4377=30.9889S,Accuracy = 87.5% (105/120) 。当改成orientationsPerScale=[8, 8, 4]时,测试结果变为t=t1+t2=7.6699+14.1259=21.7958S,Accuracy = 84.1667% (101/120) 。
松竹梅gist测试结果:对其进行三分类,其中每一类的训练图像为10幅,测试图像为30幅,测试时间为t=t1+t2=5.7285+15.0340=20.7625S,Accuracy = 91.1111% (82/90) 。
4.2 基于libsvm的phog特征提取分类仿真结果
4.2.1 代码及注释 梅兰竹菊训练样本代码:
clc clear all
close all tic
%显示训练图像工作路径; cd('D:\\梅兰竹菊phog\\train') files=dir('*.jpg');
m=size(files,1);%m为训练图像的总数; %获取训练图像的PHOG特征向量; bin = 8;%直方图的方向个数; angle = 360;%方向角度; L=3;%图像分三层;
roi = [1;60;1;60];%提取图像大小; C=[]; for k=1:m
p = anna_phog(files(k).name,bin,angle,L,roi); C(k,:)=p;%C为该图像的特征矩阵; end
%设置训练图像标签 s=[];
for i=1:4 A=i*ones(10,1); s=[s;A]; end
%对图像进行训练; model = svmtrain(s, C); T1=toc
梅兰竹菊测试样本代码: tic
%显示测试图像工作路径; cd('D:\\梅兰竹菊phog\\test') files=dir('*.jpg');
m=size(files,1);%m为测试图像的总数; %获取测试图像的PHOG特征向量; bin = 8;%直方图的方向个数; angle = 360;%方向角度; L=3;%图像分三层;
roi = [1;60;1;60];%提取图像大小; D=[]; for k=1:m
p = anna_phog(files(k).name,bin,angle,L,roi); D(k,:)=p;%D为该图像的特征矩阵; end
%设置测试图像标签
T=[];
for i=1:4 A=i*ones(30,1); T=[T;A]; end
%对图像进行测试;
[predict_label, accuracy, dec_values] = svmpredict(T,D, model); T2=toc
松竹梅训练样本代码:
clc clear all close all Tic;
%显示训练图像工作路径; cd('D:\\松竹梅phog\\train') files=dir('*.jpg');
m=size(files,1);%m为训练图像的总数; %获取训练图像的PHOG特征向量; bin = 8;%直方图的方向个数; angle = 360;%方向角度; L=3;%图像分三层;
roi = [1;60;1;60];%提取图像大小; C=[]; for k=1:m
p = anna_phog(files(k).name,bin,angle,L,roi); C(k,:)=p;%C为该图像的特征矩阵; end
%设置训练图像标签 s=[];
for i=1:3 A=i*ones(10,1); s=[s;A]; end
%对图像进行训练; model = svmtrain(s, C); T2=toc
松竹梅测试样本代码: Tic;
%显示测试图像工作路径; cd('D:\\松竹梅phog\\test')
files=dir('*.jpg');
m=size(files,1);%m为测试图像的总数; %获取测试图像的PHOG特征向量; bin = 8;%直方图的方向个数; angle = 360;%方向角度; L=3;%图像分三层;
roi = [1;60;1;60];%提取图像大小; D=[]; for k=1:m
p = anna_phog(files(k).name,bin,angle,L,roi); D(k,:)=p;%D为该图像的特征矩阵; end
%设置测试图像标签 T=[];
for i=1:3 A=i*ones(30,1); T=[T;A]; end
%对图像进行测试;
[predict_label, accuracy, dec_values] = svmpredict(T,D, model); T2=toc;
4.2.2 测试结果
梅兰竹菊phog测试结果:对其进行四分类,其中每一类的训练图像为10幅,测试图像为30幅,测试时间为t=t1+t2=8.6881+10.0942=18.7823S,Accuracy = 53.3333% (64/120) 。改成L=0时,t=t1+t2=1.3464+2.0309=3.3773S,Accuracy = 43.3333% (52/120) ;改成L=2时,t=t1+t2=1.7162+3.2901=5.0063S,Accuracy = 51.6667% (62/120) 。
松竹梅phog测试结果:对其进行三分类,其中每一类的训练图像为10幅,测试图像为30幅,测试时间为t=t1+t2=2.3445+5.1615=7.506S,Accuracy = 70% (63/90)
。
改
成
roi
=
[15;45;15;45]
时
,
t=t1+t2=2.5186+5.8621=8.3807S,Accuracy = 75.5556% (68/90)。
4.3 基于libsvm的gist特征分类不同训练集测试结果