要求:设计一款通用型的2D测量系统。包括:用户登录,1D测量,2D测量,卡尺测量,结果判定,结果本地数据库保存,报表设计等功能,根据实验室硬件条件,设计出0.01mm级的检测精度的测量系统。
第一章:方案设计
在硬件构成方面,本系统采用了海康相机、远心镜头和背光源等高质量设备,确保了图像采集的准确性和稳定性。在软件设计方面,利用C#编程语言和HALCON图像处理库,开发了一套功能完善的测量软件。该软件不仅实现了用户登录、图像采集与展示、图像处理等基本功能,还具备一维测量、二维测量和卡尺测量等多种精确测量方式。
经过实验室环境的测试与验证,该测量系统软件成功达到了0.004mm的高精度要求,充分满足了高精度测量的需求。在软件架构方面,通过采用SQLite数据库技术,实现了用户登录功能的安全可靠。同时,利用HALCON图像处理库的强大功能,系统能够实时采集、显示和处理图像,在功能实现上,测量系统软件具备一维、二维及卡尺测量的精确测量方式,能够迅速测试工件尺寸,测量数据和结果也能够得到有效保存,为后续的数据分析和处理提供了便利。此外,该软件还具备友好的界面设计和交互性,使得用户可以方便地进行操作和控制。
第二章:硬件设计
2.1硬件结构选型
2.1.1硬件组成
在机器视觉系统中,图像采集是一个至关重要的环节,它通常由相机、镜头和光源这三个核心组件构成。
首先,相机作为视觉系统的“眼睛”,扮演着至关重要的角色。工业相机是机器视觉领域的常用选择,其通过内置的感光元件将外界的光信号转换为数字信号,进而实现图像的获取。随后,这些数字信号被图像处理器读取并处理,为后续的分析和识别提供基础数据。
其次,镜头是相机系统中不可或缺的一部分,它主要负责光学调整。通过镜头的调整,可以控制视野的大小和图像的明暗度,从而获得更加清晰、准确的图像。镜头的质量对于拍摄成像的质量具有直接影响,因此选择合适的镜头对于整个视觉系统的性能至关重要。
最后,光源作为机器视觉系统中的照明设备,其作用是通过特定的照明方式将检测物的特征清晰表达出来。合理的光源选择和配置,可以有效地提高图像的对比度和清晰度,从而提升视觉系统的识别准确率和稳定性。
综上所述,相机、镜头和光源作为机器视觉系统中图像采集的三个核心组件,各自发挥着不可替代的作用。通过合理的选择和配置这些组件,我们可以构建一个高效、稳定的机器视觉系统。硬件组成原件如图 2.1 所示。
图2.1 硬件组成元件图
2.1.2硬件选型
本课题的测量工件尺寸在10mm×10mm之内,并且要求测量工件的测量要求为精度达到0.01mm。在计算相机所需的最低分辨率时,首先需考虑工件的实际尺寸与相机视野的匹配关系。为了确保工件完整呈现在视野之中,相机的视野范围通常应略大于工件的实际尺寸。假设此处视野大小为12mm×12mm,则相机所能捕捉到的最小细节尺寸将决定其最低分辨率。按照每像素代表0.01mm的精细度进行计算,可以得到最低分辨率为1200×1200像素,即144万像素。然而,考虑到实际应用中像素误差和系统稳定性的要求,往往需要选择更高分辨率的相机以确保测量精度和图像质量。通常,所选相机的分辨率应为最低要求的3至4倍或更高。因此,按照此标准,所需的相机最低分辨率应至少为432万像素。
结合市场实际情况,选取合适的工业相机,考虑到测量工件尺寸只需采集图像轮廓,所以相机的图像色彩为黑白,同时结合市场实际情况,选取合适的工业相机,本课程的相机选型为1000 万像素的海康相机MV-CE100-30GM,选型的相机和相机参数图如图 2.2 和图2.3所示,靶面尺寸为 1/2.3"。
图2.2 海康相机MV-CE100-30GM图
图2.3 MV-CE100-30GM相机外形尺寸图
远心镜头,以其出色的畸变控制性能,在高精度测量项目中展现出显著优势。因此,对于这类对精度要求极高的测量任务,远心镜头无疑是理想之选。在选择远心镜头时,放大倍率是一个核心考量因素。经过计算,得知所需放大倍率约为0.32X,这一数据为我们筛选镜头提供了重要依据。然而,实际选择过程中,还需结合市场供应情况,确保所选镜头既满足技术要求,又具备实际可行性。基于实验条件及性能需求,最终选定型号为XF-5MDT01090436×120DSSB-L90的双远心镜头。该镜头及其结构图分别如图2.4和图2.5所示,它们详尽地展示了所选镜头的外观及内部构造,为后续的实验与应用提供了重要的参考依据。这样的选型过程,既符合学术论文的严谨性要求,也确保了测量项目的精确性与可靠性。
图2.4 双远心镜头图
图2.5 双远心镜头尺寸图
背光源在物体轮廓的突显上具有显著优势,其效果在配合远心镜头使用时更为突出。对于涉及物体轮廓提取的测量项目而言,背光源的应用显得尤为适宜,能够有效提升测量的精确性和可靠性。通过利用背光源的独特性能,能够更清晰地捕捉到物体的轮廓信息,为后续的测量工作提供有力支持。背光源如图2.6所示。
图2.6 背光源实物图
2.2硬件安装与连接
选择连接设备,以及确定相机、光源和计算设备之间的连接方式。海康相机MV-CE100-30GM使用标准的接口为GigE Vision,与PC端口与相机连接需要光纤网线,此外海康相机还需提供240V 电路的电源线,而背光源则需要接入240V 电路的光源控制器。
安装和连接设备:安装相机、镜头、光源和计算设备,并确保它们之间正确连接。
首先需要确保相机安装在能够拍摄到测量物体的合适位置,本课程选用的远心镜头有0.109X 和0.436X的镜头,需要将相机安装在0.436X的镜头上,使用合适的支架或固定装置安装远心镜头,使远心镜头垂直背光源上并且保持120mm的工作距离,这样远心镜头焦点与相机焦点对齐,使图像保持较高的清晰度和分辨率。接着将背光源放置于镜头的正下方。为确保实验顺利进行,首先需将相机妥善连接至电源线和传输线。传输线负责将相机与PC机相连,以实现数据传输和通信。同时,背光源则需接入光源控制器,并由控制器进一步接入240V电路,以确保光源的稳定供应。随后,将相机与计算机或图像处理系统相连接。图2.7详细展示了设备的安装与连接过程。
图2.7 安装与连接设备实际图
安装与连接设备完后,进行校准和调试:进行设备的校准和调试,确保图像质量和系统性能达到要求,将硬件组件集成到整个工业机器视觉系统中,并进行集成测试和验证,确保系统可以正常运行并满足应用需求。
第三章:测量原理
3.1 1D测量原理
HALCON 通过以下方法确定 1D 边缘的位置:首先通过已经绘制好的测量线或者测量圆弧,创建垂直于测量线的投影线。投影线之间的距离是1像素。如图 3.1所示。
图3.1 投影线图
由于多种因素,投影线可能不是垂直的,那么需要进行插值方法。插值参数有“nearest_neighbor”、“bilinear”和“bicubic”。在最近点插值方法是最快的方法。但是,在此模式下,几何精度略低。对于插值为双线性插值,会比第一种的几何精度高,但是速度会降低。使用双三次插值可以产生最准确的结果,但是,这是最慢的方法。
投影线的长度,即 ROI 的宽度, 要根据情况选择ROI宽度,在投影线垂直的情况下,选择宽的ROI,可以提高轮廓获取的准确度,相反如果在投影线不垂直的情况,ROI值较大也会产生不好的结果。
通过投影线获取到平均灰度值后,用高斯平滑滤波器对轮廓进行平滑处理,其标准偏差由测量算子的参数 Sigma 指定,计算平滑轮廓的一阶导数,如图3.2所示。
图3.2 ROI与Sigma影响图
3.2卡尺测量原理
如果要测量由圆形、椭圆、矩形或直线等简单形状表示的对象,并且对它们的位置、方向和尺寸有大致的了解,则可以使用二维计量来确定确切的形状参数。特别是,初始形状参数的值通过基于边在所谓的测量区域内的确切位置的测量来细化。这些是沿着近似已知形状的边界均匀分布的矩形区域。如图 3.3所示,对于单个初始形状,可以返回多个精细实例。
图3.3 二维计量的应用
首先,必须使用create_metrology_model创建计量模型。在此模型中,将存储与要测量的对象相关的所有所需信息。为了实现高效的测量,应使用操作符set_metrology_model_image_size将执行测量的图像大小添加到模型中。
然后,必须添加图像中物体形状的近似值和一些控制测量的参数。对于每个形状,根据其几何类型,使用以下运算符:add_metrology_object_circle_measure添加一个或多个圆的参数,即中心点的坐标和半径。add_metrology_object_ellipse_measure添加一个或多个椭圆的参数,即中心点的坐标、主轴的方向以及小半轴和大半轴的大小。 add_metrology_object_line_measure添加一条或多条线的参数,即起点和终点的坐标。add_metrology_object_rectangle2_measure添加一个或多个矩形的参数,即中心点的坐标、主轴的方向以及小半轴和大半轴的大小。add_metrology_object_generic添加圆形、椭圆、直线和/或矩形的参数。
图像中的实际测量是通过运算符apply_metrology_model进行的。测量产生的精细形状参数可以通过运算符get_metrology_object_result从计量模型中访问。
3.3 2D测量原理
3.3.1区域处理
区域处理适合处理那些灰度值相似的对象,它主要是采用Blob分析的方式,一步一步逼近对象,能够简单快速获得对象,区域处理方法如下:
(1)预处理图像或者区域:如果采集的图像噪声比较大或者复杂的情况下,需要对图像线进行预处理。图像一般会存在椒盐噪声和高斯噪声,可以通过函数median_image,采用中值滤波的方式消除椒盐噪声,通过gauss_filter函数,采用线性滤波去除高斯噪声。
(2)分割区域:预处理图像后,可以对图像的进行阈值操作获取感兴趣的区域。HACLON常见的阈值函数有threshold、dynamic_threshold和bin_threshold。第一种适合全局阈值,它对整个图像采取一样阈值来获取感兴趣区域。第二种适合动态阈值,比较灵活,通过局部获取感兴趣区域。最后一种适合自动阈值,适合明显前景和背景的图像。
(3)选择和修改区域:通过connection和select_shape可以选择打散后的感兴趣区域。通常根据面积、最大外接圆、最小内接圆和圆度的参数值,选择感兴趣区域。而修改区域,可以通过形态学,腐蚀和膨胀对感兴趣区域进行处理,dilation_rectangle、opening_rectangle、dilation_circle和opening_circle,使感兴趣区域更加符合目标形状。
(4)提取区域特征:对感兴趣的区域进行拟合,拟合成规则的区域,方便测量,如smallest_rectangle和inner_circle可以获得最大的矩形和圆的参数值。同样也可以通过area_center获得区域的中心点和面积,最后也可以用gen_contour_region_xld将区域转化成轮廓,进行轮廓拟合。
3.3.2轮廓处理
轮廓处理用于需要高精度测量和明显的边缘对象提取,轮廓处理方法如下:
(1)创建轮廓:HALCON提高很多方式获得轮廓,可以从图像的边缘值获取轮廓,也可以从感兴趣区域获取轮廓,也可以直接创建多边形的轮廓。
(2)像素精度提取边缘的方法 : 使用边缘滤波器后,将产生一个或两个边缘图像。通过使用阈值算子从得到的边缘图像中选择具有给定的最小边缘幅度的像素来提取边缘区域。为了获得具有一个像素厚度的边缘,必须通过使用算子(例如:skeleton)来减薄所获得的区域。常见的像素精确边缘滤波器是运算速度较快的Sobel_amp和速度较慢但已经包括滞后阈值和细化的edges_image,其结果比Sobel_amp更精确。edges_image及其对应的彩色图像(edges_color)也可以在参数Filter设置为“Sobel_fast”的情况下应用。这样,算子的速度也很快,但仅推荐用于噪声或纹理小且边缘锐利的图像。除了边缘之外,还可以提取由薄结构构建的线。这些线有着不均匀的一定的宽度,一般采用滤波算子bandpass_image,结合了阈值和细化。
(3)亚像素精度提取边缘的方法:采用亚像素边缘提取算子可以立刻得到轮廓。例如edges_sub_pix、edges_color_sub_pix和zero_crossing_sub_pix。检测图中的线以及其宽度lines_gauss, lines_facet , lines_color,edges_sub_pix。亚像素精度方法通常比像素精度方法慢。为了加快亚像素精度的边缘提取,建议仅将其应用于ROI 。为了获得合适的ROI,可以使用阈值算子来确定轮廓所包围的区域。然后,返回的区域通过算子boundary缩小到其边界,并且可以用算子clip _ region _ rel进行裁剪。利用形态学算子,例如expansion _ circle,对返回区域进行少量扩展,通过reduce _ domain将图像缩小到返回区域,并将缩小后的图像用作ROI。ROI作为亚像素精确边缘提取的搜索空间。
(4)选择轮廓:创建轮廓的过程产生了一系列的轮廓,我们需要从这些轮廓中选择需要的轮廓用于下一步的测量。根据特征选择轮廓,如算子select_shape_xld可以用于选择具有特定凸性、圆性或面积等30多种形状特征的闭合轮廓,算子select _ contures _ xld可以根据轮廓的长度、曲率或方向选择闭合或非闭合的轮廓。select _ xld _ point可以与鼠标功能结合使用,以交互方式选择轮廓。通过轮廓合并可以将接近的轮廓合并成一个选择轮廓,如算子union_collinear_contours_xld可以用于合并大致位于同线,union_cocircular_contours_xld在同一个圆上,union_adjacent_contours_xld相邻, union_cotangential_contours_xld相切。
(5)分割轮廓:将比较复杂的轮廓分割成比较简单的线、圆和椭圆轮廓,因为这些线段组成的形状基元更便于测量,例如圆的直径或线的长度。形状基元包括线、圆、椭圆和矩形,算子 segment_contours_xld 可以用于轮廓分割,根据选择的参数,可将轮廓分割成直线段,直线和圆形段或直线和椭圆形段。
(6)通过近似轮廓到已知形状提取特征:在获得前面的近似轮廓后,利用拟合来获得特定形状,如通过fit_circle_contour_xld、 fit_ellipse_contour_xld拟合圆和椭圆,获取它们的参数值,如圆的圆心、半径,椭圆的长半轴和短半轴。
第四章:测量系统软件设计
4.1环境配置
先进行测量系统软件的流程设计:用户登录测量系统,当用户名与密码匹配后进入测量界面,用户点击图像采集,界面显示工件图片,然后进行测量,最后对测量结果报表并保存数据。测量系统软件功能示意图如图4.1所示。
图4.1 基于机器视觉的测量系统软件功能示意图
按照测量系统软件的功能,选择适合的开发平台与视觉算法库,本课程选用基于C#语言的WinForm进行界面开发和HALCON的算法库进行图形处理,需要下载Visual Studio开发软件和HALCON软件,选用版本是Microsoft Visual Studio 2022版本和MVTec HDevelop 23.05 Progress版本。
安装完软件后需要进行系统环境配置,在系统环境中添加对应的根路径。然后在Visual Studio进行配置,在Visual Studio选择C#项目,创建一个Windows 窗体应用程序,如图4.2所示。
图4.2 Visual Studio项目创建窗口
然后在C#代码中引入HALCON视觉框架,可以通过添加HALCON的引用来实现。在刚建好的Visual Studio项目名称的解决方案窗口中右键点击引用,选择“添加引用”,弹出的窗口中选择“浏览”,然后找到HALCON安装路径下的“bin”文件夹,在“bin”文件夹中选择需要的HALCON版本,然后选择“halcondotnet.dll”添加引用,也可以先将该动态库添加Visual Studio项目的“bin”文件夹下面再选择引用,如图4.3所示。
图4.3 引用
4.2用户登录
为了用户的安全和对用户的信息进行数据管理,在实现用户登录功能时,测量软件系统使用了SQLite数据库。SQLite是一款轻量级的数据库,它提供的数据库是一个单一且独立的文件,SQLite也不需要独立的服务器进程、权限和用户帐户,特别适合应用程序。并且SQLite使用容易理解的SQL语法,易于使用和快速上手。使用的SQLite数据库存储了用户的信息,如用户名和用户密码,当用户登录时,测量系统会将用户信息与数据库中存储的用户信息对比,确认用户符合才能进入测量系统。
首先,需要下载SQLite,随着VS的升级,Nuget成为安装插件或者引用库文件标准的获取手段,所以本课程使用nuget来安装SQLite,如图4.4所示。
图4.4 SQLite库文件安装
接下来,通过C#语言创建一个存储用户信息的数据库。先创建一个数据表,string一个变量dbFile,赋值为数据库文件名,SQLiteConnection一个的新数据连接对象变量cnn,并设置cnn为打开模式。string一个变量sql来存储创建用户表的SQL语法,通过SQLiteCommand执行SQL 语句。创建完表格后,开始插入数据,将用户名“Id”,密码“MiMa”以及它们对应的实际值插入刚创建的表格中,将sql改为存储插入数据的SQL语法并通过SQLiteCommand执行。最后,设置cnn为关闭模式,数据库的创建完成。
创建一个登录窗体,并进行界面设计:添加两个lable标签修改为“用户”和“密码”,用于显示,添加两个TextBox用于输入用户名和密码,添加“登录”和“退出”Button,用于事件触发。如图 4.5所示。
图4.5 登录界面图
当用户点击登录按键时:用SQLiteConnectionStringBuilder类创建一个新的链接器变量ConnectionString,使用ConnectionString的DataSource方法来连接上面已经创建好的数据库。创建连接对象,并设置为打开模式。string一个变量sql来存储查询表格的SQL语法。接下来需要在遍历查询,将用户名和密码TextBox的文本框内容赋值于变量id和mima,将数据库Id行和MiMa行的值赋值给Sid和Smima,判断id和Sid的值,如果一致则继续判断mima和Smima的值,匹配成功,则允许用户登录,并打开一个新的测量的主窗体。如果id和Sid的值不一致,则弹出“账号出错”的信息窗口, 如果mima和Smima的值不一致,则弹出“密码出错”的信息窗口。
当用户点击退出按键,则直接在按键事件里触发关闭事件。
4.3图像采集与模板管理
在采集图像前,需要安装选择海康工业相机MVS软件,打开MVS软件,设置IP地址,因为使用的是千兆网相机,所以要设置PC和相机的IP地址,使两者处于局域网,设备可达。设置完IP后,可以采用海康研发的第三方HALCON连接库hAcpMVision.dll打开相机设备,或者使用HALCON的hAcpGigEVision2.dll接口库打开相机设备。
首先设计图像采集和模板管理的界面如图4.6,显示图像的控件需要在工具箱的选择项添加halcondotnet.dll的HWindowControl控件,并设置窗口长宽比例与相机分辨率的长宽比例差不多。
图4.6 图像采集界面模板界面
图像采集功能包括设置曝光值和增益、单帧采集,连续采集和停止连续采集,其功能实现如下:当登录进入测量窗口时,进行初始化,通过HTuple创建窗口句柄变量hwindowHandle,将其赋值为HWindowControl控件的窗口句柄,并通过HOperatorSet.SetDraw、HOperatorSet.SetColor和HOperatorSet.SetColored设置了hwindowHandle绘制轮廓、颜色和宽度。利用HOperatorSet.OpenFramegrabber函数,输入参数驱动名“MVision”和相机名“GEV:00G90003679 MV-CE100-30GM”,打开相机设备,获取设备句柄acqHandle。初始化成功后,通过HOperatorSet.GetFramegrabberParam获取相机设备的曝光值和增益值,并显示在对应的TextBox的文本框上,而TrackBar的滑动事件会通过HOperatorSet.SetFramegrabberParam函数修改“ExposureTime”和“Gain”参数来设置曝光值和增益值。
当点击单帧采集时,利用HOperatorSet.GrabImage和设备句柄acqHandle参数,可以获得图像参数,将其存储于HObject类型 的hImage中,利用HOperatorSet.GetImageSize和HOperatorSet.SetPart将窗体大小适应为图像大小,最后通过HOperatorSet.DispObj显示在窗口上。连续采集时,会通过CancellationTokenSource创建一个新的线程标志位变量cts,并重写了其run()函数,执行单帧采集图片的循环。而点击停止连续采集,会通过cts?.Cancel()来判断取消线程。打开图像会通过文件打开对话框将图像的路径存储在变量path,并通过HOperatorSet.ReadImage将图片显示在窗口上,保存图像会通过文件保存对话框获取路径和文件名,并通过HOperatorSet.WriteImage保存图像。
在基于机器视觉的测量系统中,模板匹配在尺寸测量、位置测量、形状测量和角度测量有着重要作用。如在图像中可以使用模板匹配,可以获得测量物体在图像中的位置,并测量该物体的长度、宽度或直径,也可以用于物体的旋转角度,所以模板匹配在测量领域中可以用于多种测量任务,是一种有效的测量方法。
模板管理包括创建模板,保存模板,加载模板,查找模板,清除模板。其功能实现如下:创建模板时,会利用HOperatorSet.DrawRectangle2在窗口绘制想要的矩形区域,再利用HOperatorSet.GenRectangle2和HOperatorSet.ReduceDomain获得该区域的模板图像,最后通过HOperatorSet.CreateShapeModel和TextBox上的旋转起始角度、旋转角度参数、金字塔级别的数量、不同方式的匹配度量极性的值以及模板图像,来创建模板ID。查找模板时,会通过HOperatorSet.FindShapeModel函数,以及模板ID、角度范围、金字塔数量、最大步进、最小分数和贪婪值等参数获得查找到的模板的行列坐标,角度和分数。最后通过HOperatorSet.VectorAngleToRigid获取原点与查找的模板的行列坐标、角度的仿射变换矩阵,利用HOperatorSet.GetShapeModelContours和HOperatorSet.GenCrossContourXld获取模板轮廓,并对轮廓进行仿射变换,显示。
保存模板主要是获得对话框的文件位置并用HOperatorSet.WriteShapeModel来保存模板ID,以便下次使用。而加载模板,也是获得对话框的文件位置,获得模板ID并显示模板ID的文件名在文本框上。最后,利用HOperatorSet.ClearShapeModel对模板ID进行清除。
图像采集与模板功能实现如图4.7所示。
图4.7 图像采集与模板功能实现图
4.4测量功能
4.4.1 1D测量功能
1D测量功能可以在一维中执行高精度测量,比较适合一些位置和距离是沿直线测量的工件,如排针等。HALCON在一维测量方面,有丰富的测量方式,如边缘检测、线段检测和投影测量等。本课程主要用到HALCON的投影测量工具,在一维工件上进行投影,并测量投影的长度、宽度等参数。通过使用1D测量功能,用户可以测量和分析工件的尺寸和位置,并实现高精度的测量任务。1D测量功能实现如下:
首先设计1D测量功能的界面,如图4.8所示。主要设计滑动块TrackBar和TextBox来修改边缘值、平滑度和ROI宽度值,并限制边缘值和ROI宽度值在0到255之间,设计ComboBox来选择变换值,往列表框添加“all”、“negative”、“positive”三个参数,利用CheckBox判读是否选择边缘对测量,设计一个DataGrid来显示测量结果,设计可以修改公差参数和实际值的TextBox。
图4.8 1D测量功能界面
1D测量功能有画线,标定,测量、灰度折线图显示和报表功能。其功能实现如下:
当画线按键事件触发时,利用HALCON外部函数disp_messag在窗口提示用户绘制测量线,利用HOperatorSet.DrawLine等待用户绘制线段,绘制成功后,会获得绘制直线的起始行列坐标row1、column1和终止行列总标row2、column2。利用row1、column1和row2、column2获得投影矩形的参数如下。
中心坐标的行列:hv_TmpCtrl_Row=1/2(row1+ row2)、hv_TmpCtrl_Column=1/2(column1+ column2)。
矩形角度:获取线段的行列方向的投影值hv_TmpCtrl_Dr =(row1 - row2),hv_TmpCtrl_Dc=(column1- column2),再利用TupleAtan2函数求矩形角度hv_TmpCtrl_Phi = hv_TmpCtrl_Dr.TupleAtan2(hv_TmpCtrl_Dc)。
矩形半长:利用平方根函数TupleSqrt(),得矩形半长hv_TmpCtrl_Len1 = 0.5 * ((((hv_TmpCtrl_Dr * hv_TmpCtrl_Dr) + (hv_TmpCtrl_Dc * hv_TmpCtrl_Dc))).TupleSqrt()。
除此之外,投影矩形还有一个宽的参数,即用户设定的ROI宽度,通过ROI宽度的Text Box的文本框获取,选择宽的 ROI,可以提高轮廓获取的准确度,但在测量线不垂直下,ROI 值较大会产生不好的结果。通过HOperatorSet.GenMeasureRectangle2函数获取测量句柄,除了前面矩形的参数,还需要图像的大小和插值参数,图像大小可以通过HOperatorSet.GetImageSize获取,而插值参数选择“nearest_neighbor”,因为图像噪点低,且该参数比较快获得平均灰度值。
当触发测量事件时,根据边缘对是否框选选择不同的测量方法。未框选时,利用 HOperatorSet.MeasurePos获取测量轮廓的测量结果,需要注意的是该函数平滑度、边缘值和变换参数会直接影响测量结果。平滑度即高斯平滑滤波器平滑轮廓的标准差,计算平滑轮廓的一阶导数,只有那些一阶导数绝对值大于给灰度值参数的候选边缘才被认为是图像中的边缘。而极性会影响返回的边缘,如果设置为“negative”,则只返回灰度值由亮变暗的边缘。如果设置为"positive",则只返回灰度值由暗变亮的边缘,若要确定所有边,则设置为“all”。获取测量轮廓的行,列,灰度值,距离数组后,需要将这些获得参数显示在DataGridView控件上,获取测量轮廓的行的数组长度TupleLength(),赋值给变量i,变量i大于0时,将DataGridView的每一行Row[i]的对应单元Cells的Value赋值成测量数据,利用ToString()改成字符类型。
当框选边缘对时,则利用HOperatorSet.MeasurePairs函数,与HOperatorSet.MeasurePos函数不同的是,该函数会多四个输出参数,因为使用这个函数会在已经获得的轮廓下,将它们进行配对,两两组成一组,所以获得的测量结果是轮廓线对的两组行列坐标,两组灰度值,轮廓对宽度和轮廓对与轮廓对的距离。并且与第一个函数不同的是,如果设置极性为“negative”,则仅返回包围黑暗图像区域的边缘对。对于极性的“positive”,是包围一个明亮的图像区域的边缘对将返回。如果设置为“all”,则由第一条边决定。根据测量对象的位置,可以返回具有光暗光过渡的边缘对或具有暗光暗过渡的边缘对,所以边缘对测量适用于测量相对于背景具有不同亮度的物体。获取测量结果后,跟前面一样将数据显示在DataGridView控件上。
点击折线图,通过HOperatorSet.MeasureProjection函数获得投影线的平均灰度值,再通过HOperatorSet.SmoothFunct1dGauss函数和用户输入的平滑值获得平滑后的灰度值,再通过HOperatorSet.DerivateFunct1d函数获得灰度值导数,利用测量线绘制X坐标,灰度值或者灰度值导数绘制Y坐标。
为了方便用户使用,测量功能的成功和失败事件也会在系统日志显示,1D测量功能实现图如图4.9和图4.10所示。
图4.9 1D测量功能界面与实现
图4.10 1D测量结果
4.4.2卡尺测量功能
Halcon卡尺测量功能比较适合测量简单形状的工件,如圆,矩形和椭圆,也可以测量两直线的角度或距离,它的实现主要用到二维计量。
首先,需要设计卡尺测量的界面,如图4.11所示。主要添加的控件是绘制直行、圆、矩形和椭圆按键。
图4.11 卡尺测量的界面
点击绘制圆按键,图像窗口会提示用户绘制圆的形状,然后利用HOperatorSet.DrawCircleMod在窗口显示圆的模型,用户绘制时需要贴近工件,然后点击右键,即可获得该圆心的行hv_Row、列hv_Column和半径 hv_Radius。先通过HOperatorSet.CreateMetrologyModel创建一个新的计量句柄hv_MetrologyHandle,再通过HOperatorSet.AddMetrologyObjectCircleMeasure和hv_Row、hv_Column和hv_Radius参数给计量句柄hv_MetrologyHandle添加圆的计量参数。
若点击矩形、椭圆和直行按键,则会通过HOperatorSet.DrawRectangle2Mod函数获取矩形的中心、角度、长和宽参数,通过HOperatorSet.DrawEllipseMod函数获取椭圆中心、角度、长半轴和短半轴参数,通过HOperatorSet.DrawLineMod获取直行的起始点和终点坐标。通过HOperatorSet.AddMetrologyObjectRectangle2Measur添加矩形计量句柄,通过HOperatorSet.AddMetrologyObjectEllipseMeasure添加椭圆的计量参数。HOperatorSet.AddMetrologyObjectLineMeasur添加直线的计量参数。
也可以通过add_metrology_object_generic添加任意形状的计量参数。
然后再点击测量功能,通过HOperatorSet.ApplyMetrologyModel,输入的测量图像ho_Image和hv_MetrologyHandle,测量并拟合计量模型中计量对象的几何形状。如果拟合成功,会通过HOperatorSet.GetMetrologyObjectResultContour获取拟合后的轮廓和HOperatorSet.GetMetrologyObjectMeasures获取卡尺的矩形XLD轮廓,并用HOperatorSet.DispObj将拟合轮廓和卡尺轮廓显示在窗口上。最后通过HOperatorSet.GetMetrologyObjectResult可以获得测量模型的测量结果Parameter,再将Parameter的数值显示在DataGridView控件上。拟合失败,则提示用户重新绘制圆或者修改卡尺参数。
卡尺测量功能如图4.12和4.13所示。
图4.12 卡尺测量功能
图4.13 卡尺测量结果
4.4.3 2D测量功能
2D测量功能要比卡尺测量功能的测量范围广泛,卡尺测量需要绘制卡尺,事先定义边界,而且只能测量简单形状的距离和尺寸,2D测量通过图像处理、区域处理和轮廓处理来解决较复杂的测量任务,不需要事先绘制卡尺。
首先需要设计2D测量功能的界面,添加圆拟合和连续圆拟合按键,如图4.14所示。
图4.14 2D测量界面
点击圆拟合,采用Blob分析进行区域处理。由于采集的图像噪声比较低,所以跳过预处理。通过HOperatorSet.Threshold先将图像二值化,获取感兴趣区域ho_Regions,再通过HOperatorSet.Connection打散连通域,获得打散区域ho_ConnectedRegions,通过HOperatorSet.SelectShape函数,设置“roundness”不低于0.8和“outer_radius”的面积在50到2000之间,获得所有想要的完整圆的区域。接下来,通过HOperatorSet.CountObj和HOperatorSet.SortRegion对所有圆区域计数和排序,获得数量hv_Number和排序好的区域ho_SortedRegions。设计循环体,循环数为hv_Number,通过HOperatorSet.SelectObj获得每次循环的ho_ObjectSelected对每一个圆区域进行处理。通过HOperatorSet.FillUp填充圆区域为ho_RegionFillUp,再进行形态学将区域进行处理,通过HOperatorSet.DilationCircle对区域进行膨胀,通过HOperatorSet.ErosionCircle对区域进行腐蚀获得圆度较高的区域。最后,通过HOperatorSet.GenContourRegionXld获取区域的轮廓ho_Contours,再通过HOperatorSet.FitCircleContourXl对ho_Contours进行圆拟合,获得圆的圆心和半径数据,再显示在数据列表上。
2D测量功能如图4.15和4.16所示。
图4.15 2D测量结果报表
4.16 2D测量结果
4.5标定、结果判断和报表
标定一般需要设置相机的内参和外参,通过相机的视场选择合适的保定板,再通过标定方式获取相机内外参,将像素坐标转化成世界坐标后,可以获取实际值与测量的距离的像素值的比值。本课程采用的镜头为双远心镜头,其畸变率较低,采用背光源的打光方式,图像的环境影响较小,所以本课程采用的标定方式是将标准件的实际值与测量的像素值的比值作为转换值。
定义一个double类型的全局变量bl=1,选择一个标准件进行测量,将TextBox的实际值与测量像素值的比值赋值给bl。
在判断bl不等于1的情况下,对测量结果进行判定,将TextBox的实际值与公差的上限值和下限值获得工件最大值与最小值赋值给变量Dis_Max和Dis_Min,判断测量数据变量DS的TupleLength()大于0,测量数据DS.Darr的对应数据乘以bl的值赋值给变量Ds,若Ds在Dis_Max和Dis_Min,则判定为“OK”,否则为“NG”,再将结果数据存储在List<string>数据类型中。
报表功能的实现:先设计一个新的报表窗口Form2,主要控件是读取数据和导出按键。用户点击报表按键时,创建一个Form2的form2,通过form2.Show()显示窗口。创建两个List<string>类型存储测量数据和结果判断,点击读取数据按键,会将测量数据和结果判断的值显示在对应的数据行列图中。点击导出按键,SaveFileDialog 一个新的变量saveDialog,通过saveDialog.ShowDialog()显示保存窗口,获取导出位置path,设置文件类型为.xls。当path不为空时,通过path,构建一个新的StreamWrite变量sw,创建一个新的StringBuilde变量sb,通过sb.Append对DataGridView的行列数据进行保存,最后通过sw.Write函数对表格进行写入,其功能如图4.17所示。
图4.17 报表功能图
第五章:系统实验与结果分析
5.1 1D测量结果分析
1D测量选用工件为网络排阻,其实际图与尺寸参数图如图5.1和图5.2,测量数据为排阻引脚间距,标准值为2.54mm,其公差上下限为0.05mm。
图5.1 排阻实际图
图5.2 排阻尺寸参数图
相对误差主要用来评价测量结果的准确度,相对误差越小准确度越高。方差和均方差都是统计学中常用的概念,方差和均方衡量数据集的离散程度或波动性。它们的作用是帮助分析数据的分布情况、稳定性以及预测模型的性能。
根据排阻数据,求得相对误差最大为0.025866,相对误差最小为0.000197,方差为0.0004595,均方为0.0220234,虽然19组数据中两个是不合格的,考虑工件本身有缺陷,相对误差较小并且方差和均方差较小,1D测量功能有良好可靠性,测量数据如表5.1所示。
表5.1 排阻测量数据表
测量次数 | 测量数据 | 测量结果 |
1 | 2.6057mm | NG |
2 | 2.5500mm | OK |
3 | 2.5549mm | OK |
4 | 2.5421mm | OK |
5 | 2.5388mm | OK |
6 | 2.5536mm | OK |
7 | 2.5395mm | OK |
8 | 2.5146mm | OK |
9 | 2.5469mm | OK |
10 | 2.5397mm | OK |
11 | 2.5937mm | NG |
12 | 2.5209mm | OK |
13 | 2.5503mm | OK |
14 | 2.5499mm | OK |
15 | 2.5423mm | OK |
16 | 2.5174mm | OK |
17 | 2.5552mm | OK |
18 | 2.5460mm | OK |
19 | 2.5384mm | OK |
5.2卡尺测量结果分析
卡尺测量选用工件为单头焊片铜线耳垫圈圆形环形焊接端子铜接线片铜垫片M4.2,其内径为4.2mm,正负公差为0.01mm,其实际图与尺寸图如图5.3和图5.4所示。
图5.3 实际图
图5.4 尺寸图
铜垫片M4.2的测量采用单一零件测量,测量结果均满足公差要求,且从测量数据看,其相对误差最大为0.001759,相对误差最小为0,方差为8.5825E-06,均方为0.003059857,铜垫片M4.2的误差,方差和均方差数值都是极小的,这说明测量数据非常精确和一致,卡尺测量功能具有较高的测量精度和可靠性,数据如表5.2所示。
表5.2 铜垫片测量数据表
测量次数 | 测量数据 | 测量结果 |
1 | 4.2000mm | OK |
2 | 4.1998mm | OK |
3 | 4.1994mm | OK |
4 | 4.1965mm | OK |
5 | 4.1976mm | OK |
6 | 4.1982mm | OK |
7 | 4.1972mm | OK |
8 | 4.2074mm | OK |
9 | 4.1964mm | OK |
10 | 4.1967mm | OK |
11 | 4.2016mm | OK |
12 | 4.1990mm | OK |
5.3 2D测量结果分析
2D测量选用测量工件为贴片电容的定位圆孔,贴片电容的定位圆孔尺寸通常由电路板设计的要求决定。一般来说,这个尺寸要能够确保贴片电容在焊接时定位准确,并且能够稳固地固定在电路板上。最常见的尺寸可能是直径略大于贴片电容的封装尺寸,以确保贴片电容能够准确地插入并留有一定的余量以确保焊接成功,对于标准的0603封装(尺寸为0.06 x 0.03 英寸),定位圆孔的半径稍大于0.7mm即可,其实际图如图5.5所示。
图5.5 贴片电容
根据数据,求得相对误差最大为0.075907591,相对误差最小为0.014362152,方差为0.00012336,均方为0.011335803。贴片电容的定位圆孔的测量采用多个测量,测量结果有一个大于0.75mm且从测量数据看,贴片电容的定位圆孔的误差值较大,但在实际生产中,对贴片电容的定位圆孔尺寸没有严格限制,满足大于0.7mm即可,所以该贴片电容2D测量的测量数据误差值较大与实际生产要求较宽有关,而其方差和均方差数值在适合的范围内,所以2D测量功能适用于多个工件测量并且满足测量要求。数据如表5.3所示。
表5.3 贴片电容测量数据表
测量次数 | 测量数据 | 测量结果 |
1 | 0.7374mm | OK |
2 | 0.7129mm | OK |
3 | 0.7356mm | OK |
4 | 0.7494mm | OK |
5 | 0.7102mm | OK |
6 | 0.7348mm | OK |
7 | 0.7575mm | NG |
8 | 0.7359mm | OK |
9 | 0.7355mm | OK |
10 | 0.7437mm | OK |
11 | 0.7360mm | OK |
12 | 0.7364mm | OK |
13 | 0.7466mm | OK |
14 | 0.7317mm | OK |
15 | 0.7410mm | OK |
16 | 0.7345mm | OK |
17 | 0.7392mm | OK |
18 | 0.7483mm | OK |
19 | 0.7435mm | OK |
20 | 0.7124mm | OK |
21 | 0.7364mm | OK |
22 | 0.7360mm | OK |
23 | 0.7290mm | OK |
24 | 0.7483mm | OK |
25 | 0.7435mm | OK |