HALCON基本结构
- HALCON参数可分为两类:
-
- 图形参数 Iconic(image, region, XLD)
-
- 控制参数 Control(string, integer, real, handle)
一. 图形参数 Iconic
1. Image图像
- 根据像素信息的不同,可分为:二值图像、灰度图像、RGB图像,由一个或多个通道组成
- 像素类型:
* Byte:每像素1字节,8位无符号,标准的灰度图像(28: 0-255);
* Uint2:16位无符号,标准的灰度图像(216:0-65535);
* int1:每像素1字节,8位有符号(-128-127),两帧图像的差异使用;
* int2:每像素2字节,6位有符号,两帧图像的差异使用;
* int4:每像素4字节,32位有符号,两幅图像的灰度频谱使用;
* int8:每像素8字节,带符号,仅在64位系统上使用;
* Direction:每像素1字节,8位无符号,值为0-179,值180-254会自动设置为值255,该值被解释为未定义的角度。边缘梯度会有这种类型;
* Real: 浮点数的实数类型,用于存储实数类型,每像素4字节,3D中常用;
* Complex:包括实部和虚部,是在复数存储时使用到的一个数据类型,每个像素用两个real值,用频率表示图像时使用;
* Cyclic:以循环的方式来存储数据,即如果灰度值超过255,数据又会从零开始不断循环----8位无符号,给每个颜色分配灰度值;
* Vector_filed:两帧real类型图像,描述X或者Y方向运动
- 相应的转换算子:
convert_image_type(Image : ImageConverted : NewType : )
将任意类型的图像转换为新图像类型,如果从较大的灰度值范围转换为较小的 灰度值范围, (int4 到 byte),则过大或者过小的值将被简单地“裁剪”。如果结果图像的类型位"Direction",则不在其有效范围的灰度值将设置为255,以将其标记为无效。通常在调用此运算符之前,调用scale_image来调整灰度值的范围。
gen_image_const( : Image : Type, Width, Height : )
创建一个具有恒定灰度值的图像。
gen_image_proto(Image : ImageCleared : Grayval : )
创建一个具有特定灰度值的图像。
2.Regions
- 区域定义为图像中的一组像素集,可以是任意的形状,一个像素也可以是一个区域。将图像像素转换成区域来计算,可以减少资源的占用,方便存储和计算。
gen_rectangle1( : Rectangle : Row1, Column1, Row2, Column2 : )
创建一个平行于坐标轴的矩形,(Row1, Column1)代表左上角坐标,(Row2, Column2)代表右下角坐标
gen_rectangle2( : Rectangle : Row, Column, Phi, Length1, Length2 : )
创建一个任意方向的矩形,( Row, Column)代表中心点坐标,(Length1, Length2)代表矩形的长宽, Phi代表纵轴与水平线的夹角。
其他算子等用到再叙述,干巴巴的容易忘记。
3. XLD
- 像素是图像成像的最小单位,放大图像时每一个方格就代表一个像素,像素之间的灰度值是突变的,halcon定义了一个亚像素(subPixel),直接穿过像素进行边缘的绘制,描述几何轮廓的对象。
threshold_sub_pix(Image : Border : Threshold : )
对于输入图像,定义一个threshold灰度值,推算出每个像素中这个灰度值应该出现的位置,分别连线得到一个亚像素轮廓。
edges_sub_pix(Image : Edges : Filter, Alpha, Low, High : )
亚像素边缘提取,这个算子的内部实现较为复杂,后面专门讲述
二、控制参数Control
- Tuple元组:与C语言中的数组类似,其长度为大于等于1即可作为正常变量使用,第一个索引值为0,最大索引值为变量长度减1。其类型包括int,double,string等。
Tuple 与 C语言的数组的差别:C语言的数组只能存放一种变量,而且数组可以是二维或者三维的,而HALCON的数组Tuple可以看作是一个结构体,可以同时存储多种数据类型如字符串、整数和浮点数,而且只能是一个单一维度的数组- handle,句柄。用来标志对象获知项目的标识符,可用用来描述窗体、文件等。如窗口句柄、相聚句柄、模板句柄等。
- real 实型(double)、string字符串、intger整型其操作与其他语言一致。
- C#中对应halcon的数据结构有两种:HObject和HTuple
HObject的初始化:
1、HObject = null ;
* HObject是没有对象,对象不存在。在halcon算子中,只能作为输出变量(即out位置),作为输入变量就会报错。
2、HObject hObject;
HOperatorSet.GenEmptyObj(out hobject);
* 表示hobject是有对象,对象存在,但是对象是空的。在halcon算子中,可以作为输出变量和输入变量
HTuple的初始化:
HTuple hTuple = new HTuple;