HALCON软件——数据结构

一、数据类型总览

HALCON 变量分为两大类,所有视觉运算都围绕这两类数据展开:

  1. Iconic(图标对象):存储图像、区域、轮廓等视觉实体,是图像处理的核心对象
    • Image(图像)
    • Region(区域)
    • XLD(亚像素轮廓,Extended Line Description)
  2. Control(控制变量):存储数值、字符串、句柄等参数,用于逻辑控制与参数传递
    • String(字符串)
    • Integer(整型)
    • Real(实型 / 浮点型)
    • Handle(句柄,如窗口、采集设备、模板等)
  3. Tuple(元组):控制变量的数组形式,可存储多个同类型 / 不同类型的控制数据

在 HDevelop 变量窗口中,图标变量和控制变量分开展示,鼠标悬停在变量上可查看详细属性。


二、Image(图像)

图像是像素的矩阵集合,是视觉处理的输入源,核心属性包括像素类型、通道数、宽高尺寸。

1. 图像变量查看

鼠标移动到变量窗口的图像变量上,可直接查看:

  • 类型:如 byte(8 位无符号,取值 0-255)
  • 通道数:单通道 / 3 通道 / 多通道
  • 尺寸:(宽度,高度),单位为像素

2. 按通道数分类

通道数 类型说明 典型场景
1 通道 灰度图,每个像素只有 1 个灰度值 常规工业检测、灰度分析
3 通道 RGB 彩色图,或 HSV 等其他彩色空间图像 彩色物料分拣、颜色识别
多通道 超过 3 个通道的图像 遥感影像、多光谱成像、纹理特征分析

3. 通道操作相关算子

(1)基础查询
  • count_channels(Image, Num):统计图像的通道总数
(2)通道提取与分解
  • access_channel (Image, channel1, Index):提取多通道图中指定序号的单通道
  • decompose3(Image, RedImage, GreenImage, BlueImage):将 3 通道 RGB 图分解为 R、G、B 三个单通道灰度图
(3)通道合并与追加
  • compose2(RedImage, GreenImage, MultiChannelImage):将 2 张单通道图合并为 2 通道图像
  • append_channel (MultiChannelImage, BlueImage, ImageExtended):向已有多通道图追加新的通道

4. 示例

复制代码
*读取图像
read_image (Image, 'ship.png')
*计算图像通道
count_channels(Image, Num)
*循环读取每个通道的图像
for I:= 1 to Num by 1
    access_channel (Image, channel1, I)
    *图像处理
endfor
*分解通道
decompose3(Image, RedImage, GreenImage, BlueImage)
*合并通道
compose2(RedImage, GreenImage, MultiChannelImage)
*向图像附加通道
append_channel (MultiChannelImage, BlueImage, ImageExtended)

三、Region(区域)

1. 基本概念

Region 是图像中满足特定条件的像素集合(二值区域),只有 "前景 / 背景" 之分,不包含灰度信息,是目标分割、缺陷检测的核心载体。

2. 区域特征查看

点击工具栏「特征检测」工具,选择 region 分类,可可视化查看区域的全部属性:

  • 基础特征:面积、中心坐标、宽高
  • 形状特征:圆度、矩形度、紧密度
  • 矩特征:二阶矩、方向等
  • 灰度特征:对应原图像的灰度均值、方差等

3. 图像转区域的两种方法

方法 1:代码阈值分割(最常用)

使用 threshold 算子,按灰度范围提取区域:

复制代码
threshold(Image : Region : MinGray, MaxGray : )
  • 输入:原始灰度图
  • 输出:灰度值在 [MinGray, MaxGray] 范围内的像素组成的区域
方法 2:可视化灰度直方图工具
  1. 点击工具栏「灰度直方图」图标
  2. 开启「使能输出」按钮
  3. 拖动红绿两条竖线调整灰度上下限
  4. 点击「插入代码」,自动生成 threshold 算子代码

4. 示例

复制代码
* 关闭已有窗口
dev_close_window ()
* 读取示例图像
read_image (Aegypt1, 'egypt1')
* 获取图像尺寸
get_image_size (Aegypt1, Width, Height)
* 打开适配尺寸的窗口
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Aegypt1)
* 阈值分割提取区域(灰度23~160的像素)
threshold (Aegypt1, Regions, 23, 160)
* 显示分割结果
dev_display (Regions)

四、XLD(亚像素轮廓)

1. 基本概念

XLD 全称 Extended Line Description ,即亚像素精度轮廓,是图像边缘的高精度描述,精度高于单个像素级别,用于高精度测量、轮廓匹配。

  • Region 是「面」:一片像素的集合
  • XLD 是「线」:连续的亚像素边缘点集合

2. XLD 特征查看

与 Region 操作一致:打开「特征检测」工具,选择 xld 分类,可查看:

  • 基础特征:轮廓长度、包围盒尺寸
  • 形状特征:圆度、紧密度、曲率
  • 点特征:轮廓上所有点的坐标集合

3. 图像生成 XLD(亚像素边缘提取)

最常用算子 edges_sub_pix,可提取高精度亚像素边缘:

复制代码
edges_sub_pix (Image, Edges, 'canny', 2, 12, 22)
  • 参数说明:
    • 'canny':边缘提取算法(canny 算子是工业最常用方案)
    • 2:高斯平滑系数
    • 12、22:双阈值的下限、上限

4. 完整实例流程

复制代码
dev_close_window ()
* 读取图像
read_image (Image, 'fabrik')
* 打开适配图像的窗口
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
* 提取亚像素边缘
edges_sub_pix (Image, Edges, 'canny', 2, 12, 22)
* 显示轮廓结果
dev_display (Edges)

五、总结

类型 本质 核心用途 典型生成算子
Image 像素矩阵(带灰度 / 彩色信息) 原始输入、灰度分析 read_image
Region 二值像素面集合 目标分割、面积统计 threshold
XLD 亚像素线轮廓 高精度测量、边缘定位 edges_sub_pix

视觉处理的经典链路:Image(原图)→ 阈值分割 → Region(目标区域)→ 提取边缘 → XLD(高精度轮廓)→ 测量计算

相关推荐
青柠之夏cc5 小时前
AI与教育:个性化学习助手让“因材施教“成为现实,但代价是隐私?
人工智能·学习
for_ever_love__5 小时前
机器学习入门——手写线性回归与梯度下降
人工智能·python·学习·机器学习·线性回归
在猴站学算法6 小时前
(SQL注入学习)无回显的报错注入(Error-Based)
学习·网络安全·sql注入·ctf竞赛
李航19836 小时前
AI定制柜建模,需要详细的建模规范和标准流程
人工智能·python·计算机视觉·ai·ai编程
hahaha60166 小时前
色彩恒常性概述
人工智能·嵌入式硬件·数码相机·计算机视觉
知识分享小能手7 小时前
C++ 学习教程,从入门到精通,C++ 友元、异常和其他特性 — 详细知识点(15)
开发语言·c++·学习
hahaha60168 小时前
Shades-of-Gray (SoG) 算法--白平衡算法
人工智能·嵌入式硬件·算法·计算机视觉
Latchh8 小时前
前端导出的JPEG红字发糊,质量要拉到100才清楚
前端·图像处理·人工智能·计算机视觉
fanged8 小时前
Camera学习2(V4L2和Media Controller)(TODO)
学习
努力学习的代码小白10 小时前
源码学习15
学习