使用HALCON进行图像分类——图像分类(系统讲解,附模板例程精讲)

本文深入解析HALCON图像分类流程,涵盖MLP分类器的创建、训练与应用,及特征提取算子详解,辅以光学字符识别实例,是图像处理与机器视觉领域的实用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.基础知识

1.1分类器的作用与使用范围

分类器的作用是将目标对象指定为已给的多个类别中的一个。例如一张图中包含了几种形状不同的物体,我们可以通过分别对每一种形状对应样本的区域的某些特征值,并告诉它每一类形状的这些样本属于哪种类别来进行训练,完成训练后,再输入待判断物体的形状区域的相应特征值,这时分类器便可以根据之前的训练成果,来对输入区域进行判断,并给出判断的结果。

这里,我对区域进行了加粗,是因为需要大家知道,分类器所需要的输入是区域的特征值,而不是单纯的原始图像,无论是进行训练,还是进行识别,它的输入始终都是区域的特征值。因此,进行分类器操作之前,对原始图像进行一些预处理以及图像分割来得到我们需要输入的目标区域是必须的。具体如何分割,则需要具体场景具体分析。

1.2分类器的种类

Halcon提供了多种分类器,比较重要的分类器有
(1)基于神经网络,特别是多层感知器的MLP分类器
(2)基于支持向量机的SVM分类器
(3)基于高斯混合模型的GMM分类器
(4)基于k近邻的k-NN分类器

1.3 分类器特点

(1) MLP分类器
MLP分类器分类速度快,但训练速度慢,对内存的要求低,支持多维特征空间,特别适合需要快速分类并且支持离线训练的场景,但不支持缺陷检测。
(2)SVM分类器
分类检测的速度快,当向量维度低时速度最快,但比MLP分类器慢,尽量训练速度比MLP分类器快得多。其对内存的占用取决于样本的数量,如果有大量的样本,如字符库这样的样本需要训练,分类器将变得非常庞大。
(3) GMM分类器
训练速度和检测速度都很快,特别是类别较少时速度特别快,支持异常检测,但不适用于高维度特征检测。
(4)k-NN分类器
训练速度非常快,分类速度比MLP分类器慢,适合缺陷检测和多维度特征分类,但对内存的需求较高。

多数情况下,上面四种分类器都是可以胜任需求的。

1.4 图像分类的一般流程

(1)准备样本图片
(2)对样本图片进行处理(如二值化、图像分割等),提取出目标区域
(3)分析目标特征,选取可以用来将不同类别区分开来的几种特征值作为特征向量以训练分类器
(2)创建分类器
(3)训练分类器
(4)检测待测目标对象,分类器根据训练得到的类别的边界条件判断检测对象属于哪个分类
(5)清除分类器,释放内存

总的来说,针对不同的分类任务,需要选择一组合适的特征和合适的分类器,以及合适的训练样本。

2.特征的分类

2.1 MLP分类器的关键算子

(1)创建分类器——create_class_mlp算子

create_class_mlp( : : NumInput, NumHidden, NumOutput, OutputFunction, Preprocessing, NumComponents, RandSeed : MLPHandle)

该算子除了MLPHandle是输出参数以外,其余都是输入参数,介绍如下:
NumInput:用于训练和分类的特征空间的维度数。默认是20,也可以更大甚至500。
NumHidden:表示神经网络中隐藏层的单元数量。改值会明显地影响分类结果,需要谨慎设置。其取值范围与NumInput及NumOutput相似。其值越小,超平面就越简单,有时能够得到更好的效果;如果取值过大,反而会有过拟合的可能,比如可能将噪声点用于训练分类器的边界,这时如果待测对象不包括这些非关键的点,则可能分类失败。
NumOutput:表示输出的分类数量,比如对两种物体进行分类,即为2,对三种物体分类即为3。
OutputFunction:表示神经网络的输出单元使用的函数,可选的有softmax、logistic、linear。绝大多数情况下,输出函数都可以使用softmax。logistic用于处理多个逻辑独立的属性的分类问题,非常少见。linear用于最小二乘法,而不是用于分类,可以忽略。
Preprocessing:该参数表示在训练与分类前对特征向量进行预处理。预处理可以加快训练或者分类的速度,有时也有助于提升分类的准确度。其可选方法有四种。选择none时不进行任何预处理,大多数情况下,选择normalization,表示将特征向量归一化为0至1的数。这种处理既不会改变特征向量的长度,又能有效提升速度,因此是预处理的首选。如果特征向量是高度相关的,可以选择principal_components
NumComponents:在Preprocessing选择canonical_variates或者principal_components时使用。因为这两种预处理方法可能会减少特征空间的维度,NumComponents就表示减少后的特征向量的维度。
RandSeed:用于初始化MLP中的权重值,该值表示随机数种子数,存储在RandSeed中。
MLPHandle:唯一的输出参数。这是分类器的句柄,用于后续对分类器进行各种操作,如调用、修改、删除等。

(2)将单个样本添加到MLP分类器中——add_sample_class_mlp算子

add_sample_class_mlp( : : MLPHandle, Features, Target : )

MLPHandle:表示分类器的句柄
Feaures:表示输入样本的特征向量。该向量类似于一个数组,其中的每一个值表示一种特征,其维度数应当与create_class_mlp中的NumInput的值相同。
Target:设置类别的标识号。它可以设置的值的个数与create_class_mlp中的NumOutput的值

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值