Halcon形态学操作、区域处理相关常用API
膨胀一般用来填补物体中小的空洞和狭窄的缝隙,使物体的尺寸增大。
膨胀运算需要生成结构内核才能完成,在HALCON中使用gen_circle来生成圆形结构内核,这个函数的参数中:
(1)第一个参数Circle为输出的圆形结构区域;
(2)第二个参数Row为输入圆形区域中心行坐标;
(3)第三个参数是Column为输入圆形区域中心列坐标。
使用gen_rectangle1来生成矩形结构内核,这个函数的参数中:
(1)第一个参数Rectangle为输出的矩形结构区域;
(2)第二个参数Row1为输入的矩形区域的左上角点行坐标;
(3)第三个参数Column1位输入的矩形区域左上角点列坐标;
(4)第四个参数Row2为输入的矩形区域的右下角点行坐标;
(5)第五个参数Column2为输入的矩形区域右下角点列坐标。
使用gen_rectangle2来生成可以旋转的矩形结构内核,这个函数的参数中:
(1)第一个参数Rectangle为输出的矩形结构区域;
(2)第二个参数Row为输入矩形中心行坐标;
(3)第三个参数Column为输入矩形中心列坐标;
(4)第四个参数Phi为矩形的长轴与x轴的夹角,范围为-π/2~π/2;
(5)第五个参数Length1为矩形的长轴的长度的一半,即半长轴;
(6)第六个参数Length2为矩形的短轴的长度的一半,即半短轴。
使用gen_ellipse来生成椭圆结构内核,这个函数的参数中:
(1)第一个参数Ellipse为输出的椭圆结构区域;
(2)第二个参数Row为输入椭圆中心行坐标;
(3)第三个参数Column为输入椭圆中心列坐标;
(4)第四个参数Phi为椭圆的长轴与x轴的夹角,范围为-π/2~π/2;
(5)第五个参数Radius1为椭圆的长轴;
(6)第六个参数Radius2为椭圆的短轴。
使用gen_region_polygon函数来生成多边形结构内核,这个函数的参数中:
(1)第一个参数Region为输出的多边形结构内核区域;
(2)第二个参数Rows为多边形的角点的行坐标组;
(3)第三个参数Columns为多边形的角点的列坐标组。
在HALCON当中,使用dilation1函数来实现膨胀变换,这个函数的参数中:
(1)第一个参数Region为要进行膨胀的区域;
(2)第二个参数StructElement为结构内核区域;
(3)第三个参数RegionDilation为膨胀后的区域;
(4)第四个参数Iterations为迭代的次数。
使用dilation2函数来实现可以改变结构内核锚点的膨胀,这个函数的参数中:
(1)第一个参数Region为要进行膨胀的区域;
(2)第二个参数StructElement为结构内核区域;
(3)第三个参数RegionDilation为膨胀后的区域;
(4)第四个参数Row为锚点的行坐标;
(5)第五个参数Column为锚点的列坐标;
(6)第六个参数Iterations为迭代的次数。
使用dilation_circle函数来实现以圆为结构内核的膨胀,这个函数的参数中:
(1)第一个参数Region为要进行膨胀的区域;
(2)第二个参数RegionDilation为膨胀后的区域;
(3)第三个参数Radius为圆形内核的半径。
使用dilation_rectangle1函数来实现以长方形为结构内核的膨胀,这个函数的参数中:
(1)第一个参数Region为要进行膨胀的区域;
(2)第二个参数RegionDilation为膨胀后的区域;
(3)第三个参数Width为结构内核的宽度;
(4)第四个参数Height为结构内核的高度。
腐蚀用来消除小块区域和细长的区域。
开运算是先腐蚀再膨胀,利用结构元素B对A进行开运行的数学表达式为A◦B=(AΘB)⊕B
开运算能够使得图像边缘变得平滑,消除毛刺和狭窄的连接,但是又可以保持本体区域大小不变。
在HALCON中使用opening函数来实现开运算,这个函数的参数中:
(1)第一个参数Region为要进行开运算的区域;
(2)第二个参数StructElement为结构内核区域;
(3)第三个参数RegionOpening为开运算后的区域。
使用opening_circle来实现圆形结构内核的开运算,这个函数的参数中:
(1)第一个参数Region为要进行开运算的区域;
(2)第二个参数RegionOpening为开运算后的区域;
(3)第三个参数Radius为圆形结构内核的半径。
使用opening_rectangle1来实现矩形结构内核的开运算,这个函数的参数中:
(1)第一个参数Region为要进行开运算的区域;
(2)第二个参数RegionOpening为开运算后的区域;
(3)第三个参数Width为矩形内核的宽度;
(4)第四个参数Height为矩形内核的高度。
闭运算是先膨胀再腐蚀,利用结构元素B对A进行闭运行的数学表达式为A·B=(A⊕B)ΘB
闭运算能够填补小型黑洞,并连接区域。
在HALCON中使用closing函数来实现闭运算,这个函数的参数中:
(1)第一个参数Region为要进行闭运算的区域;
(2)第二个参数StructElement为结构内核区域;
(3)第三个参数RegionOpening为闭运算后的区域。
使用closing_circle函数来实现圆形结构内核的闭运算,这个函数的参数中:
(1)第一个参数Region为要进行闭运算的区域;
(2)第二个参数RegionClosing为闭运算后的区域;
(3)第三个参数Radius为圆形结构内核的半径。
使用closing_rectangle1来实现矩形结构内核的闭运算,这个函数的参数中:
(1)第一个参数Region为要进行闭运算的区域;
(2)第二个参数RegionClosing为闭运算后的区域;
(3)第三个参数Width为矩形内核的宽度;
(4)第四个参数Height为矩形内核的高度。
形态学梯度是膨胀图与腐蚀图之差,数学表达式为D=A⊕B-AΘB
形态学梯度可以获取图像区域的边缘轮廓。
在HALCON中,使用boundary函数来实现形态学梯度,这个函数的参数中:
(1)第一个参数Region是输入的要进行形态学梯度计算的区域;
(2)第二个参数RegionBorder是完成形态学梯度计算的区域;
(3)第三个参数BoundartType是进行形态学梯度计算的方式。
计算的方式有如下三种:
(1)inner:计算的轮廓线在原来的区域内;
(2)inner_filled:轮廓线位于原始区域内,输入区域内部的孔洞被抑制;
(3)outer:轮廓是将原始区域外扩一像素得到的。
击中与击不中运算有两个结构内核,一个用于前景击中,另一个用于背景击不中。首先,使用结构内核1对输入区域进行侵蚀,然后使用结构内核2对输入区域的补码进行侵蚀。两个结果区域的交集是击中与击不中的结果。可以这样理解,区域在任意位置都满足,结构内核1包含在区域内,区域不完全包含结构内核2,即击中;若不满足,即击不中。通过设置击中与击不中的内核来筛选特殊形状的区域。击中与击不中的数学表达式为A*B=(AΘE)∩(ACΘF)
在HALCON中使用hit_or_miss函数来实现击中与击不中,这个函数的参数中:
(1)第一个参数Region为输入的需要进行击中与击不中运算的区域;
(2)第二个参数StructElement1为输入的结构内核1;
(3)第三个参数StructElement2为输入的结构内核2;
(4)第四个参数RegionHitMiss为输出的击中与击不中的运算结果区域;
(5)第五个参数Row为结构区域的中心锚点的行坐标;
(6)第六个参数Column为结构区域的中心锚点的列坐标。
顶帽是原图与开运算图之差,利用B结构内核对A进行顶帽运算,顶帽C的数学表达式为C=A-(A◦B)
区域进行了顶帽运算之后,区域的毛刺被保留了下来,所以顶帽运算的作用是可以提取边缘的毛刺和区域的裂隙。
在HALCON中,使用top_hat函数来实现顶帽运算,这个函数的参数中:
(1)第一个参数Region为要进行顶帽运算的区域;
(2)第二个参数StructElement为结构内核区域;
(3)第三个参数RegionTopHat为顶帽运算后的区域。
底帽是闭运算图与原图之差,利用B结构内核对A进行底帽运算,底帽C的数学表达式为C=A-(A·B)
底帽运算的作用是可以获得区域的缝隙和沟壑。
在HALCON中,使用bottom_hat函数来实现底帽运算,这个函数的参数中:
(1)第一个参数Region为要进行底帽运算的区域;
(2)第二个参数StructElement为结构内核区域;
(3)第三个参数RegionBottomHat为底帽运算后的区域。
在HALCON中使用fill_up函数来实现填充功能,这个函数的参数中:
(1)第一个参数Region为输入需要填充的区域;
(2)第二个参数RegionFillUp为填充后的区域。
使用fill_up_shape实现可以筛选填充区域的填充功能,这个函数的参数中:
(1)第一个参数Region为输入需要填充的区域;
(2)第二个参数RegionFillUp为填充后的区域;
(3)第三个参数Feature为筛选的条件;
(4)第四个参数Min为条件最小值;
(5)第五个参数Max为条件最大值。
在HALCON中使用clip_region来实现区域的矩形裁切,这个函数的参数中:
(1)第一个参数Region为输入需要裁切的区域;
(2)第二个参数RegionClipped为裁切后的区域;
(3)第三个参数Row1为矩形左上角行坐标;
(4)第四个参数Column1为矩形左上角列坐标;
(5)第五个参数Row2为矩形右下角行坐标;
(6)第六个参数Column2为矩形右下角列坐标。
在HALCON中,使用clip_region_rel来实现区域的边缘裁切,这个函数的参数中:
(1)第一个参数Region为输入需要裁切的区域;
(2)第二个参数RegionClipped为裁切后的区域;
(3)第三个参数Top为顶部裁切数值;
(4)第四个参数Bottom为底部裁切数值;
(5)第五个参数Left为左侧裁切数值;
(6)第六个参数Right为右侧裁切数值。
区域延伸是指填充输入区域之间的间隙,它可以抑制小区域或分隔重叠区域。区域延伸通过向一个区域添加或删除一像素宽的“条”来实现。
**可以通过对区域的长、宽、矩等信息的计算来获取区域的信息,再通过这些信息把区域转换成相关的其他形状的区域。**转换类型一般包括凸型区域、椭圆区域、外接圆区域、最大内接矩形、内接圆、最小外接矩形和水平外接矩形等。
区域的转换可以帮助获取到期望的区域,例如一些工业产品中本来是标准图形,由于加工或者拍摄的问题,导致形状发生变化。可以通过区域的变换来实现修复的作用。
在HALCON中使用shape_trans函数来实现区域的转换,这个函数的参数中:
(1)第一个参数Region为输入的待转换区域;
(2)第二个参数RegionTrans为转换后的区域;
(3)第三个参数Type为转换的方式。
转换的方式说明如下:
(1)convex:转换为凸包。
(2)elipse:与输入区域的矩和面积相同的椭圆。
(3)outer_circle:最小的封闭圆形。
(4)inner_circle:这个区域最大的内接圆。
(5)rectangle1:平行于坐标轴的最小外接矩形。
(6)rectangle2:最小的封闭外接矩形。
(7)inner_rectangle1:最大的轴向平行内接矩形。
(8)inner_center:在输入区域骨骼上与输入区域重心距离最小的点。
**区域排序是根据区域的相对位置进行排序。**排序方法一般是使用该区域的一个点来代表区域,这个点可以由多种方式获得,如左上角点等;然后根据排序的规则,如以行坐标大小排序、以列坐标大小排序等方式来进行排序;排序之后,多个区域的顺序依照轨迹排列整齐。
在HALCON中使用sort_region函数来实现区域排序,这个函数的参数中:
(1)第一个参数Regions为输入的区域集;
(2)第二个参数SortedRegions为排序后的区域集;
(3)第三个参数SortMode表示使用哪个点来代替区域;
(4)第四个参数Order排序方式是顺序排列还是倒序排列,从小到大为顺序排序;
(5)第五个参数RowOrCol为排序的规则,以行为优先排序标识或列为优先排序标识。
区域特征
独立区域是和其他区域没有形成8连通(4连通视规则而定)的区域。
在HALCON中,使用connection函数来独立区域,通过count_obj函数统计区域的个数。
在connection函数的参数中:
(1)第一个参数Region为输入的区域;
(2)第二个参数ConnectedRegion为各自独立的区域组。
在count_obj函数的参数中:
(1)第一个参数Objects为输入的区域;
(2)第二个参数Number为统计的区域个数。
孔洞是包含在区域内,和外界没有4连通的区域。
在HALCON中使用connect_and_holes函数来统计空洞的个数,这个函数也会统计独立区域的个数。这个函数的参数中:
(1)第一个参数Regions为输入的区域;
(2)第二个参数NumConnected为统计的独立区域的个数;
(3)第三个参数NumHoles为统计的孔洞的个数。
可以结合使用fill_up和difference来获取孔洞区域:先对区域进行填充,然后使用填充后的区域减去原始区域。
圆度可由一个区域的面积除以这个区域的外接圆面积得到,数学表达式如下:
c
=
A
r
2
π
c=\frac{A}{r^2 \pi }
c=r2πA
其中,A为区域面积;r为外接圆半径。
圆度可以用来描述一个区域的圆形相似度,在区域筛选时圆度是一个重要的区域特征。
在HALCON中使用circularity函数来计算区域的圆度,这个函数的参数中:
(1)第一个参数Regions为输入的区域;
(2)第二个参数Circularity为计算的圆度。
区域周长描述的是区域的外边界的长度。描述区域周长时,水平垂直方向为1个单位,对角方向为$ \sqrt 2 $个单位。
在HALCON中使用contlength函数来计算区域的周长,这个函数的参数中:
(1)第一个参数Regions为输入的区域;
(2)第二个参数ContLength为计算的区域周长。
紧密度描述一个区域的紧密程度,值越大,区域越圆润;值越小,区域越扁长。其计算方式是用面积与周长的关系来进行计算,公式如下。如果图形为一个圆形,那么紧密度为1。
c
=
L
2
4
F
π
c=\frac{L^2}{4F\pi}
c=4FπL2
其中,L为轮廓长;F为区域面积。
在HALCON中使用compactness函数来计算区域的紧密度,这个函数的参数中:
(1)第一个参数Regions为输入的区域;
(2)第二个参数Compactness为紧密度的计算值。
凸性描述区域空洞和边缘凹陷的情况,凸性越大,图形边缘凹陷越小,反之越大。凸性的计算方式如下
c
=
A
c
F
c=\frac{A_c}{F}
c=FAc
其中,$ A_c $为区域转换为凸多边形的面积;F原始区域的面积。
在HALCON中使用convexity来计算区域的凸性,这个函数的参数中:
(1)第一个参数Regions为输入的区域;
(2)第二个参数Convexity为凸性的计算值。
区域最远距离计算的是区域当中最远的两个点的距离,如图12-4所示。可以看到,图形中两个箭头描述的距离为“区域最远距离”,它和描述区域的长宽不一样——长和宽分别是区域在x轴和y轴上的投影,而“区域最远距离”描述的是区域中最宽的位置。
在HALCON中使用diameter_region函数来计算区域的最大距离,这个函数的参数中:
(1)第一个参数Regions为输入的区域;
(2)第二个参数Row1为区域最大距离的第一个点的行坐标;
(3)第三个参数Column1为区域最大距离的第一个点的列坐标;
(4)第四个参数Row2为区域最大距离的第二个点的行坐标;
(5)第五个参数Column2为区域最大距离的第二个点的列坐标;
(6)第六个参数Diameter为区域的最大距离值。
椭圆度描述的是区域和椭圆的相似程度,通过计算等效椭圆的面积和原始区域的面积的比值得到,计算公式如下:
b
=
A
c
F
b=\frac{A_c}{F}
b=FAc
其中,Ac为区域转换为等效椭圆的面积;F为原始区域的面积。
在HALCON中使用eccentricity函数来计算区域的椭圆度,这个函数的参数中:
(1)第一个参数Regions为输入的区域;
(2)第二个参数Anisometry为等距性的计算值,等距性的计算方式是Ra/Rb;
(3)第三个参数Bulkiness为椭圆度的计算值;
(4)第四个参数StructureFactor为结构因子计算值,计算方式为Anisometry×Bulkiness-1。
区域方向是用等效椭圆的长轴方向来描述的。在HALCON当中,区域的方向的角度范围为-90°~+90°。
在HALCON中使用elliptic_axis来计算区域的方向,这个函数的参数中:
(1)第一个参数Regions为输入的区域;
(2)第二个参数Ra为等效椭圆的长半轴;
(3)第三个参数Rb为等效椭圆的短半轴;
(4)第四个参数Phi为等效椭圆的方向,即区域方向。
欧拉计数是计算非连通区域的个数和区域孔洞的个数的差,欧拉计算一般用来描述空间完整性。
在HALCON中使用euler_number函数来计算区域的欧拉计数,这个函数的参数中:
(1)第一个参数Regions为输入的区域;
(2)第二个参数EulerNumber为欧拉计数的计算值。
获取到区域的特征值之后,需要对区域的特征进行筛选来获取目标区域。在HALCON中,可以使用region_features函数来获取区域特征,这个函数可以代替其他区域的特征函数,通过改变第二个参数的值以获取不同的特征。这个函数的参数中:
(1)第一个参数Regions为输入的区域;
(2)第二个参数Features为区域特征类型;
(3)第三个参数Value为区域特征的值。
获取区域特征之后,可以通过select_shape函数来筛选区域特征的值。这个函数的参数中:
(1)第一个参数Regions为输入的区域;
(2)第二个参数SelectedRegions为筛选出来的区域;
(3)第三个参数Features为筛选特征的类型;
(4)第四个参数Operation为多个筛选条件的关系,可选择“与”和“或”;
(5)第五个参数Min为筛选特征的最小阈值;
(6)第六个参数Max为筛选特征的最大阈值。
区域运算
区域相交就是求取两个区域的交集,即两个区域共有的部分。
在HALCON中使用intersection来求取区域的交集,这个函数的参数中:
(1)第一个参数Region1为输入的第一个区域;
(2)第二个参数Region2为输入的第二个区域;
(3)第三个参数RegionIntersection为交集区域。
区域相减就是被减区域减去两个区域的公共部分,然后得到剩下的部分。
在HALCON中使用difference函数来实现区域的相减,这个函数的参数中:
(1)第一个参数Region为被减区域;
(2)第二个参数Sub为要减去的区域;
(3)第三个参数RegionDifference为差的区域,也就是结果区域。
区域的补集是该区域与整个区域集合的差值,相同的输入区域与不同的区域集合,得到不同的补集,在HALCON当中默认的区域集合为512×512像素,如果生成的图像或者区域,或者读取的图像或区域的面积大于512×512像素时,区域的集合为最大的图像或区域的面积。
在HALCON中,使用complement来实现区域的补集计算,这个函数的参数中:
(1)第一个参数Region为输入的区域;
(2)第二个参数RegionComplement为区域的补集。
区域的联合是把多个独立的区域联合成一个区域。
在HALCON中,使用union1和union2函数来实现区域的联合,union1是把一个区域集进行联合,union2是把两个独立的区域进行联合。union1的参数中:
(1)第一个参数Region为输入的区域;
(2)第二个参数RegionUnion为联合之后的区域。
union2的参数中:
(1)第一个参数Region1为输入的第一个区域;
(2)第二个参数Region2为输入的第二个区域;
(3)第三个参数RegionUnion为联合后的区域。
异或区域为两个区域进行异或运算,区域重叠的区域为0,不重叠的区域为1,两个区域都不包含的区域为0,值为1的区域为目标区域。
在HALCON中使用symm_difference函数来实现区域的异或运算,这个函数的参数中:
(1)第一个参数Region1为第一个输入的区域;
(2)第二个参数Region2为第二个输入的区域;
(3)第三个参数RegionDifference为异或运算后的区域。
区域相等指的是两个区域完全一样,一般用来判断区域是否与空区域相等来判断区域是否为空。
在HALCON中使用test_equal_region函数来判断区域是否相同,这个函数的参数中:
(1)第一个参数Region1为第一个输入的区域;
(2)第二个参数Region2为第二个输入的区域;
(3)第三个参数IsEqual为判断的结果,相同则结果为1,不同则结果为0。
区域内的点用于判断一个点是否在区域内,即判断这个区域是否包含该点。
在HALCON中使用test_region_point函数来判断点是否在区域内,这个函数的参数中:
(1)第一个参数Regions为输入的区域;
(2)第二个参数Row为要判断的点的行坐标;
(3)第三个参数Column为要判断的点的列坐标;
(4)第四个参数IsInside为判断的结果,如果点在区域内则结果为1,不在区域内则结果为0。
区域子集用于判断一个区域是否是另一个区域的子集。如果某个区域完全包含在另一个区域当中,就认为该区域是另一个区域的子集;如果某个区域有一部分不在另一个区域当中,就认为该区域不是另一个区域的子集
在HALCON中,使用test_subset_region函数来判断一个区域是否是另一个区域的子集,这个函数的参数中:
(1)第一个参数Region1为要测试是否为子集的区域;
(2)第二个参数Region2为主体区域;
(3)第三个参数IsSubset为判断结果,如果区域1为区域2的子集,则结果为1,如不是则结果为0。
亚像素精度
在HALCON中使用gen_circle_contour_xld来创建圆形亚像素数据,这个函数的参数中:
(1)第一个参数ContCircle为输出的圆形亚像素数据;
(2)第二个参数Row为输入的圆心的行坐标;
(3)第三个参数Column为输入的圆心的列坐标;
(4)第四个参数Radius为输入的圆形的半径;
(5)第五个参数StartPhi为起始的角度;
(6)第六个参数EndPhi为结束的角度;
(7)第七个参数PointOrder为点的顺序,表示是起始到结束,还是结束到起始位置;
(8)第八个参数Resolution为相邻点之间的距离,即相邻点的分辨率。
在HALCON中使用gen_ellipse_contour_xld函数来实现椭圆亚像素数据的创建,这个函数的参数中:
(1)第一个参数ContEllipse为输出的椭圆亚像素数据;
(2)第二个参数Row为输入的椭圆心的行坐标;
(3)第三个参数Column为输入的椭圆心的列坐标;
(4)第四个参数Phi为椭圆长轴的方向与x轴的夹角,单位是弧度;
(5)第五个参数Radius1为输入的长轴半径;
(6)第六个参数Radius2为输入的短轴半径;
(7)第七个参数StartPhi为起始的角度;
(8)第八个参数EndPhi为结束的角度;
(9)第九个参数PointOrder为点的顺序,表示是起始到结束,还是结束到起始位置;
(10)第十个参数Resolution为相邻点之间的距离,即相邻点的分辨率。
在HALCON中使用gen_rectangle2_contour_xld来实现矩形亚像素数据的创建,这个函数的参数中:
(1)第一个参数Rectangle为输出的矩形亚像素数据;
(2)第二个参数Row为输入的矩形中心的行坐标;
(3)第三个参数Column为输入的矩形中心的列坐标;
(4)第四个参数Phi为矩形长轴的方向与x轴的夹角,单位是弧度;
(5)第五个参数Length1为输入的矩形长轴半径;
(6)第六个参数Length2为输入的矩形短轴半径。
可以通过设置参数生成非均匀有理B样条曲线,样条曲线是一种在造船和工程制图时用来画出光滑形状的工具。样条是一根柔软但有弹性的长条物,如木尺。将两端和几个点用钉子固定之后,便可以产生顺滑的曲线。图13-7所示是样条曲线绘制示意图。非均匀有理B样条曲线有以下三个特点。
(1)非均匀性:指一个控制顶点的控制范围是能够调节的。当需要创建一个不规则曲线的时候能改变控制点的控制范围非常有用。
(2)Rational(有理):指每个非均匀有理B样条曲线的点都可以用有理多项式来表达。
(3)B-Spline(B样条):指构建的一条曲线,曲线内的点可以用内插值来替换。
在HALCON中使用gen_contour_nurbs_xld函数来实现样条曲线的绘制,这个函数的参数中:
(1)第一个参数Contour为输出的圆形亚像素数据;
(2)第二个参数Row为输入的控制点的行坐标;
(3)第三个参数Column为输入的控制点的列坐标;
(4)第四个参数Knots为控制点的结向量;
(5)第五个参数Weights为控制点的权向量;
(6)第六个参数Degree为曲线的可微性等级;
(7)第七个参数MaxError为最大误差;
(8)第八个参数MaxDistance为曲线偏移最大距离。
圆角多边形是将多边形生成具有圆角的亚像素数据轮廓线,圆角以定义的半径的弧的形式创建。对于多边形的每个顶点,都必须定义相应的半径。在一个封闭多边形的情况下,第一个点和最后一个点必须定义为相等半径。开放多边形的第一点和最后一点的半径可以不相同。
在HALCON中使用gen_contour_polygon_rounded_xld函数来实现圆角多边形的创建,这个函数的参数中:
(1)第一个参数Contour为输出的圆形亚像素数据;
(2)第二个参数Row为输入的角点的行坐标;
(3)第三个参数Col为输入的角点的列坐标;
(4)第四个参数Radius为输入的半径;
(5)第五个参数SamplingInterval为轮廓点与点之间的距离精度。
多边形是根据提供的多边形角点坐标生成一个亚像素数据轮廓,如果最后一个点和起始点的位置相同,轮廓为封闭的轮廓;如果不同,则为开放的多边形轮廓。
在HALCON中使用gen_contour_polygon_xld函数来实现多边形的创建,这个函数的参数中:
(1)第一个参数Contour为输出的圆形亚像素数据;
(2)第二个参数Row为输入的角点的行坐标;
(3)第三个参数Col为输入的角点的列坐标。
标记符号可以用来标记特征点等,以帮助观察计算的结果。
标记十字为每个输入点(行、列)生成一个十字形的亚像素数据轮廓。轮廓由两条长度大小相等的线组成,这两条线恰好相交于输入点。它们的方向由角度决定。
在HALCON中使用gen_cross_contour_xld函数来实现标记十字的创建,这个函数的参数中:
(1)第一个参数Cross为输出的十字亚像素数据;
(2)第二个参数Row为输入的十字中心的行坐标;
(3)第三个参数Col为输入的十字中心的列坐标;
(4)第四个参数Size为十字线的长度,单位为像素;
(5)第五个参数Angle为十字线的角度,单位为弧度。
标记箭头为从第一个点的坐标指向第二点的坐标,生成的结果为一个箭头形的亚像素数据。箭头的头部的长和宽通过参数来指定。如果起点和终点相同,则生成一个由单个点组成的轮廓。
在HALCON中使用gen_arrow_contour_xld函数来实现箭头的创建,这个函数的参数中:
(1)第一个参数Arrow输出的箭头亚像素数据;
(2)第二个参数Row1为第一个点的行坐标;
(3)第三个参数Column1为第一个点的列坐标;
(4)第四个参数Row2为第二个点的行坐标;
(5)第五个参数Column2为第二个点的列坐标;
(6)第六个参数HeadLength为箭头头部的长度;
(7)第七个参数HeadWidth为箭头头部的宽度。
gen_arrow_contour_xld为HALCON的本地函数,本地函数是HALCON通过基础算子生成的封装函数,函数的编写代码可以通过查看得到。