图像分类halcon

将一格目标对象根据某种特征划到某个类别中去。这些特征可能是:颜色、尺寸、纹理或者某个指定的形状。

一、分类器

对提取的区域进行识别,看看这些区域属于哪个类别。

分类器的分类:

(1)基于神经网络,特别是多层感知器的MLP分类器

(2)基于支持向量机的SVM分类器

(3)基于高斯混合模型的GMM分类器

(4)基于k近邻的k-NN分类器

图像分类的一般流程:

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

(2)创建分类器

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

(4)对目标对象进行检测,获取待检测对象的特征向量

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

(6)清除分类器

创建分类器

MLP分类器: 特别适合于需要 快速分类但能接受 离线训练样本慢的应用;不支持缺陷检测。

MLP分类器具有较好的识别率,且分类速度较快。作为交换,训练的速度不如SVM分类那么快,特别是对于大型的训练集。如果分类是时间关键的,但训练可以离线应用,那么MLP方法是一个很好的选择。返回一个拒绝类,但与GMM分类器相比,它可能会受到异常值的影响,因此建议对一个拒绝类进行额外的、显式的训练。此外,如果要添加额外的训练样本,则不应该附加第二次训练,而是对旧训练样本和新训练样本重复训练。

图像分割、OCR、通用的特征分类。

SVM分类器:经过调整,能够比其他分类器实现更 高质量的分类,但相对的 检测速度要慢

与MLP分类器相比,SVM分类器的识别率略高,并且在训练时速度更快,特别是对于大量的训练集。此外,对新的训练样本的训练可以简单地附加到以前的训练中。作为交换,分类的速度不如MLP方法快。拒绝类不会自动获得一个拒绝类。

GMM分类器:训练和分类查找都很 ,特别是当类的数量较少时;非常 适合缺陷检测,但只适合那些不需要高维度空间的应用;

GMM分类的优点是,由参数设置控制,可以将一个与一个训练类不匹配的特征向量分配给一个拒绝类。此外,您还可以应用附加到第一个训练中的第二个训练,例如,以便添加新的训练样本。GMM分类器的缺点是识别率不如MLP或SVM方法获得的识别率好。此外,对于特征向量,推荐的长度高达15个特征,而对于MLP和SVM分类器,具有500个特征的特征向量仍然是现实的。

K-NN分类器: 训练非常快且无维度空间的限制,所以非常适合 有多种结构的特征和训练数据;此外,要加入额外的训练数据也非常快。缺点是比MLP要慢但是占用内存却更多,某些应用可能无法接受这个特点。

k-NN分类器的一个优点是它只有几个非常直观的参数。此外,k-NN分类器使用的训练数据也很少。原则上,每个类只有一个样本就足以得到合理的结果。k-NN分类器的训练是所有分类器中速度最快的。这使得k-NN分类器成为自动特征选择和快速评估的首选。缺点是分类速度相对较慢,分类结果不如SVM和MLP分类器好。

训练分类器

训练包括两个重要步骤:首先,使用操作符add_sample_class_mlp、add_sample_class_svm、add_sample_class_gmm或add_sample_class_knn向分类器中 添加具有代表性的训练样本,即每个类的一组特征向量。如果您想应用像素分类,即要将图像分割成不同颜色或纹理的区域,也可以使用运算符add_samples_image_class_mlp、add_samples_image_class_svm、add_samples_image_class_gmm或add_samples_image_class_knn来添加示例。然后,您可以立即插入单个多通道图像,而不是许多特征向量(每像素一个)。在第二步中,通过train_class_mlp、train_class_svm、train_class_gmm或train_class_knn 来训练分类器。请注意,复杂的计算是在训练过程中执行的。因此,根据训练样本的数量和一些特定于方法的影响,例如,用于MLP分类的MLP的大小,训练可能需要几秒钟到几个小时。

选择合适的分类器

选择合适的特征:取决于检测的对象是什么以及分类的要求是什么。

对于一般的分类,用于分割的特征可以是:区域特征、颜色、纹理等

对于图像分割来说,用于分割的特征可以是:像素的灰度值、颜色的通道或者纹理的图像

对于OCR,特征的选择十分有限,宽度、高度、角度等

选择合适的训练样本:有代表性的样本,表现出属于该类别的明显特征,也要体现出该类别的多样性。

二、特征分类

一般步骤:

2.1 MLP分类器

creat_class_mlp():创建基于神经网络的MLP分类器。

add_sample_class_mlp():将单个样本添加到MLP分类器中。

train_class_mlp():训练样本

