一个学习找边的实例
边缘检测的步骤图解
步骤
1.通过Blob方法获取需要测量的Region
1.1 主要运用图像形态学、二值化
2.创建测量句柄
2.1 create_metrology_model (MetrologyHandle)
3.设置目标图像大小
3.1 set_metrology_model_image_size (MetrologyHandle, Width, Height)
4.添加测量对象
4.1 add_metrology_object_generic (MetrologyHandle, 'line', LineParam, 20, 5, 1, 30, [], [], Index)
5.设置测量参数
5.1 *设置找线的方式(positive,negative,all)从黑到白,从白到黑
set_metrology_object_param (MetrologyHandle, 'all', 'measure_transition', 'all')
5.2 *预期测量的区域个数
set_metrology_object_param (MetrologyHandle, 'all', 'num_instances', 12)
5.3*拟合数
set_metrology_object_param (MetrologyHandle, 'all', 'num_instances', 6)
5.4*高斯平滑系数,值越大,唯一的边缘越清晰
set_metrology_object_param (MetrologyHandle, 'all', 'measure_sigma', 5)
5.5 *区域,垂直与边界的测量区域的一半长度
set_metrology_object_param (MetrologyHandle, 'all', 'measure_length1', 80)
5.6 *区域,相切于边缘的测量区域的一半长度
set_metrology_object_param(MetrologyHandle, 'all', 'measure_length2', 10)
5.7 *最小边缘幅度越大,要求找到的边缘越锐利(灰度变换明显),反而不容易找到边缘
set_metrology_object_param (MetrologyHandle, 'all', 'measure_threshold', 20)
5.8 *测量双立方插入值,区别与bilinear双线性
set_metrology_object_param (MetrologyHandle, 'all', 'measure_interpolation', 'bicubic')
5.9 *取值 all,first,best,last
set_metrology_object_param (MetrologyHandle, 'all', 'measure_select', 'all')
5.10 *设置最小分数0.7
set_metrology_object_param (MetrologyHandle, 'all', 'min_score', 0.7)
6.执行测量,获取边缘点集
7.获取最终测量数据和轮廓
8.释放测量句柄
代码
dev_get_window (WindowHandle)
*读取图像
read_image (Image, 'printer_chip/printer_chip_01')
*获取图像大小
get_image_size (Image, Width, Height)
*方式一绘制测量位置直线
*draw_line (WindowHandle, Row1, Column1, Row2, Column2)
*方式二 固定测量位置直线坐标
Row1 := 19.9
Column1 := 810
Row2 := 271.9
Column2 := 808.5
*根据绘制的直线坐标来构建参数对象
LineParam := [Row1, Column1,Row2, Column2]
*绘制测量位置直线 时把直线的坐标写入文本文件,以变查看。这样就可以知道绘制的坐标。
*实际测量时是不可能让人,手动的去绘制每张要测量的图片的
open_file ('LineParam.txt', 'output', FileHandle)
fileStr := '线的坐标Row1:'+Row1+',Column1:'+Column1+',Row2:'+Row2+',Column2:'+Column2
fwrite_string (FileHandle, fileStr)
disp_message (WindowHandle, fileStr, 'window', 0, 0, 'red', 'true')
*创建计算测量句柄
create_metrology_model (MetrologyHandle)
*句柄关联测试的图坐标位置
set_metrology_model_image_size (MetrologyHandle, Width, Height)
*添加测量模型对象(此处是线)
add_metrology_object_generic (MetrologyHandle, 'line', LineParam, 20, 5, 1, 30, [], [], Index)
*根据需求设置测量的参数
*设置找线的方式(positive,negative,all)从黑到白,从白到黑
set_metrology_object_param (MetrologyHandle, 'all', 'measure_transition', 'all')
*预期测量的区域个数
set_metrology_object_param (MetrologyHandle, 'all', 'num_instances', 12)
*拟合数
set_metrology_object_param (MetrologyHandle, 'all', 'num_instances', 6)
*高斯平滑系数,值越大,唯一的边缘越清晰
*set_metrology_object_param (MetrologyHandle, 'all', 'measure _sigma', 5)
set_metrology_object_param (MetrologyHandle, 'all', 'measure_sigma', 5)
*区域,垂直与边界的测量区域的一半长度
set_metrology_object_param (MetrologyHandle, 'all', 'measure_length1', 80)
*区域,相切于边缘的测量区域的一半长度
set_metrology_object_param(MetrologyHandle, 'all', 'measure_length2', 10)
*最小边缘幅度越大,要求找到的边缘越锐利(灰度变换明显),反而不容易找到边缘
set_metrology_object_param (MetrologyHandle, 'all', 'measure_threshold', 20)
*测量双立方插入值,区别与bilinear双线性
set_metrology_object_param (MetrologyHandle, 'all', 'measure_interpolation', 'bicubic')
*取值 all,first,best,last
set_metrology_object_param (MetrologyHandle, 'all', 'measure_select', 'all')
*设置最小分数0.7
set_metrology_object_param (MetrologyHandle, 'all', 'min_score', 0.7)
*开始找边缘
apply_metrology_model (Image, MetrologyHandle)
*获取测量区域找到的边缘坐标集合
get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Row, Column)
*把找到的点通过十字叉来显示
gen_cross_contour_xld (Cross, Row, Column, 6, 0.785398)
*得到线的起点坐标并显示出来
get_metrology_object_result (MetrologyHandle, 0, 'all', 'result_type', 'all_param', Parameter)
*获取计量模型的计量结果轮廓
get_metrology_object_result_contour (Contour, MetrologyHandle, 0, 'all', 1.5)
*取第一条边放到ObjectSelected变量中
select_obj (Contour, ObjectSelected, 1)
*取第二条边放到ObjectSelected1变量中
select_obj (Contour, ObjectSelected1, 2)
*测量两个轮廓之间的距离
distance_cc (ObjectSelected, ObjectSelected1, 'point_to_point', DistanceMin, DistanceMax)
disp_message (WindowHandle, 'length:'+DistanceMin, 'window', 20, 0, 'green', 'true')