机器视觉9

案例1:识别环形字符并显示

1.添加圆形展开工具

2.调整内外径圆环 (注意:转换方向 以3闭合圆形的地方开始  沿4箭头的方向分割圆环)

59f9dec184e84097b87500e5b8c67267.png

1.添加ocr工具提取字符

2.提取字符操作

3.选框范围设置要包括提取的字符(注意:不要超过图形边缘)

77f29d1e4c2e4e21a015c3b98fdc615b.png

区段设置(如果有需要)

2137c19d622749768d349f8be3ec343f.png

引用 ovr工具的命名空间

f733e937521749ecb44fc9c9a2f16c93.png

 

#region namespace imports
using 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.OCRMax;
#endregion

public class CogToolBlockAdvancedScript : CogToolBlockAdvancedScriptBase
{
  #region Private Member Variables
  private Cognex.VisionPro.ToolBlock.CogToolBlock mToolBlock;
  #endregion
 
  //声明label字段
  CogGraphicLabel label;
  public override bool GroupRun(ref string message, ref CogToolResultConstants result)
  {

 
   CogOCRMaxTool     ocr = mToolBlock.Tools["CogOCRMaxTool1"] as CogOCRMaxTool;
    label = new CogGraphicLabel();
    
    // Run each tool using the RunTool function
    foreach(ICogTool tool in mToolBlock.Tools)
      mToolBlock.RunTool(tool, ref message, ref result);
   
    //ocr 提取字符串
    string text = ocr.LineResult.ResultString;
    //设置label的位置和内容
    label.SetXYText(200, 800, "编号:" + text);、
    //label的颜色
    label.Color = CogColorConstants.Green;
    //label的字体样式
    Font font = new Font("楷体", 20);
    label.Font = font;
    
    return false;
  }

   public override void ModifyLastRunRecord(Cognex.VisionPro.ICogRecord lastRecord)
  {
    mToolBlock.AddGraphicToRunRecord(label, lastRecord, "CogPolarUnwrapTool1.InputImage", "script");
  }

 

案例2:展开图像并读取字符 分别读取左右两边字符

456804d148e642f69cfdd9c9b6ae64c0.png

cc20188a9f0249fea75a336577a28d9f.png

1.使用fixture空间坐标

2和3 不使用

e6b191a2ab154accbfac126e7b0f19ab.png

 

#region namespace imports
using 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.OCRMax;
#endregion

public class CogToolBlockAdvancedScript : CogToolBlockAdvancedScriptBase
{
  #region Private Member Variables
  private Cognex.VisionPro.ToolBlock.CogToolBlock mToolBlock;
  #endregion
  CogGraphicLabel label =new CogGraphicLabel();
  CogGraphicLabel label1 =new CogGraphicLabel();
 
  /// <summary>
  /// Called when the parent tool is run.
  /// Add code here to customize or replace the normal run behavior.
  /// </summary>
  /// <param name="message">Sets the Message in the tool's RunStatus.</param>
  /// <param name="result">Sets the Result in the tool's RunStatus</param>
  /// <returns>True if the tool should run normally,
  ///          False if GroupRun customizes run behavior</returns>
  public override bool GroupRun(ref string message, ref CogToolResultConstants result)
  {
    // 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
    
   CogOCRMaxTool   ocr = mToolBlock.Tools["CogOCRMaxTool1"] as CogOCRMaxTool;
   CogOCRMaxTool   ocr2 = mToolBlock.Tools["CogOCRMaxTool2"] as CogOCRMaxTool;
    
    
    // Run each tool using the RunTool function
    foreach(ICogTool tool in mToolBlock.Tools)
      mToolBlock.RunTool(tool, ref message, ref result);
    
    
   //左边字符提取内容
    string text = ocr.LineResult.ResultString;

//左边label设置
    label.SetXYText(120, 200, "左边:" + text);
    label.Color = CogColorConstants.Green;
    Font font = new Font("楷体", 20);
    label.Font = font;

//右边字符提取内容
    string text1 = ocr2.LineResult.ResultString;

//右边label设置
    label1.SetXYText(120, 230, "右边:" + text1);
    label1.Color = CogColorConstants.Red;
    Font font1 = new Font("楷体", 30);
    label1.Font = font1;
    return false;
  }

