news 2026/3/28 2:02:31

Vision pro 项目分享:Pcd板线路检测(与halcon比较)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vision pro 项目分享:Pcd板线路检测(与halcon比较)

摸鱼时偶然注意到halcon短短三行代码就能实现pcd板线路断路,短路检测,挑战用Vision pro复刻该项目

一.算法原理

参考halcon实现原理(效果图在最下方):

1.对图像进行灰度开运算和灰度闭运算,使用7x7的八角形结构元素。

2.使用动态阈值(dyn_threshold)将开运算和闭运算的结果进行比较,以分割出电路断线区域。

3.用红色显示检测到的断线区域。

*halcon *灰度开运算 gray_opening_shape (Image, ImageOpening, 7, 7, 'octagon') *灰度闭运算 gray_closing_shape (Image, ImageClosing, 7, 7, 'octagon') *局部阈值分割电路断线 dyn_threshold (ImageOpening, ImageClosing, RegionDynThresh, 75, 'not_equal') *dev_display (RegionDynThresh)

总结原理就是正常线路在形态学处理前后变化不大,而有缺陷的线路会产生显著差异,接下来用vp挑战。

二.工具配置

主要工具选择如下:

1.用PixelMapTool预处理图像(加强黑白分明)简单处理

2.单图像处理只用了灰度形态调整5x5(测试效果比较好)

3.用CogIPTwoImageSubtractTool计算两个图像的差异,然后对差异图像进行阈值处理。(溢位模式选择绝对值)

4.利用斑点分析工具对差异图像进行阈值分割,输入合适阈值和面积卡控,输出阈值分割后的二值图像

三.多矩形标记代码

代码逻辑结构说明:简简单单的多矩形框显示代码

1. 初始化数据存储结构

private List<CogRectangleAffine> blobRects = new List<CogRectangleAffine>();

创建了一个CogRectangleAffine类型的列表blobRects,用于存储每个检测到的缺陷区域的矩形标注信息。

2.遍历每个Blob检测结果,为每个检测到的斑点创建一个固定的20×20像素的红色矩形标注。矩形中心定位在斑点的质心位置(CenterOfMassX,CenterOfMassY)。所有创建的矩形都存储在blobRects列表中,用于后续的显示处理。

3.将之前生成的矩形标注添加到指定工具(CogPixelMapTool1)的输入图像显示中

完整代码:

#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.PixelMap; using Cognex.VisionPro.ImageProcessing; using Cognex.VisionPro.Blob; using System.Collections.Generic; #endregion public class CogToolBlockAdvancedScript : CogToolBlockAdvancedScriptBase { #region Private Member Variables private Cognex.VisionPro.ToolBlock.CogToolBlock mToolBlock; private List<CogRectangleAffine> blobRects = new List<CogRectangleAffine>(); #endregion /// <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) { // 运行每个工具 foreach(ICogTool tool in mToolBlock.Tools) mToolBlock.RunTool(tool, ref message, ref result); var blobTool = mToolBlock.Tools["CogBlobTool1"] as CogBlobTool; if (blobTool != null && blobTool.Results != null) { var blobs = blobTool.Results.GetBlobs(); // 清空之前的矩形列表 blobRects.Clear(); for (int i = 0; i < blobs.Count; i++) { var blobResult = blobs[i]; // 创建矩形 CogRectangleAffine rect = new CogRectangleAffine(); rect.Color = CogColorConstants.Red; rect.LineWidthInScreenPixels = 2; rect.CenterX = blobResult.CenterOfMassX; rect.CenterY = blobResult.CenterOfMassY; rect.SideXLength = 20; rect.SideYLength = 20; rect.Rotation = 0; // 添加到列表 blobRects.Add(rect); } } return false; } #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) { // 遍历所有矩形并添加到CogPixelMapTool1.InputImage的显示中 foreach(CogRectangleAffine rect in blobRects) { // 使用AddGraphicToRunRecord方法添加图形到指定工具的输入图像 mToolBlock.AddGraphicToRunRecord(rect, lastRecord, "CogPixelMapTool1.InputImage", "Input Image"); } } #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 REMOVE base.Initialize(host); // Store a local copy of the script host this.mToolBlock = ((Cognex.VisionPro.ToolBlock.CogToolBlock) (host)); } #endregion }

