【秣厉科技】LabVIEW工具包——OpenCV 教程(12):机器学习

文章目录

  • 前言
  • 机器学习
    • 例1:支持向量机(SVM)做平面向量二分类
    • 例2: K邻近算法(KNearest)实现分类
  • 总结


前言

  1. 需要下载安装OpenCV工具包的朋友,请前往 此处 ;
  2. 系统要求:Windows系统,LabVIEW>=2018,兼容32位和64位。

机器学习

OpenCV 的机器学习算法位于 ml 模块,主要由基于统计学的 StatModel 类实现。

StatModel 是一个基类,根据不同的算法,衍生出一系列子类。

StatModel
ANN_MLP
DTrees
EM
KNearest
LogisticRegression
NormalBayesClassifier
SVM
SVMSGD
RTrees
Boost

选板如下,子目录下的函数,是子类私有方法,外部的是共有方法。

在这里插入图片描述


例1:支持向量机(SVM)做平面向量二分类

  • 第1步:准备训练数据(TrainData)

训练数据需要两个矩阵:Samples 和 Responses,即 样本矩阵 和 响应矩阵。

在本例中,随机生成(300 * 300)平面中的200个 (x, y) 坐标,组成 (200 * 2) 的二维 Mat 作为 Samples。

然后,按照某种线性规则将上述200个坐标分成两类(用 1 和 2 代表),组成 (200 * 1)的二维 Mat 作为 Responses。

注意,Samples 矩阵的数据类型须是浮点数,Responses 矩阵的数据类型须是整型数(CV_32S)。

插入一个 TrainData 类的 create 函数,输入上述的 Samples 和 Responses,并将布局设为“ROW_SAMPLE”,即每行一个样本。由此创建的 TrainData 对象,作为将来 SVM 算法的训练数据。

在这里插入图片描述

  • 第2步:创建SVM,设置参数并训练

插入一个 StatModel 类的 create 函数,切换多态标签至 “SVM”。

接着,插入多个 SVM 子类的私有函数 SVM_set,通过切换模式,设置不同的参数。

然后,插入一个 StatModel 类的公共函数 train,切换模式为 “TrainData”,并连接第1步准备好的TrainData对象。

在这里插入图片描述

  • 第3步:用新样本进行预测,评估训练效果

本例遍历(300 * 300)平面的每一个像素坐标,组成(90000 * 2) 的二维 Mat 作为测试样本矩阵。

插入一个 StatModel 类的公共函数 predict,输入上述测试样本矩阵,运行后获得预测结果矩阵。

可视化:根据预测结果(1或2),对(300 * 300)平面的每一个像素进行染色。

同时把训练时的200个散点也绘制在平面上,根据分类用不同的颜色进行区分。

完整过程如下图(可视化过程略),详见范例:examples/Molitec/OpenCV/ml/ml_1(StatModel_SVM).vi

在这里插入图片描述

在这里插入图片描述

从上图中可以看出,SVM 用线性边界将平面分割成了两类,而且在靠近边界的区域,允许存在一定的样本误差。

以上是一个简单的 SVM 应用,样本是二维向量。其实 SVM 还可以用在多维向量分类上,比如一张图片的特征向量。通过 SVM 找出多维向量样本在 “超平面” 上的最佳分割方案,进而对图片进行二分类。

感兴趣的读者,可以提前看一看 features2d 模块的范例:
examples/Molitec/OpenCV/features2d/features2d_5(BOW_SVM_train).vi


例2: K邻近算法(KNearest)实现分类

K近邻算法是一种基于实例的学习方法,主要用于分类和回归任务。其核心思想是:对于一个新的、未知类别的数据点,通过计算其与已知类别训练集中的数据点的距离,找出与其最近的K个邻居,并依据这K个邻居的多数类别来决定新数据点的类别归属‌。

  • 第1步:准备训练数据

训练数据需要两个矩阵:Samples 和 Responses,即 样本矩阵 和 响应矩阵。

本例围绕平面上的两个中心点,分别生成 50 个随机 (x, y) 坐标,组成 (100 * 2) 的二维 Mat 作为 Samples。

根据所属中心的不同,将上述100个点分类成1或2,组成 (100 * 1)的二维 Mat 作为 Responses。

数据类型要求与上文相同。本次不创建 TrainData 对象,直接使用 Samples 和 Responses 参与将来的训练。

