1. 分类器使用范围 :
1.1 image segmentation 图像分割; object recognition 对象识别; quality control 质量控制;
novelty detection 缺陷检测; optical character recognition(OCR) 光学字符识别;
2. 几类重要的HALCON分类器:
2.1 多层神经网络Neural Nets (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( : : 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()
————————————————
版权声明:本文为CSDN博主「nope啊」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010096608/article/details/80350692

