工控编程吧

标题: halcon fit_rectangle2_contour_xld函数介绍 [打印本页]

作者: qq263946146    时间: 2019-5-24 00:33
标题: halcon fit_rectangle2_contour_xld函数介绍
fit_rectangle2_contour_xld(Contours : : Algorithm, MaxNumPoints, MaxClosureDist, ClippingEndPoints, Iterations, ClippingFactor : Row, Column, Phi, Length1, Length2, PointOrder)


fit_rectangle2_contour_xld对轮廓Contours 用算法Algorithm进行矩形拟合
返回矩形参数Row, Column(中心)、
Phi(方向)
以及Length1和Length2(半边长)参数。
角度以弧度返回,表示水平轴与Length1边之间的夹角(数学上正方向(逆时针方向))


此外,轮廓的点顺序以PointOrder返回。
PointOrder = 'positive'表示沿着数学上正确的方向(逆时针方向)遍历轮廓线。


矩形拟合的算法可以通过Algorithm来选择:
regression
标准最小二乘直线拟合。
huber
加权最小二乘直线拟合,采用Huber方法减小异常值的影响(见下)。
tukey
加权最小二乘直线拟合,根据Tukey方法忽略异常值(见下)。


对于“huber”和“tukey”,
使用鲁棒误差统计量估计轮廓点距离矩形近似边的标准差,
忽略异常值。
对矩形的每条边分别计算标准偏差,
以便处理边长不完全垂直的矩形。
参数ClippingFactor(相对于标准偏差的比例因子)控制异常值的数量:
为ClippingFactor选择的值越小,检测到的异常值就越多。
迭代异常值的检测。
参数迭代指定迭代的数量。
对于Algorithm = 'regression',忽略后两个参数的值。
注意,在Tukey ('* Tukey ')的方法中,
在进行逼近之前会去除异常值,
并对所有其他点进行加权,
而在Huber ('* Huber ')的方法中,异常值的影响仍然很小。


特别是对于离群点,优化受到线性影响,对于距离较小的点,
优化受到二次影响。
对于代数方法,所有点的距离都是二次影响优化的,
因此对异常值不具有鲁棒性。
在实践中,推荐了Tukey的方法。


为了减少计算量,矩形的拟合可以限制在轮廓点的一个子集内:
如果MaxNumPoints赋值为-1以外的值,
则只使用在轮廓上均匀分布的最大MaxNumPoints点。


根据用于创建轮廓Contours的处理方法,
轮廓的起点和终点可能包含位置错误。
因此,可以从矩形拟合中排除轮廓的起点和终点处的 ClippingEndPoints 。


轮廓线,其起点和终点之间的距离<= MaxClosureDist被认为是闭合的。
对于闭合轮廓,轮廓的端点不用于矩形拟合,
因为它将获得拟合中剩余点的两倍权重。


矩形与轮廓线的拟合是在找到轮廓点与矩形四边的对应关系的基础上进行的。
要使匹配成功,必须至少有一个点位于表示各自矩形边的线段的内部,
即,该点不能位于线段的两端。
因此,至少需要八个等高线点来拟合矩形。


一个点被内部分配到矩形的最小距离边。
为此,当前最优矩形参数为,用于当前迭代步骤的参数在内部使用。
如果在矩形的至少一侧没有找到对应的点,则不能惟一地确定矩形参数。
这种情况,返回错误3266。
因此,fit_rectangle2_contour_xld的调用者必须确保输入轮廓与矩形足够相似。
特别是轮廓线的内角,如果轮廓线是由四条线近似而成,
则不应小于45度或大于135度。
由于将轮廓线点分配到矩形最近的一侧,
这意味着至少矩形的一侧没有对应的点。
此外, ClippingFactor 不应选择得太小,以免异常值抑制产生没有对应轮廓点的矩形边。
这只能发生在 Algorithm= 'tukey'。
如果观察到上述条件,
fit_rectangle2_contour_xld将返回高度精确的矩形参数。
如果使用基于Tukey的离群值抑制,
则可以使用fit_rectangle2_contour_xld对矩形进行稳定拟合,
例如对带有圆角的矩形轮廓进行稳定拟合。


参数
Contours要被拟合的轮廓
Algorithm拟合 算法名,有 'huber', 'regression', 'tukey'
MaxNumPoints用于计算的最大轮廓点数量(-1表示所有点)。
MaxClosureDist被认为是闭合的轮廓的端点之间的最大距离。
ClippingEndPoints拟合时忽略轮廓开始点和结束点的个数。
Iterations最大迭代次数(不用于“regression”)。
ClippingFactor裁剪因子用于消除异常值(典型的:1.0表示“huber”,2.0表示“tukey”)。
Row,Column,Phi,Length1,Length2,PointOrder为输出矩形参数
中心点坐标,旋转角度,长短边一半,轮廓的点顺序,有正反向 'negative', 'positive'


例程
read_image (Image, 'die_pads')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width * 2, Height * 2, 'black', WindowHandle)
dev_set_part (0, 0, Height - 1, Width - 1)
fast_threshold (Image, Region, 180, 255, 20)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, ['area','anisometry'], 'and', [200,1], [1200,2])
fill_up (SelectedRegions, RegionFillUp)
shape_trans (RegionFillUp, RegionTrans, 'convex')
boundary (RegionTrans, RegionBorder, 'inner')
dilation_circle (RegionBorder, RegionDilation, 2.5)
union1 (RegionDilation, RegionUnion)
* Perform the subpixel-accurate edge detection.
reduce_domain (Image, RegionUnion, ImageReduced)
edges_sub_pix (ImageReduced, Edges, 'sobel_fast', 0.5, 20, 40)
* Select the edge fragments that belong to the pads.
select_shape_xld (Edges, SelectedContours, 'contlength', 'and', 10, 200)
* Merge adjacent edge fragments to obtain one contour per pad.
union_adjacent_contours_xld (SelectedContours, UnionContours, 2, 1, 'attr_keep')
* Fit rectangles robustly to the pads' edges.
fit_rectangle2_contour_xld (UnionContours, 'tukey', -1, 0, 0, 3, 2, Row, Column, Phi, Length1, Length2, PointOrder)
* Generate rectangles from the fitting result for visualization purposes.
gen_rectangle2_contour_xld (Rectangle, Row, Column, Phi, Length1, Length2)
dev_display (Image)
dev_set_colored (12)
dev_display (Rectangle)
[halcon]1[/halcon]






欢迎光临 工控编程吧 (https://www.gkbc8.com/) Powered by Discuz! X3.4