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要慢但是占用内存却更多,某些应用可能无法接受这个特点。。。

    上图:

        

    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( : : NumInputNumHiddenNumOutputOutputFunction,PreprocessingNumComponents,

 RandSeed : MLPHandle)

   参数:

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

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

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

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

      add_sample_class_mlp( : : MLPHandleFeaturesTarget : )

    

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

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

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


  Step3 : Train the classifier 训练分类器

    train_class_mlp()

  train_class_mlp( : : MLPHandleMaxIterationsWeightToleranceErrorTolerance :ErrorErrorLog)


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

  WeightTolerance: 权重;

step5: classify new objects

classify_class_mlp()

 step6. Destroy the classifyer

clear_class_mlp()

 

  • 6
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值