Halcon参考手册中文版无删减,第十六章 Inspection,检验 (持续更新中)

第十六章 Inspection,检验

16.1 Bead Inspection ,珠检验

操作符列表

apply_bead_inspection_model

根据珠子检查模型的定义,检查图像中的珠子。
clear_bead_inspection_model
删除头检测模型,释放已分配的内存。
create_bead_inspection_model
创建一个模型来检查图像中的珠子或粘合剂。
get_bead_inspection_param
获取特定头检测模型中参数的值。
set_bead_inspection_param
设置头检测模型参数。

16.2 OCV ,光学字符检验

操作符列表

close_ocv

清除OCV工具。
create_ocv_proj
创建一个新的基于灰度值投影的OCV工具。
deserialize_ocv
反序列化序列化的OCV工具。
do_ocv_simple
使用OCV工具验证模式。
read_ocv
从文件中读取OCV工具。

serialize_ocv
序列化OCV工具。
traind_ocv_proj
OCV工具的训练
write_ocv
保存OCV工具到文件。

16.3 Structured Light (...) ,结构光

本章介绍使用结构光的操作人员。

16.3.1结构光的概念

结构光背后的基本概念是在显示器或投影仪上显示已知的图案。这些图案在撞击表面后在场景中出现的方式有助于进一步分析表面。
要使用结构光,必须首先使用create_structured_light_model创建模型。模型类型在ModelType中指定。目前,只支持'deflectometry '模型类型。偏转法是分析从镜面或半镜面反射的已知图案的过程。在这种设置中,对于投射到屏幕上的每个图案图像,都获得反射的相机图像。相机图像中图案的变形意味着在镜面上存在缺陷。
下面简要地描述了在镜面上执行缺陷检测所需的步骤。

1.创建一个结构光模型:
在第一步中,创建一个结构光模型
create_structured_light_model
或者阅读
read_structured_light_model。

2.设置模型参数:

然后可以使用set_structured_light_model_param设置不同的结构光模型参数,或者使用get_structured_light_model_param查询。图案参数'pattern_width', 'pattern_height', 'pattern_orientation'和'pattern_type'与条纹参数'min_stripe_width'和'single_stripe_width'一起指定要生成和投影到镜面上的图案图像的规格。最后,可以启用'persistence'参数来调试中间结果。

3.生成图案图像:
在设置完所有相关参数后,将使用gen_structured_light_pattern生成图案图像。请确保在特定设置中需要输出图像。

4.投影图案并获取相机图像:
在这个阶段,图案图像显示在显示器上,并通过镜面反射。所述相机对每个图案图像分别获取反射图像。

5.将采集到的图像解码:

获取的cameraiages可以使用decode_structured_light_pattern进行解码。调用此操作符后,将创建对应图像并将其存储在StructuredLightModel模型中。
6.得到结果:
现在解码后的“对应图像”,以及其他结果可以用get_structured_light_object查询。可以使用get_structured_light_object生成和查询'defect_image'。有关可以查询的不同对象的更多详细信息,请参阅操作的文档。

16.3.2进一步的操作

结构光模型提供了各种其他操作符,帮助访问和更新模型的各种参数。
操作符write_structured_light_model允许将结构光模型写入文件。请注意,以前生成的图案图像不会写入此文件中。结构光模型文件可以使用read_structured_light_model读取。此外,可以使用serialize_structured_light_model和deserialize_structured_light_model来序列化和反序列化结构化光模型。

16.3.3 进一步的信息

更多细节请参见“解决方案指南基础”。

16.3.4 操作符列表

clear_structured_light_model

清除一个结构轻模型并释放分配的内存。
create_structured_light_model
创建一个结构光模型。
decode_structured_light_pattern
解码通过结构光设置获得的相机图像。
deserialize_structured_light_model
反序列化结构光模型。

gen_structured_light_pattern
生成要在结构光设置中显示的图案图像。
get_structured_light_model_param
查询结构光模型参数。
get_structured_light_object
获得结构光模型的(中间)标志性结果。
read_structured_light_model

从文件中读取结构光模型。
serialize_structured_light_model
序列化一个结构轻模型。
set_structured_light_model_param
设置结构光模型参数。
write_structured_light_model
写一个结构光模型到一个文件。

16.4 Texture Inspection (...) ,纹理缺陷检测

本节介绍纹理检测的操作方法。

16.4.1 纹理检测模型的概念

