【Halcon】2D测量之四

【Halcon】2D测量之四

【Halcon】2D测量之四

选择2D测量的工具

上图中显示可用于2D测量的工具大概有三种,我们需要根据需要提取的特征和对象在图像中的外观选择合适的工具。

根据特征选工具

【Halcon】2D测量之四

计算面积

area_center计算区域的面积

area_center_xld 或者area_center_points_xld计算轮廓包含的面积。

area_holes计算输入区域内孔的面积

在计算区域的面积时,会考虑区域中可能存在的空穴,而在计算轮廓的面积时,得到由轮廓包围的整个面积。在后者中,还必须提取孔的轮廓,得到它们的面积,并从外轮廓包围的区域中减去它们


计算方向和角度

orientation_region计算区域的方向

orientation_xld计算轮廓的方向

elliptic_axis 和elliptic_axis_xld计算与区域或轮廓具有相同方向和纵横比的椭圆的两个半径和方向

elliptic_axis_gray用于非常小的对称的区域

smallest_rectangle2 smallest_rectangle2_xld: 任意方向的最小封闭矩形的中心位置、方向和两个半径

orientation_region 和 smallest_rectangle2都是用于计算方向但是方法不一样,orientation_region 基于elliptic_axis计算椭圆方向。除了方向的不同值外,返回值的范围也不同。orientation_region返回范围为- 180到180的方向,而对于smallest_rectangle2方向将在- 90到90的范围内返回。orientation_region360度的范围只适用于非对称对象,对称对象将会翻转180度。

如果是拟合轮廓到基本形状,可以查看对应的算子。如2D测量之2所示

如果形状相当复杂并且是刚性的,在不同图片上计算形状的方向,可以用模板匹配的方法。

如果要计算两个物体间的角度,可以用几何计算中的angle_ll 和 angle_lx。


计算点

有很广泛的方法可以用于获取一个物体的点。

任意形状的物体都可以通过区域处理中提到的算子area_center算出中心点(5.1)。

也可以通过轮廓处理的算子area_center_xld 或者area_center_points_xld计算中心点(6.2)。

算子area_center_gray可以计算出小的对称区域的中心点。

如果物体可以分割成如直线,圆形或者矩形等的基础形状,拟合基础形状到轮廓可以计算中心点的坐标,直线拟合可以获取端点。矩形拟合可以获取矩形的点和方向。(5.10和5.11)

如果物体相当复杂并且是刚性的,可以用模板匹配的方法。

如果边缘对沿着直线或者圆弧线,可以用1D测量的方法。

如果需要计算角点,可以通过几何运算计算,也可以拟合直线,通过intersection_ll求直线的交点(5.7)。

求拟合直线的交点还可以用于求网状格的连接点。(5.6)


计算尺寸和距离

物体的尺寸可以用很多方法来计算,具体方法根据物体的形状来制定。

对于圆形或椭圆形的轮廓或者部分轮廓,一般拟合圆或者椭圆沦落来计算(5.11)。

如果是完整的圆,还可以通过inner_circle获取最大内接圆或者通过smallest_circle 或smallest_circle_xld获取最小外切圆。这种方法比拟合更容易受异常点影响。

对于矩形,可以拟合矩形来计算长宽和中心点(5.9),也可以通过smallest_rectangle2或smallest_rectangle2_xld获取最小外切矩形(5.12).同样,获取外切矩形比拟合更容易受异常点影响。

很多计算物体间或物体结构间距离的应用会通过提取合适的点来计算。比如:计算两条相交线的交点,然后使用几何算子通过他们来计算他们间的距离或者他们和其它点、线、线段、轮廓或者区域。(5.6)计算网络格交线的连接点来获取网络格的长宽。(5.7)计算金属板相交线的交点来计算角点。(5.3)计算轮廓到他的拟合线(回归线)的最大距离。

如果边缘对沿着直线或者圆弧线,可以用1D测量的方法。

物体的宽度可以用很多种方式进行计算,具体根据物体来选择。窄直线(如电缆、河流或动脉)经常使用算子lines_gauss来计算(5.5)。对于严格多边形物体,最好通过几何算子计算独立直线和点的距离(5.4)。(5.2)通过计算平行于纵轴的物体在同一纵坐标下边缘点的横坐标的差来获取平均、最小或者最大的宽度。

对于任意形状的物体,区域处理或者轮廓处理都可以得到基础的特征。(6.2)通过算子length_xld计算氧化铝表面划痕轮廓的长度。


计算个数

为了获得对象的数量,常用的方法是使用元组并对其元素进行计数。在HDevelop,如果元组包含图标数据,例如区域或轮廓,则可以查询元素的数量使用运算符count_obj。如果元组包含控制数据,例如一组点的行坐标或列坐标,可以通过相应的
运算符赋值中的HDevelop操作( | tuple | )。还要注意,数值元组的索引不对应于图标元组的索引。数值元组以0开始和图标元组

从1开始。


比较区域处理和轮廓处理

 

区域处理

轮廓处理

A

亚像素精度

像素或者亚像素精度

B

快速

没有区域处理快

C

用于闭合区域

用于闭合或开放区域

D

异常点影响形状近似的结果

异常点会被补偿

E

物体灰度不能改变

物体灰度可以改变

f

对不好的对比度不敏感

对不好的对比度敏感