首页 > 其他分享 >VisionPro学习笔记(4)——PatInspect

VisionPro学习笔记(4)——PatInspect

时间:2023-10-01 13:46:30浏览次数:44  
标签:PMAlign 训练 PatInspect VisionPro 笔记 图案 图像 工具

如果需要了解其他图像处理的文章,请移步小编的GitHub地址

  传送门:请点击我

  如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice

  VisionPro有很多的示例和算子,这里再展示一个最新出的算子Pat Inspect Tool。我自己的笔记不会按照顺序一一展示出来的,也许那个文章先OK,我会先release出来的。 其中大部分的图片和步骤都是VisionPro的官方文档,我这里只是自己的学习笔记,不做任何商用。

   首先,我们可以看一下VisionPro的新功能,如下图所列:

   他们新增了PatInspect工具,主要是将图像的特征与训练图像的特征进行比较,并生成突出显示他们之间差异的输出图像。输出图像突出显示输入图像中的潜入特征。例如缺陷或未对齐的特征,对象上的错误或不需要的标记,或错误颜色的表面

   下面通过一个示例来学习一下。

1:使用PatInspect查找缺陷的原理

   例如,下图显示训练图案、输入图像的区域以及由 PatInspect 工具生成的输出图像:

   然后,可以使用其他视觉工具(如斑点工具或直方图工具)分析输出图像,以收集有关潜在缺陷的更多信息。

  下面按照步骤展示一下这个工具如何使用:

1.1 训练图案

  PatInspect 工具将运行时图像的一个区域与训练图案进行比较,以定位潜在的缺陷。

  在使用 PatInspect 工具分析运行时图像之前,必须首先创建训练图案,该图案与其他配置参数一起存储。

  使用统计训练方法,您可以使用要通过视觉应用程序检查的对象的实际图像来创建训练图案。从多个图像创建训练图案允许您构建这样的训练图案:即可以补偿被检查对象的背景内和反射的运行时图像中允许的照明变化。图像可以存储在图像数据库文件中,也可以从生产环境中采集实时图像。在任何一种情况下,用于创建训练图案的训练图像必须与您期望在视觉应用程序运行时采集的图像非常相似,包括背景、照明和对象放置。此外,图像必须没有缺陷,以便它们生成训练有图案,代表您的视觉应用程序将检查的对象的理想示例。

  为了创建训练图案,PatInspect 工具接受训练图像并将其平均处理为当前训练图案(如果存在),使用下图所示的公式:

 

  尽管可以从单个训练图像创建训练图案,但使用多个图像构建的训练图案可以补偿运行时图像中允许的光照变化和对象放置的微小变化。只有当您的生产环境可以保证光源一致并且被检查对象的外观永远不会发生允许的变化时,才应该从单个图像生成训练图案。

  可用于创建训练图案的图像数量没有上限,尽管随着您添加的每个图像,图案的变化会越来越小。

 

1.2 标准偏差图像

  使用训练图案 PatInspect 工具生成标准偏差图像,其中每个像素是统计训练图像中像素值标准偏差的度量。标准偏差图像是训练图案中每个像素的预期可变性程度的指示。

  PatInspect 工具使用下图所示的公式生成标准偏差图像:

 

  如果您使用单个输入图像创建训练图案,则 PatInspect 工具使用 Sobel 边缘工具(后面会单独讲Soble工具)生成伪标准偏差图像,其中较亮的像素表示特征之间的预期边界。例如,下图是一个训练图案及其生成的伪标准差图像:

 

  使用该工具支持的缩放和偏移系数值,您可以更改伪标准偏差图像中的信息。增加缩放系数会增加图像边缘的大小,而增加偏移系数会增加图像的整体亮度。如果 PatInspect 工具一直报告运行时图像的轮廓或边框存在错误缺陷,请尝试调整 Sobel 系数值。

  如果使用统计训练方法创建训练图案,则更改 Sobel 系数值不会产生任何效果。

 

