halcon-思路整理

halcon-blob分析

blob将图像中具有相似颜色、纹理特征所组成的联通区域进行分析

将图像进行二值化 然后进行连通区域检测。

步骤:读取图像(read_image)-分割(threshold/bin_threshold/dyn_threshold/watersheds)-提取(connection)

eg:

read_image(Image,'particle')

threshold(Image,Region, 128, 255)

connection(Region,Regions)

area_center(Regions,Area,Row,Column)

halcon-边缘提取

步骤:读取图像(read_image)-过滤图像(sobel_amp )-提取边缘(threshold)

eg:

read_image (Image, 'fuse') sobel_amp (Image, EdgeAmplitude, 'thin_sum_abs', 3) threshold (EdgeAmplitude, Region, 20, 255) skeleton (Region, Skeleton)

应用threshold来选择具有数值高的边缘振幅。这一步的结果是一个包含所有边缘点的区域。使用skeleton,这些边缘可以被减薄到一个像素的宽度。作为阈值的一个高级版本,hysteresis_threshold可以用来消除不重要的边缘。另一个高级选项是在skeleton前调用运算符nonmax_suppression_dir,这在复杂情况下可能会产生更精确的边缘。请注意,为了使用这个运算符必须先计算边缘方向图像。相比之下,高级过滤器edges_image已经包括非最大抑制和滞后的阈值。因此,在这种情况下,一个简单的threshold就足以提取一个像素宽的边缘。如果只需要一个区域的边缘点,可以使用操作符inspect_shape_model。在这里,所有的步骤包括边缘过滤、非最大抑制和滞后阈值都在一个步骤中进行,效率很高。

edges_sub_pix直接得到亚像素边缘

*提取边缘
edges_sub_pix (ImageReduced, Edges, 'canny', 1, 10, 20)
*选择轮廓形状
select_shape_xld (Edges, SelectedXLD, 'contlength', 'and', 80, 99999)

halcon-几何测量

测量包括物体大小的测量、距离的测量以及物体完整度的检测。工业机器视觉常用1D测量和2D测量。大部分测量基于标定之后。

1D测量步骤 自定义测量模型(draw_rectangle2 /gen_rectangle2 )-创建测量句柄(gen_measure_rectangle2 )-开始测量(measure_pos )-显示测量结果(disp_message )-清除测量句柄(close_measure )

2D测量步骤 创建测量句柄(create_metrology_model )-设置图片相对大小到句柄(set_metrology_model_image_size )-定义测量模型(draw_ellipse )-将测量模型添加到句柄(add_metrology_object_ellipse_measure )-开始测量(apply_metrology_model)-拟合被测模型(fit_ellipse_contour_xld )-显示测量结果(disp_message )-清除测量句柄(close_measure )

halcon-模板匹配

步骤:获取图像(read_image)-创建模板(create_ncc_model)-查找模板(find_ncc_model)-清除模板(clear_ncc_model)

模板匹配在机器视觉工业现场是较为常用的一种方法,常用于定位通过算法在新的图像中找到模板图像位置

基于灰度 ncc  

基于形状 shape

基于轻微变形 scaled_shape

缺陷检测方法

1、基于颜色的blob法+差分

2、模板匹配+差分

3、基于轮廓的边缘提取

主要检测物品损坏,凸起,破洞,缺失等。先定位模板区域后,求得模板区域的坐标,创建物品的形状模板create_shape_model,注意把模板的旋转角度改为rad(0)和rad(360)。匹配模板find_shape_model时,由于物品的缺陷使形状有局部的改变,所以要把MinScore设置小一点,否则匹配不到模板。并求得匹配项的坐标。关键的一步,将模板区域仿射变换到匹配成功的区域。由于差集运算是在相同的区域内作用的,所以必须把模板区域转换到匹配项的区域。之后求差集,根据差集部分的面积判断该物品是否有缺陷。

读取图像(read_image)-二值化(threshold)-根据面积剔除非回字形的region()-计算每个region的方向和中心(area_center)-画箭头,结果输出()

你可能感兴趣的:(halcon,学习)