  public override void ModifyLastRunRecord(Cognex.VisionPro.ICogRecord lastRecord)
  { 

    左边label添加
    mToolBlock.AddGraphicToRunRecord(label, lastRecord, "CogPMAlignTool1.InputImage", "script");

右边label添加
    mToolBlock.AddGraphicToRunRecord(label1, lastRecord, "CogPMAlignTool1.InputImage", "script");
  } 

 

案例3.统计骰子点数  并显示结果

1.把彩图转换为灰度图

e8570611efd54bb8bb7f44b7b6e658cd.png 1.blob工具 设置相关属性823e5571675948189c53e45e0e77a4bc.png

1.blob筛选结果

bd174a6371a54d458610d3fd4ba6ac32.png

 结果图:

fd9ea3ea4cdd427781a88676c241cdef.png

案例4:识别零件瑕疵,显示缺陷位置

1aade0d875b24e818965ba714fe0763d.png

5b267721682a488d90e14abf0730bc3f.png

5f40410c8e7e41a6bf14fda95c47f907.png

f8f0b4ee3b4343cc9449233bc137a9fa.png

5d3bd5e96e474b61b62c71b4fc02d864.png

d1c814107da54b0ba8ce1cc3151f53fc.png

77ef031cbc3c468aac102885a5a40ee8.png

#region namespace imports
using 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.PMAlign;
using Cognex.VisionPro.PatInspect;
using Cognex.VisionPro.Blob;
#endregion

public class CogToolBlockAdvancedScript : CogToolBlockAdvancedScriptBase
{
  #region Private Member Variables
  private Cognex.VisionPro.ToolBlock.CogToolBlock mToolBlock;
 
  //声明blob
   private CogBlobTool mBlobRight;
   private CogBlobTool mBlobLeft;
   private CogBlobTool mBlobWuRan;
  //声明文本
   private CogGraphicLabel mLabel =new CogGraphicLabel();
  #endregion


  public override bool GroupRun(ref string message, ref CogToolResultConstants result)
  {
    // 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
     mBlobLeft = mToolBlock.Tools["CogBlobTool左眼"]as CogBlobTool;
     mBlobRight = mToolBlock.Tools["CogBlobTool右眼"]as CogBlobTool;
     mBlobWuRan = mToolBlock.Tools["CogBlobTool污染"]as CogBlobTool;
    // Run each tool using the RunTool function
    foreach(ICogTool tool in mToolBlock.Tools)
      mToolBlock.RunTool(tool, ref message, ref result);
      
    //判断缺陷是否存在
    if(mBlobLeft.Results.GetBlobs().Count == 0&&mBlobRight.Results.GetBlobs().Count == 0&&mBlobWuRan.Results.GetBlobs().Count == 0)
    {
      //无缺陷
      mLabel.Color = CogColorConstants.Green;
      mLabel.SetXYText(200, 200, "Result:OK");
    
    }
    else{
      
      //有缺陷
      //分别对缺陷结果进行筛选
      string a = mBlobLeft.Results.GetBlobs().Count == 0 ? "" : "右眼缺失";
      string b = mBlobRight.Results.GetBlobs().Count == 0 ? "" : "左眼缺失";
      string c = mBlobWuRan.Results.GetBlobs().Count == 0 ? "" : "有污染";
    

      mLabel.Color = CogColorConstants.Red;
      mLabel.SetXYText(200, 200, "缺陷结果:"+a+"\n"+b+"\n"+c+"\n");
    
    }
    return false;
  }

 public override void ModifyLastRunRecord(Cognex.VisionPro.ICogRecord lastRecord)
  {
    
    mToolBlock.AddGraphicToRunRecord(mLabel, lastRecord, "CogPMAlignTool1.InputImage", "script");  
  }

 

