机器视觉,分类器识别,图像处理,halcon分类器

分类是根据特定的特征,比如像素、颜色、形状等特征分成单独的一个类别,每个类别通过前期的训练学习来达到目的,得到一个分类器,当物体经过训练后,分类器通过比较物体的特征来进行识别物体。比如在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.

分类器使用

获取图片-->创建分类器-->训练分类器-->分类数据-->销毁分类器实例

机器视觉,分类器识别,图像处理,halcon分类器

处理步骤

创建分类器

使用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)
机器视觉,分类器识别,图像处理,halcon分类器

螺母


机器视觉,分类器识别,图像处理,halcon分类器

圆分类


机器视觉,分类器识别,图像处理,halcon分类器

多边形分类


分享到:


相關文章: