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

halcon分类器使用标准流程

分类器类型与选择

Halcon 支持多种分类器,了解它们的特点有助于你根据具体任务做出选择 :
1.MLP 多层感知器 分类速度快,训练速度慢,适用于对内存要求低,需要快速分类,支持离线训练的场景
2.SVM 支持向量机分类速度较快(尤其低维时),训练速度快,适用于内存占用与样本量相关样本量不是特别巨大的分类任务
3.GMM 高斯混合模型训练和分类速度都很快,不支持高维特征。适用于类别少、速度要求高的场景,支持异常检测
4.k-NNk 近邻训练极快,分类速度慢,内存需求高,适用于缺陷检测,多维度特征分类

标准工作流程

不同类型的分类器在Halcon中的使用流程类似,下图以MLP分类器为例展示了其核心步骤:
flowchart TD
A[准备样本图像] --> B[图像预处理与特征提取]
B --> C[创建分类器]
C --> D[添加样本与训练]
D --> E{保存与读取模型?}
E – 是 --> F[保存/读取分类器]
E – 否 --> G[直接使用分类器]
F --> G
G --> H[分类新图像]
H --> I[清理资源]

详细关键环节的操作与要点
一. 准备样本与特征提取
首先需要准备足够数量的、带有明确类别标签的样本图像
随后,对图像进行预处理(如二值化、图像分割等),提取出目标区域
接着,计算这些区域的特征值,形成特征向量。常用的形状特征包括:
圆度 (Circularity):衡量区域接近圆形的程度
不变矩 (PSI1, PSI2, …):描述区域形状的几何特征,对旋转、缩放等变化不敏感
灰度投影:图像在水平和垂直方向的灰度值分布
二. 创建、训练与使用分类器
这是流程的核心步骤,主要涉及以下几个关键算子:
2.1,创建分类器:使用如 create_class_mlp算子。需要设定特征向量的维度、隐藏层单元数、输出类别数等参数
2.2,添加样本与训练:使用 add_sample_class_mlp将上一步得到的特征向量和对应的类别标签添加到分类器中
2.3,训练:使用 train_class_mlp算子进行训练
2.4,保存与读取模型:训练完成后,可以使用 write_class_mlp保存模型,之后通过 read_class_mlp读取,避免每次重新训练
2.5,分类新图像:对新图像进行同样的预处理和特征提取后,使用 classify_class_mlp算子即可获取其类别
2.6,清理资源:最后使用 clear_class_mlp清除分类器,释放内存

注意事项:
特征选择是关键:特征质量直接决定分类效果。应选择那些能将不同类别明显区分开的特征 ,你可以从计算区域的几何特征(如面积、圆度)和灰度特征(如平均灰度、偏差)入手

参数调优:在创建MLP分类器时,隐藏层单元数(NumHidden)需要谨慎设置。过小可能导致模型能力不足,过大则可能过拟合

预处理的重要性:对特征向量进行预处理(如归一化)可以加速训练并提升精度 ,在图像处理阶段,有效的分割算法是成功提取特征的前提

监控训练过程:训练时,可以观察误差曲线(ErrorLog)。理想的曲线应该是开始快速下降,之后趋于平稳。如果曲线一直陡峭,可能需要调整参数重新训练

代码示例

1.训练部分
a. 创建MLP分类器
b. 准备训练数据(读取图像,提取特征,添加样本)
c. 训练分类器
d. 保存训练好的模型
推理部分:
a. 加载训练好的模型
b. 读取待分类图像并提取特征
c. 使用分类器进行分类
d. 显示分类结果
下面是一个详细的代码示例,我们将使用一个简单的例子:对三种不同的金属零件(螺母、垫圈、挡圈)进行分类。
注意:实际应用中,特征提取的方法需要根据具体问题调整,这里我们使用形状特征(圆度、不变矩等)作为示例。

标准流程
Halcon分类器的使用主要分为训练和推理两个阶段。以下代码以MLP分类器为例,演示如何对金属零件(如螺母、垫圈、挡圈)进行分类。

