2026/5/20 18:00:47
网站建设
项目流程
杭州网站建设案例,做设计网站,个人中心页面,北京事务所网页设计摸鱼时偶然注意到halcon短短三行代码就能实现pcd板线路断路#xff0c;短路检测#xff0c;挑战用Vision pro复刻该项目一.算法原理参考halcon实现原理#xff08;效果图在最下方#xff09;#xff1a;1.对图像进行灰度开运算和灰度闭运算#xff0c;使用7x7的八角形结构…摸鱼时偶然注意到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 ListCogRectangleAffine blobRects new ListCogRectangleAffine();创建了一个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 ListCogRectangleAffine blobRects new ListCogRectangleAffine(); #endregion /// summary /// Called when the parent tool is run. /// Add code here to customize or replace the normal run behavior. /// /summary /// param namemessageSets the Message in the tools RunStatus./param /// param nameresultSets the Result in the tools RunStatus/param /// returnsTrue 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 namecurrentRecord /// 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 namelastRecord /// 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 namehostThe 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?pwdwzpn提取码: wzpn