evaluate_class_mlp():评估一个特征向量属于某个类别的概率

classify_class_mlp():对未知对象进行分类

clear_class_mlp():释放分类器

2.2 SVM分类器

2.3 GMM分类器

2.2 k-NN分类器

三、光学字符识别 OCR

Halcon OCR字符识别_Loewen丶的小窝-CSDN博客

halcon之ocr识别(个人总结)_q473203506的博客-CSDN博客

分类器:系统自带了一些训练好的分类器可以直接读取

用户自定义训练分类器。

OCR(Optical Character Recognition),光学字符识别,是指使用扫描仪或数码相机等电子设备检查纸上的字符,通过检测暗、亮的方法确定字符的形状,并使用字符识别方法把字符转化为计算机数据的过程;即对文本资料进行扫描,然后对图像文件进行图像处理和分析,最终获取文字的过程。

获取图像、选取感兴趣区域(ROI,Region ofInterest)、图像校正、图像预处理(滤波)、提取分割参数、分割图像等步骤主要运用图像处理技术。训练OCR、读取特征、显示结果、摧毁分类器等步骤主要运用人工神经网络技术。

训练OCR分为离线处理和在线识别:

离线处理:包括训练字体,将区域代表的字母或数字提取出来并以相应的字符名储存在训练文件中,用来训练字体的训练文件中的内容可以有选择的进行再次修改。

离线处理过程:
1)生成训练文件.trf:每一个字符的大量训练样本存在训练文件.trf 中
注意:图像上每个字体都要形成一个连通域
2)创建训练器:对如颜色、纹理等特征进行分类。Halcon中的分类器主要有多层神经网络(MLP)、支持向量机(SVM) 、K-最邻近 (K-NN)、高斯混合类型(GMM)
3)训练分类器:训练文件.trf+新ocr分类器
4)保存分类器
5)识别字符:do_ocr_multi_class_mlp(一起识别)或 do_ocr_single_class_mlp(逐个识别)
在线识别部分:读取已经训练好的字体文件(.ocm)或Halcon自带的训练文件(.ocm),通过图像预处理将图像中的字符区域提取并分割来,再使用分类器对提取出来的区域进行识别。

一个简单的应用:

直接读取训练好的OCR文件

FontFile := 'Document_0-9_NoRej'
read_ocr_class_mlp (FontFile, OCRHandle)
read_image (Image, 'E:/C/Halcon/shuzi1.jpg')
threshold (Image, Region, 150, 180)
connection (Region, Characters)
count_obj (Characters, Number)
dev_set_color ('red')
for i := 1 to Number by 1
select_obj (Characters, SingleChar, i)
do_ocr_single_class_mlp (SingleChar, Image, OCRHandle, 2, Class, \
Confidence)
endfor

简要说明:

read_ocr_class_mlp (FontFile, OCRHandle)读取训练好的OCR

下面两步骤是阈值分割和连接连通域

threshold (Image, Region, 150, 180)
connection (Region, Characters)

do_ocr_single_class_mlp (SingleChar, Image, OCRHandle, 2, Class, Confidence)

图像分类halcon

图像分类halcon

参数一:要识别的字符。 参数二:字符的灰色值。

参数三:OCR分类器的句柄。 参数四:要确定的最佳类数。

参数五:使用MLP对字符进行分类的结果。 参数六:分类的可信度

自己训练分类器:

创建训练文件:将文字与区域建立关联,以trf结尾的文件来储存这种关联。

训练OCR:创建分类器、训练分类器、保存分类器

图像分类halcon

对齐roi或图像

因为字符的读取对旋转不变,可能有必要纠正图像的方向。这可以通过使用操作符text_line_orientation直接确定文本的方向,或者通过定位另一个对象来实现。然后,使用文本或找到的对象的方向进行裁剪和对齐。

纠正图像

与对齐类似,可能需要修正图像,例如,消除透视扭曲。对于倾斜字符,可以使用操作符text_line_slant来确定倾斜角。

预处理图像

有时,由于噪声、纹理或覆盖结构,字符可能难以提取。在这里,像mean_image或gauss_filter这样的操作符可以用来消除噪声。binomial_filter是一个快速但稍微不太完美的gauss_filter选择。操作员median_image有助于抑制小的斑点或细线。操作符dots_image被优化以强调点印,同时抑制图像中的其他结构。灰度值形态可用于消除噪声结构,并适应字符的行程宽度。

提取分割参数

当使用点分析分割字符时,可以动态提取值,而不是使用固定的阈值。

分段图像