* 1. 创建MLP分类器
* 参数: 输入特征数6, 隐藏层神经元5, 输出类别数3, 输出函数'softmax', 预处理'normalization'
create_class_mlp (6, 5, 3, 'softmax', 'normalization', 3, 42, MLPHandle)* 2. 准备训练样本
* 样本文件名和对应的类别标签 (0:螺母, 1:垫圈, 2:挡圈)
FileNames := ['nuts_01','nuts_02','nuts_03','washers_01','washers_02','washers_03','retainers_01','retainers_02','retainers_03']
Classes := [0,0,0,1,1,1,2,2,2]* 3. 循环读取每个样本图像,提取特征并添加到分类器
for J := 0 to |FileNames| - 1 by 1read_image (Image, 'rings/' + FileNames[J])* 图像预处理:二值化分割目标区域binary_threshold (Image, Objects, 'max_separability', 'dark', UsedThreshold)connection (Objects, ConnectedRegions)fill_up (ConnectedRegions, Objects)* 计算每个区域的特征向量count_obj (Objects, Number)for k := 1 to Number by 1select_obj (Objects, Region, k)* 提取形状特征:圆度、轮廓圆度、不变矩circularity (Region, Circularity)roundness (Region, Distance, Sigma, Roundness, Sides)moments_region_central_invar (Region, PSI1, PSI2, PSI3, PSI4)* 组成6维特征向量Features := [Circularity, Roundness, PSI1, PSI2, PSI3, PSI4]* 将样本添加到分类器add_sample_class_mlp (MLPHandle, Features, Classes[J])endfor
endfor* 4. 训练分类器
* 参数: 最大迭代次数200, 权重容差1, 误差容差0.01
train_class_mlp (MLPHandle, 200, 1, 0.01, Error, ErrorLog)* 5. 清除训练样本数据,释放内存
clear_samples_class_mlp (MLPHandle)* 6. 保存训练好的模型
write_class_mlp (MLPHandle, 'metal_parts_classifier.mlp')
完成训练后,使用训练好的模型对新图像进行分类:
* 1. 读取已训练的模型
read_class_mlp ('metal_parts_classifier.mlp', MLPHandle)* 2. 读取待分类图像
read_image (TestImage, 'rings/mixed_01')* 3. 图像预处理(与训练阶段一致)
binary_threshold (TestImage, TestObjects, 'max_separability', 'dark', UsedThreshold)
connection (TestObjects, ConnectedRegions)
fill_up (ConnectedRegions, TestObjects)* 4. 对每个区域进行分类
count_obj (TestObjects, Number)
ClassesResult := []
for k := 1 to Number by 1select_obj (TestObjects, Region, k)* 提取相同的特征向量circularity (Region, Circularity)roundness (Region, Distance, Sigma, Roundness, Sides)moments_region_central_invar (Region, PSI1, PSI2, PSI3, PSI4)Features := [Circularity, Roundness, PSI1, PSI2, PSI3, PSI4]* 5. 使用分类器进行分类* 返回分类结果Class和置信度Confidenceclassify_class_mlp (MLPHandle, Features, 1, Class, Confidence)ClassesResult := [ClassesResult, Class]
endfor* 6. 清理资源
clear_class_mlp (MLPHandle)

关键算子
在以上流程中,以下几个算子是构建分类系统的核心

create_class_mlp:创建MLP分类器
NumInput:特征向量的维度,必须与后续提取的特征数一致
NumHidden:隐藏层神经元数量,影响模型复杂度和能力
NumOutput:分类的类别数
Preprocessing:特征预处理,通常选择 'normalization'(归一化)以提升训练效果和速度
add_sample_class_mlp:添加一个训练样本
Features:从样本区域提取的特征向量
Target:该样本对应的类别标签(如0, 1, 2)
train_class_mlp:训练分类器
训练过程会迭代优化分类器内部参数。可监控 ErrorLog来观察训练过程是否正常(误差应快速下降后趋于平稳)
classify_class_mlp:使用训练好的模型进行分类,输入待识别区域的特征向量,返回其所属的 Class及置信度 Confidence。

扩展应用:深度学习方法
对于更复杂的图像分类任务,Halcon也提供了基于深度学习的分类方法,其流程更为简化,无需手动设计特征:

* 1. 读取预训练的深度学习模型
read_dl_classifier ('pretrained_model.hdl', DLClassifierHandle)* 2. 直接对图像进行分类
apply_dl_classifier (Image, DLClassifierHandle, DLResult)
get_dl_classifier_result (DLResult, 'class', Class)

深度学习模型尤其适用于纹理、颜色复杂或目标形态多变的分类场景

http://www.dtcms.com/a/566141.html

相关文章:

  • 哈尔滨建设银行网站常州建站程序
  • 网站建设用源码建设报名系统
  • 大模型-vllm云端部署模型快速上手体验-5
  • 20.旋转图像(原地矩阵)
  • 网站建设与管理试卷Aphp网站开发视频网站
  • 中间件的前世今生:起源与发展历程
  • InfluxDB 应用场景与使用指南
  • Linux execve系统调用深度解析:从用户空间到进程替换的完整旅程
  • 蓝牙钥匙 第37次 企业车队管理场景下的智能化解决方案:从权限管理到访问控制
  • 福州做企业网站中山住房和建设局网站
  • 做网站活动利于优化的网站要备案吗
  • 南京网站关键词优化丫丫影院
  • auto-tracking自动埋点插件
  • 什么叫网站维护建购物网站难吗
  • 公司做网页要多少钱佛山seo
  • 美术馆网站建设概述网站如何收录快
  • 避免出现重复的属性方法:Python高级编程技巧详解
  • 营销型网站建设的五力原则包括深圳在线官网
  • 德州口碑好的网站制作公司爱站网关键词挖掘工具熊猫
  • 响应式外贸网站价格著名的wordpress网站
  • 【每日一面】实现一个深拷贝函数
  • 图标网站导航制作怎么做网站后台管理系统设计
  • 产品月报|睿本云10月产品功能迭代
  • 国外物流公司网站模板长沙专业网站制作
  • 河北邯郸建网站流量平台
  • 【文献分享】利用 GeneTEA 对基因描述进行自然语言处理以进行过表达分析
  • 开发笔记之:python集成Qt C++编写的扩展模块
  • 新野网站建设旅行社手机网站建设方案
  • 乌兰察布市建设局网站淮安网站建设推广
  • 查看数据库表某一段时间的镜像