一维测量(也叫一维计量或卡尺)的概念非常直观。沿着一个预定的区域(主要是垂直于RIO感兴趣区域的方向) 边缘的位置。这里的边缘为从暗到亮或从亮到暗的过渡。
基于提取的边缘,可以测量零件的尺寸。例如,可以测量 ROI内零件的宽度,并将边缘定位在其左右两侧。
除了这些简单的矩形ROI外,圆弧也可以用来测量,例如,齿轮上的齿轮宽度。
这种测量方法的优点是使用方便,执行时间短,而且有很高的的精度。只需几个操作符,就可以实现高性能的应用。
另外,也可以使用HDevelop的测量助手,只需点击几下鼠标就可以进行测量。
测量包括以下几个主要步骤:
获取图像 创建测量对象在获取图像后,可以指定测量的位置,即描述要测量的线或弧的位置、方向等。
可以通过使用句柄handle来访问测量对象。类似于文件句柄,在使用该工具时需要这个句柄。每次执行测量时,这个句柄都会作为参数传递。
在像C++这样的面向对象的语言中,可以使用measure类来代替使用句柄的低级方法。在这里,用标准的面向对象方法实现创建和销毁。
然后,可以通过指定测量对象和一些视觉参数,如最小对比度来应用测量。
扩展概念在许多情况下,测量应用会比上面描述的更复杂,例如杂乱或不均匀的照明。此外,还可能要将特征转化为现实世界的单位,或将结果可视化。
衍射校准图像为了进行高精度的测量,摄像机应该具有线性响应函数,即图像中的灰度值应该线性地取决于输入的量。
由于某些相机没有线性响应函数,因此 HALCON 提供了所谓的衍射校准(灰度值校准)。通过算子radiometric_self_calibration,可以确定相机的反响应函数(离线),然后在执行测量前使用lut_trans将此函数应用于图像。
对准ROI或图像在某些应用中,要测量的直线或弧线必须相对于另一个对象对齐以方便测量。
矫正图像与对准类似,可能需要对图像进行修正,例如,消除镜头变形。
你可以用像draw_rectangle2这样的操作符交互式地测量线或弧线,或者从文件中读取它的参数(read_string)。作为另一种选择,它的坐标可以基于其他视觉工具如Blob Analysis的结果生成 。特别是在测量线或弧线可能需要对准某个对象的时候。
如果总是沿着同一条线或弧线进行测量,可以离线创建测量对象,然后多次使用它。 如果要对齐测量,每个图像的线或弧的位置和方向将有所不同,在这种情况下,必须为每个图像创建一个新的测量对象。这个规则的一个例外是只有位置改变而没有方向改变,可以保留测量对象,并通过 translate_measure 调整其位置。
将结果转化为世界坐标如果已经校准了视觉系统,可以直接用image_points_to_world_plane将测量结果转化为世界坐标。
结果可视化可视化边缘位置的最好方法是使用gen_contour_polygon_xld等运算符创建(短)XLD线段。
涉及算子 获取图像 衍射校准图像基础:radiometric_self_calibration(校验径向畸变), lut_trans(用灰度值查找表变换图像)
对准ROI或图像 矫正图像 创建测量对象基础:gen_measure_rectangle2(提取垂直于矩形的直边), gen_measure_arc(提取垂直于环形弧线的直边), translate_measure(转换测量对象)
测量基础:measure_pos(测量垂直于矩形或圆弧的直边), measure_pairs(测量垂直于矩形或圆弧的直边对)
进阶:set_fuzzy_measure(指定模糊函数), fuzzy_measure_pos((通过指定模糊函数测量垂直于矩形或圆弧的直边), fuzzy_measure_pairs, fuzzy_measure_pairing(可以使用参数Pairing来测量交错对和包含对)
把结果转化为世界坐标基础:image_points_to_world_plane
进阶:gen_contour_region_xld, contour_to_world_plane_xld
结果可视化进阶:gen_contour_polygon_xld
一维测量的替代方法 边缘提取(亚像素精度)测量边缘参数的一个非常好的方法是用edges_sub_pix提取边缘轮廓。这种方法的优点是它可以处理任意形状。此外,它可以确定每个边缘点的属性,如边缘方向。
小技巧 抑制杂物或噪音在许多应用中,一些杂物或噪音必须被抑制。测量运算符提供了多种方法来实现。最好的是提高边缘提取的阈值,以消除模糊的边缘。此外,平滑参数的值可以增加,以平滑不相关的边缘。
当将边缘分组为对时,如果噪声边缘在 "真实 "边缘的附近并且具有相同的极性,则可能导致不正确的分组。在这种情况下,可以通过只选择连续上升和下降边缘序列中最强的边缘来抑制噪声边缘。