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(高精度轮廓)→ 测量计算

相关推荐
秦哈哈1 小时前
【HelloAgents】学习笔记(一)
学习·ai·agent
wuyk5552 小时前
从零吃透 MQTT 通信|第 10 章 阿里云 / 腾讯云 MQTT 设备完整对接实战,三元组、签名、设备上云调试
c语言·开发语言·stm32·学习·阿里云·云计算·腾讯云
fanged2 小时前
English at Work小结(TODO)
学习
X-future4262 小时前
OpenClaw源码学习
学习
kaixin_啊啊3 小时前
中国研究生数学建模竞赛(华为杯)学习笔记——三维瀑布图绘图代码
笔记·学习·数学建模
动词ing3 小时前
【学习笔记】数据结构(链表合并 双指针合并有序链表)
数据结构·笔记·学习
matlab代码3 小时前
基于matlab阈值分割的车牌识别系统【源码75期】
图像处理·opencv·计算机视觉
风之清扬3 小时前
Agent学习之四-初识Agent CLI
人工智能·科技·学习
传奇开心果编程3 小时前
【xilem0.4基础语法学与练】第45课 xilem_core
学习·rust·前端框架