在这里插入图片描述

  • 第2步:创建KNearest,设置参数并训练

插入一个 StatModel 类的 create 函数,切换多态标签至 “KNearest”。

接着,插入一个或多个 KNearest子类的私有函数 KNearest_set,通过切换模式,设置不同的参数。

然后,插入一个 StatModel 类的公共函数 train,切换模式为 “Samples”,连接第1步准备好的 Samples 和 Responses ,并将布局设为“ROW_SAMPLE”。

在这里插入图片描述

  • 第3步:引入新的样本,进行K邻近分类

插入一个 KNearest 子类的私有函数 KNearest_findNearest,设置K=5,输入新样本,运行后获得预测分类结果。

KNearest_findNearest 还有两个可选输入输出:neighborResponses 和 dist,可以返回K个相邻点的分类和距离。

完整过程如下图(可视化过程略),详见范例:examples/Molitec/OpenCV/ml/ml_2(StatModel_KNearest).vi

在这里插入图片描述

在这里插入图片描述

在上图中,新引入的样本点(150,150)位于画面中心的 “+” 标识,与其相邻的 K (5) 个点中,有3个属于1类(蓝色),有2个属于2类(红色),所以新样本的分类结果为1类。

KNearest 同样可以用于多维向量分类。通过找出 “超平面” 上K个最相邻的已知样本,对新样本进行分类。


总结

  1. 本系列博文作为LabVIEW工具包—OpenCV的教程,将以专栏的形式陆续发布和更新。
  2. 对工具包感兴趣的朋友,欢迎下载试用:秣厉科技 - LabVIEW工具包 - OpenCV
  3. 各位看官有什么想法、建议、吐槽、批评,或新奇的需求,也欢迎留言讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37445.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业级AI架构探索:业务驱动,场景优先

