1. 课程导入与VisionPro概览

表面缺陷检测是工业视觉中最常见、也最考验工程化能力的一类任务。手机玻璃盖板上的划痕、锂电极片上的暗斑、金属冲压件上的压伤、薄膜上的针孔与异物,这些缺陷的共同特点是:对比度低、形态随机、边界模糊,而且往往在高速产线上以毫秒级节拍流过相机。传统阈值分割加形态学的方案,一旦换批次、换光照或换材料,参数就要重调,误检与漏检随之上升。VisionPro 的价值正在于此——它把图像采集、预处理、定位、缺陷分割、特征测量、判定与通信封装成一套可组合、可复用、可脚本化的工具链,让工程师把精力放在缺陷定义与判定逻辑上,而不是反复造轮子。

行业需求:从“看得见”到“判得准”

表面缺陷检测的工程目标可以拆成三个层次。第一层是成像,即缺陷在图像中是否具备足够的信噪比;第二层是检出,即算法能否稳定地把缺陷区域从背景中分离出来;第三层是判定,即依据面积、长度、灰度对比度、位置等特征决定放行还是报警。很多项目失败并非算法不行,而是成像阶段就没有把缺陷“照亮”——例如检测透明薄膜上的微划痕,若采用同轴光,划痕散射光被镜面反射淹没,缺陷几乎不可见;改用低角度暗场照明后,划痕因散射而呈亮线,信噪比显著提升。因此在 VisionPro 项目中,光源与镜头的选型往往比算法选择更早、更关键。

典型教学示例参数如下(属合理假设,非实测结果):视野 60 mm × 45 mm,相机 500 万像素(2448 × 2048),则单像素对应约 0.0245 mm,即 24.5 μm/pixel。若最小可接受缺陷为 0.1 mm 的划痕,则缺陷宽度约占 4 个像素,属于可检但偏紧的边界,通常建议将视野缩小或提高分辨率,使最小缺陷至少占 5~8 个像素,才能保证分割稳定性。

VisionPro 核心架构

VisionPro 的运行结构可以理解为“采集—处理—判定—输出”四段,中间由图像与结果数据串联。采集层由 Cognex 相机或第三方相机通过 GigE、USB3 等接口进入,也可从磁盘读取图像做离线调试;处理层是核心,包含 CogToolBlock(工具块)与 ToolGroup(工具组),内部可放置 CogAcqFifoTool、CogImageConvertTool、CogPMAlignTool、CogBlobTool、CogCaliperTool、CogFindLineTool 等;判定层由表达式、脚本或 CogResultAnalysis 完成;输出层通过 TCP/IP、Modbus TCP、数字 I/O 或 PLC 通信把 OK/NG 与缺陷坐标送出。

其中两个工具在表面缺陷检测中出现频率最高:CogPMAlignTool 负责模板匹配定位,把产品坐标系对齐,使后续检测区域不随产品平移旋转而漂移;CogBlobTool 负责连通域分割,通过灰度阈值、面积上下限、极性(黑底白斑或白底黑斑)提取缺陷候选。二者串联后,缺陷检测的稳定性主要取决于定位精度与阈值分割的鲁棒性。

VisionPro 表面缺陷检测数据流与工具链 采集层 相机 / GigE / USB3 CogAcqFifoTool 离线图像加载 光源:暗场 / 同轴 / 环形 处理层(CogToolBlock) CogPMAlignTool 模板匹配定位 CogBlobTool 连通域分割 CogCaliperTool 边缘 / 宽度测量 CogFindLineTool 直线拟合定位 判定层 面积 / 长度 / 对比度 表达式与脚本 OK / NG 判定 CogResultAnalysis 输出层 TCP/IP · Modbus TCP 数字 I/O · PLC 缺陷坐标与图像存档 参数反馈:阈值 / 面积上下限 / 定位模板更新 关键参数示例(合理假设) 视野 60 mm × 45 mm | 相机 2448 × 2048 | 分辨率 ≈ 24.5 μm/pixel 最小缺陷 0.1 mm ≈ 4 pixel(偏紧)| 建议 ≥ 5~8 pixel 以保证分割稳定 Blob 面积下限示例:80 pixel | 灰度阈值示例:暗斑 < 60,亮斑 > 190

QuickBuild 与脚本开发环境

QuickBuild 是 VisionPro 的可视化集成环境,工程师在其中拖放工具、连线、设置参数并即时查看中间结果。它的优势是“所见即所得”:CogBlobTool 的阈值滑块一拖动,右侧图像上的红色连通域立刻变化,面积、重心、外接矩形等结果同步刷新。对于表面缺陷检测,QuickBuild 中最常用的操作是:先放 CogAcqFifoTool 取图,再放 CogPMAlignTool 做定位,然后用 CogBlobTool 在定位后的坐标系内分割缺陷,最后用表达式把 Blob 的 Area 与阈值比较输出 OK/NG。

当逻辑超出图形化表达能力时,就需要脚本。VisionPro 支持 C# 脚本(在 QuickBuild 的 Script 节点中编写),也可通过 .NET API 在外部程序中调用。脚本的典型用途包括:多缺陷合并判定、按缺陷位置分区设定不同阈值、把结果写入数据库、动态切换模板。例如下面这段 C# 脚本片段演示了如何读取 Blob 结果并做面积判定:

// 假设已获取 CogBlobTool 的 Results 与当前工具块
double areaLimit = 80.0;          // 面积下限,单位 pixel
int defectCount = 0;

foreach (CogBlobResult blob in mBlobTool.Results.GetBlobs())
{
    if (blob.Area >= areaLimit)
    {
        defectCount++;
        // 记录缺陷重心坐标,供后续输出或存档
        double cx = blob.CentroidX;
        double cy = blob.CentroidY;
    }
}

// 判定:存在任一超限缺陷即 NG
mToolBlock.Outputs["DefectCount"].Value = defectCount;
mToolBlock.Outputs["Pass"].Value = (defectCount == 0);

需要注意的是,脚本中引用的工具名、输出端口名必须与 QuickBuild 中实际命名一致,否则运行时会抛出空引用或端口未找到异常。调试时建议先用 CogBlobTool 的图形界面确认阈值与面积参数合理,再把同样的数值搬进脚本,避免“脚本逻辑正确但参数不对”的假故障。

学习路径与资源准备

本课程后续章节将沿着“成像—定位—分割—测量—判定—通信—部署”的主线推进。建议的学习路径是:先理解相机与光源如何影响缺陷可见性,再掌握 CogPMAlignTool 的定位稳定性调优,然后深入 CogBlobTool 的阈值、极性、面积与形态学参数,接着学习 Caliper 与 FindLine 做尺寸类缺陷测量,最后完成脚本判定、通信输出与产线部署。

资源准备方面,需要一台安装 VisionPro 的工控机或开发机、一套可重复触发采集的相机与光源(或一组已采集的缺陷图像样本)、以及 QuickBuild 自带的示例图像库。建议在项目开始前建立缺陷样本集,至少覆盖 OK 样本 30 张、各类缺陷样本各 10 张,并标注缺陷类型与位置,用于后续验证检出率与误检率。样本集的质量,往往直接决定项目能否在产线稳定运行。

初学阶段最容易犯的错误是过早调算法参数。正确顺序是:先确认缺陷在图像中“看得见”,再确认定位“不漂移”,最后才调分割阈值。三步顺序颠倒,往往会在错误的基础上反复优化,浪费大量时间。