工控编程吧

标题: halcon 几何工具函数介绍 [打印本页]

作者: qq263946146    时间: 2019-5-28 23:23
标题: halcon 几何工具函数介绍
1.angle_ll( : : RowA1, ColumnA1, RowA2, ColumnA2, RowB1, ColumnB1, RowB2, ColumnB2 : Angle)
计算RowA1, ColumnA1, RowA2, ColumnA2和RowB1, ColumnB1, RowB2, ColumnB2
组成的两线段夹角,结果保存于Angle,单位弧度
例如用鼠标绘制两直线,计算两直线夹角
draw_line (200000, Row1, Column1, Row2, Column2)
draw_line (200000, Row11, Column11, Row21, Column21)
angle_ll (Row1, Column1, Row2, Column2, Row11, Column11, Row21, Column21, Angle)


2.angle_lx( : : Row1, Column1, Row2, Column2 : Angle)
计算Row1, Column1, Row2, Column2组成的直线与水平轴线夹角
结果保存于Angle,角度弧度,范围-180《=Angle<=180
例如
draw_line (200000, Row11, Column11, Row21, Column21)
angle_lx (Row11, Column11, Row21, Column21, Angle1)


3.distance_cc(Contour1, Contour2 : : Mode : DistanceMin, DistanceMax)
distance_cc计算两个轮廓(Contour1和Contour2)的基点之间的最小和最大距离。
参数DistanceMin和DistanceMax包含产生的距离。
参数Mode 设置计算距离的类型:
'point_to_point'只确定轮廓基准点之间的最小和最大距离。这导致更快的算法,但可能导致不准确的最小距离。
相比之下,“point_to_segment”确定了轮廓线段之间的实际最小距离。
在这两种情况下,搜索算法都具有二次复指数(n*n)。
如果只需要最小距离,则可以选择使用操作符distance_cc_min,
因为它提供了“n*log(n)”的算法。
两种模式的例程:
gen_contour_polygon_rounded_xld(Cont1, [0,100,100,0,0], [0,0,100,100,0],[50,50,50,50,50], 0.5)
gen_contour_polygon_rounded_xld(Cont2, [41,91,91,41,41], [41,41,91,91,41], [25,25,25,25,25], 0.5)
distance_cc(Cont1, Cont2, 'point_to_point', distance_min, distance_max)
distance_cc(Cont1, Cont2, 'point_to_segment', distance_min, distance_max)

4.distance_cc_min(Contour1, Contour2 : : Mode : DistanceMin)
distance_cc_min计算两个轮廓线Contour1和Contour2之间的最小距离。
最小距离以DistanceMin返回。
参数Mode 设置计算距离的类型。
“point_to_point”确定最近的轮廓线点之间的距离,
“fast_point_to_segment”计算这些点附近的线段之间的距离,
“point_to_segment”确定轮廓线段之间的实际最小距离。
虽然'point_to_point'和'fast_point_to_segment'是复杂度为n*log(n)的高效算法,
但'point_to_segment'具有二次复杂度,因此执行时间较长,特别是对于包含许多线段的轮廓。
例程:
gen_contour_polygon_rounded_xld(Cont1, [0,100,100,0,0], [0,0,100,100,0],[50,50,50,50,50], 0.5)
gen_contour_polygon_rounded_xld(Cont2, [41,91,91,41,41], [41,41,91,91,41], [25,25,25,25,25], 0.5)
distance_cc_min (Cont1, Cont2, 'fast_point_to_segment', DistanceMin)
distance_cc_min (Cont1, Cont2, 'point_to_point', DistanceMin1)
distance_cc_min (Cont1, Cont2, 'point_to_segment', DistanceMin2)

5.distance_cc_min_points(Contour1, Contour2 : : Mode : DistanceMin, Row1, Column1, Row2, Column2)
distance_cc_min_points计算Contour1和Contour2之间的最小距离。
最小距离以DistanceMin返回。
与distance_cc_min相比,该操作符还返回轮廓上提供最小距离的点。
Contour1上的点在Row1和Column1中返回;
Contour2上的点在Row2和Column2中返回。


参数Mode 设置计算距离的类型。
“fast_point_to_segment”计算与最近轮廓点相邻的线段之间的距离,
“point_to_segment”确定轮廓线段之间的实际最小距离。



虽然“fast_point_to_segment”是一个复杂度为n*log(n)的高效算法,
但“point_to_segment”具有二次复杂度,因此执行时间较长,尤其是对于包含许多线段的轮廓。
例程:
gen_contour_polygon_rounded_xld(Cont1, [0,100,100,0,0], [0,0,100,100,0],[50,50,50,50,50], 0.5)
gen_contour_polygon_rounded_xld(Cont2, [41,91,91,41,41], [41,41,91,91,41], [25,25,25,25,25], 0.5)
distance_cc_min_points (Cont1, Cont2, 'fast_point_to_segment', DistanceMin, Row1, Column1, Row2, Column1)
distance_cc_min_points (Cont1, Cont2, 'point_to_segment', DistanceMin, Row1, Column1, Row2, Column2)

6.distance_contours_xld(ContourFrom, ContourTo : ContourOut : Mode : )
操作符distance_contours_xld计算ContourFrom中每个点到ContourTo的最小距离。结果轮廓保存于ContourOut 。
结果轮廓线包含属性“distance”。
可以通过使用操作符get_contour_attrib_xld查询属性'distance'来访问距离。

参数Mode决定计算ContourFrom中每个点的距离:
'point_to_point'计算到ContourTo基点的最小距离。
相反,'point_to_segment'计算到ContourTo中轮廓段的最小距离(见下图)。
(, 下载次数: 0)