【科普】机器视觉,分类器识别,图像处理,halcon分类器

[复制链接]
查看47642 | 回复0 | 2024-9-7 14:36:28 | 显示全部楼层 |阅读模式
前言

一些机器人视觉的小技巧啊

分类是根据特定的特征,比如像素、颜色、形状等特征分成单独的一个类别,每个类别通过前期的训练学习来达到目的,得到一个分类器,当物体经过训练后,分类器通过比较物体的特征来进行识别物体。比如在OCR中,单独的把字符分割出来后,通过把字符训练得到一个分类器对象,字符经过训练后,使用这个分类器对象来进行识别。

在halcon中提供了不同的分类器,分类器有网络神经分类器(MLP),支持向量机(SVM),高斯混合模型(GMM),K-邻近分类器(K-NN),box classifier分类器
MLP(Multi-Layer Perceptron): 网络神经分类器有好的识别类以及比较快速的分类,但是,训练的时候稍微比SVM慢,如果是对于运行时间要求高,训练是离线的,那么MLP就是一个好的选择
SVM(Support Vector Machinves): SVM算法识别能力稍微弱于MLP,训练时间比MLP快,可以增量训练,只需要要在前期的训练样本中增加新的样本即可、
GMM(Gaussian Mixture Models): GMM分类器是有一系列特征参数控制,最好的支持特征参数是15个左右,识别的效果不如MLP和SVM。
KNN(K-Nearest Neighbor):有比价直观的参数,只需要较少的数据即可训练,训练速度也比较快。缺点是识别相对较慢,识别结果没有SVM和MLP好。
在实际使用中,我倾向于使用MLP分类器,在halcon中使用create_class_mlp来进行创建分类器,其他的create_class_svm,create_class_gmm,create_class_knn
其他的,比如我们在使用OCR训练的时候,也是用了halcon的分器,create_ocr_class_mlp,create_ocr_class_svm,create_ocr_class_knn.
分类器使用获取图片-->创建分类器-->训练分类器-->分类数据-->销毁分类器实例



处理步骤
创建分类器
使用create_class_*系列算子进行创建分类器。
训练分类器
训练一个分类器分为2步,第一步添加对应的样本数据到分类器中,如果使用特征进行训练,对应使用的算子是add_sample_class_*系列算子,如果使用的是像素分类,比如颜色纹理等,使用的系列算子是add_samples_image_class_*。第二部就是对分类器进行训练,使用的系列算子是train_class_*
分类器使用
如果是通过特征进行训练的分类器,在使用的时候使用classify_class_*系列算子进行识别当前特征所属类别。如果是像素分类,比如根据颜色把图像分为不同的区域,使用,classify_image_class_*系列算子来进行。
销毁分类器
使用clear_class_*系列算子销毁对应的分类器。
*创建分类器create_ocr_class_mlp (110, 110, 'constant', 'moments_central', ['circle','hexagon','polygon'], 10, 'normalization', 10, 42, OCRHandle)
*训练分类器FileNames := ['nuts_01','nuts_02','nuts_03','washers_01','washers_02','washers_03','retainers_01','retainers_02','retainers_03']ClassNamesImage := ['hexagon','hexagon','hexagon','circle','circle','circle','polygon','polygon','polygon']for J := 0 to |FileNames| - 1 by 1 read_image (Image, 'rings/' + FileNames[J]) dev_display (Image) dev_set_colored (6) segment (Image, Objects) dev_display (Objects) dev_set_color ('black') count_obj (Objects, NumberObjects) for k := 1 to NumberObjects by 1 select_obj (Objects, ObjectSelected, k) *  * Write the samples to a train file if (J == 0 and k == 1) write_ocr_trainf (ObjectSelected, Image, ClassNamesImage[J], 'train_metal_parts_ocr.trf') else append_ocr_trainf (ObjectSelected, Image, ClassNamesImage[J], 'train_metal_parts_ocr.trf') endif endfor stop ()endfor
*训练分类器trainf_ocr_class_mlp (OCRHandle, 'train_metal_parts_ocr.trf', 200, 1, 0.01, Error1, ErrorLog1)*使用分类器do_ocr_single_class_mlp (ObjectSelected, Image, OCRHandle, 1, Class, Confidence)


螺母



圆分类


多边形分类


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则