工控编程吧
标题:
halcon regress_contours_xld函数介绍
[打印本页]
作者:
qq263946146
时间:
2019-5-22 00:41
标题:
halcon regress_contours_xld函数介绍
regress_contours_xld(Contours : RegressContours : Mode, Iterations : )
函数主要用于
计算到XLD轮廓的回归线。
regression s_contours_xld为输入的XLD轮廓
Contours
计算以下参数,
并将它们与生成的轮廓作为全局属性
存储
:
回归线法向量的坐标,
即,所有等高线点的最小二乘逼近线;法向量总是从原点指向直线(属性:'regr_norm_row', 'regr_norm_col'),
轮廓线点与回归线的欧式距离均值(属性:'regr_mean_dist'),
这些距离到回归线的标准偏差(属性:'regr_dev_dist')。
Mode = 'no'时,计算所有轮廓线点的
回归曲线的参数。
此外,可以采用三种不同的离群值处理方法。
离群点是指轮廓点不以“明显”的方式位于一般轮廓方向上,从而“扭曲”得到的回归线。
Mode =
drop时,
在计算不失真的回归直线时,忽略所有距回归直线比平均距回归直线远的
轮廓
点。
Mode =
gauss
时,
轮廓
点的距离是根据其在正态回归线附近的高斯分布出现的概率加权的。
Mode =
median时,
这里也假定到正态回归线的距离为正态分布,
但是与异常值无关的标准差{中值(all dist.)}除以(0.6745)。
同样,对距离进行加权,对于不失真的回归直线,忽略比一定距离更远的点。
无失真回归曲线的计算可重复多次(通过参数Iterations)
例程
*读取一张图片
read_image (Image, 'ed_g')
get_image_size (Image, Width, Height)
pi := 3.1415926535897
Eps := pi / 4
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowID)
*用常量在指定区域生成一平行矩形
gen_rectangle1 (Rectangle, 150, 170, 210, 200)
*剪切图像得到小区域图像
reduce_domain (Image, Rectangle, ImageReduced)
*获取小区域内图像边缘,生成多边形轮廓
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)
*选择方向在pi / 2 - Eps, pi / 2 + Eps范围内的回归线轮廓
select_contours_xld (RegressContours, SelectedContours, 'direction', pi / 2 - Eps, pi / 2 + Eps, -0.5, 0.5)
*选择长度在2, 200000,范围内的回归线轮廓
select_contours_xld (SelectedContours, SelectedContoursFinal, 'length', 2, 200000, -0.5, 0.5)
*合并相邻轮廓线段
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)
*生成两线段
gen_contour_polygon_xld (Line1, [RowBegin[0],RowEnd[0]],[ ColBegin[0],ColEnd[0]])
gen_contour_polygon_xld (Line2, [RowBegin[1],RowEnd[1]],[ ColBegin[1],ColEnd[1]])
*结果显示
dev_set_color ('red')
dev_display (Image)
dev_set_draw ('margin')
dev_display (Rectangle)
dev_set_color ('yellow')
if (|RowBegin| == 0)
disp_message (WindowID, 'No edges found', 'window', 12, 12, 'black', 'true')
else
dev_display (Line1)
dev_display (Line2)
endif
例程事先读取一张图片,用常量生成一个平行矩形,
对在此区域内的图像进行边缘提取与处理,
调用 regress_contours_xld 计算边缘的回归线轮廓,
筛选角度在一定范围内的回归线拟合成直线显示。
[halcon]1[/halcon]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4