作业1 线序识别 通过线的颜色来判断线序颜色 并标注颜色1. 二值图转换2.模板匹配3.定位工具4.使用色彩匹配工具 对每个位置的线 都进行匹配 一共需要7个工具1.提取7中色彩2.对于每个线分别进行区域检测#region namespace importsusing System;using System.Collections;using System.Drawing;using System.IO;using System.Windows.Forms;using Cognex.VisionPro;using Cognex.VisionPro.ToolBlock;using Cognex.VisionPro3D;using Cognex.VisionPro.ImageProcessing;using Cognex.VisionPro.PMAlign;using Cognex.VisionPro.CalibFix;using Cognex.VisionPro.ColorMatch;#endregionpublic class CogToolBlockAdvancedScript : CogToolBlockAdvancedScriptBase{#region Private Member Variablesprivate Cognex.VisionPro.ToolBlock.CogToolBlock mToolBlock;//设置7个匹配工具字段private CogColorMatchTool pnt01;private CogColorMatchTool pnt02;private CogColorMatchTool pnt03;private CogColorMatchTool pnt04;private CogColorMatchTool pnt05;private CogColorMatchTool pnt06;private CogColorMatchTool pnt07;//设置7个文字工具private CogGraphicLabel pnt01Label;private CogGraphicLabel pnt02Label;private CogGraphicLabel pnt03Label;private CogGraphicLabel pnt04Label;private CogGraphicLabel pnt05Label;private CogGraphicLabel pnt06Label;private CogGraphicLabel pnt07Label;public override bool GroupRun(ref string message, ref CogToolResultConstants result){//初始化 7个工具pnt01Label new CogGraphicLabel();pnt02Label new CogGraphicLabel();pnt03Label new CogGraphicLabel();pnt04Label new CogGraphicLabel();pnt05Label new CogGraphicLabel();pnt06Label new CogGraphicLabel();pnt07Label new CogGraphicLabel();// To let the execution stop in this script when a debugger is attached, uncomment the following lines.// #if DEBUG// if (System.Diagnostics.Debugger.IsAttached) System.Diagnostics.Debugger.Break();// #endif// Run each tool using the RunTool functionforeach(ICogTool tool in mToolBlock.Tools)mToolBlock.RunTool(tool, ref message, ref result);//映射对应的颜色匹配工具pnt01 mToolBlock.Tools[CogColorMatchTool1]as CogColorMatchTool;pnt02 mToolBlock.Tools[CogColorMatchTool2]as CogColorMatchTool;pnt03 mToolBlock.Tools[CogColorMatchTool3]as CogColorMatchTool;pnt04 mToolBlock.Tools[CogColorMatchTool4]as CogColorMatchTool;pnt05 mToolBlock.Tools[CogColorMatchTool5]as CogColorMatchTool;pnt06 mToolBlock.Tools[CogColorMatchTool6]as CogColorMatchTool;pnt07 mToolBlock.Tools[CogColorMatchTool7]as CogColorMatchTool;//文字工具设置颜色pnt01Label.Color CogColorConstants.Green;pnt02Label.Color CogColorConstants.Green;pnt03Label.Color CogColorConstants.Green;pnt04Label.Color CogColorConstants.Green;pnt05Label.Color CogColorConstants.Green;pnt06Label.Color CogColorConstants.Green;pnt07Label.Color CogColorConstants.Green;//文字工具设置位置 和对应结果pnt01Label.SetXYText(100, 400, pnt01.Result.ResultOfBestMatch.Color.Name);pnt02Label.SetXYText(300, 400, pnt02.Result.ResultOfBestMatch.Color.Name);pnt03Label.SetXYText(500, 400, pnt03.Result.ResultOfBestMatch.Color.Name);pnt04Label.SetXYText(700, 400, pnt04.Result.ResultOfBestMatch.Color.Name);pnt05Label.SetXYText(900, 400, pnt05.Result.ResultOfBestMatch.Color.Name);pnt06Label.SetXYText(1100, 400, pnt06.Result.ResultOfBestMatch.Color.Name);pnt07Label.SetXYText(1300, 400, pnt07.Result.ResultOfBestMatch.Color.Name);//获取Region区域的中心点坐标// CogRectangle as1 cmt1.Region as CogRectangle;// gl1.SetXYText(as1.CenterX, as1.CenterY, cmt1.Result.ResultOfBestMatch.Color.Name);return false;}public override void ModifyCurrentRunRecord(Cognex.VisionPro.ICogRecord currentRecord){}public override void ModifyLastRunRecord(Cognex.VisionPro.ICogRecord lastRecord){//文字工具添加到窗口中mToolBlock.AddGraphicToRunRecord(pnt01Label, lastRecord, CogImageConvertTool1.InputImage, script);mToolBlock.AddGraphicToRunRecord(pnt02Label, lastRecord, CogImageConvertTool1.InputImage, script);mToolBlock.AddGraphicToRunRecord(pnt03Label, lastRecord, CogImageConvertTool1.InputImage, script);mToolBlock.AddGraphicToRunRecord(pnt04Label, lastRecord, CogImageConvertTool1.InputImage, script);mToolBlock.AddGraphicToRunRecord(pnt05Label, lastRecord, CogImageConvertTool1.InputImage, script);mToolBlock.AddGraphicToRunRecord(pnt06Label, lastRecord, CogImageConvertTool1.InputImage, script);mToolBlock.AddGraphicToRunRecord(pnt07Label, lastRecord, CogImageConvertTool1.InputImage, script);}public override void Initialize(Cognex.VisionPro.ToolGroup.CogToolGroup host){// DO NOT REMOVE - Call the base class implementation first - DO NOT REMOVEbase.Initialize(host);// Store a local copy of the script hostthis.mToolBlock ((Cognex.VisionPro.ToolBlock.CogToolBlock)(host));}}作业2注胶有无识别判断图中产品周边槽及中心孔内注胶有无。蓝色为有胶黑色为无胶 并标注颜色1.添加提取颜色工具2.对有胶的图片进行颜色提取3.依据获得的像素值 如果是0 就是无胶 作业3密封条胶塞颜色识别:识别图中出现的密封条胶塞的颜色并标注颜色1.使用颜色提取工具对 每张图中的 不同颜色的密封胶条 提取色彩2.使用blob工具 提取结果 如果能提取出 结果 说明 有对应颜色密封胶条1.哪个blob中有结果 证明 颜色存在#region namespace importsusing System;using System.Collections;using System.Drawing;using System.IO;using System.Windows.Forms;using Cognex.VisionPro;using Cognex.VisionPro.ToolBlock;using Cognex.VisionPro3D;using Cognex.VisionPro.ColorExtractor;using Cognex.VisionPro.Blob;#endregionpublic class CogToolBlockAdvancedScript : CogToolBlockAdvancedScriptBase{#region Private Member Variablesprivate Cognex.VisionPro.ToolBlock.CogToolBlock mToolBlock;//设置4个blob工具字段private CogBlobTool orange;private CogBlobTool yellow;private CogBlobTool red;private CogBlobTool blue;//设置4个文本工具字段private CogGraphicLabel orangeLabel;private CogGraphicLabel yellowLabel;private CogGraphicLabel redLabel;private CogGraphicLabel blueLabel;#endregionpublic override bool GroupRun(ref string message, ref CogToolResultConstants result){//初始化4个文本工具orangeLabel new CogGraphicLabel();yellowLabel new CogGraphicLabel();redLabel new CogGraphicLabel();blueLabel new CogGraphicLabel();// To let the execution stop in this script when a debugger is attached, uncomment the following lines.// #if DEBUG// if (System.Diagnostics.Debugger.IsAttached) System.Diagnostics.Debugger.Break();// #endif// Run each tool using the RunTool functionforeach(ICogTool tool in mToolBlock.Tools)mToolBlock.RunTool(tool, ref message, ref result);//根据blob检测结果的个数判断 颜色是否符合orange mToolBlock.Tools[CogBlobToolOrange]as CogBlobTool;if(orange.Results.GetBlobs().Count 1){orangeLabel.Color CogColorConstants.White;orangeLabel.SetXYText(200, 200, 橙色);}yellow mToolBlock.Tools[CogBlobToolYellow]as CogBlobTool;if(yellow.Results.GetBlobs().Count 1){yellowLabel.Color CogColorConstants.White;yellowLabel.SetXYText(200,200,黄色);}red mToolBlock.Tools[CogBlobToolRed]as CogBlobTool;if(red.Results.GetBlobs().Count 1){redLabel.Color CogColorConstants.White;redLabel.SetXYText(200, 200, 红色);}blue mToolBlock.Tools[CogBlobToolBlue]as CogBlobTool;if(blue.Results.GetBlobs().Count 1){blueLabel.Color CogColorConstants.White;blueLabel.SetXYText(200, 200, 蓝色);}return false;}public override void ModifyCurrentRunRecord(Cognex.VisionPro.ICogRecord currentRecord){}public override void ModifyLastRunRecord(Cognex.VisionPro.ICogRecord lastRecord){// 根据blob检测结果的个数判断 添加对应文本工具if(orange.Results.GetBlobs().Count 1){mToolBlock.AddGraphicToRunRecord(orangeLabel, lastRecord, CogColorExtractorToolOrange.InputImage, script);}if(yellow.Results.GetBlobs().Count 1){mToolBlock.AddGraphicToRunRecord(yellowLabel, lastRecord, CogColorExtractorToolOrange.InputImage, script);}if(red.Results.GetBlobs().Count 1){mToolBlock.AddGraphicToRunRecord(redLabel, lastRecord, CogColorExtractorToolOrange.InputImage, script);}if(blue.Results.GetBlobs().Count 1){mToolBlock.AddGraphicToRunRecord(blueLabel, lastRecord, CogColorExtractorToolOrange.InputImage, script);}}public override void Initialize(Cognex.VisionPro.ToolGroup.CogToolGroup host){// DO NOT REMOVE - Call the base class implementation first - DO NOT REMOVEbase.Initialize(host);// Store a local copy of the script hostthis.mToolBlock ((Cognex.VisionPro.ToolBlock.CogToolBlock)(host));}#endregion}CogCalibCheckerboardTool 工具原理校正图像以保证其返回的结果具有意义的值以及确定所找到图像的位置与校正板的物理尺寸之间的二维转换作用1像素和真实单位(mm)之间的转换比如卡尺工具测量宽度校正前为像素单位校正后为长度单位作用2消除图片畸变镜头畸变分径向畸变桶形 / 枕形、切向畸变标定板只用来求解畸变系数软件通过系数校正图像标定板本身不能物理消除畸变靠标定算法修正标定片类别无基准符号版无基准符号版 校正原点在视野中心最近的格子顶点或点中心作为原点有基准符号版有基准符号版校正原点以两个交叉矩形表示如果找到该点将成为原始校准空间的原点如果没有找到校准原点是最接近校准图像中心的顶点有基准符号版 -数据矩阵版DataMatrix代码版DataMatrix代码板记录多个网格顶点的位置以及板的网格间距校准板特点总结黑白瓷块必须以交叉图案方式排列黑白瓷块必须具有同样的尺寸瓷块必须为矩形其纵横比范围是0.90 到1.10//校正版使用在通过相机采集的校正板图像时。1.所采集的图像必须包括至少9个完整瓷块2.所采集的图像中的瓷块必须至少为15×15像素3.增加校准图像中可见的瓷块数量通过减小校准板上瓷块的尺寸 提高校准的精确度校准工具做了什么?获得两组点1. 校准版校正原点2. 采集的图像中的原点完成的功能3.经过工具计算 表示两个图像中对应点之间的映射关系单位转换4.经过工具计算畸变图像消除在校准过程中扭曲消除畸变校准的基本方法与过程架设好图像采集系统固定相机、镜头、光源等器件选择合适的标定片放置到视野下采集1张清晰的图像将标定板照片导入校准工具(CogCalibCheckerboard,设置参数计算标定1.校正工具1.无基准符号的校正版使用方式1调整校正版样式2调整校正板的基准符号3 调整棋盘格的大小 现实中校正板 棋盘格尺寸4 抓取校正图形5 计算校正原点点结果转换结果界面1.RMS误差 越小 矫正效果越好2.纵横比 越接近1 矫正效果越好3.旋转 缩放 越接近0 矫正效果越好2.有基准符号的校正板使用3. 带有二维码的校准板案例:利用标定工具 -测量卡尺工具边缘对距离 像素转换成毫米1.先选择校正板图片 校准后 换测量图片2.进行模板匹配和定位4.使用校准工具后 测量的 结果未使用校正板CogPatInspectTool工具解析用途:检测产品特征缺失或错位、产品上存在错误或无用的标记、表面颜色错误等等场合;原理通过PMAlign工具实现,用训练图片和当前输入图片进行对比从而得到缺陷.使用场景案例:标签信息缺陷检测1.添加模板匹配工具 用于缺陷检测图形定位处理1.添加缺陷检测工具1.“pose”链接到CogPMAlignTool的GetPose输出 用于定位1.点击外层ToolGroup的运行按钮使得CogPatInspectTool 获取到一幅良品图像点击“抓取训练图像与原点”得到用于训练的图像2.在右侧的下拉列表中选择Current.TrainImage,选择检测区域可以通过掩膜对检测区域进行调整屏蔽变量部分与光照不稳定部分从而避免检测过程中的误检。3.点击“训练新模式”此时相当于提供了一幅良品图像到工具中4.如果想添加多副训练图像需要从外层运行程序使得CogPatInspectTool重新获取一幅图像点击“统计训练当前模式”。注意在训练过程中的添加的图像必须是良品图像如果误将不良品图像添加到训练数据中会造成灾难性的后果。5.训练图像添加完成之后点击“结束统计训练”6.如果对当前的训练结果不满意点击“取消训练模式”所有的训练数据清空可以重新进行添加训练图像。1.选择lastRun.MatchImage然后点击外层ToolGroup的运行按钮 对当前输入图像进行检测即可以看到运行效果。match image 时将当前图像的待检测区域与训练图像对其之后的结果图 在明显的缺陷区域标注出来。1.CogPatInspectTool 最终目的是获取DifferenceImageAbsolute图像,将此图像输出到blob等工具根据检测面积、位置等进行过滤最后得出检测结果。1.添加blob工具对于缺陷部位进行分析扩展内容1.选择对应的归一化算法 目的 调整图形亮度算法为了抑制因光照不稳定引起的误检运行时图像与训练图像进行对比前需要对运行时图像进行归一化调节整体亮度水平使得运行时图像与训练后图像在同一亮度环境中进行比较。CogPatInspectTool的方法有以下几种Identity对运行时图像不进行归一化主要是在测试阶段用来进行观察确定不进行归一化可能出现的缺陷位置与缺陷类型Histogram Equalization直方图均衡化调整运行时图像的灰度直方图与训练后图像的灰度直方图相匹配适用于检测面积比较小的情况因为大面积出现缺陷会影响灰度直方图分布。Match Tails忽略“高尾部”与“低尾部”对运行时图像的直方图进行调整与训练后的图像相匹配适用于图像中可能出现阴影或者耀光的情况。Mean and Standard Deviation通过运行时图像灰度直方图的平均值与标准差对灰度直方图进行调整适用于大小适中的缺陷检测以及光照变换比较明显的情况。Robust Line Fit通过选择最佳拟合的线性直方图均衡化函数来调整像素值。与其它的归一化方法相比该方法可以容忍更大的缺陷但需要更多的处理时间。当缺陷面积超过加检测区域的四分之一甚至更多时并且缺陷像素值可以位于参考图像的左右尾部之外时请使用稳健的线拟合方法。Local Correction or Enhanced Local Correction局部修正方法先对运行时图像进行矩形分割再对每个区域进行归一化处理阈值阈值就是训练基准图案和检查的图片之间的差异,值越大,忽略的细节就越多如:图案很相似,但是当阈值小的时候,还是会计算出一些差距如果想忽略一些细微差距,就可以调整阈值
机器视觉7
作业1 线序识别 通过线的颜色来判断线序颜色 并标注颜色1. 二值图转换2.模板匹配3.定位工具4.使用色彩匹配工具 对每个位置的线 都进行匹配 一共需要7个工具1.提取7中色彩2.对于每个线分别进行区域检测#region namespace importsusing System;using System.Collections;using System.Drawing;using System.IO;using System.Windows.Forms;using Cognex.VisionPro;using Cognex.VisionPro.ToolBlock;using Cognex.VisionPro3D;using Cognex.VisionPro.ImageProcessing;using Cognex.VisionPro.PMAlign;using Cognex.VisionPro.CalibFix;using Cognex.VisionPro.ColorMatch;#endregionpublic class CogToolBlockAdvancedScript : CogToolBlockAdvancedScriptBase{#region Private Member Variablesprivate Cognex.VisionPro.ToolBlock.CogToolBlock mToolBlock;//设置7个匹配工具字段private CogColorMatchTool pnt01;private CogColorMatchTool pnt02;private CogColorMatchTool pnt03;private CogColorMatchTool pnt04;private CogColorMatchTool pnt05;private CogColorMatchTool pnt06;private CogColorMatchTool pnt07;//设置7个文字工具private CogGraphicLabel pnt01Label;private CogGraphicLabel pnt02Label;private CogGraphicLabel pnt03Label;private CogGraphicLabel pnt04Label;private CogGraphicLabel pnt05Label;private CogGraphicLabel pnt06Label;private CogGraphicLabel pnt07Label;public override bool GroupRun(ref string message, ref CogToolResultConstants result){//初始化 7个工具pnt01Label new CogGraphicLabel();pnt02Label new CogGraphicLabel();pnt03Label new CogGraphicLabel();pnt04Label new CogGraphicLabel();pnt05Label new CogGraphicLabel();pnt06Label new CogGraphicLabel();pnt07Label new CogGraphicLabel();// To let the execution stop in this script when a debugger is attached, uncomment the following lines.// #if DEBUG// if (System.Diagnostics.Debugger.IsAttached) System.Diagnostics.Debugger.Break();// #endif// Run each tool using the RunTool functionforeach(ICogTool tool in mToolBlock.Tools)mToolBlock.RunTool(tool, ref message, ref result);//映射对应的颜色匹配工具pnt01 mToolBlock.Tools[CogColorMatchTool1]as CogColorMatchTool;pnt02 mToolBlock.Tools[CogColorMatchTool2]as CogColorMatchTool;pnt03 mToolBlock.Tools[CogColorMatchTool3]as CogColorMatchTool;pnt04 mToolBlock.Tools[CogColorMatchTool4]as CogColorMatchTool;pnt05 mToolBlock.Tools[CogColorMatchTool5]as CogColorMatchTool;pnt06 mToolBlock.Tools[CogColorMatchTool6]as CogColorMatchTool;pnt07 mToolBlock.Tools[CogColorMatchTool7]as CogColorMatchTool;//文字工具设置颜色pnt01Label.Color CogColorConstants.Green;pnt02Label.Color CogColorConstants.Green;pnt03Label.Color CogColorConstants.Green;pnt04Label.Color CogColorConstants.Green;pnt05Label.Color CogColorConstants.Green;pnt06Label.Color CogColorConstants.Green;pnt07Label.Color CogColorConstants.Green;//文字工具设置位置 和对应结果pnt01Label.SetXYText(100, 400, pnt01.Result.ResultOfBestMatch.Color.Name);pnt02Label.SetXYText(300, 400, pnt02.Result.ResultOfBestMatch.Color.Name);pnt03Label.SetXYText(500, 400, pnt03.Result.ResultOfBestMatch.Color.Name);pnt04Label.SetXYText(700, 400, pnt04.Result.ResultOfBestMatch.Color.Name);pnt05Label.SetXYText(900, 400, pnt05.Result.ResultOfBestMatch.Color.Name);pnt06Label.SetXYText(1100, 400, pnt06.Result.ResultOfBestMatch.Color.Name);pnt07Label.SetXYText(1300, 400, pnt07.Result.ResultOfBestMatch.Color.Name);//获取Region区域的中心点坐标// CogRectangle as1 cmt1.Region as CogRectangle;// gl1.SetXYText(as1.CenterX, as1.CenterY, cmt1.Result.ResultOfBestMatch.Color.Name);return false;}public override void ModifyCurrentRunRecord(Cognex.VisionPro.ICogRecord currentRecord){}public override void ModifyLastRunRecord(Cognex.VisionPro.ICogRecord lastRecord){//文字工具添加到窗口中mToolBlock.AddGraphicToRunRecord(pnt01Label, lastRecord, CogImageConvertTool1.InputImage, script);mToolBlock.AddGraphicToRunRecord(pnt02Label, lastRecord, CogImageConvertTool1.InputImage, script);mToolBlock.AddGraphicToRunRecord(pnt03Label, lastRecord, CogImageConvertTool1.InputImage, script);mToolBlock.AddGraphicToRunRecord(pnt04Label, lastRecord, CogImageConvertTool1.InputImage, script);mToolBlock.AddGraphicToRunRecord(pnt05Label, lastRecord, CogImageConvertTool1.InputImage, script);mToolBlock.AddGraphicToRunRecord(pnt06Label, lastRecord, CogImageConvertTool1.InputImage, script);mToolBlock.AddGraphicToRunRecord(pnt07Label, lastRecord, CogImageConvertTool1.InputImage, script);}public override void Initialize(Cognex.VisionPro.ToolGroup.CogToolGroup host){// DO NOT REMOVE - Call the base class implementation first - DO NOT REMOVEbase.Initialize(host);// Store a local copy of the script hostthis.mToolBlock ((Cognex.VisionPro.ToolBlock.CogToolBlock)(host));}}作业2注胶有无识别判断图中产品周边槽及中心孔内注胶有无。蓝色为有胶黑色为无胶 并标注颜色1.添加提取颜色工具2.对有胶的图片进行颜色提取3.依据获得的像素值 如果是0 就是无胶 作业3密封条胶塞颜色识别:识别图中出现的密封条胶塞的颜色并标注颜色1.使用颜色提取工具对 每张图中的 不同颜色的密封胶条 提取色彩2.使用blob工具 提取结果 如果能提取出 结果 说明 有对应颜色密封胶条1.哪个blob中有结果 证明 颜色存在#region namespace importsusing System;using System.Collections;using System.Drawing;using System.IO;using System.Windows.Forms;using Cognex.VisionPro;using Cognex.VisionPro.ToolBlock;using Cognex.VisionPro3D;using Cognex.VisionPro.ColorExtractor;using Cognex.VisionPro.Blob;#endregionpublic class CogToolBlockAdvancedScript : CogToolBlockAdvancedScriptBase{#region Private Member Variablesprivate Cognex.VisionPro.ToolBlock.CogToolBlock mToolBlock;//设置4个blob工具字段private CogBlobTool orange;private CogBlobTool yellow;private CogBlobTool red;private CogBlobTool blue;//设置4个文本工具字段private CogGraphicLabel orangeLabel;private CogGraphicLabel yellowLabel;private CogGraphicLabel redLabel;private CogGraphicLabel blueLabel;#endregionpublic override bool GroupRun(ref string message, ref CogToolResultConstants result){//初始化4个文本工具orangeLabel new CogGraphicLabel();yellowLabel new CogGraphicLabel();redLabel new CogGraphicLabel();blueLabel new CogGraphicLabel();// To let the execution stop in this script when a debugger is attached, uncomment the following lines.// #if DEBUG// if (System.Diagnostics.Debugger.IsAttached) System.Diagnostics.Debugger.Break();// #endif// Run each tool using the RunTool functionforeach(ICogTool tool in mToolBlock.Tools)mToolBlock.RunTool(tool, ref message, ref result);//根据blob检测结果的个数判断 颜色是否符合orange mToolBlock.Tools[CogBlobToolOrange]as CogBlobTool;if(orange.Results.GetBlobs().Count 1){orangeLabel.Color CogColorConstants.White;orangeLabel.SetXYText(200, 200, 橙色);}yellow mToolBlock.Tools[CogBlobToolYellow]as CogBlobTool;if(yellow.Results.GetBlobs().Count 1){yellowLabel.Color CogColorConstants.White;yellowLabel.SetXYText(200,200,黄色);}red mToolBlock.Tools[CogBlobToolRed]as CogBlobTool;if(red.Results.GetBlobs().Count 1){redLabel.Color CogColorConstants.White;redLabel.SetXYText(200, 200, 红色);}blue mToolBlock.Tools[CogBlobToolBlue]as CogBlobTool;if(blue.Results.GetBlobs().Count 1){blueLabel.Color CogColorConstants.White;blueLabel.SetXYText(200, 200, 蓝色);}return false;}public override void ModifyCurrentRunRecord(Cognex.VisionPro.ICogRecord currentRecord){}public override void ModifyLastRunRecord(Cognex.VisionPro.ICogRecord lastRecord){// 根据blob检测结果的个数判断 添加对应文本工具if(orange.Results.GetBlobs().Count 1){mToolBlock.AddGraphicToRunRecord(orangeLabel, lastRecord, CogColorExtractorToolOrange.InputImage, script);}if(yellow.Results.GetBlobs().Count 1){mToolBlock.AddGraphicToRunRecord(yellowLabel, lastRecord, CogColorExtractorToolOrange.InputImage, script);}if(red.Results.GetBlobs().Count 1){mToolBlock.AddGraphicToRunRecord(redLabel, lastRecord, CogColorExtractorToolOrange.InputImage, script);}if(blue.Results.GetBlobs().Count 1){mToolBlock.AddGraphicToRunRecord(blueLabel, lastRecord, CogColorExtractorToolOrange.InputImage, script);}}public override void Initialize(Cognex.VisionPro.ToolGroup.CogToolGroup host){// DO NOT REMOVE - Call the base class implementation first - DO NOT REMOVEbase.Initialize(host);// Store a local copy of the script hostthis.mToolBlock ((Cognex.VisionPro.ToolBlock.CogToolBlock)(host));}#endregion}CogCalibCheckerboardTool 工具原理校正图像以保证其返回的结果具有意义的值以及确定所找到图像的位置与校正板的物理尺寸之间的二维转换作用1像素和真实单位(mm)之间的转换比如卡尺工具测量宽度校正前为像素单位校正后为长度单位作用2消除图片畸变镜头畸变分径向畸变桶形 / 枕形、切向畸变标定板只用来求解畸变系数软件通过系数校正图像标定板本身不能物理消除畸变靠标定算法修正标定片类别无基准符号版无基准符号版 校正原点在视野中心最近的格子顶点或点中心作为原点有基准符号版有基准符号版校正原点以两个交叉矩形表示如果找到该点将成为原始校准空间的原点如果没有找到校准原点是最接近校准图像中心的顶点有基准符号版 -数据矩阵版DataMatrix代码版DataMatrix代码板记录多个网格顶点的位置以及板的网格间距校准板特点总结黑白瓷块必须以交叉图案方式排列黑白瓷块必须具有同样的尺寸瓷块必须为矩形其纵横比范围是0.90 到1.10//校正版使用在通过相机采集的校正板图像时。1.所采集的图像必须包括至少9个完整瓷块2.所采集的图像中的瓷块必须至少为15×15像素3.增加校准图像中可见的瓷块数量通过减小校准板上瓷块的尺寸 提高校准的精确度校准工具做了什么?获得两组点1. 校准版校正原点2. 采集的图像中的原点完成的功能3.经过工具计算 表示两个图像中对应点之间的映射关系单位转换4.经过工具计算畸变图像消除在校准过程中扭曲消除畸变校准的基本方法与过程架设好图像采集系统固定相机、镜头、光源等器件选择合适的标定片放置到视野下采集1张清晰的图像将标定板照片导入校准工具(CogCalibCheckerboard,设置参数计算标定1.校正工具1.无基准符号的校正版使用方式1调整校正版样式2调整校正板的基准符号3 调整棋盘格的大小 现实中校正板 棋盘格尺寸4 抓取校正图形5 计算校正原点点结果转换结果界面1.RMS误差 越小 矫正效果越好2.纵横比 越接近1 矫正效果越好3.旋转 缩放 越接近0 矫正效果越好2.有基准符号的校正板使用3. 带有二维码的校准板案例:利用标定工具 -测量卡尺工具边缘对距离 像素转换成毫米1.先选择校正板图片 校准后 换测量图片2.进行模板匹配和定位4.使用校准工具后 测量的 结果未使用校正板CogPatInspectTool工具解析用途:检测产品特征缺失或错位、产品上存在错误或无用的标记、表面颜色错误等等场合;原理通过PMAlign工具实现,用训练图片和当前输入图片进行对比从而得到缺陷.使用场景案例:标签信息缺陷检测1.添加模板匹配工具 用于缺陷检测图形定位处理1.添加缺陷检测工具1.“pose”链接到CogPMAlignTool的GetPose输出 用于定位1.点击外层ToolGroup的运行按钮使得CogPatInspectTool 获取到一幅良品图像点击“抓取训练图像与原点”得到用于训练的图像2.在右侧的下拉列表中选择Current.TrainImage,选择检测区域可以通过掩膜对检测区域进行调整屏蔽变量部分与光照不稳定部分从而避免检测过程中的误检。3.点击“训练新模式”此时相当于提供了一幅良品图像到工具中4.如果想添加多副训练图像需要从外层运行程序使得CogPatInspectTool重新获取一幅图像点击“统计训练当前模式”。注意在训练过程中的添加的图像必须是良品图像如果误将不良品图像添加到训练数据中会造成灾难性的后果。5.训练图像添加完成之后点击“结束统计训练”6.如果对当前的训练结果不满意点击“取消训练模式”所有的训练数据清空可以重新进行添加训练图像。1.选择lastRun.MatchImage然后点击外层ToolGroup的运行按钮 对当前输入图像进行检测即可以看到运行效果。match image 时将当前图像的待检测区域与训练图像对其之后的结果图 在明显的缺陷区域标注出来。1.CogPatInspectTool 最终目的是获取DifferenceImageAbsolute图像,将此图像输出到blob等工具根据检测面积、位置等进行过滤最后得出检测结果。1.添加blob工具对于缺陷部位进行分析扩展内容1.选择对应的归一化算法 目的 调整图形亮度算法为了抑制因光照不稳定引起的误检运行时图像与训练图像进行对比前需要对运行时图像进行归一化调节整体亮度水平使得运行时图像与训练后图像在同一亮度环境中进行比较。CogPatInspectTool的方法有以下几种Identity对运行时图像不进行归一化主要是在测试阶段用来进行观察确定不进行归一化可能出现的缺陷位置与缺陷类型Histogram Equalization直方图均衡化调整运行时图像的灰度直方图与训练后图像的灰度直方图相匹配适用于检测面积比较小的情况因为大面积出现缺陷会影响灰度直方图分布。Match Tails忽略“高尾部”与“低尾部”对运行时图像的直方图进行调整与训练后的图像相匹配适用于图像中可能出现阴影或者耀光的情况。Mean and Standard Deviation通过运行时图像灰度直方图的平均值与标准差对灰度直方图进行调整适用于大小适中的缺陷检测以及光照变换比较明显的情况。Robust Line Fit通过选择最佳拟合的线性直方图均衡化函数来调整像素值。与其它的归一化方法相比该方法可以容忍更大的缺陷但需要更多的处理时间。当缺陷面积超过加检测区域的四分之一甚至更多时并且缺陷像素值可以位于参考图像的左右尾部之外时请使用稳健的线拟合方法。Local Correction or Enhanced Local Correction局部修正方法先对运行时图像进行矩形分割再对每个区域进行归一化处理阈值阈值就是训练基准图案和检查的图片之间的差异,值越大,忽略的细节就越多如:图案很相似,但是当阈值小的时候,还是会计算出一些差距如果想忽略一些细微差距,就可以调整阈值