对于分割,可以使用各种方法。自动文本阅读器非常容易使用,并提供了健壮的结果。它将两步分割和分类结合为算符find_text的一个调用。手动文本查找器可以读取雕刻的文字,而这些文本不能通过自动文本阅读器来读取,但它需要付出更大的努力来设置参数。因此,如果可能,应使用自动文本阅读器。这两种方法都使用了一个可以精确指定的文本模型。在”通用字符分割”下还描述了另外两种常见的分割方法。

使用自动文本阅读器进行分割

对于使用自动文本阅读器,必须使用create_text_model_reader创建一个模型,参数模式设置为”auto”。在这里,必须已经传递了一个OCR分类器。分割参数可以用操作符set_text_model_param来指定,并可以用get_text_model_param进行查询。在此准备完成后,可以使用操作符find_text读取文本。该操作符根据区域和灰度值特征选择候选字符,并使用给定的OCR分类器对其进行验证。然后将候选字符进一步组合到行中,如果它们符合文本行,则进行测试。

如果文本必须匹配某种模式或结构,则可以设置操作符set_text_model_param的参数’text_line_structure,从而决定结构,即应检测文本的每个字符块的字符数。自动文本阅读器假定为近似水平的文本。如果文本没有水平对齐,则可以在使用find_text之前使用操作符text_line_orientation和rotate_image。find_text的结果在文本结果标识中返回,可以分别用get_text_result和get_text_object进行查询。get_text_result返回,例如,分类结果。get_text_object返回自动文本阅读器的标志性结果,即字符区域。要删除结果和文本模型,请分别使用操作符clear_text_result和clear_text_model。有关其参数的详细信息,请参阅上述操作人员的参考手册。

训练OCR

图18.3显示了训练文件生成的概述:首先,必须使用分割方法提取样本图像中的字符(见上文)。必须为每个单一字符指定一个名称。这可以通过输入、结构良好的图像(例如,每个字符的多个样本)的编程输入,或者通过从文件中读取字符名来实现。然后,将这些区域及其名称一起写入训练文件中。最方便的操作符是append_ocr_trainf。在应用培训之前,我们建议检查培训文件的正确性。例如,这可以通过使用操作符read_ocr_trainf结合可视化操作符来实现。

请注意,您还可以训练您自己的系统字体。通过修改和扭曲字体的字符,您可以增加每个类的不同训练样本的数量,从而提高检出率。为此,可以使用h开发的OCR助手的培训文件浏览器。有关培训文件浏览器的详细描述,请参见H开发用户指南第185页第6.18部分。此外,示例程序%HALCONEXAMPLES%/hdevelop/Applications/OCR/generate_system_font.hdev还展示了如何从系统字体中导出训练数据和OCR分类器。

实际培训情况如图18.4所示。首先,创建一个新的分类器。有四种不同的OCR分类器可用:神经网络(多层感知器或MLP)分类器、基于支持向量机(SVM)的分类器、基于k-最近邻方法(k-NN)的分类器和box分类器。

请注意,如果要使用自动文本阅读器对文本进行分割和分类,则必须提供一个基于MLP的OCR分类器。否则,就可以使用基于MLP、SVM或k-NN的OCR分类器。k-NN在只有少数可用样本时具有优势,但在典型的OCR应用中优于MLP和SVM。因此,在本手册中只进一步描述了MLP和SVM。有关如何在OCR应用程序中使用k-NN分类器的更多信息,请参阅第86页的解决方案指南II-D,第7.5节。推荐的两种分类器的不同之处在于:MLP分类器的分类速度较快,但对于大型训练集,训练速度较慢(与基于SVM的分类器相比)。如果培训可以离线应用,因此不是时间的关键,那么MLP是一个很好的选择。基于SVM的分类器的识别率略高于MLP分类器,并且在训练时速度更快(特别是对于大型训练集)。但是,与MLP分类器相比,该分类需要更多的时间。

文字识别:

分离的汉字,组合的数字:123

halcon OCR识别,训练自己的OCR_dazhuan0429的博客-CSDN博客_halcon ocr训练

基于OCR训练的halcon汉字识别_aaaaabin的博客-CSDN博客_halcon汉字识别

halcon之ocr识别(个人总结)_q473203506的博客-CSDN博客

关于halcon的OCR字符识别_小李_19950327的博客-CSDN博客_halcon字符识别

Halcon中OCR的实现及关键函数解析_学习专栏,期待交流与成长-CSDN博客

Original: https://blog.csdn.net/qq_42475191/article/details/121322505
Author: 偏安一隅,占山为王
Title: 图像分类halcon

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/665157/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球