1. HALCON算子
无论什么时候,HALCON库中任何类型的函数被使用都是以算子的形式出现的。现有的版本中有超过2000多个算子,他们大多数是都由多种方法组成,它们是通过参数来选择的。这些算子的重要特征是:
算子之间没有继承关系。从软件架构的角度看,所有的算子都在同一个等级上。
当然,存在逻辑上的算子组,这也能从C++,.NET和COM提供的类上可以直接看出来,它们中相同数据类型的算子操作被作为对应类的成员。
算子有标准化的规则定义输入和输出参数。
算子的设计遵循开发架构的规则,因此,当在多处理器或者多核计算机上使用大的图像时,其允许一种简单的加速程序的方法。
2. 参数和数据结构
HALCON有两种基本类型参数:图标数据(images, regions, XLD轮廓)和控制数据(integers, strings, handles等等)
每个算子参数按照标准顺序被输入:输入图标数据,输出图标数据,输入控制数据和输出控制数据。对于一个给定的算子,不是所有4种输入都是必须,但顺序保持一样。
每个算子有自我描述的接口,除了标准文档外,这个描述包含参数信息,如类型或者值列表,其可以在HDevelop算子对话框中被访问。
算子的输入参数是绝不能被修改的,这就使得有一个清晰简单的语法。
开放架构允许访问内部数据和集成外部数据
所有2D图像处理的必须数据结构,如(多通道)图像,轮廓,元组(一种类型的数组)等等,都被用一种极其高效执行的方式所支持。
(1)Images(图像)
Images属于图标数据
图像的主要部分是通道,例如包含各种像素类型灰度值得矩阵。
对于每一个图像,所谓的domain(域)是图像被处理的一部分。故其是一个感兴趣区域(ROI)。Domain(域)是一个HALCON区域,因此可以很灵活的被定义(从一个简单的矩形到一组没有连通的像素)。
像素数据
几乎任意内容都是可能,从标准的8-bit灰度值到描述倒数的浮点数。
对于1,2和4字节的整数值都是可以的,除此之外,浮点和复杂图像也可以。最后,对于描述边缘方向或者色度值都被支持。
图像通道
一个通道对应一个图像矩阵。一张图像可以有任意数量的通道,所有的通道的大小都是相同的。
坐标系统
图像的原点位于图像最左上角像素的中心,在一个矩阵中,每个像素都能够用行坐标和列坐标来访问,坐标范围从(0,0)到(height-1, width-1)。
需要注意的是,因为原点位于左上像素的中心,像素的角落有非整数坐标值,例如在左上 角像素有角坐标(-0.5,-0.5),(-0.5,+0.5),(0.5,+0.5)和(0.5,0.5)。
(2)Regions(区域)
区域属于图标数据
区域被定义为一组像素,区域的像素不必是连通的,这就意味着任意像素的集合都可以被看作一个单独区域被处理。借助算子connection,一个区域能被分解为所谓被连接的部分,例如由连通像素组成的部分。
区域的执行是基于所谓游程编码的执行的。这种编码的优势是:低内存消耗,高效处理和感兴趣处理易处理
由于游程编码的执行,它是有可能有覆盖区域,例如连通部分的膨胀结果。如果用基于标签图像传统执行方法,这将是不可能的。
在区域内的像素坐标是不限于给定图像的坐标,区域可能比图像还要打,膨胀操作的结果就有可能。是否一个区域应该被剪切为最大图像范围能够用算子set_system中的参数值“clip_region”来控制。
需要注意的是,默认情况下,区域是被剪切为当前图像大小的,假如没有图像被创建或者加载,他们将被剪切为默认图像大小(HDevelop:512*521; 编程语言:128*128)。为了防止不理想的剪切,我们建议在创建或者加载区域的时候去创建或者加载图像。
对于一个应用中区域的数量是无限的。
(3)XLDs
XLD是eXtended Line Description的缩写,由所有的轮廓和多边形的基本数据组成。
XLDs属于图标数据
亚像素进度算子,如edges_sub_pix返回XLD数据的轮廓
典型的,两个控制点的距离大概是一个像素。
除了控制点,XLD对象包含所谓的局部和全局属性。典型的例子是控制点的边缘振幅或者轮廓分割的回归参数。
除了XLD对象的提取外,HALCON提供更多的处理。例如基于规定特征轮廓的选择或者将轮廓分割为直线,弧形,多边形或者平行线。
(4)Handles(句柄)
句柄属于控制数据
句柄是复杂数据结构的引用,例如和图像采集设备的连接或者基于形状匹配的模型。为了高效和数据安全的原因,不是全部结构仅仅是句柄在两个算子之间进行传递。
句柄是独特的整数值,这些整数值是一定不能改变的魔数,每次执行和每个版本都是不同的。
句柄被用到的例子有图形窗口,文件,套接字,图像采集设备,OCR,OCV,测量,匹配。
(5)Tuple Mode(元组模式)
图标和控制数据能够包含单个对象/值或者多个(所谓的tuples)。例如,一个控制变量可以包含零个,一个或者任意数量的基本数据类型(整形,浮点值,字符串),每个元素的类型都是不同的。
大多数算子接受单个值(单个模式),同时也接受多个值(元组模式)。例如,如果算子如area_center用一个单区域被调用,则面积和区域中心坐标的一个值被返回;若算子被多个区域调用,相对应数量值的元组同时被返回。
控制元组的索引范围从0到元素总数减1,相反,图标元组的索引从1开始。
领取专属 10元无门槛券
私享最新 技术干货