halcon 学习笔记 一分类器

halcon 分类器

  1. 分类器使用范围 :

    1.1 image segmentation 图像分割; object recognition 对象识别; quality control 质量控制;

         novelty detection 缺陷检测; optical character recognition(OCR)  光学字符识别;
    

2.几类重要的HALCON分类器:

2.1  多层神经网络(MLP)

2.2  支持向量机(SVM) : 一种监督学习的方法,广泛用于统计分类及回归分析;

2.3  K-最邻近 (K-NN)

2.4 高斯混合类型(GMM)

3.如何选择适合的分类器、特征和训练样本

3.1 选择适合的分类器

    MLP、GMM、SVM和K-NN这几种分类器是很强大且灵活的。对于图像分割,这四种分类器方法加上LUT(查表),能显著提升处理速度。但LUT最多支持3通道的图像。此外,LUT需要更高的内存需求且离线阶段的处理(如训练样本)更慢(lead to slower offline phase)。

    MLP分类器: 特别适合于需要快速分类但能接受离线训练样本慢 的应用;不支持缺陷检测。

    SVM分类器: 经过调整,能够比其他分类器实现更高质量的分类,但相对的检测速度要慢;

    GMM分类器: 训练和分类查找都很快,特别是当类的数量较少时;非常适合缺陷检测,但只适合那些不需要高维度空间的应用;

    K-NN分类器: 训练非常快且无维度空间的限制,所以非常适合有多种结构的特征和训练数据;此外,要加入额外的训练数据也非常快。缺点是比MLP要慢但是占用内存却更多,某些应用可能无法接受这个特点。。。

上图:

图片:

在这里插入图片描述
halcon 学习笔记 一分类器_第1张图片
3.2 选择合适的特征

    对一般的分类器,所有特征,如region,颜色以及结构纹理,都能用来构建特征向量。使用合适算子生成的特征值来构建特征向量。

    对于图像分割,多通道图像和纹理图像的像素值被当作特征,由于有对应的影像分割算子,我们不需要明确提取出这些特征,有算子完成了这个步骤。

    对于OCR,一系列受限制的region被用来构建特征向量,有特定的OCR算子会计算这些特征,所以只需要选择特征的类型便可。

    对于texture纹理对象,可以使用算子texture_laws获得一个单通道的图像;使用cmopose6处理一个6通道的texture图像等;两个texture处理后得到两个单通道纹理图像,然后使用histo_2dim合并成2通道图像并获取2通道图像的直方图(texture_laws.hdv);

    halcon提供的选择特征的算子:  select_feature_set_svm;  select_feature_set_gmm;  select_feature_set_mlp; 

    select_feature_set_knn;



3.3 选择训练样本

    选择总体特征,但要允许偏差;

    对texture纹理图像,样本要覆盖纹理图像的噪声引起的偏差;

    对region,不能只识别理想化的值,要泛化;

    一些技巧:  

        1.拷贝一些样本,通过腐蚀、膨胀或轻微的选择角度来修改,然后生成的人工样本,可以覆盖掉一些偏差;

        2.对于样本的类的数量分布差别很大的,如质量检测时,大部分是好的产品,这时可以把较少的坏的产品合并成一个特征类,这时就是两个class的特征的对比了。

4.HALCON 分类器的基础步骤:

4.1 提取样本对象的向量特征并存储;

4.2 用存储的多个样本对象的向量特征来训练分类器;

4.3  通过训练过的样本特征 来研究分类的对象;

 4.4  使用训练器识别出新的特征属于哪一类向量特征;

5.例程

5.1 通过 MLP分类器 识别不同金属部分;classify_metal_parts.hdev;

step1: Create classifier 创建分类器

    create_class_mlp()  为分类器创建多层感知器。

create_class_mlp( : : NumInput, NumHidden, NumOutput, OutputFunction,Preprocessing, NumComponents,

RandSeed : MLPHandle)

参数:

NumInput: 提取到的要输入的特征的数量;

NumOutput: 输出的特征类  的数量;一般来说, NumOutput 的值 与 NumComponents 的值 是相同的。

step2: Add training samples to the classifier 添加训练样本到分类器

add_sample_class_mlp()  添加训练的样本到多层感知器的训练数据;

  add_sample_class_mlp( : : MLPHandle, Features, Target : )

Features被存储的训练样本的特征向量, Target指定的类别或期望的返回向量

训练的样本通过 参数 Features 和Target提供,Feature的 数量与 Create_class_mlp_Target的 NumInput相同。

Target 是样本的目标向量, 其向量长度一定要与 step1 所有三种激活函数(OutputFunction)的NumOutput相同。

Step3 : Train the classifier 训练分类器

train_class_mlp()

train_class_mlp( : : MLPHandle, MaxIterations, WeightTolerance, ErrorTolerance :Error, ErrorLog)

MaxIterations : 最大迭代次数(迭代训练多少次));

WeightTolerance: 权重;

step5: classify new objects

classify_class_mlp()

step6. Destroy the classifyer

clear_class_mlp()
————————————————

原文链接:https://blog.csdn.net/u010096608/article/details/80350692

你可能感兴趣的:(Halcon)