如果需要了解其他图像处理的文章,请移步小编的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 工具使用下图所示的公式生成阈值图像:
其中 A 和 B 分别代表缩放系数和偏移系数。增加阈值缩放会增加边缘信息的对比度,而增加阈值偏移会增加整体亮度。如果 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 工具 。 有关将视觉工具放置在固定坐标空间上的好处,请参阅创建固定坐标空间主题。
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 缓冲区。
我们调整要测试的感兴趣区域,调整后如下所示:
如下图所示,我们选择三角形作为PatInspect工具的模板图像。单击 PatInspect 编辑控件上的“训练新模式”以创建经过训练的模式。 编辑控件在“训练参数”选项卡上显示训练后的模式:
PatInspect 工具现在具有经过训练的模式来检查这些工具包的连续运行时图像。如果单击 PatInspect 编辑控件上的“运行”按钮,该工具会将 Current.InputImage 与经过训练的模式进行比较。在获取不同的图像之前,LastRun.DifferenceImageAbsolute 缓冲区不会显示结果。
在此示例应用中,套件上的照明可以变化,并且套件本身内的各个对象的位置可以放置在某个小的公差范围内。 PatInspect 工具需要一个训练有素的模式来解释运行时图像中这些允许的差异。
意思是多增加几张训练图像,尽量包含多张不同样式的图像,使得最终做测试的时候,训练图像尽可能的不会被测试图像的一些小变化干扰。根据可能的照明条件和工具套件的变化,重复此过程。 捕获新图像,将其传递给 PatInspect 工具,并将新图像合并到经过统计训练的模式中。
所以最终对于您添加的每个新图像,经过训练的模式变化越来越小,但最终您必须生成经过训练的模式,该模式可生成包含真正缺陷的阈值差异图像。
下图显示了经过统计训练的模式,该模式说明了套件中对象位置的细微变化:
当您获取足够的图像来训练模式时,单击结束统计训练。 结束统计训练允许 PatInspect 工具使用比启用统计训练更少的 PC 内存。
step9:运行run,进行比对
针对图像数据库中存在明确缺陷的图像测试 PatInspect 工具。我们可以将测试图片一一喂入PatInspectTool中,这样就可以查看差异图像,如果全为黑色,则表示差异很小属于正常图像,如果差异很大,则表示这张图像存在问题。
下图显示了从缺少组件的工具包的采集图像生成的阈值差异图像:
当然,最终的PatInspect 工具使阈值差异图像可供应用中的其他视觉工具进行进一步分析或图像处理。
3:界面介绍
3.1 训练界面
界面如下:
我们可以通过训练界面设置要训练的ROI区域,如下图所示:
3.2 训练区域设置界面
界面如下:
下图是设置训练区域,意思是输入图像要检测的区域,当然可以选择设置全图,也可以选择验证指定区域,比如我们下面我们调整的是训练的ROI区域。当然测试图像也通过定位,然后到PatInspectTool后,来使用检测区域。
3.3 运行参数界面
界面如下:
3.4 结果页面
界面如下:
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: Oauth2协议中如何对accessToken进行校验
大家好,我是飘渺。今天我们来聊聊oauth2.0的accesstoken校验逻辑。 概述 Never Sett* 的提问 看完这个问题,我感觉读者对于accesstoken的校验逻辑不太清楚,所以特意写了这篇文章解释一下。 首先我们要知道Oauth2是一个授权…