SVM实现图像分类

SVM的原理不多赘述

在MATLAB中配置libsvm,网上有很多教程,注:64位的系统不需要编译,配置好MATLAB的路径就可以使用啦

介绍libsvm实现分类的两个常用函数

svmtrain

——train svm 实现分类

——model=svm(train_label,train_matrix);

svmpredict

——用svm对测试集进行预测

——[predict_label]=svmpredict(test_label,testmatrix,model,'-q');%model指svmtrain训练好的模型,-q代表输出预测结果,-b不输出预测结果。

测试一个简单的小程序实现分类算法

数据集data列向量(属性值)分别为身高和体重,数据集标签1代表男生,-1代表女生

用svm训练好的模型保存在model中

随便写个测试数据[190 85]对男女进行预测

data = [176 70;
180 80;
161 45;
163 47];
label = [1;1;-1;-1];
model = svmtrain(label,data);
testdata = [190 85];
testdatalabel = -1;

[predicted_label] = svmpredict(testdatalabel,testdata,model,'-q')


对libsvm自带的数据集进行测试 找到heart_scale.mat文件所在路径

在此路径下进行测试

load heart_scale.mat

train=heart_scale_inst;

train_label=heart_scale_label;

test=train;%让训练集和测试集相同

test_label=train_label;

model=svmtrain(train_label,train);

[predicted_label]=svmpredict(test_label,test,model,'-q')


  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV中实现图像分类SVM(支持向量机)是一种基于机器学习的算法,它需要使用一组已经标记的图像来训练模型,然后使用该模型对未知图像进行分类。 以下是实现SVM进行图像分类的基本步骤: 1. 收集数据集,包括用于训练和测试的图像。 2. 对每个图像进行特征提取,例如计算每个图像的颜色直方图、纹理、边缘等特征。 3. 将特征向量作为输入,将训练图像标记为相应的类别。训练数据集的样本应该在同一类别内相似,而不同类别之间应该有显著差异。 4. 使用OpenCV中的SVM模块对训练数据集进行训练,并调整模型参数以提高准确性。 5. 对测试数据集中的每个图像进行特征提取,并使用训练好的模型进行分类。 6. 计算分类准确率和召回率,并根据需求调整参数,以提高模型的性能。 下面是示例代码来实现基于OpenCV的SVM进行图像分类。 ``` python import cv2 import numpy as np # 读取数据集图像及其标签 train_images = [] train_labels = [] test_images = [] test_labels = [] for i in range(1, 5): for j in range(1, 6): img = cv2.imread("dataset/%d/%d.png" % (i, j), cv2.IMREAD_GRAYSCALE) # 读取灰度图像 if j < 4: # 训练集前3张图像 train_images.append(img) train_labels.append(i) else: # 测试集后2张图像 test_images.append(img) test_labels.append(i) # 提取图像特征 hog = cv2.HOGDescriptor() train_features = np.array([hog.compute(img) for img in train_images], dtype=np.float32) test_features = np.array([hog.compute(img) for img in test_images], dtype=np.float32) # 训练SVM分类器 svm = cv2.ml.SVM_create() svm.setType(cv2.ml.SVM_C_SVC) svm.setKernel(cv2.ml.SVM_LINEAR) svm.setTermCriteria((cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 1000, 0.01)) svm.train(train_features, cv2.ml.ROW_SAMPLE, np.array(train_labels)) # 测试SVM分类器 ret, pred = svm.predict(test_features) # 计算分类准确率和召回率 accuracy = np.mean(pred.squeeze() == np.array(test_labels)) recall = np.mean(pred.squeeze() == np.array(test_labels)[np.array(test_labels) == 1]) print("Accuracy: %.2f%%" % (accuracy * 100)) print("Recall: %.2f%%" % (recall * 100)) ``` 该示例代码演示了如何使用OpenCV的SVM实现图像分类。它使用了一个简单的数据集,由四个类别的图像(数字1-4)构成。图像特征采用HOG描述符,SVM类型为C-SVC,核函数为线性核,迭代停止条件为1000次或0.01的精度。在测试过程中,计算了分类准确率和召回率两个指标,以评估分类器的性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值