1.3 阈值图像

  对于用于创建训练图案的每个输入图像,PatInspect 工具会重新计算标准偏差图像,然后使用当前标准偏差图像生成阈值图像。下图是一个训练图案及其生成的阈值图像:

 

  PatInspect 工具使用下图所示的公式生成阈值图像:

 

  其中 AB 分别代表缩放系数和偏移系数。增加阈值缩放会增加边缘信息的对比度,而增加阈值偏移会增加整体亮度。如果 PatInspect 工具在运行时图像的大面积上始终报告错误缺陷,请尝试调整阈值系数值。

  PatInspect 工具使用阈值图像来确定是否应将运行时图像中的任何像素视为缺陷像素。

1.4 图像归一化

  PatInspect 工具对光照变化非常敏感。即使环境光水平的微小变化也会导致工具将运行时图像中的较亮或较暗像素视为缺陷。为了补偿不同的光照水平,该工具可以在分析差异之前对运行时图像执行图像归一化操作。图像归一化可以将非缺陷像素的值降低或提高到与存储在训练图案中的相同水平。

  在配置 PatInspect 工具时,您必须选择以下图像归一化类型之一:

 

1.5 PatInspect 分析

  为了分析运行时图像,该工具首先计算匹配图像,这是该工具将与训练图案进行比较的运行时部分。匹配图像由您选择的训练区域的形状确定。

  接下来,该工具对匹配图像进行图像归一化操作,然后生成原始差异图像(如下图所示),作为训练图案与匹配图像之间的绝对差异:

 

   然后,该工具将阈值图像的每个像素与原始差异图像进行比较。如果原始差异图像中的像素值大于阈值图像的对应像素值,则从原始图像像素中减去当前偏移值(单个图像图案的 Sobel 偏移或统计训练图案的阈值偏移)并将结果(不小于 0)存储在阈值差分图像中。如果原始差异图像中的像素值小于阈值图像的对应像素值,则将值 0 存储在阈值差异图像中。例如,下图显示了原始差异图像、阈值图像和 PatInspect 工具生成的没有偏移值的阈值差异图像:

 

  您可以将此阈值差异图像传递给其他视觉工具,如斑点工具或直方图工具,以生成有关运行时图像中存在的缺陷数量和类型的更多信息。

1.6 用于对齐的PMAlign 工具

  在许多视觉应用中,被检查对象的位置可能会在一次检测之间发生位置、旋转或缩放变化。如果姿势(当训练图案与运行时图像进行比较时对象如何映射的描述)随着每次检查而变化,该工具可以轻松检查图像的错误区域并返回许多错误结果。

  在执行分析和生成结果之前,PatInspect 工具无法执行任何类型的区域对齐。为了确保 PatInspect 工具将区域放置在每次检查的运行时图像的正确区域中,另一个视觉工具必须首先定位对象并将其姿势报告给 PatInspect 工具。PMAlign 工具非常适合此任务,Cognex 建议您在使用 PatInspect 工具之前使用带有 PatMax 算法的 PMAlign 工具来定位对象。PMAlign 工具的姿势可以直接传递到 PatInspect 工具,确保 PatInspect 工具为每次检查分析正确的图像区域。

  此外,也可以使用固定工具,将姿势信息从 PMAlign 工具传递到固定工具的固定参数,然后使用固定工具生成的输出图像作为 PatInspect 工具的输入图像。

  无论是单独使用 PMAlign 工具还是将 PMAlign 工具与固定工具组合使用,都必须确保 PMAlign 原点与 PatInspect 原点保持同步。否则,在执行统计培训或检查时,PatInspect 工具将无法正确放置其区域。

1.7 插值模式

  PatInspect 工具支持两种插值模式:双线性和兼容性。默认情况下,该工具使用双线性模式,适用于大多数应用程序。此外,您必须使用选择双线性模式来利用多核 PC。非默认模式兼容性可用于使用 PatInspect 工具的旧应用程序。

 

