QQ登录

只需一步,快速开始

halcon union_collinear_contours_ext_xld函数介绍

[ 复制链接 ]
union_collinear_contours_ext_xld(Contours : UnionContours : MaxDistAbs, MaxDistRel, MaxShift, MaxAngle, MaxOverlap, MaxRegrError, MaxCosts, WeightDist, WeightShift, WeightAngle, WeightLink, WeightRegr, Mode : )


与union_collinear_contours_xld类似,
操作符union_collinear_contours_ext_xld检测包含直线轮廓(Contours )的输入数组中的所有共线轮廓,
结果保存于UnionContours
基本行为与操作符union_collinear_contours_xld相同,
但是union_collinear_contours_ext_xld提供了几个额外的参数来更精确地控制轮廓连接的过程。


参数介绍
参数MaxDistAbs、MaxDistRel、MaxShift和MaxAngle与函数union_collinear_contours_xld对应参数一至。

MaxOverlap
此外,参数MaxOverlap允许定义两个轮廓线之间的重叠,
以便连接稍微重叠的轮廓线。
在内部,操作符保证——不管传递的MaxOverlap值是多少——
重叠的长度不会超过两个轮廓长度的三分之一。
20179-05-22_220757.jpg
MaxRegrError
参数MaxRegrError目前没有使用。
其目的是保证两个轮廓线统一后,
得到的轮廓线与回归线的偏差不太大。
默认情况下,这个参数是off(-1),
因为它的时间消耗很高,而且通常不需要它。
然而,在某些情况下,结果轮廓可能是由与回归线偏离很多的点创建的
(缠绕输入轮廓、偏移和角度差接近——相当高的调整阈值,许多小轮廓的递归统一)


MaxCosts
在参数MaxCosts的帮助下,
可以限制连接两个轮廓线的最大成本。
因此,不仅可以排除一个值超过一定阈值的等值线对,
而且可以排除所有值都非常接近极限的等值线对。
成本总是在0和1之间进行标准化,其中1表示所有值都恰好满足阈值。


WeightDist, WeightShift, WeightAngle, WeightLink, 和WeightRegr
通过权重分配器、权重偏移器、权重角、权重链接器、权重权重加权器等参数,
调整不同值对总成本的影响。
可以为这些权重选择任何正数,生成的成本总是自动标准化,
以适应0到1的范围。不使用参数WeightRegr。


Mode
参数Mode控制.....对于union_collinear_contours_xld
如何处理输入轮廓的属性。


例程
pi := 3.1415926535897
Eps := pi / 4
read_image (Image, 'ed_g')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowID)
dev_set_draw ('margin')
dev_set_part (153, 165, 215, 231)
dev_display (Image)
gen_rectangle1 (Rectangle, 150, 170,  210, 200)
reduce_domain (Image, Rectangle, ImageReduced)
*提取图像XLD轮廓
edges_sub_pix (ImageReduced, Edges, 'sobel', 0.5, 40, 50)
*生成多边形轮廓
gen_polygons_xld (Edges, Polygons, 'ramer', 1)
*断开轮廓连接
split_contours_xld (Polygons, SplitContours, 'polygon', 1, 5)
*计算轮廓对应回归线轮廓
regress_contours_xld (SplitContours, RegressContours, 'drop', 1)
*根据角度选择近似垂直轮廓线
select_contours_xld (RegressContours, SelectedContours, 'direction', pi / 2 - Eps, pi / 2 + Eps, -0.5, 0.5)
*选择轮廓线长度在一定范围的轮廓线
select_contours_xld (SelectedContours, SelectedContoursFinal, 'length', 2, 200000, -0.5, 0.5)
*连接轮廓线
union_collinear_contours_ext_xld (SelectedContoursFinal, UnionContours, 20, 2, 3, 0.2, 0, -1, 1, 1, 1, 1, 1, 0, 'attr_keep')
* union_adjacent_contours_xld (SelectedContoursFinal, UnionContours, 5, 1, 'attr_keep')
*union_straight_contours_xld (SelectedContoursFinal, UnionContours, 6, 0.2, 100, 'noparallel', 'maximum')
*拟合轮廓线成直线,得到直线参数
fit_line_contour_xld (UnionContours, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)
dev_display (Image)
dev_set_color ('white')
if (|RowBegin| == 0)
  disp_message (WindowID, 'No edges found', 'window', 12, 12, 'black', 'true')
else
  disp_line (WindowID, RowBegin, ColBegin, RowEnd, ColEnd)
endif
例程中屏蔽了union_adjacent_contours_xld ,union_straight_contours_xld ,
这两个函数是在介绍它们时调用的,这些函数功能实现都是类似。
都是将临近的类似线面的轮廓连接,只是连接要满足的条件略有不同。
  

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

  

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








回复

使用道具 举报

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