纹理检测模型只需要设置几个参数就可以检测纹理表面。该算法需要纹理完美的图像进行训练。训练过程从训练图像中提取纹理特征,训练基于高斯混合模型(GMM)分类器的纹理检测模型。训练成功后,纹理图像可以与纹理检测模型进行比较,从而识别出潜在的缺陷。纹理检测适用于图像金字塔。通过这种方法,可以分析纹理的多个频率范围。
在下面,简要描述执行纹理检查所需的步骤。

1.创建纹理检测模型:
在第一步中,创建纹理检测模型
create_texture_inspection_model
或者阅读
read_texture_inspection_model。

2.添加训练样本:
运算符
add_texture_inspection_model_image
将样本图像添加到纹理检查模型中。

纹理表面的图像,用于训练纹理检测模型。

使用add_texture_inspection_model_image添加到纹理检查模型中的图像可以使用get_texture_inspection_model_image查看。如果当前纹理检查不需要添加的全部或部分图像,则可以使用remove_texture_inspection_model_image从模型中删除它们。

3训练纹理检测模型:
纹理检测模型用
train_texture_inspection_model。
在训练过程中,创建了一个图像金字塔。对于每个金字塔级别,训练高斯混合模型(GMM)并确定'novelty_threshold'。“novelty_threshold”有助于区分完美和有缺陷的纹理。训练之后,可以使用get_texture_inspection_model_param查询新颖性阈值。

有几个参数影响训练。它们可以与
set_texture_inspection_model_param。
我们建议按照以下步骤进行培训:
(1) 如果需要设置训练的初始参数:
'patch_normalization': 将此参数设置为'weber',使用的纹理补丁的特征被归一化,使纹理检测模型对光照变化更健壮。然而,请注意,有时可能不需要规范化,例如,如果需要亮度来区分完美和有缺陷的部分。在这种情况下,控制照明对于成功分类是绝对必要的。
'patch_rotational _robustness': 将此参数设置为'true',使用的纹理补丁的特征以一种对旋转变化具有鲁棒性的方式进行排序。如果很难通过训练样本来训练纹理表面的所有可能的方向,可以使用这种方法。

(2)训练纹理检测模型(使用默认参数):纹理检测模型的初始训练可能非常耗时,这取决于训练图像的数量和它们的分辨率。可以考虑以下节省时间的策略:

放大图像: 通常,纹理检测在低分辨率图像上效果更好。如果知道不需要图像的全分辨率,则可以通过缩放图像来显着减少训练时间。例如,将图像缩小2倍,可以将训练时间减少4倍。

加速训练: 另一种风险更大的策略是通过设置参数“gmm_em_threshold”来增加分类器优化停止标准的阈值,例如从0.001到0.1。这将导致更短的训练时间,但也可能导致更不准确的纹理检测模型。如果使用此策略,我们强烈建议在调整了大多数参数后再次减小'gmm_em_threshold'。

(3)检查训练结果: 使用一组有缺陷纹理的图像,用训练好的纹理检查模型对它们进行分类,并按照“应用纹理检查模型”步骤的描述检查结果。如果结果不令人满意,可以进一步调整参数进行训练。最重要的参数是:

'num_levels'或'levels': 使用的金字塔级别或显式使用的金字塔级别的数量。较高的金字塔级别适用于粗糙的纹理特征。如果图像中的纹理非常粗糙,则成功检查可能不需要较低的金字塔级别。然后,通过使用“levels”显式地设置兴趣金字塔级别,可以减少运行时间。例如,如果“levels”设置为[1,3],则只在第一层和第三层上执行训练和纹理分类。

“sensitivity”: 控制新颖性阈值设置的严格程度。这样,就可以调整对新奇事物的敏感度。一般来说,正值导致检测到的缺陷较少,负值导致检测到的缺陷较少。

'novelty_threshold': 手动设置新颖度阈值。如果自动估计的结果不是最优的,这可以用于微调。
(4)如果需要,重复训练: 如果参数被调整,通常需要重新训练纹理检测模型。

4.应用纹理检测模型:
成功训练纹理检测模型后,可以用于纹理表面的分类。每个测试图像都可以与纹理检测模型进行比较
apply_texture_inspection_model。

测试有缺陷的图像。

对于每个测试图像,算子返回一个“novelty_region”,它表示图像与训练的纹理样本有很大偏差的地方。“novelty_region”是由不同金字塔层次的新奇区域组合而成的。图像金字塔中相邻层次的新区域彼此相交。这一步骤有助于提高单金字塔级响应对噪声的鲁棒性。然后将相交的新奇区域添加到返回的“novelty_region”中。如果一个金字塔级别没有相邻的金字塔级别,则该区域本身被添加到'novelty_region'中。例如,如果将'num_levels'设置为1,则不存在相邻的金字塔级别,并且'novelty_region'是第一个金字塔级别的新奇区域。