2:PatInspect的官方示例程序

  PatInspect 工具将输入图像区域内包含的特征与训练模式中存储的特征进行比较,并生成突出显示它们之间差异的输出图像。 输出图像突出显示输入图像中的潜在缺陷 - 缺失或未对齐的特征、物体上的错误或不需要的标记或颜色错误的表面。

  例如,下图显示了经过训练的模式、输入图像的区域以及 PatInspect 工具生成的输出图像:

 

  由于许多视觉应用程序都具有受检查对象的特征,其中感兴趣的特征可能会从一幅图像更改为另一幅图像的位置,因此此示例应用程序从 PMAlign 工具开始,以定位可靠的特征,并使用结果生成固定的坐标空间来定位 PatInspect 工具 。 有关将视觉工具放置在固定坐标空间上的好处,请参阅创建固定坐标空间主题。

   所以下面在VisionPro的官方QuickBuild里面建立一个完整的示例来学习一下Pat Inspect Tool。以下过程创建一个应用程序,该应用程序使用 PMAlign 工具在 PatInspect 工具分析之前报告对象的姿势。

step1:启动 QuickBuild 并配置新应用程序以从连接的相机或图像数据库获取图像

   此示例应用程序使用工具包的图像数据库以及从生产环境捕获的示例图像。

  关于获取图像,我这里再啰嗦一下,常见的获取图像有两种方法:1,直接使用摄像头在生产环境中获取图像;2,使用采集好的数据图库。 当然,无论哪种方式都取决于你的需求。

  下图是QuickBuild获取到的图像展示:

 

 

step2:创建一个ToolBlock,添加PMAlign工具并将ToolBlock的输入图像连接到PMAlign工具的InputImage

  我们需要运行 ToolBlock,将图像数据库中的第一个图像传递给 PMAlign 工具(PMAlign工具是用来做定位的工具,这个我们后面会介绍,也是VisionPro中不可缺少的一个常用工具)。

  如下图所示,我们添加了PMAlign工具和Inputs的输入图像连接,一般情况下,当运行报错(即显示红色),要么是加载的图像有问题,要么就是工具需要的是灰度图,而我们导入了RGB图像,要么就是工具需要的是RGB图像,我们导入了灰度图(解决方法也很简单,图像有问题,更换图像即可;后面两种情况,我们只需要接入ImageConvertTool,这个工具前面博客已经介绍了)。

 

step3:循环浏览图像数据库,直到找到代表工具包的图像,并且所有组件都位于所需位置

  其实这一步骤主要是观察图像的特征,从我们个人的理解,查看图像中某一个位置是不容易改变的。我们需要通过这个位置进行定位。意思是来确定整个产品的方位。

  如下图所示,我们决定圈圈的地方是我们定位的地方,当然这个位置也是仁者见仁智者见智,自己选自己认为合适的即可。

 

step4:配置 PMAlign 工具以在所有图像中定位特征常量。 应用程序使用原点在后续步骤中创建固定坐标空间

  下图就是定位了指定区域,通过定位区域来获取图像的位置。

 

 

 

此应用程序启用“比例”参数以及低和高比例更改的默认值:

 

 

step5:在图像数据库的所有图像上运行 ToolBlock,并验证 PMAlign 工具在每个图像中找到所需的特征

  注意,如果找不到该功能,则应用程序将失败。 根据需要调整搜索区域或其他运行参数以在所有图像中查找该特征,或选择另一个特征供 PMAlign 工具定位。 所以我之前说定位的位置自己随便选,选择自己认为合适的即可。

 

step6:将 Fixture 工具添加到 ToolBlock 中,并将图像数据库中的 InputImage 与 PMAlign 工具找到的特征的姿势连接起来

  如下图所示,这是链接的示例,当然你也可以按照这个步骤进行操作。

 

  Fixture 工具的 OutputImage 提供具有相对于 PMAlign 工具找到的特征的坐标空间的图像,并允许 PatInspect 工具检查每个运行时图像的所需部分。

 

 