 案例5:展开零件的圆形区域 进行缺陷检测 如果显示NG 否则显示OK

1.使用模板匹配

7ffebbaf2d0346d3bcbdf3788758a088.png

1.模板匹配 出现缺陷的区域 

0b0de4ec4ea84e0b8f5485461b92ae1f.png

1.使用fixtureTool定位

2e116f36c631436f845c524321f36d8c.png 1.设置找圆工具

2.设置找圆工具   (找内径的圆形)

c946b17b94db40fcbef3d8387c1398fd.png 1.添加环形展开工具

2.把找到的圆形 中心点信息  赋值给 centerX   centerY

3.调整双圆环 内外径位置

 ba550158812e4e2a813b4e369eefe925.png

4aedce8fa52148de8ace958f31282c60.png 1.添加blob工具  对齐缺陷部位进行分析

0b443487b4d6455baac0ddb15cf1e3bb.png

CogIPOneImageTool工具的功能解析

作用:

提供的一个用于单张图像基本处理的工具。如滤波、增强、变换等。这些操作可以帮助改善图像质量,突出图像中的重要特征,便于后续的图像分析和处理。

主要功能:

    图像滤波:支持多种滤波操作,如高通滤波、低通滤波、边缘检测等。
    图像增强:支持对图像进行对比度增强、亮度调整等操作。
    图像变换:支持图像的旋转、缩放、平移等几何变换操作。
    图像算术:支持对图像进行算术运算,如加法、减法、乘法等。

使用步骤:

