一、PatInspect原理详解
1.PatInspect简介
PatInspect主要用于缺陷检测,例如印刷字符检测、部分缺失或者明暗变换、激光打标内容检测等,该检测方法对光照的稳定性要求较高,视野内的光照不均匀极易造成误判与过杀。通过将当前图像与“训练图像”对比,获取“原始差异图像”,再将“原始差异图像”与“阈值图像”进行对比,进而获取“阈值差异图像”得到最终的当前图像与训练图像的差异,通常差异区域为缺陷所在。
2.PatInspect 原理
PatInspect中主要涉及以下几个关键词:
- 训练后图像(Trained Pattern)
- 标准差图像(Standard Deviation Image)
- 阈值图像(Threshold Image)
- 原始差异图像(Raw Difference Image)
- 阈值差异图像(Threshold Difference Image)
2.1训练后图像
训练后图像来源于一幅或者多副没有缺陷的图像,通常情况下选择多副图像,这样可以在一定程度上抑制光照不均匀带来的差异。图像训练的环境是检测运行的环境在光照、视野、背景等硬件环境部署方面要保持高度一致。训练后图像的计算方法检测区域相对应位置的像素平均值。
当然,如果只提供一幅图像的话平均值就无从谈起,训练后图像的值就是提供的那幅训练图像。在只提供一幅训练图像时要尤其注意光照环境的均一稳定,否则极容易造成误检。
2.2 标准差图像
对于提供多副训练图像的情况,标准差图像的计算方式为在图像中的每一个位置计算多副图像的标准差,计算方式如下图所示。
在统计数据中,标准差反应的是一组数据的离散程度,标准差越大说明数据的离散程度或者波动程度越大。从下面的标准差图像中可以看出,在每个检测目标的边缘处或者纹理区域标准差较大,这是因为用于训练的图像由于光照、采图角度等外界因素的差异在明暗过度区域的像素值差异较大。而在纹理不明显或者过渡较为平缓的区域同一像素位置的像素值差异较小,所以在标准差图像中取值较小。虽然计算方式不同,标准差图像与Sobel图像在效果上极为相似,都是在纹理变换明显的“高频”区域取得较大的值,在纹理不明显的“低频”区域取值较小。所以对于仅仅提供一副图像的情况,就用Sobel图像来代替标准差图像来描述训练图像在边缘部分的差异。
2.3 阈值图像
在检测过程中并没有直接使用标准差图像,而是使用对标准差进行变换后的阈值图像,阈值图像的计算方式很简单,就是对标准差图像的对应像素值进行线性变换。
在上述计算公式中,A为尺度参数,B为偏移参数。通过设置不同的阈值图像参数,可以调节检测“严格程度”,如果A和B都设的比较小,可能细微的像素值变换就会被检测出来。如果A和B都选择比较大的数值,只有像素值变化明显的区域才可能被检测到。
2.4 图像归一化
为了抑制因光照不稳定引起的误检,运行时图像与训练图像进行对比前需要对运行时图像进行归一化,调节整体亮度水平,使得运行时图像与训练后图像在同一亮度环境中进行比较。CogPatInspectTool的图像归一化方法有以下几种:
- Identity
对运行时图像不进行归一化,主要是在测试阶段用来进行观察,确定不进行归一化可能出现的缺陷位置与缺陷类型 - Histogram Equalization
直方图均衡化,调整运行时图像的灰度直方图与训练后图像的灰度直方图相匹配,适用于检测面积比较小的情况,因为大面积出现缺陷会影响灰度直方图分布。 - Match Tails
忽略“高尾部”与“低尾部”对运行时图像的直方图进行调整与训练后的图像相匹配,适用于图像中可能出现阴影或者耀光的情况。 - Mean and Standard Deviation
通过运行时图像灰度直方图的平均值与标准差对灰度直方图进行调整,适用于大小适中的缺陷检测以及光照变换比较明显的情况。 - Robust Line Fit
通过选择最佳拟合的线性直方图均衡化函数来调整像素值。与其它的归一化方法相比,该方法可以容忍更大的缺陷,但需要更多的处理时间。当缺陷面积超过加检测区域的四分之一甚至更多时,并且缺陷像素值可以位于参考图像的左右尾部之外时,请使用稳健的线拟合方法。 - Local Correction or Enhanced Local Correction
局部修正方法,先对运行时图像进行矩形分割,再对每个区域进行归一化处理
3.Patinspect 算法流程
- step1. 训练数据,获取Trained Pattern,选择一幅或者多副图像,设置阈值图像中线性变换参数A和B,设置运行时图像的归一化方式。
- step2. 计算match image,该图像由训练时选取的检测区域决定,即截取输入图像中的检测区域。
- step3. 对match image进行图像归一化。
- step4. 计算原始差异图像(raw difference image)。
- step5. 比较原始差异图像与阈值图像,对于超过阈值图像中对应值的原始差异图像中的像素值进行保存,小于阈值图像中对应值的像素值置零,生成阈值差异图像(ThresholdDifference Image)
- step6. 将阈值差异图像输入给其他工具进行进一步的分析。
二、CogPatInspectTool使用案例
在实际使用中,每次采集到的图像在位置、姿态、尺度等可能存在差异,为了准确提取检测区域,避免因检测位置不对应造成的误检测,CogPatInspectTool通常配合CogPMAlignTool使用,有CogPMAlignTool提供目标在不同图像之间的位姿关系。
1 案例检测需求描述
该案例目的为检测激光打标字符质量,在打标区域中不能出现打标内容丢失,也不能出现多打、漏打、少打等缺陷。如下图所示,左侧为正常打标良品,右侧为人为制造的不良品。
2 项目搭建流程
step1.配置图像源,选择检测图像所在的文件夹,图像源中即包含良品图像又包含存在缺陷的不良图像。
step2.添加CogPMAlignTool 并对匹配模板,搜索参数进行配置。
step3.添加CogPatInspectTool进行参数配置。将CogPatInsecptTool 的输入图像链接到图像源的“OutputImage”,“pose”链接到CogPMAlignTool的GetPose输出,后续详细操作过程如下:
-
- 点击外层ToolGroup的运行按钮,使得CogPatInspectTool 获取到一幅良品图像,点击“抓取训练图像与原点”,得到用于训练的图像;
- 在右侧的下拉列表中选择Current.TrainImage;
- 选择检测区域,可以通过掩膜对检测区域进行调整,屏蔽变量部分与光照不稳定部分,从而避免检测过程中的误检。
- 点击“训练新模式”,此时相当于提供了一幅良品图像到工具中,如果想添加多副训练图像需要从外层运行程序,使得CogPatInspectTool重新获取一幅图像,点击“统计训练当前模式”。注意,在训练过程中的添加的图像必须是良品图像,如果误将不良品图像添加到训练数据中会造成灾难性的后果。
- 训练图像添加完成之后,点击“结束统计训练”,
- 如果对当前的训练结果不满意,点击“取消训练模式”,所有的训练数据清空,可以重新进行添加训练图像。黄色矩形框中的参数用于设置从标准差图像到阈值图像的线性变换系数,单幅图像与多副图像需分开进行设置。
- 在运行参数Table页中,选择对应的归一化算法,选择标准参考上节中图像归一化部分,通常情况下选择默认即可。
step4 点击外层ToolGroup的运行按钮,对当前输入图像进行检测即可以看到运行效果。
接下来补充说明一下运行过程中的match image ,match image 时将当前图像的待检测区域与训练图像对其之后的结果图,如下图所示,注意,此时图像还没有进行归一化处理,图像中红色和绿色部分表示当前图像与训练图像之间的像素值差异,可以看到在非缺陷区域差值较小,在明显的缺陷区域标注为红色,像素差值较大。
CogPatInspectTool 最终目的是获取DifferenceImageAbsolute,将此图像输出到blob等工具根据检测面积、位置等进行过滤,最后得出检测结果。