当前位置: 首页 > web >正文

使用 SVM(支持向量机)进行图像分类:从读取图像到训练与分类的完整流程

本文介绍如何用支持向量机(SVM)对图像进行分类。以“石头/剪刀/布/none”分类为示例。

概述

  • 目标:使用 SVM 对图像(例如“石头/剪刀/布”手势)进行分类。流程包括读取图像、显示、收集样本、创建 SVM、训练 SVM、运行分类器,最后释放资源。
  • 算法:支持向量机(SVM),此处使用 RBF(径向基)核,采用 one-versus-one 策略来处理多类分类问题。

重要步骤

1、创建 SVM 分类器

create_class_svm (7, 'rbf', KernelParam, Nu, |ClassNames|, 'one-versus-one', 'principal_components', 5, SVMHandle)

参数解释(依据常见 API 含义):

  • 7: SVM的输入变量(特征)数量。
  • 'rbf':内核类型。
  • KernelParam::内核函数的附加参数。在RBF核的情况下,的值。对于多项式核
  • Nu:SVM的正则化常数。
  • |ClassNames|:类别数量。
  • 'one-versus-one':SVM的模式。
  • 'principal_components':用于转换特征向量的预处理类型。
  • 5:预处理参数:转换特征的数量(Preprocessing=“none”和Preprocessing=”normalization“时忽略)。
  • SVMHandle:SVM句柄。
  • 注意:不同halcon版本参数顺序或含义可能不同,实际使用时请参照你所用版本的文档。

2、提取图像特征

  • read_image (Image, Selection[Index])
  • threshold (Image, Region, 0, 40)
  • 获取区域面积和中心坐标
  • area_center (Region, Area, Row, Column)
  • *获取区域的紧密度
  • compactness (Region, Compactness)
  • *获取区域的二阶矩
  • moments_region_central_invar (Region, PSI1, PSI2, PSI3, PSI4)
  • *获取区域的凸度
  • convexity (Region, Convexity)
  • *将这7个值组成数组
  • Features := real([Area,Compactness,PSI1,PSI2,PSI3,PSI4,Convexity])

3、添加样本特征

 add_sample_class_svm (SVMHandle, Features, ClassNumber)

  • SVMHandle:SVM句柄。
  • Features特征
  • ClassNumber当前样本的类别

4、开始训练

train_class_svm (SVMHandle, 0.001, 'default')

  • SVMHandle:SVM句柄。
  •  0.001训练的停止参数。
  • 'default'训练方式。通常选项:“default”。如果SVM中已经包含SVs, 那么应该用于训练:“add_sv_to_train_set”。

5、进行分类

      *用SVM分类器进行分类

classify_class_svm (SVMHandle, Features, 1, Class)

  • SVMHandle:SVM句柄。
  •  Features:特征向量。
  • 1:要确定的最佳分类个数
  • Class:使用SVM对特征向量进行分类的结果。

结果示例:

实践建议与常见问题

  • 数据准备:高质量、标注准确、包含各种背景/光照/角度变化的样本对模型的泛化至关重要。
  • 特征选择:SVM 对特征尺度敏感。若使用像素原始向量,请做归一化或标准化。更常见的是用 HOG、SIFT、LBP 或卷积神经网络提取的特征向量。
  • 超参数调优:KernelParam(RBF 的 gamma)与正则化参数(如 C 或 Nu)会极大影响性能。用交叉验证和网格搜索找到最优组合。
  • 多类策略:one-versus-one 在类别数较少的情形下效率和效果不错。类别数增多时,训练复杂度上升。
  • PCA 降维:在样本维度很高时使用 PCA 可以加速训练并去噪,但要保证保留足够信息以维持分类性能。
  • 性能度量:训练完成后用独立测试集计算混淆矩阵、精确率/召回率/F1,以全面评估模型。
http://www.xdnf.cn/news/19429.html

相关文章:

  • 深入解析Nginx常见模块2
  • 【SoC】【W800】基于W800的PWM实现
  • python pyqt5开发DoIP上位机【源码】
  • 合集:搭建wiki知识库
  • C++广度优先搜索
  • React Native基本用法
  • 从支付工具到收益资产:稳定币在 Berachain 上的二次进化
  • 四、GC 垃圾回收(二)
  • 小模型 vs 大模型:企业 AI 落地的成本、性能与场景适配选择
  • 广东省省考备考(第九十天8.30)——判断推理(第十节课)
  • 企业为什么需要部署数据防泄露系统?
  • 第三十一天:数列求和取模
  • C++讲解---如何设计一个类
  • 【lua】模块基础及应用
  • LED灯带离线语音控制方案WTK6900P
  • fork详解(附经典计算题)
  • 苍穹外卖项目笔记day02
  • Rust 登堂 之 Sized和不定长类型 DST(七)
  • leetcode刷题记录08——top100题里的5道中等题
  • Vue基础知识-methods事件绑定(@事件名和v-on:事件名)和常用事件修饰(.prevent/.stop/.once/.enter)
  • Coze源码分析-API授权-删除令牌-后端源码
  • 【15】VisionMaster入门到精通——--通信--TCP通信、UDP通信、串口通信、PLC通信、ModBus通信
  • 鸿蒙ArkTS 核心篇-16-循环渲染(组件)
  • lvgl模拟器 被放大 导致显示模糊问题
  • Notepad++使用技巧1
  • 日志ELK、ELFK、EFK
  • 快速学习和掌握Jackson 、Gson、Fastjson
  • AI + 行业渗透率报告:医疗诊断、工业质检领域已进入规模化落地阶段
  • GD32入门到实战20--定时器
  • 【LeetCode】大厂面试算法真题回忆(122) —— 篮球比赛