    1初始化工具:创建 CogIPOneImageTool 实例并进行初始化。
    2设置输入图像:配置要处理的输入图像。
    3 选择处理操作:根据需要选择具体的处理操作和参数。
    4运行工具:调用运行方法执行图像处理。
    5.获取处理后图像:从工具中获取处理后的图像。

1、加减常量

为灰度图像中每个像素的灰度值添加正值或负值,从而生成一张更亮或更暗的图像

1549dd166d934473b94e3cd452736af5.png

对于彩色图像,将值添加到平面0(红色),平面1(绿色),平面2(蓝色)

46af5f179944444aac41ca091484c0f8.png

封装:超出255亮度的像素会执行减去256的操作,小于0的会执行加256的操作

箝位:最高到255的亮度,最小到 0

2、3x3卷积运算

VisionPro支持卷积运算符,基于相邻像素值修改像素值。

VisionPro将输入图像中的每个像素乘以一个称为核的数值

后替换输出图像中的 相应像素。不同卷积核可以

实现不同的效果,比如平滑、模糊、去噪、锐化、 边缘提

取等,都可以通过卷积操作来完成

卷积核大小:卷积核大小定义了卷积的视图。根据卷积核的大小,常见的卷积尺寸有1×1卷积、3×3 卷积、5×5卷积、7×7卷积

利用3X3矩阵对图像执行卷积运算。

4062f3cbd26f4b5fa220c3146b54b1a0.png

1.边缘锐化效果

c8c6daabd0c64c3f999fda2d8daed65e.png

卷积核效果参考网址:

https://setosa.io/ev/image-kernels/

3.扩展

用指定的放大倍数放大整个图像或整个图像的一部分。该操作接受单独 的参数以沿x轴和y轴放大图像,因此可以使用该操作仅沿一个方向放大输 入图像

4d689b25f6ac435c92369e4e25d37830.png

4.翻转

对输入图像的全部或部分执行水平翻转或顺时针旋转。下图显示了输入图像 的一部分如何旋转180度。您可能需要翻转

或旋转图像,以便视觉工具在每次应 用程序执行时分析正确的功能

fb0ebc6e555f45ac980cbc4d3f83cbe2.png

5.高斯采样

(1)缩小图像的像素个数比例  提高应用程序的速度时

缩小一倍       二次采样   调整图像大小

(2)使用平滑操作可减轻图像中纹理,信号噪声等带来的

影响。 平滑:  消除噪声

(3)可调整量级移动,范围为-7至7。 使用负值作为

移位因子可产生较暗的输出图像,而使用正值可产生较亮

的输出图像。 图像亮度调整

461b068ee05f4549bcaa98a8d9bc17c3.png

6.灰度形态调整

对输入图像执行灰度形态,根据其大小和方向有选择地增强或减少图像特征。

检查每个像素及其 八个相邻像素的灰度值

60aa77822e964b0b8bdd8085c2854d98.png

腐蚀:侵蚀会降低图像的亮部,从而完全消除噪点像素或小的缺陷

膨胀:增强了图像的明亮特征,同时抑制了较暗的特征

5e2857a7c5854c128cc083cc2fb3f3c9.png

打开(开运算):首先对输入图像进行腐蚀,然后对结果进行膨胀,以生成输出图像。打开图像会 删除少量明亮像素,然 后增强其余的明亮功能

关闭(闭运算):首先对输入图像执行膨胀,然后对结果进行腐蚀以生成输出图像。关闭图像可减少或完全消除图像的暗区

打开和关闭操作都倾向于保留大特征的尺寸和形状,同

时影响小特征的尺寸和形状

eb508dc6e7184098be7023f2ba752875.png

关闭-原件 (黑帽) (得到图像内部的小孔, 或者前景色中的小黑点)

194a6ea4dd7b491c801238ab32015027.png

原件-打开 (顶帽)(得到图像的噪声) 

图像噪声是指存在于图像数据中的不必要的或多余的干扰信息。噪声的存在严重影响了遥感图像的质量。

0cf7a0ab2ca241a8be0de9d2572037e8.png

7.灰阶形态 NxM  

灰度形态调整的扩展  其中也包括  腐蚀 膨胀 等功能

4b46d55317614e42a01f5764f5a53bec.png

8.高通滤波:

高通滤波就是保留图像中频率比较高的部分,即突出边缘;可以执行高 斯、均值或中值平滑操作,然后从输入图 像中减去结果图像。高频信号的输出和采样

均值滤波 Mean

中值滤波Median

高斯滤波Gauss

7fa2ff19d6aa450ea247560dcca8a082.png

ad9d2611b7984294ac59ff3d562962b9.png

均值滤波 和中值滤波算法

8782907c4a2c4cafae2588992b179885.png

9.乘以常数

52575a13a6fa44bd9b7b6db3118c16ce.png

10.像素映射

4ae2657fa6184978bcd6b5b08e26a0e5.png

11.量化

413b28e700dc4d759f3df04bd1594507.png

12.采样卷积

fbda522afb41467aa1d34270c6d11e84.png

13.二次采样

a0af9b196d984032803b2db6e36f76d2.png

CogAffineTransformTool 工具解析

CogAffineTransformTool 作用:

对图像中仿射矩形内的区域进行变换,产生一个矩形的输出图像。能够消除仿射矩形的旋转和倾斜的影响,并且能够设置一个比例参数,以使能够放大或缩小矩形区域内的特征。

仿射矩形:

是任何四边形,其中相对的边彼此平行。正方形,矩形和平行四边形都是仿射矩形。

 作用1:放大矩形区域内的特征

 原始缩放比例

放大矩形区域内的特征

作用2:仿射变换对图像的剪裁

作用3:消除旋转和倾斜

 如图:输入仿射矩形图像以及仿射变换工具生成的输出图像 (消除旋转和倾斜)

案例:CogPMAlignTool1工具和CogFixtureTool工具用来定位。CogAffineTransformTool接收定位后图像进行仿射变换 (消除旋转和倾斜)

裁切区域处理模式:

处理为零:输入图像和输出图像裁切区域像素值为0,裁切边缘像素为0到未裁切像素值区间值,这种裁切方式计算速度最快,但裁切边界像素模糊)

创建输出图像掩模:对输出图像使用掩膜效果

创建掩膜区域

显示掩膜区域

 获取掩膜输出图像

  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值