CogIPOneImageTool详解

文章目录

  • [1. 概述](#1. 概述)
    • [1.1 什么是CogIPOneImageTool?](#1.1 什么是CogIPOneImageTool?)
    • [1.2 工具定位](#1.2 工具定位)
    • [1.3 核心特性](#1.3 核心特性)
  • [2. 工具界面与操作流程](#2. 工具界面与操作流程)
    • [2.1 添加工具](#2.1 添加工具)
    • [2.2 连接输入图像](#2.2 连接输入图像)
    • [2.3 添加处理操作](#2.3 添加处理操作)
    • [2.4 操作链机制](#2.4 操作链机制)
  • [3. 图像处理操作详解](#3. 图像处理操作详解)
    • [3.1 加/减常量](#3.1 加/减常量)
      • [3.1.1 原理](#3.1.1 原理)
      • [3.1.2 灰度图像处理](#3.1.2 灰度图像处理)
      • [3.1.3 彩色图像处理](#3.1.3 彩色图像处理)
      • [3.1.4 溢出处理模式](#3.1.4 溢出处理模式)
      • [3.1.5 应用场景](#3.1.5 应用场景)
    • [3.2 卷积 3×3](#3.2 卷积 3×3)
      • [3.2.1 卷积原理](#3.2.1 卷积原理)
      • [3.2.2 常用卷积核](#3.2.2 常用卷积核)
    • [3.3 卷积 N×M](#3.3 卷积 N×M)
      • [3.3.1 参数说明](#3.3.1 参数说明)
      • [3.3.2 边界模式](#3.3.2 边界模式)
      • [3.3.3 应用场景](#3.3.3 应用场景)
    • [3.4 均衡](#3.4 均衡)
      • [3.4.1 原理](#3.4.1 原理)
      • [3.4.2 计算示例](#3.4.2 计算示例)
      • [3.4.3 应用场景](#3.4.3 应用场景)
    • [3.5 扩展](#3.5 扩展)
      • [3.5.1 参数](#3.5.1 参数)
      • [3.5.2 应用场景](#3.5.2 应用场景)
    • [3.6 翻转/旋转](#3.6 翻转/旋转)
      • [3.6.1 参数](#3.6.1 参数)
      • [3.6.2 应用场景](#3.6.2 应用场景)
    • [3.7 高斯采样器](#3.7 高斯采样器)
      • [3.7.1 原理](#3.7.1 原理)
      • [3.7.2 参数](#3.7.2 参数)
      • [3.7.3 应用场景](#3.7.3 应用场景)
    • [3.8 灰度形态调整](#3.8 灰度形态调整)
      • [3.8.1 基本原理](#3.8.1 基本原理)
      • [3.8.2 四种基本操作](#3.8.2 四种基本操作)
        • [3.8.2.1 腐蚀(Erosion)](#3.8.2.1 腐蚀(Erosion))
        • [3.8.2.2 膨胀(Dilation)](#3.8.2.2 膨胀(Dilation))
        • [3.8.2.3 开运算(Opening)= 先腐蚀后膨胀](#3.8.2.3 开运算(Opening)= 先腐蚀后膨胀)
        • [3.8.2.4 闭运算(Closing)= 先膨胀后腐蚀](#3.8.2.4 闭运算(Closing)= 先膨胀后腐蚀)
      • [3.8.3 实际效果展示](#3.8.3 实际效果展示)
      • [3.8.4 顶帽与黑帽变换](#3.8.4 顶帽与黑帽变换)
    • [3.9 灰度形态调整 N×M](#3.9 灰度形态调整 N×M)
    • [3.10 高通过滤器](#3.10 高通过滤器)
      • [3.10.1 原理](#3.10.1 原理)
      • [3.10.2 三种平滑方式对比](#3.10.2 三种平滑方式对比)
      • [3.10.3 均值滤波计算示例](#3.10.3 均值滤波计算示例)
      • [3.10.4 中值滤波计算示例](#3.10.4 中值滤波计算示例)
      • [3.10.5 高斯滤波计算示例](#3.10.5 高斯滤波计算示例)
      • [3.10.6 应用场景](#3.10.6 应用场景)
    • [3.11 3×3 中值](#3.11 3×3 中值)
      • [3.11.1 原理](#3.11.1 原理)
      • [3.11.2 重要注意事项](#3.11.2 重要注意事项)
    • [3.12 中值N×M](#3.12 中值N×M)
      • [3.12.1 Care/Don't Care掩蔽](#3.12.1 Care/Don't Care掩蔽)
    • [3.13 丢失像素](#3.13 丢失像素)
      • [3.13.1 原理](#3.13.1 原理)
      • [3.13.2 应用场景](#3.13.2 应用场景)
    • [3.14 乘以常数](#3.14 乘以常数)
    • [3.15 像素映射](#3.15 像素映射)
      • [3.15.1 原理](#3.15.1 原理)
      • [3.15.2 经典应用:图像反色](#3.15.2 经典应用:图像反色)
      • [3.15.3 彩色图像处理](#3.15.3 彩色图像处理)
    • [3.16 量化](#3.16 量化)
      • [3.16.1 原理](#3.16.1 原理)
      • [3.16.2 应用场景](#3.16.2 应用场景)
    • [3.17 采样卷积](#3.17 采样卷积)
      • [3.17.1 原理](#3.17.1 原理)
      • [3.17.2 应用场景](#3.17.2 应用场景)
    • [3.18 二次采样器](#3.18 二次采样器)
      • [3.18.1 两种算法](#3.18.1 两种算法)
        • [3.18.1.1 算法一:中心像素复制](#3.18.1.1 算法一:中心像素复制)
        • [3.18.1.1 算法二:空间平均](#3.18.1.1 算法二:空间平均)
      • [3.18.2 注意事项](#3.18.2 注意事项)
  • [4. C# 二次开发示例](# 二次开发示例)
    • [4.1 基本使用](#4.1 基本使用)
    • [4.2 添加卷积操作](#4.2 添加卷积操作)
    • [4.3 添加灰度形态学操作](#4.3 添加灰度形态学操作)
    • [4.4 添加中值滤波操作](#4.4 添加中值滤波操作)
    • [4.5 在ToolBlock中使用](#4.5 在ToolBlock中使用)
    • [4.6 遍历和修改操作](#4.6 遍历和修改操作)
  • [5. 实际应用案例](#5. 实际应用案例)
    • [5.1 案例一:表面缺陷检测预处理](#5.1 案例一:表面缺陷检测预处理)
    • [5.2 案例二:OCR文字识别预处理](#5.2 案例二:OCR文字识别预处理)
    • [5.3 案例三:尺寸测量前的图像增强](#5.3 案例三:尺寸测量前的图像增强)
    • [5.4 案例四:彩色图像的颜色分量调整](#5.4 案例四:彩色图像的颜色分量调整)
  • [6. 常见问题与注意事项](#6. 常见问题与注意事项)
    • [6.1 性能优化](#6.1 性能优化)
    • [6.2 常见错误](#6.2 常见错误)
    • [6.3 操作顺序建议](#6.3 操作顺序建议)
    • [6.4 与其他工具的配合](#6.4 与其他工具的配合)
  • [7. 参考资料](#7. 参考资料)
    • [7.1 在线资源](#7.1 在线资源)
    • [7.2 相关工具](#7.2 相关工具)

1. 概述

1.1 什么是CogIPOneImageTool?

  CogIPOneImageTool (Image Processing One Image Tool)是Cognex VisionPro视觉软件中的核心图像预处理工具 。它对单张图像执行各种基本图像处理操作,包括:

  • 卷积运算(Convolution)
  • 滤波处理(Filtering)
  • 形态学调整(Morphological Operations)
  • 直方图均衡化(Histogram Equalization)
  • 图像缩放与旋转(Scaling & Rotation)
  • 像素映射与量化 (Pixel Mapping & Quantization)

1.2 工具定位

1.3 核心特性

特性 说明
输入 单张灰度图像或 24PlanarColor 彩色图像
输出 处理后的图像(OutputImage)
操作链 支持串联多个操作,输出为所有操作的叠加效果
坐标空间 输出图像的空间坐标树经过调整,保留根空间与图像功能之间的关系
命名空间 Cognex.VisionPro.ImageProcessing

2. 工具界面与操作流程

2.1 添加工具

  1. 打开VisionPro QuickBuild或应用程序
  2. 在工具栏中找到 Image Processing 分类
  3. 双击或拖拽 CogIPOneImageTool 到工具面板

2.2 连接输入图像

  • 右键点击工具 → 选择"链接到"→ 选择上游工具的输出图像
  • 或通过连线拖拽方式连接到其他工具的输出图像

2.3 添加处理操作

  点击 "新增"(Add) 按钮,从以下操作列表中选择需要的图像处理算法:

2.4 操作链机制

   重要 :添加多种处理工具时,输出图像为所有工具的叠加效果(按顺序依次执行)。

bash 复制代码
输入图像 ──▶ [操作1: 加常量] ──▶ [操作2: 高斯平滑] ──▶ [操作3: 中值滤波] ──▶ 输出图像

3. 图像处理操作详解

3.1 加/减常量

  功能:为图像中每个像素的灰度值加上或减去一个常量,生成更亮或更暗的图像。

3.1.1 原理

  为图像中每个像素的灰度值加上或减去一个常量,生成更亮或更暗的图像。

bash 复制代码
新像素值 = 原像素值 + 常量值

3.1.2 灰度图像处理

  对于灰度图像,直接对每个像素的灰度值进行加减操作。

bash 复制代码
┌─────────────────────────────────────────────────┐
│          加/减常量处理示意                    │
│                                             │
│  原始图像          常量: +50         结果图像  │
│  ┌───────┐                     ┌───────┐      │
│  │100 120│                    │150 170│      │
│  │ 80  90│    ──────────▶      │130 140│      │
│  │110  70│                    │160 120│      │
│  └───────┘                     └───────┘      │
│                                             │
│  原始图像          常量: -30         结果图像  │
│  ┌───────┐                     ┌───────┐     │
│  │100 120│                    │ 70  90│     │
│  │ 80  90│    ──────────▶      │ 50  60│     │
│  │110  70│                    │ 80  40│     │
│  └───────┘                     └───────┘     │
└─────────────────────────────────────────────────┘

3.1.3 彩色图像处理

  对于 CogImage24PlanarColor 类型的输入图像,可对每个平面单独操作:

平面 颜色分量 说明
Plane 0 红色 (Red) 红色通道
Plane 1 绿色 (Green) 绿色通道
Plane 2 蓝色 (Blue) 蓝色通道

  下图显示了一个示例,其中红色分量已减少了一个高常数值。

3.1.4 溢出处理模式

  当像素值超出0-255 范围时,有两种处理模式:

模式 英文 处理方式 示例
封装(Wrap) Wrap 超出255则减去 256,低于 0 则加上 256 30 + 240 = 270 → 270 - 256 = 14
箝位(Clamp) Clamp 限制在0-255 范围内 30 + 240 = 270 → 255
bash 复制代码
封装(Wrap)模式:
  灰度值 30 + 240 = 270 → 270 - 256 = 14
  灰度值 30 + (-240) = -210 → -210 + 256 = 46

箝位(Clamp)模式:
  灰度值 30 + 240 = 270 → 255 (上限)
  灰度值 200 + (-250) = -50 → 0 (下限)

3.1.5 应用场景

  • 调整图像整体亮度
  • 补偿照明不均匀
  • 增强或降低特定区域的对比度

3.2 卷积 3×3

  功能:使用 3×3 卷积核对图像进行卷积运算,实现边缘锐化、边缘检测、降噪/平滑等效果。

3.2.1 卷积原理

  卷积运算基于相邻像素值修改像素值。VisionPro 将输入图像中的每个像素与一个称为核(Kernel)的数值矩阵相乘,然后替换输出图像中的相应像素。

bash 复制代码
卷积运算过程:

输入图像片段          卷积核 (3×3)           输出值
┌─────┬─────┬─────┐   ┌────┬────┬────┐
│ I₁₁ │ I₁₂ │ I₁₃│   │ K₁₁│ K₁₂│ K₁₃│
├─────┼─────┼─────┤ × ├────┼────┼────┤ = Σ(Iᵢⱼ × Kᵢⱼ)
│ I₂₁ │ I₂₂ │ I₂₃│   │ K₂₁│ K₂₂│ K₂₃│
├─────┼─────┼─────┤   ├────┼────┼────┤
│ I₃₁ │ I₃₂ │ I₃₃│   │ K₃₁│ K₃₂│ K₃₃│
└─────┴─────┴─────┘   └────┴────┴────┘

具体示例:
输入片段:              卷积核:                计算:
┌────┬────┬────┐      ┌───┬───┬───┐
│ 12 │ 15 │ 26│      │ 0 │-1 │ 0│   12×0 + 15×(-1) + 26×0
├────┼────┼────┤  ×   ├───┼───┼───┤ + 17×(-1) + 14×4 + 12×(-1)
│ 17 │ 14 │ 12│      │-1 │ 4 │-1│ + 23×0 + 12×(-1) + 31×0
├────┼────┼────┤      ├───┼───┼───┤
│ 23 │ 12 │ 31│      │ 0 │-1 │ 0│ = 0 + (-15) + 0 + (-17) + 56
└────┴────┴────┘      └───┴───┴───┘   + (-12) + 0 + (-12) + 0
                                        = -10 → 箝位到 0

3.2.2 常用卷积核

效果 卷积核 说明
边缘锐化 [0,-1,0; -1,5,-1; 0,-1,0] 增强图像边缘细节
边缘检测 [-1,-1,-1; -1,8,-1; -1,-1,-1] 提取图像边缘
浮雕效果 [-2,-1,0; -1,1,1; 0,1,2] 产生浮雕视觉效果
降噪/平滑 [1/9,1/9,1/9; 1/9,1/9,1/9; 1/9,1/9,1/9] 均值模糊

   推荐网站访问网站 可交互式查看不同卷积核的效果。

3.3 卷积 N×M

  功能:与卷积 3×3 类似,但支持自定义卷积核大小(N×M),与卷积 3×3 类似,但支持自定义卷积核大小(N×M)。内核高度和宽度只能是 1, 3, 5, 7... 等奇数。。

3.3.1 参数说明

参数 说明 约束
内核高度 卷积核的行数 必须为奇数:1, 3, 5, 7...
内核宽度 卷积核的列数 必须为奇数:1, 3, 5, 7...
内核值 卷积核各元素的值 浮点数

3.3.2 边界模式

模式 说明
Caliper 删除边缘未处理的像素(输出图像尺寸缩小)
Reflected 自动取周围相近像素进行填充(输出图像尺寸不变)
bash 复制代码
边界处理对比:

3.3.3 应用场景

  • 使用 5×5 或 7×7 卷积核进行更强的平滑处理
  • 自定义卷积核实现特定的滤波效果
  • 大核卷积用于处理高分辨率图像

3.4 均衡

  功能:直方图均衡化(Histogram Equalization),增强图像整体对比度。

3.4.1 原理

  将原始图像的直方图变换为均匀分布形式,扩展像素值的动态范围。

3.4.2 计算示例

  假设存在一个 3×3 的图像:

bash 复制代码
原始像素:
┌────┬────┬────┐
│  1 │  2 │  3│
├────┼────┼────┤
│  1 │  4 │  5│
├────┼────┼────┤
│  1 │  3 │  5│
└────┴────┴────┘

灰度级统计:
x = [1, 2, 3, 4, 5]   像素点的灰度级
y = [3, 1, 2, 1, 2]   具有该灰度级的像素个数

累计分布函数(CDF):
灰度1: 3/9 = 0.333
灰度2: 4/9 = 0.444
灰度3: 6/9 = 0.667
灰度4: 7/9 = 0.778
灰度5: 9/9 = 1.000

均衡化映射 (×255):
灰度1 → 0.333 × 255 ≈ 85
灰度2 → 0.444 × 255 ≈ 113
灰度3 → 0.667 × 255 ≈ 170
灰度4 → 0.778 × 255 ≈ 198
灰度5 → 1.000 × 255 = 255

3.4.3 应用场景

  • 生产环境中照明在相邻图像间可能产生细微变化
  • 检查对象的某些方面(如颜色)允许存在细微差异
  • 确保不相关变化不影响视觉应用的整体结果

3.5 扩展

  功能:以指定的放大系数放大整个图像或其中某个部分。

3.5.1 参数

参数 说明
X 轴放大系数 沿水平方向的放大倍数
Y 轴放大系数 沿垂直方向的放大倍数

3.5.2 应用场景

  • 放大图像以提高检测精度
  • 仅在单一方向放大以适应特定的检测需求
  • 配合其他工具进行亚像素级分析

3.6 翻转/旋转

  功能:对整个或局部输入图像执行水平翻转或顺时针旋转。

3.6.1 参数

参数 选项
翻转 水平翻转(沿垂直轴镜像)
旋转角度 0°、90°、180°、270°(顺时针)

  注意:翻转沿水平方向进行,并在顺时针旋转之前应用。

3.6.2 应用场景

  • 使视觉工具在每次执行时分析正确的特征
  • 统一不同安装方向相机的图像方向

3.7 高斯采样器

  1.当视觉工具在缩小的图像上同样有效地工作并且想要提高应用程序的速度时,可使用采样操作。

  2.使用平滑操作可减轻图像中纹理,信号噪声等带来的影响。

  3.可调整幅度偏移因子,范围为-7至7。使用负值作为移位因子可产生较暗的输出 图像,而使用正值可产生较亮的输出图像。

  功能:对输入图像进行二次采样,同时通过高斯平滑减少高频变化引起的对比度。

3.7.1 原理

  1. 先对输入图像进行二次采样(减少像素数量)
  2. 通过高斯平滑减少亮暗像素频繁变化引起的对比度
  3. 可选的幅度偏移系数调整输出亮度

3.7.2 参数

参数 范围 说明
采样因子 2, 4, 8... 采样倍率
幅度偏移系数 -7 至 7 负值→更暗,正值→更亮

3.7.3 应用场景

  • 视觉工具在缩小的图像上同样有效工作时,提高处理速度
  • 减轻图像中纹理、信号噪声等不利因素的影响
  • 图像预处理阶段的降噪

3.8 灰度形态调整

  功能:对输入图像执行灰度形态学处理,根据大小和方向选择性地增强或减弱图像特征。

3.8.1 基本原理

  形态算子使用结构元素(通常为 3×3)检查每个像素及其八个相邻像素的灰度值。

3.8.2 四种基本操作

3.8.2.1 腐蚀(Erosion)

  取结构元素覆盖区域的最小值

  效果 :降低图像的亮点,消除噪点像素或小缺陷

3.8.2.2 膨胀(Dilation)

  取结构元素覆盖区域的最大值

  效果:扩散可增强图像的亮功能,而抑制较暗的功能。

3.8.2.3 开运算(Opening)= 先腐蚀后膨胀

   首先对输入图像进行腐蚀,然后对结果进行膨胀,以生成输出图像。打开图像会删除少量明亮像素,然后增强其余的明亮功能。

   效果 :删除少量明亮像素,保留大特征

3.8.2.4 闭运算(Closing)= 先膨胀后腐蚀

  关闭操作首先对输入图像执行膨胀,然后对结果进行腐蚀以生成输出图像。关闭图像可减少或完全消除图像的暗区

  效果 :减少或完全消除图像的暗区

  打开和关闭操作符都倾向于保留大特征的尺寸和形状,同时影响小特征的尺寸和形状。

3.8.3 实际效果展示

3.8.4 顶帽与黑帽变换

变换 公式 效果
顶帽(Top Hat) 原图 - 开运算 提取图像中的亮噪声/小亮点
黑帽(Black Hat) 闭运算 - 原图 提取图像内部的小孔/小黑点

3.9 灰度形态调整 N×M

  功能:与灰度形态调整相同,但支持自定义结构元素大小(NxM)。

3.9.1参数

参数 说明
内核高度 (N) 结构元素的行数
内核宽度 (M) 结构元素的列数
操作类型 腐蚀、膨胀、开运算、闭运算

  注意:内核越大,效果越强,但处理速度越慢。

3.10 高通过滤器

  功能:保留图像中频率较高的部分(即突出边缘),去除低频信息。

3.10.1 原理

  所谓高通滤波就是保留图像中频率比较高的部分,即突出边缘;可以执行高斯、均值或中值平滑操作,然后从输入图像中减去结果图像。

3.10.2 三种平滑方式对比

3.10.3 均值滤波计算示例

bash 复制代码
输入片段 (3×3):           均值滤波核:
┌────┬────┬────┐         ┌─────┬─────┬─────┐
│ 12 │ 15 │ 26 │         │1/9  │1/9  │1/9  │
├────┼────┼────┤    ×    ├─────┼─────┼─────┤
│ 17 │ 14 │ 12 │         │1/9  │1/9  │1/9  │
├────┼────┼────┤         ├─────┼─────┼─────┤
│ 23 │ 12 │ 31 │         │1/9  │1/9  │1/9  │
└────┴────┴────┘         └─────┴─────┴─────┘

计算: (12+15+26+17+14+12+23+12+31) / 9 = 162 / 9 = 18

3.10.4 中值滤波计算示例

bash 复制代码
输入片段 (3×3):
┌────┬────┬────┐
│ 12 │ 15 │ 26 │
├────┼────┼────┤  排序: [12, 12, 12, 14, 15, 17, 23, 26, 31]
│ 17 │ 14 │ 12 │  中值 = 第5个 = 15
├────┼────┼────┤
│ 23 │ 12 │ 31 │
└────┴────┴────┘

3.10.5 高斯滤波计算示例

bash 复制代码
输入片段:                  高斯核 (σ=1):
┌─────┬─────┬─────┐      ┌──────┬──────┬──────┐
│  40 │ 107 │   5 │      │0.05  │0.10  │0.05  │
├─────┼─────┼─────┤  ×   ├──────┼──────┼──────┤
│ 198 │ 226 │ 223 │      │0.10  │0.40  │0.10  │
├─────┼─────┼─────┤      ├──────┼──────┼──────┤
│  37 │  68 │ 193 │      │0.05  │0.10  │0.05  │
└─────┴─────┴─────┘      └──────┴──────┴──────┘

计算:
40×0.05 + 107×0.1 + 5×0.05 +
198×0.1 + 226×0.4 + 223×0.1 +
37×0.05 + 68×0.1 + 193×0.05
= 2 + 10.7 + 0.25 + 19.8 + 90.4 + 22.3 + 1.85 + 6.8 + 9.65
= 163.75 ≈ 164

3.10.6 应用场景

  • 突出图像中的精细特征
  • 边缘检测的预处理
  • 去除低频背景干扰

3.11 3×3 中值

  功能:使用 3×3 矩阵对每个像素进行中值滤波,消除图像噪声。

3.11.1 原理

  检查每个原始像素周围的3×3 像素矩阵,按灰度值排序,取中间值(第5个)。

bash 复制代码
中值滤波过程:

输入矩阵:               排序后:                  输出值:
┌────┬────┬────┐
│ 45 │ 50 │ 48 │       [40, 42, 45, 47, 48, 50, 52, 55, 60]
├────┼────┼────┤        中值 = 48
│ 42 │ 47 │ 55 │
├────┼────┼────┤
│ 40 │ 52 │ 60 │
└────┴────┴────┘

3.11.2 重要注意事项

  ⚠️ 此操作会将输入图像的大小减少 2 行 2列(即减少边界周围 1 像素宽的条纹)。

  如果对同一图像多次执行 3×3 Median 操作,减少效果会成倍增加

  例如:执行 5 次 → 输出图像比原始图像小 10 行 10 列

3.12 中值N×M

  功能:使用自定义内核大小的中值滤波。

3.12.1 Care/Don't Care掩蔽

  N×M 中值滤波支持 CareDon't Care 像素掩蔽内核:

掩蔽类型 说明
Care 参与中值计算的像素
Don't Care 不参与中值计算的像素


Care掩膜


Don't Care掩膜

bash 复制代码
Care/Don't Care 掩蔽示例:

Care掩蔽:                Don't Care掩蔽:
┌────┬────┬────┐        ┌────┬────┬────┐
│ ✓  │ ✓  │ ✓ │        │ ✓  │ ✗  │ ✓│
├────┼────┼────┤        ├────┼────┼────┤
│ ✓  │ ✓  │ ✓ │        │ ✗  │ ✓  │ ✗ │
├────┼────┼────┤        ├────┼────┼────┤
│ ✓  │ ✓  │ ✓ │        │ ✓  │ ✗  │ ✓ │
└────┴────┴────┘        └────┴────┴────┘
所有像素参与计算          仅标记✓的像素参与计算

  注意:内核越大,降噪效果越好,但会降低图像特征的质量。

3.13 丢失像素

  功能 :处理深度图像中被标记为缺失的像素。

   CogIPOneImageMissingPixel 运算符接受深度图像,并将标记为缺失的像素替换为基于周围像素分析的像素值。

3.13.1 原理

  接受深度图像,将标记为缺失的像素替换为基于周围像素分析的像素值。

bash 复制代码
丢失像素处理:

输入深度图:                分析周围像素:              输出深度图:
┌────┬────┬────┐        ┌────┬────┬────┐        ┌────┬────┬────┐
│ 10 │ 12 │ 11 │        │ 10 │ 12 │ 11 │        │ 10 │ 12 │ 11 │
├────┼────┼────┤        ├────┼────┼────┤        ├────┼────┼────┤
│ 13 │ ?? │ 15 │   →    │ 13 │ ←→ │ 15 │   →    │ 13 │ 14 │ 15 │
├────┼────┼────┤        ├────┼────┼────┤        ├────┼────┼────┤
│ 12 │ 14 │ 13 │        │ 12 │ 14 │ 13 │        │ 12 │ 14 │ 13 │
└────┴────┴────┘        └────┴────┴────┘        └────┴────┴────┘
                         ?? = 缺失像素              用周围像素推算

3.13.2 应用场景

  • 处理 DS1000 系列传感器获取的深度图像(range image)
  • 修复因传感器特性导致的像素缺失。

3.14 乘以常数

  功能:将灰度图像中每个像素的灰度值乘以一个常数值(图像缩放)。

3.14.1原理

bash 复制代码
新像素值 = 原像素值 × 常数

3.1.4.2 效果

常数 效果
> 1 增强图像亮度
< 1 降低图像亮度
= 1 无变化
bash 复制代码
乘以常数效果:

原图              常数 = 2            常数 = 0.5
┌──────┐        ┌──────┐           ┌──────┐
│100 80│        │200160│           │ 50 40│
│ 60 90│   →    │120180│     →     │ 30 45│
│120 70│        │240140│           │ 60 35│
└──────┘        └──────┘           └──────┘

溢出处理 (常数=2, 像素值200):
- Wrap模式: 200×2 = 400 → 400-255 = 145
- Clamp模式: 200×2 = 400 → 255

3.14.3彩色图像处理

  对于24PlanarColor 图像,可对每个颜色平面(Plane 0/1/2)单独设置乘数。

  下图显示了一个红色分量乘以高值的示例。您还必须选择是否允许该操作结束后将结果像素值降到0以下或超过255,或将其限制在这些限制内。

  例如,如果允许这些值进行换行,则灰度值为200乘以2的像素的新值将为145(2 * 200-255)。如果选择钳制这些值,则相同像素在操作后不会超过值255。

3.15 像素映射

  功能:将输入图像的像素按照预定义的映射表替换为新的像素值。

3.15.1 原理

  对于灰度输入图像,每个像素被替换为像素映射表中索引等于该像素值的值。

bash 复制代码
像素映射过程:

映射表 (256个元素):
索引:  [0,  1,  2,  ..., 73, ..., 255]
值:    [255,254,253,..., 182,...,   0]

输入像素值 = 73 → 查表 → 索引73的值 = 182 → 输出像素值 = 182

3.15.2 经典应用:图像反色

bash 复制代码
反色映射表:
索引: [0,   1,   2,   ..., 127, ..., 255]
值:   [255, 254, 253, ..., 128, ...,   0]

公式: 新值 = 255 - 原值

原图:                    反色后:
┌──────┐                ┌──────┐
│  0   │ (黑色)         │ 255  │ (白色)
│ 128  │ (灰色)    →    │ 127  │ (灰色)
│ 255  │ (白色)         │  0   │ (黑色)
└──────┘                └──────┘

3.15.3 彩色图像处理

  对于 CogImage24PlanarColor 类型的图像,可为 Plane 0(红)、Plane 1(绿)和 Plane 2(蓝)指定单独的像素映射。

3.16 量化

  功能:减少输入图像中离散灰度值的数量。

3.16.1 原理

  将连续的灰度值范围划分为有限数量的离散级别。

3.16.2 应用场景

  • 分离灰度值相似的单个特征
  • 将所需特征减少至单一灰度值
  • 使特征更易于通过其他视觉工具进行分析

3.17 采样卷积

  功能:同时执行卷积和采样,常见用途是使用高斯平滑进行降采样(downsampling)

3.17.1 原理

  常见用途是使用高斯平滑进行缩减采样(downsampling)。

bash 复制代码
采样卷积流程:

原始图像 ──▶ 高斯卷积 ──▶ 采样 ──▶ 输出图像
(高分辨率)   (平滑处理)   (降采样)   (低分辨率)

3.17.2 应用场景

  • 图像金字塔的构建
  • 多尺度图像分析
  • 在保持平滑效果的同时降低分辨率

3.18 二次采样器

  功能:生成分辨率和尺寸减小的输出图像。

3.18.1 两种算法

3.18.1.1 算法一:中心像素复制

  将输入图像划分为像素块,将块中心的像素复制到输出图像。

3.18.1.1 算法二:空间平均

   将输入图像划分为像素块,计算每个块中像素的平均灰度值。

3.18.2 注意事项

  如果指定的二次采样率为偶数且不使用空间平均算法,工具将选择采样区域中心左侧和上侧的像素,产生 0.5 像素的偏移。工具会自动调整输出图像的坐标空间。

4. C# 二次开发示例

4.1 基本使用

csharp 复制代码
using Cognex.VisionPro;
using Cognex.VisionPro.ImageProcessing;

// 创建 CogIPOneImageTool 实例
CogIPOneImageTool ipTool = new CogIPOneImageTool();

// 设置输入图像 (从相机或其他工具获取)
ipTool.InputImage = cogAcqFifoTool.OutputImage;

// 添加加/减常量操作
CogIPOneImageAddSubtractConstant addConst =
    new CogIPOneImageAddSubtractConstant();
addConst.Constant = 50;  // 增加50的亮度
addConst.PlaneIndex = 0; // 操作平面0
ipTool.Operations.Add(addConst);

// 运行工具
ipTool.Run();

// 获取输出图像
ICogImage outputImage = ipTool.OutputImage;

4.2 添加卷积操作

csharp 复制代码
// 添加 3×3 卷积操作(边缘锐化)
CogIPOneImageConvolve3x3 conv3x3 =
    new CogIPOneImageConvolve3x3();

// 设置卷积核 (边缘锐化)
// [ 0, -1,  0]
// [-1,  5, -1]
// [ 0, -1,  0]
conv3x3.Kernel = new double[,] {
    { 0, -1,  0 },
    {-1,  5, -1 },
    { 0, -1,  0 }
};

ipTool.Operations.Add(conv3x3);

4.3 添加灰度形态学操作

csharp 复制代码
// 添加灰度形态学操作(腐蚀)
CogIPOneImageGreyMorphology greyMorph =
    new CogIPOneImageGreyMorphology();
greyMorph.Operation =
    CogIPOneImageGreyMorphologyOperationConstants.Erode;

ipTool.Operations.Add(greyMorph);

4.4 添加中值滤波操作

csharp 复制代码
// 添加 N×M 中值滤波
CogIPOneImageNxMMedian medianNxM =
    new CogIPOneImageNxMMedian();
medianNxM.KernelHeight = 5;
medianNxM.KernelWidth = 5;

ipTool.Operations.Add(medianNxM);

4.5 在ToolBlock中使用

csharp 复制代码
// 在 ToolBlock 中配置 CogIPOneImageTool
CogToolBlock toolBlock = new CogToolBlock();
CogIPOneImageTool ipTool = new CogIPOneImageTool();

// 添加到 ToolBlock
toolBlock.Tools.Add(ipTool);

// 设置输入
toolBlock.Inputs.Add("InputImage",
    CogToolConstants.CogImageTool);
ipTool.InputImage =
    (ICogImage)toolBlock.Inputs["InputImage"].Value;

// 运行 ToolBlock
toolBlock.Run();

// 获取结果
ICogImage resultImage = ipTool.OutputImage;

4.6 遍历和修改操作

csharp 复制代码
// 遍历所有操作
foreach (CogIPOneImageOperation op in ipTool.Operations)
{
    Console.WriteLine($"操作类型: {op.GetType().Name}");

    // 检查是否为加减常量操作
    if (op is CogIPOneImageAddSubtractConstant addSub)
    {
        Console.WriteLine($"  常量值: {addSub.Constant}");
        Console.WriteLine($"  平面索引: {addSub.PlaneIndex}");
    }
}

// 移除第一个操作
if (ipTool.Operations.Count > 0)
{
    ipTool.Operations.RemoveAt(0);
}

// 清空所有操作
ipTool.Operations.Clear();

5. 实际应用案例

5.1 案例一:表面缺陷检测预处理

  场景 :检测金属表面的划痕和凹坑

bash 复制代码
具体步骤:
1. 高斯采样器 (σ=2): 去除表面纹理噪声
2. 高通过滤器: 突出划痕边缘
3. 灰度形态调整 (开运算): 去除小的亮噪声点
4. 输出: 清晰的缺陷边缘图像
csharp 复制代码
// 表面缺陷检测预处理
CogIPOneImageTool ipTool = new CogIPOneImageTool();
ipTool.InputImage = capturedImage;

// 步骤1: 高斯平滑去噪
CogIPOneImageGaussSampler gauss =
    new CogIPOneImageGaussSampler();
gauss.ScaleFactor = 2;
ipTool.Operations.Add(gauss);

// 步骤2: 高通滤波突出边缘
CogIPOneImageHighPassFilter highPass =
    new CogIPOneImageHighPassFilter();
highPass.FilterType =
    CogIPOneImageHighPassFilterTypeConstants.Gaussian;
highPass.GaussianSigmaX = 3.0;
highPass.GaussianSigmaY = 3.0;
ipTool.Operations.Add(highPass);

// 步骤3: 开运算去噪
CogIPOneImageGreyMorphology openOp =
    new CogIPOneImageGreyMorphology();
openOp.Operation =
    CogIPOneImageGreyMorphologyOperationConstants.Open;
ipTool.Operations.Add(openOp);

ipTool.Run();

5.2 案例二:OCR文字识别预处理

  场景 :增强产品标签上的文字对比度

bash 复制代码
具体步骤:
1. 均衡: 增强整体对比度,补偿照明不均
2. 卷积 3×3 (锐化核): 增强文字边缘
3. 量化 (级数=2): 二值化,使文字更清晰
csharp 复制代码
// OCR 预处理
CogIPOneImageTool ipTool = new CogIPOneImageTool();
ipTool.InputImage = labelImage;

// 步骤1: 直方图均衡化
CogIPOneImageEqualize equalize =
    new CogIPOneImageEqualize();
ipTool.Operations.Add(equalize);

// 步骤2: 边缘锐化
CogIPOneImageConvolve3x3 sharpen =
    new CogIPOneImageConvolve3x3();
sharpen.KernelValues[0, 0] = 0;
sharpen.KernelValues[0, 1] = -1;
sharpen.KernelValues[0, 2] = 0;
sharpen.KernelValues[1, 0] = -1;
sharpen.KernelValues[1, 1] = 5;
sharpen.KernelValues[1, 2] = -1;
sharpen.KernelValues[2, 0] = 0;
sharpen.KernelValues[2, 1] = -1;
sharpen.KernelValues[2, 2] = 0;
ipTool.Operations.Add(sharpen);

// 步骤3: 二值化
CogIPOneImageQuantize quantize =
    new CogIPOneImageQuantize();
quantize.NumLevels = 2;
ipTool.Operations.Add(quantize);

ipTool.Run();

5.3 案例三:尺寸测量前的图像增强

  场景 :提高机械零件边缘的清晰度以提高测量精度

bash 复制代码
具体步骤:
1. 中值 N×M (5×5): 去除椒盐噪声
2. 高通过滤器: 突出边缘
3. 灰度形态调整 (膨胀-腐蚀): 提取精确边缘

5.4 案例四:彩色图像的颜色分量调整

  场景:增强彩色图像中特定颜色的对比度

csharp 复制代码
// 增强红色分量
CogIPOneImageTool ipTool = new CogIPOneImageTool();
ipTool.InputImage = colorImage;

// 增加红色分量亮度
CogIPOneImageAddSubtractConstant addRed =
    new CogIPOneImageAddSubtractConstant();
addRed.Constant = 30;
addRed.PlaneIndex = 0;  // Plane 0 = 红色
ipTool.Operations.Add(addRed);

// 减少蓝色分量
CogIPOneImageAddSubtractConstant subBlue =
    new CogIPOneImageAddSubtractConstant();
subBlue.Constant = -20;
subBlue.PlaneIndex = 2;  // Plane 2 = 蓝色
ipTool.Operations.Add(subBlue);

ipTool.Run();

6. 常见问题与注意事项

6.1 性能优化

优化策略 说明
减少操作数量 合并多个操作,避免不必要的处理步骤
使用区域限制 仅对感兴趣区域应用处理操作
选择合适的内核大小 内核越大处理越慢,根据需求选择
使用二次采样 在精度允许的情况下降低分辨率

6.2 常见错误

错误 原因 解决方案
输出图像为空 未连接输入图像 检查输入图像链接
图像尺寸异常 多次 3×3 中值操作 使用 N×M 中值或减少操作次数
处理效果不明显 参数设置不当 调整内核大小或操作参数
溢出处理错误 Wrap/Clamp 模式选择不当 根据需求选择合适的溢出处理模式

6.3 操作顺序建议

bash 复制代码
推荐的处理顺序:

1. 噪声去除 (中值/高斯平滑)
       ↓
2. 对比度增强 (均衡/加减常量)
       ↓
3. 边缘增强 (高通滤波/卷积锐化)
       ↓
4. 形态学处理 (腐蚀/膨胀/开/闭)
       ↓
5. 量化/二值化
       ↓
6. 输出到检测工具

6.4 与其他工具的配合

配合工具 配合方式
CogBlobTool 预处理后进行斑点检测
CogPMAlignTool 增强图像后进行模板匹配
CogCaliperTool 边缘增强后进行卡尺测量
CogOCRMaxTool 对比度增强后进行文字识别
CogColorSegmenterTool 颜色分量调整后进行颜色分割

7. 参考资料

7.1 在线资源

7.2 相关工具

相关推荐
爱凤的小光8 天前
VisionPro_几何查找与拟合工具详解
visionpro
爱凤的小光12 天前
VisionPro之CogSerializer序列化与持久化工具
visionpro
不会编程的懒洋洋15 天前
VisionPro 中 几何相交工具 Geometry-Intersection
图像处理·笔记·c#·视觉检测·机器视觉·visionpro
不会编程的懒洋洋15 天前
VisionPro 中 图像预处理工具
图像处理·笔记·c#·视觉检测·visionpro
爱凤的小光19 天前
VisionPro之校准与定位工具
visionpro
爱凤的小光21 天前
VisionPro通用工具---个人学习篇
visionpro
爱凤的小光22 天前
VisionPro之工具窗体设置控件一
visionpro
不会编程的懒洋洋23 天前
VisionPro 中 卡尺 CogCaliperTool
图像处理·人工智能·笔记·计算机视觉·visionpro·cogcalipertool
不会编程的懒洋洋23 天前
VisionPro 中 直方图 CogHistogramTool
图像处理·人工智能·笔记·计算机视觉·机器视觉·visionpro·康耐视