【第四届启智杯大赛决赛】+开发赛道+迹你实在是太美+参赛作品分享
本文分享一款针对工业自动化流水线定制开发的物料缺陷检测应用软件。该软件基于C#WinForms框架与底层机器视觉算法库(如VisionDesignerSDK)进行深度二次开发,专为解决印刷品、零部件外观的异常缺陷(如码区脏污、字符残缺、多墨少墨、背景脏污等)自动化检测难题而设计。系统完整实现了从基准图建模、多锚点动态对齐、多类别ROI(感兴趣区域)动态分配,到高并发比对检测及缺陷双图精细裁切展示的业务闭环。在底层工程实现上,针对高分辨率工业图像处理引入了极限内存管控、异步多线程调度、亚像素级防抖对齐以及底层像素级缺陷聚类提取等深度优化方案

一、 图像源管理与无感交互机制

【设计思路】

工业相机采集的原图分辨率通常极高(单张动辄数十 MB)。若将批量导入的高清图片直接加载至系统 UI 列表,极易引发严重的内存溢出(OOM)及前端界面假死。因此,必须构建一套高效的资源调度机制,彻底解耦“预览图”与“检测图”,以极低的内存开销实现海量图像的流畅展示与无缝切换。

【解题过程与实现】

极限内存压缩与双轨制缓存:系统采用“微缩略图缓存 + 按需加载显存”的架构策略。在加载图像时,底层改用 FileStream 读取文件数据流,配合高质量双三次插值(HighQualityBicubic)算法,在读取瞬间将其等比例压缩为最大边长 120 像素的缩略图缓存,并立刻释放原图内存流。该机制将单图在 UI 列表的内存占用从数十 MB 骤降至 50KB 以下。

动态悬浮 UI 与按需渲染:侧边列表面板及悬浮删除按钮均由后台代码动态生成。通过控件的 Tag 属性隐式绑定图片的绝对路径,仅当用户产生焦点交互(点击缩略图)时,系统才调用底层的视觉接口 CMvdImage.InitImage 将高清原图真正载入主视图显存。

非托管资源严格释放:在执行清空与删除操作时,不仅移除前端 UI 节点,更强制调用 Dispose() 方法释放 C++ 底层非托管图像句柄,杜绝长期连续运行情况下的内存泄漏问题。

二、 建模配置:裁剪视野与多锚点基准定位

【设计思路】

流水线上的工件在相机视野中普遍存在平移与旋转偏差。为保证后续检测区域的精确比对,必须建立稳固的“空间定位锚点”;同时,需处理好同屏复杂绘图操作的交互状态,避免逻辑冲突。

【解题过程与实现】

交互状态机拦截:在建模配置模块中,引入自定义状态机枚举 DrawMode(涵盖无、裁剪区、定位区、检测区模式),全面接管底层视觉控件的图形绘制事件(MVD_ShapeChangeEvent),保障每一次用户绘图交互的精准与独立。

蓝框裁剪与黄框定位双层体系:

单一裁剪区(蓝框):拦截矩形绘制操作后,提取坐标并在内存中动态裁切出真实的检测有效工作区,有效屏蔽背景杂讯干扰,且系统严格限制裁剪框的全局唯一性。

多特征点定位(黄框):开放定位特征多选功能,支持在工作区内绘制多个特征基准框并压入缓存队列。后台自动调用视觉定位算子(CContourPattern.Train())对这些区域提取边缘特征进行模型预训练,从而确立标准样张的空间基准姿态与参考角度。

三、 检测配置联动与动态算法分配

【设计思路】

项目进阶要求中明确提出,需支持对每个缺陷类别绘制多个 ROI,并动态增加检测参数组与算法流程。常规的静态硬编码架构难以满足这一柔性化需求,系统必须实现算法管线的动态实例化与前端 UI 的双向解耦。

【解题过程与实现】

算法对象池预分配:在系统架构底层,预先构建了多组独立运行的缺陷检测算子(CDefectInspectTool)及配套的参数数据模型(DefectROIConfig)。

