![07d287c38fb5af3d6afde5cd3272f6c6.png](https://i-blog.csdnimg.cn/blog_migrate/521ef289c6020812c3d23e2a9e9bec00.jpeg)
前言
一些机器人视觉的小技巧啊
分类是根据特定的特征,比如像素、颜色、形状等特征分成单独的一个类别,每个类别通过前期的训练学习来达到目的,得到一个分类器,当物体经过训练后,分类器通过比较物体的特征来进行识别物体。比如在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.
分类器使用
获取图片-->创建分类器-->训练分类器-->分类数据-->销毁分类器实例
![4268603dec9b4d40a8137c786888965a.png](https://i-blog.csdnimg.cn/blog_migrate/23119c628cbca5ccfc5ebb7705883deb.png)
处理步骤
创建分类器
使用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)
![1952ec14136affc376ef73323f61853e.png](https://i-blog.csdnimg.cn/blog_migrate/4be81e14f70d66a1075191490b40afcc.jpeg)
螺母
![47afe54d2185ea65986669a748ce2179.png](https://i-blog.csdnimg.cn/blog_migrate/061c6ef7461e5b9f968c8c3b2c5110e6.jpeg)
圆分类
![16ce793dc6568a799f296995f731bd1f.png](https://i-blog.csdnimg.cn/blog_migrate/2db23d5fd68c47163a77aaa1a6b62b89.jpeg)
多边形分类
推荐阅读
(点击标题可跳转阅读)
最详细、最完整的相机标定讲解
深度学习+机器视觉=下一代检测
视觉检测系统最经典的结构你了解吗?
机器视觉技术的十大应用领域
工业相机和普通相机究竟有什么不同?
基于机器视觉和深度学习的智能缺陷检测
波士顿等移动机器人的视觉算法解析
2020年37个人工智能技术发展趋势
机器视觉的光源选型及打光方案分析
光学三维测量技术及应用
国内80%搞机器视觉的工程师,走的路子是错的!
视觉+机器人,如何实现连接器的自动装配?
机器视觉技术发展的五大趋势
搞懂机器视觉基本内容,这份PPT就够了
机器视觉:PC式视觉系统与嵌入式视觉系统区别
基于HALCON的机器视觉开发,C++或C#如何选择?
3D视觉技术在机器人抓取作业中的应用实例
基于机器视觉的粗糙度检测方案
机器视觉常用图像软件对比及分析
工业相机编程流程及SDK接口使用汇总
声明:部分内容来源于网络,仅供读者学习、交流之目的。文章版权归原作者所有。如有不妥,请联系删除。
End ![c3f58366e5c982dbf50ac63b74a8e94f.gif](https://i-blog.csdnimg.cn/blog_migrate/693af0fd3fd273fcf4b2099b4a5ee576.gif)
![5d807807ebfde96f1dd246ad0c38b24c.png](https://i-blog.csdnimg.cn/blog_migrate/f4ad67ba268fe7160b47b2a7c7c3cc87.jpeg)