step7:添加 PatInspect 工具并为其提供 Fixture 工具的 OutputImage

  这里主要是添加本文的主角,PatInspect工具。

 

step8:打开 PatInspect 编辑控件,进行编辑

  单击“抓取训练图像和原点”将 Current.InputImage 复制到 Current.TrainImage 缓冲区。

  切换到 Current.TrainImage 缓冲区。 本地图像窗口显示相同的输入图像,但现在出现默认的感兴趣区域:

   我们调整要测试的感兴趣区域,调整后如下所示:

 

  如下图所示,我们选择三角形作为PatInspect工具的模板图像。单击 PatInspect 编辑控件上的“训练新模式”以创建经过训练的模式。 编辑控件在“训练参数”选项卡上显示训练后的模式:

 

  PatInspect 工具现在具有经过训练的模式来检查这些工具包的连续运行时图像。如果单击 PatInspect 编辑控件上的“运行”按钮,该工具会将 Current.InputImage 与经过训练的模式进行比较。在获取不同的图像之前,LastRun.DifferenceImageAbsolute 缓冲区不会显示结果。

  在此示例应用中,套件上的照明可以变化,并且套件本身内的各个对象的位置可以放置在某个小的公差范围内。 PatInspect 工具需要一个训练有素的模式来解释运行时图像中这些允许的差异。

  我们可以再次运行 ToolBlock,直到获得另一张图像,其中照明已发生变化,或者包含所有组件的套件出现在略有不同的位置。我们可以返回到 PatInspect 编辑控件并注意新的 Current.InputImage。 单击统计训练当前模式将新图像合并到现有的训练模式中。 “运行参数”选项卡的“训练模式图像”窗口中的训练模式看起来略有不同,编辑控件会更新分析图像的数量以创建此训练模式:

   意思是多增加几张训练图像,尽量包含多张不同样式的图像,使得最终做测试的时候,训练图像尽可能的不会被测试图像的一些小变化干扰。根据可能的照明条件和工具套件的变化,重复此过程。 捕获新图像,将其传递给 PatInspect 工具,并将新图像合并到经过统计训练的模式中。

   所以最终对于您添加的每个新图像,经过训练的模式变化越来越小,但最终您必须生成经过训练的模式,该模式可生成包含真正缺陷的阈值差异图像。

   下图显示了经过统计训练的模式,该模式说明了套件中对象位置的细微变化:

 

  当您获取足够的图像来训练模式时,单击结束统计训练。 结束统计训练允许 PatInspect 工具使用比启用统计训练更少的 PC 内存。

 

step9:运行run,进行比对   

  针对图像数据库中存在明确缺陷的图像测试 PatInspect 工具。我们可以将测试图片一一喂入PatInspectTool中,这样就可以查看差异图像,如果全为黑色,则表示差异很小属于正常图像,如果差异很大,则表示这张图像存在问题。

   下图显示了从缺少组件的工具包的采集图像生成的阈值差异图像:

 

  当然,最终的PatInspect 工具使阈值差异图像可供应用中的其他视觉工具进行进一步分析或图像处理。

 

3:界面介绍

3.1  训练界面

  界面如下:

   我们可以通过训练界面设置要训练的ROI区域,如下图所示:

 

3.2 训练区域设置界面

  界面如下:

 

  下图是设置训练区域,意思是输入图像要检测的区域,当然可以选择设置全图,也可以选择验证指定区域,比如我们下面我们调整的是训练的ROI区域。当然测试图像也通过定位,然后到PatInspectTool后,来使用检测区域。

 

 

  界面如下:

 

 3.4  结果页面

  界面如下:

 

 

标签:PMAlign,训练,PatInspect,VisionPro,笔记,图案,图像,工具
From: https://www.cnblogs.com/wj-1314/p/10769155.html

