使用训练好的libsvm分类器,如何对一幅新输入的图像进行识别显示?? 求代码 150
这是我的训练分类器的代码,求怎样使用分类器去识别其他的图?----%%训练阶段ReadList1=textread('P.txt','%s','delimiter','\...
这是我的训练分类器的代码,求怎样使用分类器去识别其他的图?
----%% 训练阶段
ReadList1 = textread('P.txt','%s','delimiter','\n');%载入云样本列表
sz1=size(ReadList1);
label1=ones(sz1(1),1); %云样本标签
ReadList2 = textread('N.txt','%s','delimiter','\n');%载入下垫面样本列表
sz2=size(ReadList2);
label2=zeros(sz2(1),1);%下垫面样本标签
label=[label1',label2']';%标签汇总
total_num=length(label);
data=zeros(total_num,10);
%读取云样本并计算纹理特征
for i=1:sz1(1)
name= char(ReadList1(i,1));
image=imread(strcat('D:\MATLAB\matlab\toolbox\libsvm-3.22\matlab\样本\20yun\',name));
img=imresize(image,[64,64]);
tex = Texture(img);
data(i,:) = tex;
end
%读取下垫面样本并计算纹理特征
for j=1:sz2(1)
name= char(ReadList2(j,1));
image=imread(strcat('D:\MATLAB\matlab\toolbox\libsvm-3.22\matlab\样本\20xia\',name));
img=imresize(image,[64,64]);
tex = Texture(img);
data(sz1(1)+j,:)= tex;
end
[train, test] = crossvalind('holdOut',label,0.7);
train_data = data(train,:); %获取train标签对应的训练数据
train_data_labels = label(train,:);
train_data_labels = double(train_data_labels );
test_data = data(test,:); %获取train标签对应的检测数据
test_data_labels = label(test,:);
test_data_labels =double(test_data_labels);
%% 建模预测
% 利用训练集合建立分类模型
model = svmtrain(train_data_labels,train_data, '-s 0 -t 2 -c 1 -g 0.07');
% save model
[predict_label, accuracy, dec_values] =svmpredict(test_data_labels, test_data, model); 展开
----%% 训练阶段
ReadList1 = textread('P.txt','%s','delimiter','\n');%载入云样本列表
sz1=size(ReadList1);
label1=ones(sz1(1),1); %云样本标签
ReadList2 = textread('N.txt','%s','delimiter','\n');%载入下垫面样本列表
sz2=size(ReadList2);
label2=zeros(sz2(1),1);%下垫面样本标签
label=[label1',label2']';%标签汇总
total_num=length(label);
data=zeros(total_num,10);
%读取云样本并计算纹理特征
for i=1:sz1(1)
name= char(ReadList1(i,1));
image=imread(strcat('D:\MATLAB\matlab\toolbox\libsvm-3.22\matlab\样本\20yun\',name));
img=imresize(image,[64,64]);
tex = Texture(img);
data(i,:) = tex;
end
%读取下垫面样本并计算纹理特征
for j=1:sz2(1)
name= char(ReadList2(j,1));
image=imread(strcat('D:\MATLAB\matlab\toolbox\libsvm-3.22\matlab\样本\20xia\',name));
img=imresize(image,[64,64]);
tex = Texture(img);
data(sz1(1)+j,:)= tex;
end
[train, test] = crossvalind('holdOut',label,0.7);
train_data = data(train,:); %获取train标签对应的训练数据
train_data_labels = label(train,:);
train_data_labels = double(train_data_labels );
test_data = data(test,:); %获取train标签对应的检测数据
test_data_labels = label(test,:);
test_data_labels =double(test_data_labels);
%% 建模预测
% 利用训练集合建立分类模型
model = svmtrain(train_data_labels,train_data, '-s 0 -t 2 -c 1 -g 0.07');
% save model
[predict_label, accuracy, dec_values] =svmpredict(test_data_labels, test_data, model); 展开
1个回答
展开全部
其实使用libsvm进行分类很简单,只需要有属性矩阵和标签,然后就可以建立分类模型(model),然后利用得到的这个model进行分类预测了。
一、属性矩阵和标签:
一个班级里面有两个男生(男生1、男生2),两个女生(女生1、女生2),其中
男生1 身高:176cm 体重:70kg;
男生2 身高:180cm 体重:80kg;
女生1 身高:161cm 体重:45kg;
女生2 身高:163cm 体重:47kg;
如果将男生定义为1,女生定义为-1,并将上面的数据放入矩阵data中,即
data = [176 70;
180 80;
161 45;
163 47];
复制代码
在label中存入男女生类别标签(1、-1),即
label = [1;1;-1;-1];
复制代码
这样上面的data矩阵就是一个属性矩阵,行数4代表有4个样本,列数2表示属性有两个,label就是标签(1、-1表示有两个类别:男生、女生)。
二、有了上面的属性矩阵data,和标签label就可以利用libsvm建立分类模型了,简要代码如下:
model = svmtrain(label,data);
复制代码
有了model就可以做分类预测,比如此时该班级又转来一个新学生,其
身高190cm,体重85kg
想通过上面这些信息就给出其标签(想知道其是男【1】还是女【-1】)
比如 令 testdata = [190 85]; 由于其标签不知道,假设其标签为-1(也可以假设为1)
即
testdatalabel = -1;
然后利用libsvm来预测这个新来的学生是男生还是女生,代码如下:
[predictlabel,accuracy] = svmpredict(testdatalabel,testdata,model)
复制代码
下面整体运行一下上面这段的背景数据和代码:
data = [176 70;
180 80;
161 45;
163 47];
label = [1;1;-1;-1];
model = svmtrain(label,data);
testdata = [190 85];
testdatalabel = -1;
[predictlabel,accuracy] = svmpredict(testdatalabel,testdata,model);
predictlabel
复制代码
运行结果如下:
Accuracy = 0% (0/1) (classification)
predictlabel =
一、属性矩阵和标签:
一个班级里面有两个男生(男生1、男生2),两个女生(女生1、女生2),其中
男生1 身高:176cm 体重:70kg;
男生2 身高:180cm 体重:80kg;
女生1 身高:161cm 体重:45kg;
女生2 身高:163cm 体重:47kg;
如果将男生定义为1,女生定义为-1,并将上面的数据放入矩阵data中,即
data = [176 70;
180 80;
161 45;
163 47];
复制代码
在label中存入男女生类别标签(1、-1),即
label = [1;1;-1;-1];
复制代码
这样上面的data矩阵就是一个属性矩阵,行数4代表有4个样本,列数2表示属性有两个,label就是标签(1、-1表示有两个类别:男生、女生)。
二、有了上面的属性矩阵data,和标签label就可以利用libsvm建立分类模型了,简要代码如下:
model = svmtrain(label,data);
复制代码
有了model就可以做分类预测,比如此时该班级又转来一个新学生,其
身高190cm,体重85kg
想通过上面这些信息就给出其标签(想知道其是男【1】还是女【-1】)
比如 令 testdata = [190 85]; 由于其标签不知道,假设其标签为-1(也可以假设为1)
即
testdatalabel = -1;
然后利用libsvm来预测这个新来的学生是男生还是女生,代码如下:
[predictlabel,accuracy] = svmpredict(testdatalabel,testdata,model)
复制代码
下面整体运行一下上面这段的背景数据和代码:
data = [176 70;
180 80;
161 45;
163 47];
label = [1;1;-1;-1];
model = svmtrain(label,data);
testdata = [190 85];
testdatalabel = -1;
[predictlabel,accuracy] = svmpredict(testdatalabel,testdata,model);
predictlabel
复制代码
运行结果如下:
Accuracy = 0% (0/1) (classification)
predictlabel =
追问
嗯嗯,我知道重新输入一幅图要进行训练和特征提取,然后用分类器识别,得到分类的结果,但是代码我不会,能不能按照我之前给的程序,给一份代码???
AiPPT
2024-09-19 广告
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图...
点击进入详情页
本回答由AiPPT提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询