3. 视觉数据对象模型
在 VisionPro 中,工具之间并不是靠“图像像素”直接互相调用,而是通过一套统一的数据对象模型来交换信息。理解这套模型,是后续把视觉结果写入 PLC、数据库或 MES 的前提。本节围绕四类最常用的核心对象展开:CogImage(图像)、CogBlob(斑点/连通域结果)、CogFixture(定位坐标系)、CogFindLine(找线结果),并说明它们在工具链中如何被引用、传递和消费。
一、四类核心对象的角色定位
CogImage 是数据源头。它承载一幅或多幅图像及其元数据(宽高、像素格式、采集时间、标定信息等)。VisionPro 中图像可以是 8 位灰度、24 位彩色或 16 位深度图。所有基于像素的工具(CogBlob、CogFindLine、CogCNLSearch 等)都必须先拿到一个 CogImage 才能运行。图像对象本身不包含“结果”,它是被读取的输入。
CogBlob 是区域统计结果。它由 CogBlobTool 对图像做阈值分割后产生,输出的是若干“斑点”(Blob),每个斑点带有面积、质心、外接矩形、周长、方向角等几何与灰度统计量。CogBlob 的价值在于把“一片亮区”变成可判断、可排序、可筛选的结构化数据。
CogFixture 是坐标系。它不直接描述某个零件,而是定义一个“参考坐标系”——原点位置、X 轴方向、角度。后续工具的搜索区域、测量结果都可以挂在这个坐标系下,从而在零件发生平移或旋转时保持测量位置跟随零件。CogFixture 通常由 CogFindLine、CogCNLSearch 或 CogPMAlign 等定位工具的输出构造而来。
CogFindLine 是边缘拟合结果。它由 CogFindLineTool 在指定搜索带(CogRectangleAffine 定义的卡尺区域)内寻找灰度跃变点,再用最小二乘拟合出一条直线,输出直线的起点、终点、角度、拟合残差以及每个边缘点的位置与对比度。它既可用于测量,也可用于构造 Fixture。
二、结果数据结构:以 CogFindLine 为例
以 CogFindLineTool 为例,其 Results 结构大致包含:
Results
├─ Line // 拟合直线:起点(X,Y)、终点(X,Y)、角度
├─ EdgePoints[] // 每个卡尺找到的边缘点
│ ├─ Position // 边缘点坐标
│ ├─ Contrast // 边缘对比度
│ └─ Status // Found / NotFound
├─ CaliperCount // 卡尺数量
└─ RunStatus // 工具整体成功/失败
可以看到,结果不是单一数值,而是“主结果 + 明细数组 + 状态”的组合。这种结构让上层程序既能直接取用拟合直线,也能在失败时回溯是哪个卡尺没找到边缘。CogBlob 的结果结构类似:Blobs 数组 + 每个 Blob 的统计量 + 整体状态。
三、工具间的数据传递方式
VisionPro 工具链的数据传递有三种典型方式:
- 图像传递:上游工具(如 CogAcqFifoTool 或图像预处理工具)输出的 CogImage 直接作为下游工具的 InputImage。这是最基础的“像素级”传递。
- 坐标系传递:定位工具输出一个 CogFixture,下游工具把它的 Region(搜索区域)挂到该 Fixture 下。这样区域会随零件移动,而不是固定在图像坐标里。
- 结果引用:下游工具或脚本通过工具名访问上游工具的 Results,例如在 CogToolBlock 中用
FindLine1.Results.Line取直线,再传给 CogDistancePointLineTool 做距离计算。
关键点在于:Fixture 是“空间传递”,Results 是“数值传递”。前者改变下游工具在哪里找,后者改变下游工具用什么算。两者常常配合使用——先用 FindLine 构造 Fixture,再让 Blob 在 Fixture 坐标系下统计区域,最后把 Blob 的质心坐标转换回图像坐标输出给 PLC。
四、一个可复现的传递示例
假设要测量一个金属件上某条边的位置,并统计边附近一个矩形区域的面积。合理的工具链是:
- CogAcqFifoTool 采集图像,输出 CogImage。
- CogFindLineTool 接收该图像,在图像中部设置一条搜索带(例如 200×40 像素、角度 0°),找到零件上边缘,输出 Line 结果。
- 用该 Line 构造 CogFixture:以直线中点为原点,直线方向为 X 轴。
- CogBlobTool 接收同一图像,把它的 Region 挂到上述 Fixture 下,区域设为 Fixture 原点右侧 50~150 像素、上下 ±30 像素的矩形。
- 运行后读取 Blob 的质心坐标(在 Fixture 坐标系下),再通过 Fixture 的逆变换得到图像坐标,输出给 PLC。
这里的关键判断依据是:如果 FindLine 的 RunStatus 为失败,则 Fixture 无效,Blob 的 Region 会落在错误位置,此时应直接判 NG,而不是继续使用 Blob 结果。因此在实际工程中,通常会在工具链里加一个“前置状态检查”,只有上游定位成功才允许下游测量。
五、常见误区与排障要点
- 把 CogImage 当成结果:图像只是输入,判断 OK/NG 必须看工具 Results,不能靠“图像看起来正常”。
- Fixture 未更新:零件移动后 Fixture 仍指向旧位置,导致 Blob 区域偏移。检查 Fixture 是否每帧重新构造。
- 坐标系混用:Blob 质心默认在图像坐标系,若 Region 挂在 Fixture 下,输出前必须做坐标变换,否则数值对不上。
- 忽略 RunStatus:FindLine 可能只找到部分边缘点仍返回“成功”,需结合 Contrast 和残差判断拟合质量。
掌握这四类对象及其传递方式后,后续把视觉结果接入生产系统时,就能清楚地知道“哪个值来自哪个工具、在哪个坐标系下、什么时候有效”,从而避免数据错位和误判。