相关文章

  • 2023-2024-1 20211306 密码系统设计与实现课程学习笔记4
    20211306密码系统设计与实现课程学习笔记4任务详情自学教材第7,8章,提交学习笔记知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问......
  • 学习笔记4
    学习笔记4@目录学习笔记4一、第七章学习笔记及操作截图1.五个级别2.文件I/O操作3.低级别文件操作4.EXT2文件系统二.第七章部分代码/操作截图三.第八章学习笔记及操作截图1.系统调用2.链接文件3.stat系统调用四.第八章部分代码/操作截图二、苏格拉底检验问题一问题二课程:《Linux......
  • 2023-2024-1 20211211《信息安全系统设计与实现》(上)第七、八章读书笔记
    教材第七、八章读书笔记第七章知识点归纳1文件操作级别-(1)硬件级别:-(2)操作系统中的文件系统函数-(3)系统调用-(4)I/O库函数-(5)用户命令-(6)sh脚本2文件I/O操作-(1)文件I/O操作示意图-(2)用户模式下的程序执行操作3低级别文件操作-(1)分区-(2)格式化分区-(3)挂载分区4EXT......
  • 学习笔记4
    教材7、8章知识点文件操作级别:硬件级别操作系统内核中的文件系统函数系统调用I/O库函数用户命令sh脚本文件I/O操作:打开文件:使用open系统调用打开文件,并返回文件描述符。关闭文件:使用close系统调用关闭文件描述符。读取文件:使用read系统调用从文件中读取数据。......
  • 学习笔记4
    知识点归纳文件I/O操作是指对文件的输入和输出操作。文件输入操作可以读取一个文件的内容,以便后续的处理。常见的文件输入操作包括读取文本文件的内容、读取二进制文件的内容等。文件输出操作可以将处理结果写入到一个文件中。这可以包括将数据写入文本文件、将数据以二进制形......
  • 第四周学习笔记
    1.文件操作硬件级别fdisk:将硬盘、U盘或SDC盘分区。mkfs:格式化磁盘分区,为系统做好准备。fsck:检查和维修系统。碎片整理:压缩文件系统中的文件。操作系统中的文件系统函数#前缀k表示内核函数kmount(),kumount() (mount/umountfilesystems)kmkdir(),krmdir() (make/remo......
  • GDI+学习笔记
    Graphics对象(代表设备上下文)是唯一在绘图操作之间持续存在的对象。一个设计良好的使用GDI+的应用程序将需要在幕后做很多额外的工作,即它必须确保绘图有效地进行,并且在需要时更新屏幕,而不会发生任何不必要的绘图(这一点很重要,因为大多数绘图工作都会对应用程序造成很大的性能......
  • 信息安全系统设计与实现课程第七、八章学习笔记
    一、知识点归纳1.1、文件操作级别文件操作分为五个级别,按照从低到高的顺序排列如下:(1)硬件级别:硬件级别的文件操作包括:fdisk:用于将硬盘、U盘或SD卡等存储设备分区。mkfs:用于格式化磁盘分区,为文件系统做好准备。fsck:用于检查和维修文件系统的一致性。碎片整理:用于压缩......
  • 9.30 读书笔记
    《代码大全2》是一个经典的软件开发书籍,是一本非常有价值的资源,包含了许多软件开发中的重要主题。书中提醒读者以解决问题为导向,不仅仅是完成任务。防御式编程,防御式编程不是指不让别人批评代码,而是指确保要承担的责任,保证方法不会因为传入错误数据而破坏,看似微小的防范,收益可能......
  • 代码大全读书笔记
    代码质量和软件开发的关系:代码质量直接影响软件开发的效率和可维护性。良好的代码质量可以提高代码的可读性、可理解性和可扩展性,减少调试和修复错误的时间和工作量。编写高质量代码的原则:模块化和信息隐藏:将代码分解为小的、独立的模块,并通过封装隐藏内部实现细节。适当......