企业级AI架构的设计需要兼顾技术先进性、业务适配性、成本效益和长期可维护性。以下从架构设计原则、核心架构层次、基础框架可能性、实施路径四个维度进行系统性阐述: 一、设计原则 业务驱动,场景优先 明确AI解决的业务痛点(如降本增效、智…

DCDC36V同步降压 输出可调 2A电流恒压芯片SL1588H 替换LV3842

在当今电子设备飞速发展的时代,电源管理芯片的性能优劣直接关乎设备的稳定性与高效运行。对于诸多需要将 36V 电压进行同步降压、输出电压可调且稳定输出 2A 电流的应用场景,一款卓越的恒压芯片不可或缺。SL1588H 正凭借其领先的技术和出色的性能&#x…

Beans模块之工厂模块注解模块@Qualifier

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

flutter 开发web端的性能优化

参考资料 Flutter for Web 首次首屏优化 ——JS 分片优化_main.dart.js-CSDN博客文章浏览阅读1.4k次。本文介绍了如何通过延迟加载组件和js分片优化Flutter for Web应用的加载速度。在实践中,通过按需加载减少js文件大小,使用并行加载提升加载效率。通过…

【设计模式】三十二、策略模式

系列文章|源码 https://github.com/tyronczt/design-mode-learn 文章目录 系列文章|源码一、模式定义与核心思想二、模式结构与Java实现1. 核心角色2. Java代码示例 三、策略模式的五大核心优势四、适用场景五、与其他模式的对比六、最佳实践建议总结 🚀进阶版【更…

【Linux 维测专栏 1 -- Hung Task 分析与验证】

文章目录 Linux Hung Task 简介1. Hung Task 概述2. D 状态与 Hung Task3. Hung Task 的工作原理4. Hung Task 的配置5. Hung Task 的典型输出6. Hung Task 的应用场景7. kernel 配置7.1 编译选项7.2 参数控制7.3 验证方法4. 扩展接口 8. 注意事项 Linux Hung Task 简介 1. Hu…

计算机网络精讲day1——计算机网络的性能指标(上)

性能指标1:速率 概念1:比特 英文全称是binary digit,意思是一个二进制数字,因此一个比特就是二进制数字中的1或0,比特也是信息论中使用的信息量单位。 概念2:速率 网络中的速率指的是数据的传送速率&#…

ubuntu20.04使用matlab2024a快捷键调整

一、概述 因为最近在使用ubuntu系统,在上面安装一个matlab比较方便,不用来回在window上面进行跳转,节省不少时间,同时在ubuntu下面启动matlab速度也比较快。 二、问题解决 (一)问题概述 问题如下&#xf…

【设计模式】装饰模式

六、装饰模式 装饰(Decorator) 模式也称为装饰器模式/包装模式,是一种结构型模式。这是一个非常有趣和值得学习的设计模式,该模式展现出了运行时的一种扩展能力,以及比继承更强大和灵活的设计视角和设计能力,甚至在有些场合下&am…

科技赋能安全:慧通测控的安全带全静态性能测试

汽车的广泛普及给人们的出行带来了极大便利,但交通事故频发也成为严重的社会问题。据世界卫生组织统计,全球每年约有 135 万人死于道路交通事故,而安全带在减少事故伤亡方面起着不可替代的作用。正确使用安全带可使前排驾乘人员的死亡风险降低…

猿大师中间件:如何在最新Chrome浏览器Web网页内嵌本地OCX控件?

OCX控件是ActiveX控件的一种,主要用于在网页中嵌入复杂的功能,如图形渲染、多媒体播放等,可是随着谷歌Chrome等主流浏览器升级,目前已经不支持微软调用ActiveX控件了,如果想调用OCX控件用IE浏览器或者国产双擎浏览器&a…

基于STC89C52的DS1621温度检测系统

摘要 本文设计了一种基于STC89C52单片机的DS1621温度检测系统,通过DS1621传感器采集温度数据,利用STC89C52单片机处理数据,并通过串口将温度信息发送至电脑显示。借助Proteus软件进行仿真验证,实现了温度检测系统的功能演示。该系…

创建自己的github.io

1、创建GitHub账号 GitHub地址:https://github.com/ 点击Sign up创建账号 如果已创建,点击Sign in登录 2、创建仓库 假设Owner为username,则Repository name为username.github.io说明: 1、Owner为用户名 2、Repository name为仓…

AI Agent中的MCP详解

一、协议定义与核心价值 MCP(Model Context Protocol,模型上下文协议)是由Anthropic公司于2024年11月推出的开放标准协议,其核心目标是通过建立统一接口规范,解决AI模型与外部系统集成效率低下的行业痛点。该协议通过标准化通信机制,使大型语言模型(LLM)能够无缝对接数…

【AI论文】DeepMesh:基于强化学习的自回归艺术家网格创建

摘要:三角形网格在3D应用中扮演着至关重要的角色,能够实现高效的操作和渲染。虽然自回归方法通过预测离散的顶点标记来生成结构化的网格,但它们往往受到面数限制和网格不完整性的约束。为了应对这些挑战,我们提出了DeepMesh框架&a…

基于ArcGIS和ETOPO-2022 DEM数据分层绘制全球海陆分布

第〇部分 前言 一幅带有地理空间参考、且包含海陆分布的DEM图像在研究区的绘制中非常常见,本文将实现以下图像的绘制 关键步骤: (1)NOAA-NCEI官方下载最新的ETOPO-2022 DEM数据 (2)在ArcGIS(…

Unity | 游戏数据配置

目录 一、ScriptableObject 1.创建ScriptableObject 2.创建asset资源 3.asset资源的读取与保存 二、Excel转JSON 1.Excel格式 2.导表工具 (1)处理A格式Excel (2)处理B格式Excel 三、解析Json文件 1.读取test.json文件 四、相关插件 在游戏开发中,策划…

docker模拟Dos_SYN Flood拒绝服务攻击 (Ubuntu20.04)

目录 ✅ 一、实验环境准备(3 个终端) 👉 所以最终推荐做法: 2️⃣ 配置 seed-attacker 为攻击者,开启 telnet 服务: 3️⃣ 配置 victim-10.9.0.5 为受害者服务器,开启 telnet 客户端并监听&…

场外个股期权是什么?场外个股期权还能做吗?

场外个股期权指在非正式的交易场所,即场外市场上,老板们与特定对手方直接进行的个股期权交易。 场外期权为何被严监管? 场外个股期权指在非正式的交易场所,即场外市场上,老板们与特定对手方直接进行的个股期权交易&am…

vulnhub靶场【billu系列】之billu_b0x2靶机

前言 靶机:billu_b0x2靶机,IP地址为192.168.10.10 攻击:kali,IP地址为192.168.10.6 靶机和攻击机都采用VMware虚拟机,都采用桥接网卡模式 文章涉及的靶机及工具,都可以自行访问官网或者项目地址进行获取…