halcon测量的第一步,就是找边。边找精准了,计算两边的距离才可能精准。
由于物料的管控不可能做到每片抽检,或者根本不被管控。这就要求我的抓边效果能最大化适合各种可能性。
下面的程序使用鼠标确定测量框,根据设定参数拟合出一条质量可调的XLD线条。
图1 鼠标绘制测量框
图2 拟合完成的线条,这个例子由50个点拟合出XLD线条。十字点起标识点的作用。
找线方法调用代码:
fpath:='C:/Users/Administrator/Desktop/2018资料/分类器研究' *www.skcircle.com by 勇哥(很想停止) *QQ:496103864 微信:abc496103864 * Code generated by Image Acquisition 01 list_files (fpath, ['files','follow_links','recursive'], ImageFiles) tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima)$','ignore_case'], ImageFiles) dev_close_window() for Index := 0 to |ImageFiles| - 1 by 1 read_image (Image, ImageFiles[Index]) dev_open_window_fit_image(Image, 0, 0, -1, -1, WindowHandle) dev_display(Image) *鼠标绘制测量矩形框 draw_rectangle2_mod (WindowHandle, 60, 60, rad(0), 100, 50, Row, Column, Phi, Length1, Length2) Row := Row Col := Column Phi1 := Phi Length1 := Length1 Length2 := Length2 thresold := 40 sigma := 1.0 roiWidth := 60 transition := 'all' select := 'all' p_number :=50 level := 3 param:=[] tuple_concat(Row, param, param) tuple_concat(Col, param, param) tuple_concat(Phi1, param, param) tuple_concat(Length1, param, param) tuple_concat(Length2, param, param) tuple_concat(thresold, param, param) tuple_concat(sigma, param, param) tuple_concat(roiWidth, param, param) tuple_concat(transition, param, param) tuple_concat(select, param, param) tuple_concat(p_number, param, param) tuple_concat(level, param, param) tuple_inverse(param, Inverted) find_line(Image, object, Inverted, outValue, message, error) break endfor
找线方法代码:
gen_measure_rectangle2 矩形测量句柄
gen_measure_rectangle2通常是配合算子measure_pos使用,定义如下:
gen_measure_rectangle2( : : Row, Column, Phi, Length1, Length2, Width, Height, Interpolation : MeasureHandle)
产生测量矩形句柄,控制输入为测量矩形范围的坐标中心,矩形长轴和水平方向夹角范围的弧度,矩形边长的一半,测量图片的宽和高度,输出为测量句柄。
Row, Column是矩形的中心
Length1, Length2是矩形区域的长和宽的一半,关于区域的宽度,尽量在包住边缘的同时设置的越大越好,因为设置的太小噪声太大
Phi是Rectangle旋转的角度,当为正时表示逆时针旋转,当为负时表示顺时针旋转
如果想看ROI是否合适可以利用gen_rectangle1查看
Interpolation表示插值的方法,因为当ROI不是垂直或者水平的话,那么他的Projection(下图中短的等距线)经过的就不是一个完整的像素,因为要计算它的平均值给Profile。它的值就需要插值。
measure_pos 取一对边缘线条的距离和中心点xy坐标
定义为:
measure_pos(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdge, ColumnEdge, Amplitude, Distance)
Sigma表示高斯滤波的参数,高斯滤波的是对Profile形成的曲线,Threshold是对他的一阶导数设置的阈值
Transition = ‘negative’时表示由像素值高转到低像素值的边缘放在RowEdgeFirst中,这里有一个参考方向,就是Rectangle旋转角度为0时,从左到右的方向。另一解释:沿主轴方向dark-to-light定义为第一类边缘,反之为第二类边缘。
RowEdge:边的中心行坐标
ColumnEdge :边的中心列坐标
Distance: 表示的是边缘组之间的距离
fit_line_contour_xld 拟合线条
fit_line_contour_xld( Contours : : Algorithm, MaxNumPoints, ClippingEndPoints, Iterations, ClippingFactor : RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist )
函数作用:
对一些线段的XLD做近似计算直线计算
对于参数Algorithm中的一些类型解释如下:
regression:回归,标准的最小二乘法拟合
huber:加权的最小二乘法拟合,异常值的影响被减小基于Huber方法
tukey:加权的最小二乘法拟合,异常值的影响被减小基于Tukey方法
drop:加权的最小二乘法拟合,异常值的影响被消除
gauss:加权的最小二乘法拟合,异常值的影响被减小基于最逼近线上的所有其轮廓点的平均值和距离标准方差
ClippingFactor控制被弱化的异常值个数,值越小,越多异常值被检测到。
最小拟合一条线的必要轮廓点个数是2,因此,一条轮廓线点个数至少是2+2*ClippingEndPoints
参数列表:
Contours(in):输入轮廓
Algorithm(in):形成线的算法
MaxNumPoints(in):用于计算的最大轮廓点个数
ClippingEndPoints(in):在逼近过程中被忽略的开始及末尾点个数
Iterations(in):迭代的最大次数
ClippingFactor(in):消除异常值的裁剪因子
RowBegin(out):线段开始点的行坐标
ColBegin(out):线段开始的列坐标
RowEnd(out):线段结尾的行坐标
ColEnd(out):线段结尾的列坐标
Nr(out):线参数:法向量的行坐标
Nc(out):法向量的列坐标
Dist(out):原点到该线的距离
可能前置项:
gen_contours_skeleton_xld, lines_gauss, lines_facet, edges_sub_pix, smooth_contours_xld
可能后置项:
disp_line, select_lines, line_orientation
可替代项:
regress_contours_xld, get_regress_params_xld
gen_contour_polygon_xld 根据多边形构建XLD
gen_contour_polygon_xld( : Contour : Row, Col : )
功能:根据一个多边形(polygon)(以元组形式给出)创建一个XLD轮廓(contour)。
2019/7/25 勇哥注:
下面是勇哥写的一段找线演示代码,可以参考下面的贴子。
带ROI跟随的找边测试代码(halcon代码演示)
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!
本站其它的视觉相关的贴子见:《本站视觉相关教程整理贴子,持续更新》
===========================================================
halocn基础系列教程列表:
Halcon学习(27-1)halcon测量技术:亚像素,亚像素精度
Halcon学习(26)dev_get_preferences的用法
Halcon学习(4-6)Region处理:动态阈值,分水岭
Halcon学习(4-5)Region处理:合并区域,扩大和缩小区域,取区域特征值
Halcon学习(4-4)Region处理: 区域相减,区域求补集
Halcon学习(4-2)Region处理:选择区域,分割图像
Halcon学习(4-1)ROI感兴趣区域,reduce_domain和crop_domain,鼠标绘制区域
视觉检测之产品瑕疵检测
视觉检测之焊点检测
模板匹配/仿射变换
halcon模板匹配 scaled_shape_model模板的另一个例子
Halcon中两种实现旋转的方法rotate_image和affine_trans_image
halcon的 shape_model模板匹配的算子使用流程的总结