UI 动态挂载与视觉隔离:当用户在画面中新建检测类别(如一维码、文字图案)时,系统自动寻址空闲的算法槽位并赋予专属的高亮标识色。同时利用动态流式布局(AddPanelToFlow),在左侧工作区自动实例化生成该类别专属的参数调节面板。

底层参数实时联动:动态生成的参数面板控件(如容差阈值、连通域大小等 NumericUpDown 控件)直接与底层的 DefectROIConfig 实例进行内存绑定。实现了不同位置、不同类别的缺陷检测逻辑彻底解耦,参数调节即刻生效,达到“所见即所得”的调参体验。

四、 自动化并发检测与缺陷裁切比对(核心突破)

【设计思路】

传统的绝对模板相减法在面对印刷边缘微小公差或机械抖动时,极易产生大面积伪影误报。为攻克这一核心痛点,系统引入了多阶段仿射变换对齐、亚像素防抖差分与底层欧氏距离聚类重构算法。

【解题过程与实现】

两阶段精确定位与仿射校正:自动运行阶段,首先利用轮廓匹配算法全局计算当前测试图相较于基准图的整体偏移量与旋转角;随后,利用图像仿射变换工具(CImageAffineTransformTool),将每个局部待测 ROI 进行“逆向刚体变换”,强制将其拉正至与标准样张绝对重合的姿态。

异步多核并发提速:在批处理检测主循环中,提取图像偏移态势后,通过 Task.WhenAll 将同一图像上的多个不同检测区域分发给多条子线程异步并发运算,最大化压榨设备的 CPU 算力,大幅降低单次检出耗时。

底层亚像素防抖差分机制:获取对比图像后,算法直接抓取底层图像的内存指针 arrDataBytes。首先在 -4 至 +4 的微小像素滑动窗口内寻找 SSD(误差平方和)最小的最佳对齐点;在进行像素作差时,进一步引入了 5x5 邻域边缘漂移判断逻辑,智能消化印刷与加工的合理公差,从根源上消除边缘伪影误报。

空间连通域自适应聚类:针对提取出的真实异常缺陷噪点,算法计算其物理空间距离。若间距小于设定的合并阈值(PixelMergeDist),则将其归并合围为一个连通的大缺陷包围盒,并自适应向外扩张边界裕量(BoxPadding),精准勾勒脏污或残缺的真实外形边界。

双图精准裁切与实时报表落地:基于解算出的绝对缺陷坐标,调用自定义裁切算法,在当前测试图(NG 图)和基准模板图(OK 图)上同步等比裁切局部对比区域。前端选中缺陷项时,右侧面板即刻放大呈现 1:1 双图对照。此外,采用纯粹的文件流追加模式(File.AppendAllText),将剔除 UI 渲染耗时后的纯算法检出时间及判定结果实时写入 CSV 报表,保障系统在长期工业环境运行下的数据追溯性。

附件:
版权声明:本文为V社区用户原创内容,转载时必须标注文章的来源(V社区),文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:v-club@hikrobotics.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
上一篇

【第四届启智杯大赛决赛】+视觉算法创新赛道+EVA+参赛作品分享

下一篇
已经是最后一篇啦~
评论请先登录 登录
全部评论 0
Lv.0
0
关注
0
粉丝
0
创作
0
获赞
相关阅读
  • 【形状匹配算法系列】从NCC到轮廓匹配:工业视觉的"定位之争",到底争的是什么?
    2026-05-19 浏览 0
  • 通过socket将图片传输到vm外部
    2026-05-09 浏览 0
  • 项目实施过程中关于对标的思路及经验分享
    2026-05-09 浏览 0
  • 移动机器人常识
    2026-05-15 浏览 0
  • 移动机器人技术分享-26年5月
    2026-05-15 浏览 0

请升级浏览器版本

您正在使用的浏览器版本过低,请升级最新版本以获得更好的体验。

推荐使用以下浏览器