为了调试,可以使用set_texture_inspection_model_param将参数“gen_result_handle”设置为“true”。这样,单个金字塔级别的新颖性评分图像和新颖性区域存储在结果句柄中。然后它们就可以通过get_texture_inspection_result_object取。

一般来说,新颖性评分图像描述了每个像素与训练过程中创建的纹理检查模型的匹配程度。然后通过将“novelty_threshold”应用于相应的新颖性评分图像来计算单个金字塔级别的新颖性区域。

检查新颖性得分图像和新颖性区域为您提供了提示,哪些类型的错误可以在哪个金字塔级别上检测到。因此,可以决定是否应该调整训练和分类的参数,例如,使用参数“levels”明确地只选择金字塔级别的一个子集是否合理。

上面测试图像的结果'novelty_score_image'(1)和'novelty_region'(2)。

16.4.2 进一步的操作

纹理检测的功能可以通过各种参数来改变。可以使用   get_texture_inspection_model_param查询参数,并通过调用set_texture_inspection_model_param来更改参数。

可以使用write_texture_inspection_model操作符编写纹理检查模型到文件。因此,只存储纹理检测模型。可能添加的图像可以通过  get_texture_inspection_model_image查询,并通过调用write_object单独存储。
为了帮助减少纹理检查模型所需的内存,可以使用  remove_texture_inspection_model_image从模型中删除以前添加的图像。

此外,可以使用serialize_texture_inspection_model和deserialize_texture_inspection_model对纹理检测模型进行序列化和反序列化。

16.4.3 术语表

下面将介绍纹理检测中使用的最重要的术语:
训练图像,Training images
用于训练的图像。

测试的图片, Test images
将图像与训练好的纹理检测模型进行比较。

补丁, Patch
相邻像素的集合。

纹理特征, Texture feature
一个patch内像素的灰度值。

样本, Sample
用于训练的纹理特征。

新奇的分数, Novelty score

在测试过程中,将测试图像的纹理特征与纹理检测模型进行比较,并计算其“新颖性分数”。这个值越大,就越有可能单个纹理特征不适合纹理检测模型。

新奇的阈值, Novelty threshold
新颖性阈值在训练过程中确定。新颖性分数低于新颖性阈值的纹理特征适合纹理检测模型。具有较高新颖性得分的纹理特征则不会。

16.4.4 操作符列表

add_texture_inspection_model_image

将训练图像添加到纹理检测模型中。
apply_texture_inspection_model
检查图像中的纹理。
clear_texture_inspection_model
清除纹理检查模型并释放分配的内存。
clear_texture_inspection_result
清除纹理检查结果句柄并释放分配的内存。

create_texture_inspection_model

创建纹理检测模型。
deserialize_texture_inspection_model
反序列化序列化纹理检测模型。
get_texture_inspection_model_image
获取纹理检测模型中包含的训练图像。
get_texture_inspection_model_param
查询纹理检测模型的相关参数。
get_texture_inspection_result_object
查询纹理检测的图标结果。
read_texture_inspection_model

从文件中读取纹理检测模型。

remove_texture_inspection_model_image
清除纹理检查模型的所有图像或用户定义的图像子集。
serialize_texture_inspection_model
序列化纹理检测模型。
set_texture_inspection_model_param
设置纹理检测模型参数。
train_texture_inspection_model
训练纹理检测模型。
write_texture_inspection_model
写一个纹理检测模型到一个文件。

16.5 Variation Model,变异模式

操作符列表

clear_train_data_variation_model

释放变异模型训练数据的内存。
clear_variation_model
释放变量模型的内存。
compare_ext_variation_model
将图像与变化模型进行比较。
compare_variation_model
将图像与变化模型进行比较。
create_variation_model
创建用于图像比较的变化模型。

deserialize_variation_model

反序列化一个变量模型。
get_thresh_images_variation_model
返回变量模型用于图像比较的阈值图像。
get_variation_model
返回变量模型用于图像比较的图像。
prepare_direct_variation_model
准备一个变化模型,以便与图像进行比较。
prepare_variation_model
准备一个变化模型,以便与图像进行比较。

read_variation_model
从文件中读取变量模型。
serialize_variation_model
序列化一个变量模型。
train_variation_model
训练一个变异模型。
write_variation_model
将变量模型写入文件。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值