QQ登录

只需一步,快速开始

halcon union_cocircular_contours_xld函数介绍

[ 复制链接 ]
union_cocircular_contours_xld(Contours : UnionContours : MaxArcAngleDiff, MaxArcOverlap, MaxTangentAngle, MaxDist, MaxRadiusDiff, MaxCenterDist, MergeSmallContours, Iterations : )

union_cocircular_contours_xld合并属于同一圆的所有轮廓。
结果得到同一圆上相互连接的轮廓,保存于UnionContours



该算法首先对每个轮廓进行拟合,
然后通过圆弧上的半径、圆心和间隙对拟合结果进行检验。
轮廓列表按半径递增顺序处理。
没有圆可拟合的轮廓线可选择在第二遍中合并。


阈值参数用于定义轮廓是否属于同一圆。
要合并两个轮廓线,必须同时满足所有阈值。


参数介绍
MaxArcAngleDiff
参数MaxArcAngleDiff定义了一个轮廓的端点
到一个圆上的第二个轮廓的起点之间的最大角度距离(以弧度为单位)。
20179-05-22_220757.jpg


MaxArcOverlap
MaxArcOverlap表示轮廓可能重叠的最大角度。
20179-05-22_220757.jpg


MaxTangentAngle
MaxTangentAngle描述圆切线与两条等值线连接线之间的最大夹角。
20179-05-22_220757.jpg


MaxDist
MaxDist表示两条轮廓线的端点和起点的最大绝对距离(以像素为单位)。
20179-05-22_220757.jpg


MaxRadiusDiff
MaxRadiusDiff是拟合到轮廓上的圆的半径的最大绝对值差。
20179-05-22_220757.jpg


MaxCenterDist
MaxCenterDist是圆中心欧氏距离的极限。
20179-05-22_220757.jpg
MergeSmallContours
如果参数 MergeSmallContours 被设置为“true”,那么没有拟合圆的等值线也会被合并。
要匹配一个小轮廓,轮廓的每一点到圆心的距离与半径的差不超过MaxRadiusDiff。
轮廓线上两个相邻点与圆切线的夹角必须在MaxTangentAngle之内。
此外,要合并两个轮廓线,必须满足MaxDist的条件。


Iterations
轮廓线的合并产生了新的圆参数。
因此,迭代可以导致进一步的合并。
参数Iterations 控制迭代的数量。
很少需要两个以上的迭代。


对于两个轮廓线的每一次可能的合并,
通过对不同阈值对应的距离求和计算成本。
为了便于比较,将距离按阈值缩放到0.0到1.0之间。
如果两个或多个轮廓起点与另一个轮廓的同一端点匹配,
则合并成本较低的轮廓。


您应该确保输入轮廓可以用直线和圆弧来逼近,
例如使用split_contours_xld对它们进行预处理。


例程:
dev_set_colored (12)
read_image (Image, 'circular_barcode')
dev_display (Image)
* 提取图像xld轮廓边缘
edges_sub_pix (Image, Edges, 'canny', 0.9, 20, 40)
* 选择轮廓长度满足条件的
select_contours_xld (Edges, SelectedContours, 'contour_length', 200, 99999, -0.5, 0.5)
* 连接圆形轮廓
union_cocircular_contours_xld (SelectedContours, UnionContours, 1.6, 0.9, 0.9, 30, 10, 10, 'true', 1)
dev_display (UnionContours)
stop ()
* 显示结果
dev_clear_window ()
dev_display (UnionContours)

  

halcon从自学到接项目视频教程,另外再赠送全网最全资源  

  

欢迎围观我录制的一套halcon自学视频教程(进入)



回复

使用道具 举报

快速回复 返回列表 客服中心 搜索