分类是将对象分配给一组类的单个实例的术语。由特定的特征来描述对象及类。例如,像素的颜色或图形的形状区域。为定义类,必须指定特征。通过基于已知对象的训练。训练后,分类器将对象的特征与可用的相关特征进行比较类并返回具有最大对应关系的类。取决于所选的分类器,可能还需要给出分类的概率信息或分类的置信度。
通常,可以区分两种图像数据分类。一种方法是基于纯像素分类,根据颜色或纹理对图像进行分割。另一种方法更通用,可以对任意特征进行分类,也就是说,可以根据区域特征(如形状、大小或颜色)对区域进行分类。
Halcon提供不同的分类器。最重要的分类器是神经网络(多层感知器)(MLP)分离器,支持向量机(SVM)分类器,高斯混合模型(GMM)分类器和K近邻(KNN)分类器。另外,也可以使用核分类器,但是作为GMM分类器导致可比较的结果,并且更鲁帮,这里只描述GMM分类器。此外,最简单的分类器可以用于图像分割,包括二维像素的分类器使用class_2dim_sup或class_2dim_unsup进行分类,以及n维像素分类方法。基于(class_ndim_norm)它可以用于,例如,欧几里分类。
决定为特定任务使用哪个分类器,并为所选分类选择合适的参数相对具有挑战性,根据分类任务不同,需要不同的处理方法。Halcon提供用于应用分类的操作符,在创建分类器的步骤中,总结不同分类器的最显著的优点和缺点。单个操作符相关的分类器之间的细微差异用相应的步骤说明或参考手册的相应部分。然而,对于分类没有一套固定的规则来进行合适的旋转并给出分类器的参数旋转。在许多情况下,必须尝试不同的分类器。针对特定的任务和特定的训练数据。独立于选择的方法,在几乎任何为得到满意的结果,必须处理这些参数。综上,分类是复杂的。
一 基本概念
分类基本步骤:
1 获取图像
在对图像进行分类时,必须同时获取训练数据的生产和分类图像的生产。
2 创建分类
分类的第一步是创建一个新的分类器。根据分类的需求觉得选择那一个分类器。以下是四种分类器的主要优缺点:
①多层感知器:MLP分类器识别率高,分类速度快。作为交换,训练速度不如SVM分类,特别是对于庞大的训练集。如果分类是时间紧迫的,但训练可以离线应用,MLP方法是一个很好的选择。一个返回拒绝类,但与GMM分类器相比,它可以受到离群值的影响,因此建议进行额外的明确的拒绝训练。另外,如果需要添加对于额外的训练样本,不应该附件第二次训练,而应该使用两个样本重复训练。
② 支持向量机:与MLP分类器相比,SVM分类器的识别效果稍微好一些训练速度更快,特别是对于庞大的训练集。此外,还进行了新的培训样本可以简单附加到以前的训练中。作为交换,分类速度不如MLP方法。
③高斯混合模型:GMM分类的优点是,由参数控制设置时,与训练过的类之一不匹配的特征向量可以分配给拒绝类。此外,您可以应用附加到第一个培训的第二个培训。例如,为添加新样本。GMM分类器的优缺点是识别率不如MLP或SVM方法获得的识别率。进一步,对于特征向量的长读为15个特征是推荐,而对于MPL和SVM分类器,500个特征的特征向量可以实现。
④K最近邻:KNN分类器的一个优点是它只有几个非常直观的参数。此外,KNN分类器使用很少的训练数据。原则上,每只样品一次是足够,可以得到合理的结果。KNN分类器的训练速度是所有分类器中最快的。从而KNN分类器成为自动特征选择和快速评估的首选。
二 具体步骤
例子 SVM分类器例子
* 如何使用SVM分类器进行分类
dev_update_off()read_image(Image,'plastic_mesh/plastic_mesh_01')get_image_size(Image,Width,Height)dev_close_window()dev_open_window(0,0,Width,Height,'black',WindowHandle)dev_set_color('red')set_display_font(WindowHandle,16,'mono', 'true', 'false')* 用于分类的纹理过滤器奖返回图像上的工件边界,需要检查塑料的网格图像是否
* 包含一个整数的网格单元。当然这样会导致错误,在图像边缘检测到错误时,必须
* 排除靠近的区域。从图像边界进行训练和分类并生成矩形。注意,该图像随后被按
* 2倍的比例缩小。
gen_rectangle1(Rectangle,10,10,Height/2-11,Width/2-11)
* 创建SVM分类器
create_class_svm (5, 'rbf', 0.01, 0.0005, 1, 'novelty-detection', 'normalization', 5, SVMHandle)
* 训练5张无异常的图像
for J:=1 to 5 by 1read_image(Image,'plastic_mesh/plastic_mesh_'+J$'02')* 为节省时间,优化网格的图像的分辨率zoom_image_factor(Image,ImageZoomed,0.5,0.5,'constant')dev_display(ImageZoomed)disp_message (WindowHandle, 'Adding training samples...', 'window', 12, 12, 'black', 'true')* 生成训练图像gen_texture_image (ImageZoomed, ImageTexture)* 将样本添加到分类器中add_samples_image_class_svm(ImageTexture,Rectangle,SVMHandle)
endfordev_display(ImageZoomed)
disp_message(WindowHandle,'Training SVM...','window',12,12,'black', 'true')
* 训练SVM.生成许多支持向量
train_class_svm(SVMHandle,0.001,'default')
* 提升速度,减少支持向量
reduce_class_svm(SVMHandle,'bottom_up',2,0.001,SVMHandleReduced)* 现在检测图像中NG的网格
dev_set_draw('margin')
dev_set_line_width(3)
for J:=1 to 14 by 1read_image(Image,'plastic_mesh/plastic_mesh_'+J$'02')zoom_image_factor(Image,ImageZoomed,0.5,0.5,'constant')dev_display(ImageZoomed)dev_set_color('white')dev_display(Rectangle)gen_texture_image(ImageZoomed,ImageTexture)reduce_domain(ImageTexture,Rectangle,ImageTextureReduced)* 使用SVM进行分类检测classify_image_class_svm(ImageTextureReduced,Errors,SVMHandleReduced)* 对返回的数据进行处理,删除数据中不重要的部分opening_circle(Errors,ErrorsOpening,3.5)closing_circle(ErrorsOpening,ErrorsClosing,10.5)connection(ErrorsClosing,ErrorConnected)select_shape(ErrorConnected,FinalErrors,'area','and',300,1000000)count_obj(FinalErrors,NumErrors)dev_set_color('red')dev_display(FinalErrors)if (NumErrors > 0)disp_message (WindowHandle, 'Mesh not OK', 'window', 12, 12, 'red', 'true')elsedisp_message (WindowHandle, 'Mesh OK', 'window', 12, 12, 'forest green', 'true')endifif (J < 14)disp_continue_message (WindowHandle, 'black', 'true')endifstop ()
endfor
琐碎时间阅读基础知识,详情关注微信公众号“知识代码AI”。