Halcon 第六章『图像分类Classification』◆第1节:分类器的介绍

        一、介绍

        分类器的作用是将目标对象指定给多个类别中的一个。

        给目标做出分类前,需要了解目标内不同的类别之间有什么共同特征,又有什么特征是某个类别独有的。可以通过分析样本对象的典型特征得到这些信息。

        特征参数存储在特征向量中,又称特征空间。特征空间的维度取决于特征的种类,一般来说,特征空间的维度可以很高。但是,如果维度过高,也可使分类问题变得复杂。而要区分物体类别,往往只依赖关键的几个特征。所以,可以去除一些不重要的特征,以尽量减少特征空间的维度。为了显示方便,常常只绘制其中两维。

        在使用二维的坐标轴表示特征空间时,常用一个轴表示一种特征。不同类别的目标的特征值以点的形式显示在这样的坐标空间中。分类器就是一条将这些点区分开来的线,它可以使坐标空间中的点都能有明确的分类。

        但有时二维分类还不足以区分物体,容易造成误判。这种情况下就需要用更多的样本来训练或者增加其他特征。同时由于特征空间维度的增加,分类器就不再是二维空间的一条线了,而可能是三维空间的一个平民。如果特征维度继续增加,分类器可能就是“超平面”了。

        这种使用线或者平民进行分类的分类器称为线性分类器。还有一种非线性分类器能使用任意曲面或者折面对特征点进行分割,这种分类器一般出现在多维特征空间中。

        二、分类器的种类

        ①基于神经网络,特别是多层感知器的MLP分类器。

        ②基于支持向量机的SVM分类器。

        ③基于高斯混合模型的GMM分类器。

        ④基于K-最近邻法的k-NN分类器。

        此外,Halcon还提供了一种盒式分类器,用于二值图像的分类。

        可以使用一种通用的分类器,任意对象(如点和区域)都可以基于任意特征进行分类,如颜色、纹理、形状或尺寸等。也可以运用分类器进行图像分割,这时的分类器将图像分为不同类型的区域,每个像素都会根据颜色或者纹理特征进行分类,所有同属于某一类的点合并为同一个区域。还可以用分类器进行光学字符识别,独立的区域会根据区域特征分配到一个类别中,这个类别表示一个字符或数字。

        三、分类器的区别

        MLP分类器:分类速度快,但是训练速度慢,对内存的要求低,支持多维特征空间,特别适合需要快速分类并且支持离线训练的场景,但不支持缺陷检测。

        SVM分类器:分类检测的速度快,当向量维度低时速度最快,但比MLP分类器慢,尽管其训练速度比MLP分类器快得多且识别率稍好。其对内存的占用取决于样本的数量,如果有大量的样本,如字符库这样的样本需要训练,分类器会变得十分庞大。
        GMM分类器:有参数设置控制,训练速度和检测速度都很快,特别是类别较少时速度非常快,支持异常检测,但不适用于高纬度特征检测一般建议15以下。作用:非常适合缺陷检测。缺点是识别率比MLP和SVM低。
        k-NN分类器:是所有分类器中训练速度最快的,适合缺陷检测和多维度特征分类,但对内存的需求较高。但是分类速度比MLP分类器慢,且分类结果没有SVM和MLP的效果好。

        除了分类器外,特征和训练样本的选择也会影响到分类结果,当分类结果不理想时,可以考虑调整这两个因素。如果训练样本中已经包含了目标对象的全部相关特征,但分类结果仍然不理想,那么可以考虑换一个分类器。 

        四、图像分类的一般流程

        ①准备一组已知属于同一类别的样本对象,从每个样本对象中提取出一组特征,并且存储在一个特征向量中。

        ②创建分类器。

        ③用样本的特征向量训练一个分类器。在训练过程中,用分类器计算出属于某个类别的边界条件。

        ④对目标对象进行检测,获取待检测对象的特征向量。

        ⑤分类器根据训练得到的类别的边界条件判断检测对象的特征属于哪个分类。

        ⑥清除分类器。

        五、选择合适的特征

        对于一般的分类来说,特征向量可以是区域特征、颜色或者纹理等。

        对于图像分割来说,用来做分割的特征可以是像素的灰度值、颜色的通道或者纹理的图像,并不需要将这些特征一个个明确地计算出来,有些分割算子可以自动进行分割操作,如阈值处理。

        对于OCR来说,特征的选择则十分有限。相应的OCR算子会自动计算内部的特征类型,如宽度、高度、角度、凸性、缩放比例、紧凑性等。

        如果目标对象适合用区域特征进行分类,那么可以选择区域特征相关的算子;如果适合用纹理特征进行分类,可以考虑用纹理特征算子提取纹理信息进行计算。如果还不确定使用什么特征进行训练,可以使用select_feature_set_mlp等算子进行辅助参数选择。

        六、选择合适的训练样本

        分类就是将具有某些相同特征的对象划分到一起的过程。同一类的特征数据必然有某种相似性,但又有其特异性。

        为了学习这些相似性和特异性,分类器需要一些有代表性的样本,这些样本不仅要表现出属于该类别的明显特征,也要体现出该类别中的多样性。因此,样本中应该有在一定范围内变化的样本。

        所以在训练时,每个分类下都应尽可能多的包含特征多变的训练样本。否则在分类时遇到未知的对象时,会因为对象与样本差异较大而得不到理想的分类结果。但是,如果实在没有办法获得大量的训练样本,也可以用其他方法进行弥补。

        一种方式是复制原有的数据,并在其中的关键特征上做轻微的改动,然后将改动后的数据加入训练样本中。另一种方式是缩小范围,适用于训练样本数量不足的情况。例如,对零件缺陷检测时,只有大量的正样本,负样本数量很少,这时可以将分类分两部分:第一步,使用二分法,检测样本是正样本还是负样本;第二步,剔除检测出的正样本,对这些负样本,即有缺陷的零件进行第二步分类。

        七、分类器使用的步骤

         MLP、SVM、GMM和k-NN分类器的用法都比较相似。

        创建一个分类器大致有下列几个步骤:

        ①明确有哪些类别,并根据类别收集合适的图像作为样本数据集。

        ②创建分类器。

        ③获取明确了类别的样本的特征向量。

        ④将这些样本按分类序号添加到分类器中。

        ⑤训练分类器。

        ⑥保存分类器(供后续调用)。

        ⑦获取未知分类的被测对象的特征向量。这些特征向量应当是之前训练分类器时使用过的特征向量。

        ⑧对被测对象的特征向量进行分类。

        ⑨从内存中清楚分类器。

参考文献:

杨青—《Halcon机器视觉算法原理与编程实战》

猜你喜欢

转载自blog.csdn.net/qq_45336030/article/details/124576822