Halcon union_straight_contours_xld详解

union_straight_contours_xld

原型

union_straight_contours_xld(Contours : UnionContours : MaxDist, MaxDiff, Percent, Mode, Iterations : )

功能

合并方向近似且相邻的直线轮廓。

参数列表

Contours (input_object) :输入轮廓
UnionContours (output_object) :合并后输出轮廓
MaxDist (input_control) :最大距离上限
MaxDiff (input_control) :两个参考轮廓的拟合直线间的最大角度上限。
Percent (input_control) :MaxDist 、MaxDiff 两个标准的所占权重因子(百分比)
Mode (input_control) :是否应考虑平行轮廓?(‘every’, ‘noparallel’, ‘paralleltoo’)
Iterations (input_control) :迭代次数(可选数值或者 ‘maximum’)

详解

如果满足某些条件,则算子将会合并相邻的XLD轮廓。每次迭代时,最多合并两个满足给定条件的轮廓,参数Iteration控制整个步骤执行的频率。
如果两个端点(我对end Points的理解:每个端点指轮廓上的点在其拟合直线上的投影)的最小距离小于MaxDist参数设置的值,那么合并这两个轮廓。并且两个轮廓拟合的直线夹角小于MaxDiff ,那么直接合并这两个轮廓。
在这里插入图片描述

但如果只有一个条件满足,那么参数Percent 将会最终决定是否合并这两个轮廓。也就是说如果MaxDist 、MaxDiff 两个条件只满足其中一个,那么如果满足接下来的条件,合并轮廓。
在这里插入图片描述
举个例子来理解公式的含义:假如两个轮廓的间隙在参考轮廓上的投影长度值shortest distance= 5.0,它们的拟合直线夹角为direction difference = 0.5,限制参数MaxDist = 4.0,MaxDiff = 0.625.由于5.0不小于MaxDist = 4.0,所以,两个轮廓不能直接合并,需要参数Percent 进一步决定是否合并。
可以计算出两个值与对应的限制值相差25%。如果选择Percent = 60%,shortest distance所占权重大于direction difference,5 / 4 * 0.6+0.5 / 0.625 * (1-60%)=1.07 不小于1,所以不能合并。反之,如果Percent = 40%计算结果为0.98 <= 1,所以能合并。
当Percent = 100%时,只有shortest distance起作用,同理当Percent =0%,只有direction difference起作用,当Percent =50%,两者起到的作用均等。
总结下来就是当MaxDist 、MaxDiff 两个条件只满足其中一个时候,通过设置Percent参数来均衡MaxDist 、MaxDiff所占权重。
如果不想使平行的轮廓合并,将Mode设置为’noparallel’ ,反之设置为 ‘paralleltoo’ ,设置’every’对所有轮廓无条件合并。
如果Iterations 设置的是数值,将会达到迭代次数之后结束,如果设置的是’maximum’,一直迭代直到没有轮廓再合并为止。
在用get_regression_params_xld返回轮廓参数之前,必须通过调用regress_contours_xld计算到轮廓的回归线参数。

举例

1、当两个轮廓的属性都满足MaxDist 、MaxDiff 条件时,看Percent 是否起作用。
在这里插入图片描述
2、当Percent权重偏向一个参数时,看MaxDist、MaxDiff参数的变换如何影响轮廓合并。
(1)MaxDist参数
在这里插入图片描述
(2)MaxDiff参数
在这里插入图片描述

代码

gen_contour_polygon_xld (FirstContour, [500,1000], [1,1])
gen_contour_polygon_xld (SecondContour, [1001,1500], [2,501])
concat_obj (FirstContour, SecondContour, ConcatContour)
regress_contours_xld (ConcatContour, RegressContours, ‘drop’, 1)
union_straight_contours_xld (RegressContours, UnionContours, sqrt(2), rad(44.99999), 0, ‘noparallel’, ‘maximum’)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值