当前位置: 首页 > news >正文

visionpro案例: 轴承缺珠检测

visionpro案例: 轴承缺珠检测

  • 项目概述
  • 思路以及解题过程
    • 1.图像预处理:使用CogIPOneImageTool对图像进行灰度化、去噪等预处理操作,以提高后续处理的准确性。
    • 2.特征提取:使用CogPMAlignTool提供的工具提取轴承的概念建特征
    • 3.图像校正: 使用CogFixtureTool,并把上面CogPMAlignTool找到的GetPose()传入进行位置矫正
    • 4.圆展开: CogFindCircleTool找圆并通过找到的圆心坐标对CogPolarUnwrapTool的圆心赋值将图像从笛卡尔坐标系转换到极坐标系
    • 5.模板匹配: 对展开后的图像进行模板匹配,匹配圆珠,没有匹配的地方则缺少,通过代码显示出来,并映射到原图中
    • 6.完整代码展示
  • 结论

项目概述

我们需要对下面轴承的缺珠情况进行检测,并且把缺珠的位置在图像上标记出来,效果如下:
在这里插入图片描述

思路以及解题过程

1.图像预处理:使用CogIPOneImageTool对图像进行灰度化、去噪等预处理操作,以提高后续处理的准确性。

在这里插入图片描述

2.特征提取:使用CogPMAlignTool提供的工具提取轴承的概念建特征

在这里插入图片描述

3.图像校正: 使用CogFixtureTool,并把上面CogPMAlignTool找到的GetPose()传入进行位置矫正

在这里插入图片描述

4.圆展开: CogFindCircleTool找圆并通过找到的圆心坐标对CogPolarUnwrapTool的圆心赋值将图像从笛卡尔坐标系转换到极坐标系

图1
在这里插入图片描述
在这里插入图片描述

5.模板匹配: 对展开后的图像进行模板匹配,匹配圆珠,没有匹配的地方则缺少,通过代码显示出来,并映射到原图中

在这里插入图片描述

6.完整代码展示

#region namespace imports
using System;
using System.Collections;
using System.Collections.Generic;
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.Caliper;
#endregionpublic class CogToolBlockAdvancedScript : CogToolBlockAdvancedScriptBase
{#region Private Member Variablesprivate Cognex.VisionPro.ToolBlock.CogToolBlock mToolBlock;#endregionCogGraphicCollection col = new CogGraphicCollection();/// <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();// #endifcol.Clear();CogPMAlignTool pm = mToolBlock.Tools["CogPMAlignTool2"] as CogPMAlignTool;CogPolarUnwrapTool Polar = mToolBlock.Tools["CogPolarUnwrapTool1"] as CogPolarUnwrapTool;//声明一个列表  用来储存X坐标List<double> listX = new List<double>();// Run each tool using the RunTool functionforeach(ICogTool tool in mToolBlock.Tools)mToolBlock.RunTool(tool, ref message, ref result);double y = 0,yTotal = 0;for(int i = 0 ; i < pm.Results.Count;i++){//将x坐标数据  添加到列表中listX.Add(pm.Results[i].GetPose().TranslationX);yTotal += pm.Results[i].GetPose().TranslationY;}//Y平均值y = yTotal / pm.Results.Count;//排序listX.Sort();//找缺陷的 比较逻辑for(int i = 0; i < listX.Count - 1;i++){if(listX[i+1] - listX[i] > 60){double x = (listX[i + 1] + listX[i]) / 2;double xIN,yIN;Polar.RunParams.GetInputPointFromOutputPoint(Polar.InputImage, Polar.Region, x, y, out xIN, out yIN);col.Add(CreateCircle(xIN,yIN));}}//第一个缺失if(listX[0]>40){double x = listX[0] - 40;double xIN,yIN;Polar.RunParams.GetInputPointFromOutputPoint(Polar.InputImage, Polar.Region, x, y, out xIN, out yIN);col.Add(CreateCircle(xIN,yIN));}//最后一个缺失if(listX[listX.Count-1] < 750){double x = listX[listX.Count-1] + 40;double xIN,yIN;Polar.RunParams.GetInputPointFromOutputPoint(Polar.InputImage, Polar.Region, x, y, out xIN, out yIN);col.Add(CreateCircle(xIN, yIN));}return false;}public CogCircle CreateCircle(double x,double y){CogCircle c = new CogCircle();c.CenterX = x;c.CenterY = y;c.Radius = 10;c.LineWidthInScreenPixels = 4;c.Color = CogColorConstants.Red;return c;}#region When the Current Run Record is Created/// <summary>/// Called when the current record may have changed and is being reconstructed/// </summary>/// <param name="currentRecord">/// The new currentRecord is available to be initialized or customized.</param>public override void ModifyCurrentRunRecord(Cognex.VisionPro.ICogRecord currentRecord){}#endregion#region When the Last Run Record is Created/// <summary>/// Called when the last run record may have changed and is being reconstructed/// </summary>/// <param name="lastRecord">/// The new last run record is available to be initialized or customized.</param>public override void ModifyLastRunRecord(Cognex.VisionPro.ICogRecord lastRecord){foreach(ICogGraphic g in col){mToolBlock.AddGraphicToRunRecord(g, lastRecord, "CogIPOneImageTool1.InputImage", "");}}#endregion#region When the Script is Initialized/// <summary>/// Perform any initialization required by your script here/// </summary>/// <param name="host">The host tool</param>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}

结论

通过上述步骤和控件的使用,可以实现对轴承的缺陷检测。代码中使用了Cognex VisionPro工具进行特征提取和缺陷识别,并在图像上标记缺陷位置。项目可以根据实际需求进行扩展和优化

http://www.xdnf.cn/news/60031.html

相关文章:

  • 递归神经网络
  • 互联网大厂Java面试:Spring Cloud与微服务的奇妙之旅
  • JAVA:利用 Apache Tika 提取文件内容的技术指南
  • 并发编程之ReentrantLock
  • xpath选择器
  • Spring AI 框架-快速搭建以及会话日志(笔记)
  • Java实现希尔排序算法
  • 在线查看【免费】 jpg, jpeg, png, gif, bmp, ico, jfif, webp 等图片预览(翻转,缩放,镜像)文件格式网站
  • 突破网页数据集获取难题:Web Unlocker API 助力 AI 训练与微调数据集全方位解决方案
  • Nginx详细使用
  • 规则引擎 - Easy Rules
  • 使用openssl为localhost创建自签名
  • 运维概述(linux 系统)
  • 【Python核心库实战指南】从数据处理到Web开发
  • MCP + 数据库,一种比 RAG 检索效果更好的新方式!
  • Python+CoppeliaSim+ZMQ remote API控制机器人跳舞
  • 【c语言】指针进阶
  • 2025年首届人形机器人半程马拉松比赛(附机器人照片)
  • [BJDCTF2020]EzPHP
  • JVM有什么调优参数?
  • RSS 2025|苏黎世提出「LLM-MPC混合架构」增强自动驾驶,推理速度提升10.5倍!
  • 阿里云人工智能大模型MCP协议
  • Node.js和js到底什么关系
  • Hyperlane:Rust Web框架的性能新标杆
  • Vue如何获取Dom
  • Oracle DBA培训一般多长时间?
  • 递归的模板 (以反转链表为例)
  • .net core 中directory , directoryinfo ,file, fileinfo区别,联系,场景
  • mindspeed-rl使用注意事项
  • unity TEngine学习4