专栏名称: 新机器视觉
最前沿的机器视觉与计算机视觉技术
目录
相关文章推荐
小小牛财经  ·  deepseek最新消息23家公司新增概念 ·  15 小时前  
西部财经融媒  ·  *ST信通可能被终止上市!14天13板A股公司 ·  昨天  
西部财经融媒  ·  *ST信通可能被终止上市!14天13板A股公司 ·  昨天  
酒醒梦已残  ·  DeepSeek ... ·  2 天前  
酒醒梦已残  ·  DeepSeek ... ·  2 天前  
功夫房产  ·  笑死,DeepSeek的买房建议,连街边中介 ... ·  3 天前  
功夫房产  ·  笑死,DeepSeek的买房建议,连街边中介 ... ·  3 天前  
51好读  ›  专栏  ›  新机器视觉

开发环境篇:HALCON 数据结构详解

新机器视觉  · 公众号  · 科技创业 科技自媒体  · 2024-11-25 16:02

主要观点总结

本文介绍了图像处理中涉及的基本数据分类,包括Image(图片)、Region(区域)、XLD(轮廓)、Control(控制类数据)等,并详细阐述了它们的特性、用途以及相关的操作。文章还涉及了Iconic数组、Control数组、Vector数组以及字典等概念,同时给出了相关的示例和操作说明。

关键观点总结

关键观点1: 文章介绍了图像处理中的基本数据分类

包括Image、Region、XLD和Control等,并详细阐述了它们的定义、特性和用途。

关键观点2: 文章涉及了Iconic数组、Control数组、Vector数组的概念

阐述了它们的特点、生成和插入方法,以及成员访问方式。

关键观点3: 文章介绍了字典的特点和用法

包括键、值存储方式,以及作为算子调用的参数的使用方式。


正文

基本数据分类

Image 图片

Region 区域

XLD 轮廓

Control 控制类数据

  • string 字符串

  • integer 整形

  • real 浮点数

  • handle 句柄

数组

  • Iconic数组(Objects)最小索引为1,最大索引为数组长度

  • Control数组(Control Tuple)最小索引为0,最大索引为数组长度-1长度是1时,可作为1个变量使用

  • Vector数组,可包含Iconic数据和Iconic数组,或Control数据和Control数组

字典Dictionary

  • 键值存储

  • 单个容器内,可以存储任意Iconic和Control数据和数组

  • 可同时包含Iconic(数组)和Control(数组)对象

图标类数据

一张图讲清楚3种Iconic数据:

Image(图片)

一张图讲清楚图片的3种概念:


Pixel:像素

在HALCON中,像素可以是不同的数据类型,用来表示各种不同信息。



Channel:通道

一张彩色图片由3个通道组成:

多光谱图片,可多达6个通道:

Domain:域

域可理解为ROI(感兴趣区域),大部分算子只会处理包含在域内的像素(不是所有算子):


图片的默认域是整个图片区域:

域可以裁剪:

图片操作

图片的读写

read_image(Image,'patras')
write_image(Image,'png',0,'C:/TEMP/MyImage')

注:可以是图片完整路径,如果仅仅是文件名则路径为 $HALCONIMAGES/patras.png ,保存文件时必须确保目标文件夹存在。

获取图片的属性:

get_image_type(Image,Type)
get_image_size(Image,ImageWidth,ImageHeight)

访问图片的通道:

count_channels(Image,NumChannels)
access_channel(Image,ImageRed,1)
access_channel(Image,ImageGreen,2)
access_channel(Image,ImageBlue,3)

查看图片灰度直方图:HALCON有自带的工具,参考Halcon工具之灰度直方图。

访问和设置像素灰度:

get_grayval(Image,130,145,Grayval)
set_grayval(Image,130,145,[0,10,20])

查看图片的域:默认域是整个图片

get_domain(Image,RegionDomain)

修改图片域: reduce_domain 设置的域只能是原有域的子区域

gen_circle(RegionCircle,200,200,200.5)
reduce_domain(Image,RegionCircle,ImageReduced)

change_domain 设置的域可以大于原有域

gen_circle(RegionCircle,200,200,200.5)
reduce_domain(ImageReduced,RegionCircle,ImageReduced2)

Region(区域)

Region的多种形态:

Region的作用:

  • 对象分割(blob分析)

  • 用作图片域(Domain) 只处理域内像素 可缩短运算时间

  • 用来寻找特征

Region的特点:

任意形状,可以是矩形、圆形,也可以是不规则图形

像素精度

游程编码方式:记录Region在每一行的起始列和终止列

Region操作

生成Region:

gen_circle(RegionCircle,200,200,100.5)
gen_rectangle1(RegionRect1,30,20,100,200)
gen_rectangle2(RegionRect2,300,200,rad(-30),100,20)

访问Region:

get_region_points(RegionRect1,RowsRect1,ColumnsRect1)
get_region_runs(RegionRect1,RunsRow,RunsColumnBegin,RunsColumnEnd)
area_center(RegionRect1,AreaRect1,_,_)

XLD(轮廓)

XLD(eXtended Line Description 轮廓)的特点:

由相互连接的点组成,可以是闭合的

亚像素精度

整数坐标是位于像素中心位置

XLD操作

XLD生成:

read_image(Image,'fabrik')
gen_contour_polygon_xld(Contour,[0,333],[0,222])

获取轮廓点:

get_contour_xld(Contour,Rows,Columns)
gen_cross_contour_xld(Cross,Rows,Columns,32,rad(45))

Control(控制类数据)

Integer(整形,Booleans,TYPE):

  • 42、0、-1

  • true/false

Real(浮点数Double):

  • 3.141592、-5.3

  • 1.#INF

String(字符数组)

  • 由单括号包裹'string'

  • 典型转义字符'Line1\nLine2'

  • 路径使用反斜杠'C:/HALCON/images'

  • 编码问题:HALCON18.11之前版本根据本地化设置(一般为Latin-1);HALCON18.11开始强制要求使用UTF-8

HALCON18.11之前:

HALCON18.11开始:

Handle(句柄):

  • 类似指针,指向一个复杂的数据结构

  • 数据类型:HALCON18.05之前包含一个Integer的控制类数组无引用计数,补在2使用的句柄,需要手动清除;HALCON18.05之后加入引用计数器,不在引用会自动清除,无需手动

注: tuple_type_elem 算子可以返回元组元素的类型,具体类型值参考算子手册。

数据监视

handle目标数据结构,内部数据查看:

dev_open_window (0, 0, 512, 512, 'black', WindowHandle)

函数绘图:
X:=[0:359]
Y:=sin(rad(X))

数组

Iconic数组(Objects)

支持将Image、Region、XLD放入同个数组,要通过调用函数生成、插入和访问:
Objects的生成和插入
gen_empty_obj(EmptyObject)
concat_obj(EmptyObject,Image,MyObjects)
concat_obj(MyObjects,Region,MyObjects)
concat_obj(MyObjects,XldEdges,MyObjects)
可直接读取多张图片,自动生成Objects
read_image(Image,'printer_chip/printer_chip_0'+[1,2,3,4])






请到「今天看啥」查看全文