news 2026/4/22 19:59:00

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/4/23 10:19:56

看看灵光、秒哒、NoCode、Gemini、iThinkAir各家做应用的效果

一句话生成应用的AI工具已经有很多了&#xff0c;比如&#xff1a;灵光、秒哒、NoCode、Gemini、iThinkAir。这里试试看各家生成应用的效果。 输入这样一句话&#xff1a;做一个漫绘科普的工具应用&#xff1a;“专业术语&#xff1f;画给你看&#xff01;”&#xff0c;“复杂…

作者头像 李华
网站建设 2026/4/19 23:00:11

如何通过 API 网关实现统一的安全治理

随着微服务架构的普及&#xff0c;企业 API 数量呈指数级增长。然而&#xff0c;安全策略若分散在各个服务中&#xff0c;将导致防护不一致、漏洞难管控、审计难追溯。API 网关作为流量统一入口&#xff0c;是实现安全治理的理想载体。本文介绍如何通过 API 网关构建集中化、标…

作者头像 李华
网站建设 2026/4/18 10:01:25

《时代》2025重塑世界的五大AI进展

2025年注定被载入史册&#xff0c;这一年人工智能成了支撑股市的经济支柱&#xff0c;更成了大国竞争前线重新划界的地缘政治棋子。1月20日Deepseek发布R1模型这一天&#xff0c;成为了全球AI格局的分水岭&#xff0c;它不仅在性能榜单上紧随美国顶尖模型之后排名全球第二&…

作者头像 李华
网站建设 2026/4/19 23:31:01

AI能力进化还在狂飙!Epoch数据洞察打破人们对AI进化减缓的预期

Epoch AI最新发布的监测数据显示&#xff0c;AI能力进化还在狂飙。这与METR的时间跨度基准&#xff08;Time Horizon benchmark&#xff09;得出的加速结论遥相呼应。2024年4月&#xff0c;全球AI综合能力的增长速率在这一刻暴涨了90%。同年10月&#xff0c;METR的时间跨度基准…

作者头像 李华
网站建设 2026/4/21 18:07:20

2026年CIO做AI规划时的3个关键点

站在“十五五”规划的新起点&#xff0c;中国正以“人工智能”行动为重要引擎&#xff0c;加快推进经济高质量发展。从智能制造到智慧城市&#xff0c;从数字政务到智慧民生&#xff0c;AI成为决定企业核心竞争力的关键要素。作为企业数字化转型的规划者和推动者&#xff0c;CI…

作者头像 李华
网站建设 2026/4/18 7:47:34

易语言开发者破圈指南:从技术工匠到价值创作者

易语言开发者破圈指南&#xff1a;从技术工匠到价值创作者 &#x1f680; 1.15.1 学习目标 &#x1f3af; 作为《易语言开发从入门到精通》的价值升华终章&#xff0c;本章将突破「技术本身的局限」&#xff0c;解决你学完易语言后最核心的痛点——“怎么用易语言改变职业轨迹、…

作者头像 李华