四:效果对比

Vision pro效果图

Halcon 效果图

结论:对比效果vp还是会比halcon差点,毕竟halcon是工业级别算子,效果杠杠滴,

AI评价:Halcon通过灰度开闭运算(7x7八角形核)和动态阈值比较,能有效识别断路/短路区域。VisionPro采用PixelMapTool预处理、5x5灰度形态学调整、CogIPTwoImageSubtractTool计算差异和斑点分析,实现了类似功能。虽然VisionPro效果略逊于Halcon的工业级算子,但仍能较好地完成检测任务。两种方法都利用了形态学处理前后图像差异的原理,正常线路变化小,缺陷区域差异显著。实验表明Halcon三行代码即可实现的高效检测,VisionPro需要更多工具组合来完成。

Pcd板线路检测图片链接: https://pan.baidu.com/s/10k3intgL8fxr-mhfBZYD8Q?pwd=wzpn

提取码: wzpn

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/27 23:07:05

干货分享|用FastGPT轻松搭积木

当大语言模型的技术浪潮席卷各行各业&#xff0c;“如何让AI真正落地产生价值”成为企业和开发者共同面临的核心命题。在众多落地方向中&#xff0c;智能体&#xff08;Agent&#xff09;凭借其自主决策、自主执行的核心能力&#xff0c;成为连接大模型技术与实际应用场景的关键…

作者头像 李华
网站建设 2026/3/27 11:11:28

UR开放直接扭矩控制:为协作机器人高级控制算法研究打开新路径

优傲机器人&#xff08;UR&#xff09;最新发布的PolyScope 5.23软件版本&#xff0c;正式开放了直接扭矩控制&#xff08;DTC&#xff09;接口。此举将UR协作机器人从高精度自动化工具升级为开放的智能创新平台&#xff0c;主要面向科研教育与高端工业应用领域。 UR协作机器人…

作者头像 李华
网站建设 2026/3/26 23:27:22

AI终于学会“动手“了:一文搞懂AI Agent和MCP的魔法

当AI从"嘴炮王"变成"行动派" 想象这样一个场景&#xff1a;你打开手机&#xff0c;对着AI说&#xff1a;“我想订一张去伦敦的机票。” 如果是传统的ChatGPT&#xff0c;它会礼貌地告诉你&#xff1a;“您可以访问携程、去哪儿或者航空公司官网&#xff…

作者头像 李华
网站建设 2026/3/27 12:27:58

云服务器选型指南

在数字化转型加速的今天&#xff0c;云服务器已成为企业 IT 架构的核心支撑&#xff0c;但选型不当往往导致资源浪费或性能瓶颈。很多企业在阿里云、腾讯云、AWS 等主流厂商间举棋不定&#xff0c;实则选型的核心逻辑是 “业务匹配” 而非 “品牌跟风”。​首先需明确核心业务场…

作者头像 李华
网站建设 2026/3/27 4:17:26

MySQL SQL 面试核心考点与注意事项总结

一、核心考点清单1. GROUP BY 与聚合函数&#xff08;⭐⭐⭐⭐⭐&#xff09;必考知识点&#xff1a;-- 五大聚合函数 COUNT(*) -- 统计所有行 COUNT(column) -- 统计非NULL值 COUNT(DISTINCT column) -- 统计不重复的非NULL值 AVG(column) -- 平均值&a…

作者头像 李华
网站建设 2026/3/27 5:17:22

Java计算机毕设之基于SpringBoot的在线学习交流系统设计与实现基于springboot的考研学生在线学习与交流系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华