工业机器视觉技术及应用课件:机器视觉应用案例_第1页
工业机器视觉技术及应用课件:机器视觉应用案例_第2页
工业机器视觉技术及应用课件:机器视觉应用案例_第3页
工业机器视觉技术及应用课件:机器视觉应用案例_第4页
工业机器视觉技术及应用课件:机器视觉应用案例_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

机器视觉应用案例8.1基础知识储备8.2机器视觉应用

8.1基础知识储备

8.1.1获取相机参数和信息

1.获取相机输出参数打开halconHDevelop软件,选择菜单“助手”中的“打开新的ImageAcquisition”选项。在“资源”框中,选择“图像获取接口”,单击“检测”按钮即可得到相机输出接口,如GigEVision(如图8-1所示)。在“连接”框中,选择“连接”和“检测”,并在“代码生成”框下,单击“插入代码”按钮即可获得相机参数和代码。图8-1

Halcon获取相机输出接口界面

2.查看相机实时输出结果

选择“连接”选项,单击“连接”和“实时”按钮,在“图形窗口”中即可观测到实时输出的图像,如图8-2所示。

图8-2连接相机界面

8.1.2相机标定

Halcon提供了自制标定板和自带标定两种标定方法。

1.自制标定板

一般选用标定板尺寸为 30 mm × 30 mm,将标定板放置在镜头视野内来实现标定。Halcon提供了制作标定板的程序,制作标定板算子如下所示:

gen_caltab(::XNum,YNum,MarkDist,DiameterRatio,CalTabDescrFile,CalTabPSFile:)

2.自带标定

在Halcon中,选择菜单“助手”中的“打开新的Callibration”选项,弹出如图8-3所示的窗口。

(1)选择模板。在“安装”选项中,“描述文件”选为“caltab_30mm.descr”,该文件在安装目录MVTec/HALCON-11.0/calib/caltab_30mm.descr下,如图8-3所示。

图8-3相机标定

(2)加载标定板图像。在“标定”选项中,选择“图像文件”并加载,图像文件在Halcon安装路径“MVTec\HALCON-11.0\examples\images\scratch”中,或者选择“图像采集助手”,将标定板放在相机视野范围内,单击“采集”按钮即可,如图8-4所示。

图8-4加载标定板图像

(3)滤除低品质图像。在“标定”选项中,加载好图像后,点击“设为参考位姿”按钮,并将“警告级别”设置为70,检测出品质问题的所有图片,点击“标定”按钮完成标定,如图8-5所示。

图8-5滤除低品质图像

(4)生成代码。在“代码生成”选项下,设置“生成的模式”为“标定数据(Tuple)”,点击“插入代码”按钮,标定代码则插入到了“程序编辑器”中,如图8-6所示。

图8-6生成代码

程序解释:语句1、2读取系统中图像 ‘pioneer’,命名为Image,并显示图像;语句3表示程序暂停一下;语句4将rgb图像转换为灰度图像;语句5、6、7为标定参数;语句8产生径向畸变映射图,MapFixed是输出,CamParOriginal为标定后的参数,CamParVirtualFixed是输出的参数,‘bilinear’

为映射类型;语句9利用映射消除图像畸变算子。

在运行Halcon程序后,可消除图像畸变。

8.2机器视觉应用

8.2.1

二维码识别

从软件功能上看,软件主要分为主程序部分、相机基本功能算法实现部分和视觉算法处理部分三部分。主程序部分主要包括各类控件函数、子函数、初始化函数等。相机基本功能算法实现部分包括相机的打开、采集数据、传输数据等;视觉算法处理部分包括二维码的识别及显示功能等。

软件设计包括软件界面设计和软件程序设计。

1.软件界面设计

根据需求,增加控件,设置控制属性,以设计友好的人机界面。本应用中,为了规范命名,特规定控件命名规则为:

XPU_控件缩写_控件含义

(1)添加7个菜单项控件类型(MenuStrip),用于引导用户执行相应的操作。

控件属性:Name(XPU_TSM_LinkCamera)、Text(相机连接)。

控件属性:Name(XPU_TSM_OneShot)、Text(单幅采集)。

控件属性:Name(XPU_TSM_ContinuousShot)、Text(连续采集)。

控件属性:Name(XPU_TSM_Stop)、Text(停止采集)。

控件属性:Name(XPU_TSM_ContinuousShot)、Text(连续采集)。

控件属性:Name(XPU_TSM_OpenImage)、Text(打开图像)。

控件属性:Name(XPU_TSM_SaveImage)、Text(保存图像)。

(2)添加2个列表控件类型(ListView):用于按照列表显示格式化后的数据,可增加软件界面的美观性。一个列表控件用于显示相机参数;另一列表控件显示输入输出的消息。

显示相机控件属性为:Name(XPU_LV_DeviceListView)、View(Tile)、HeaderStyle(Clickable)、Dock(Top)。

显示输入输出控件属性为:Name(XPU_LV_ListViewMessage)、View(Details)、HeaderStyle(NonClickable)、Dock(Fill)、集合(Name(ColumHeader)、Text(详细)(ListViewDevice)。

(3)添加HWindowControl控件:从“工具箱”中找到HWindowControl控件拖入窗体即可。HWindowControl控件属性:Name(XPU_hWindowControl)、Dock(Fill)。

2.软件程序设计

软件程序设计主要包括各类库的包含、主程序、相机程序、二维码识别程序等模块。在程序设计时,建议相机参数设置Gain(Raw)为0,ExposureTime(Raw)为35

000,Width为2592,Height为1944。

1)连接相机

第一步,界面设计。在原有基础上增加控件类型并设置属性。增加窗体控件、HWindowControl控件、ListView控件、Timer控件各一个。

窗体控件属性:Size(1139,768)、Text(西安工程大学机器人与智能装备技术研究所)。

HWindowControl控件属性为:Name(XPU_hWindowControl)、Size(854,649)、ImagePart

(0,0,2592,1944)。宽与高之比必须为4∶3,否则无法得到理想的效果。

按钮属性:Name(XPU_TSM_LinkCamer)、Text(相机连接)。

ListView控件属性为:Name(XPU_LV_DeviceListView)、Dock(Fill)、HeaderStyle(Clickable)、Dock(Top)。

Timer控件属性:Name(XPU_Timer_UpdateDeviceList)、Enable(True)、Internal(5000)。

第二步,关联相机资源。将工业相机动态连接库(PylonC.NET.dll、PylonC.NET.xml、PylonC.NETSupportLibrary.dll、PylonC.NETSupportLibrary.dll)中四个文件放入用户应用程序的目录下新建的“bin”文件中。

第三步,链接“动态链接库”。在“解决方案资源管理器”中“引用”相机动态链接库,并在主函数Form_Mains.cs文件头中声明相机动态库和Halcon动态库。

usingPylonC.NET; //Basler

usingPylonC.NETSupportLibrary; //Basler

第四步,连接相机。

(1)设置主程序入口。打开Program.cs,添加相机库函数(usingPylonC.NET),并添加如下代码,以实现正确引导。

(2)实例化一个相机。在Form_Main.cs中publicpartialclassForm_Main:Form的第一行上加入代码:

privateImageProviderXPU_m_imageProvider=newImageProvider();

3)为了软件鲁棒稳定,打开相机前先停止相机捕获图像。实现方法为在Form_Main.cs中publicForm_Main()函数后定义Stop()函数。

(4)连接相机。给“连接相机”按钮编写代码:

(5)编写ListView控件事件。第一是“选择变化事件”;第二是“更新设备列表事件”;第三是“计时器变化事件”。

①选择变化事件:

②更新设备列表事件:

③计时器变化事件:

上述程序已测试成功,如图8-7所示。

图8-7相机测试成功界面

2)单幅采集

第一步,在原有基础上,增加按钮、TabControl控件及设置属性。

按钮控件属性为:Name(XPU_TSM_OneShot)、Text(单幅采集)。

TabControl控件属性为:Name(XPU_TC_Tab)、Size(868,,680)。

声明全局代码如下:

publicstaticHImageHoImage; //全局变量Halcon用的图像变量

privateBitmapXPU_m_bitmap=null; /*Thebitmapisusedfordisplayingtheimage.*/

boolcheck=false;

第二步,编写按钮代码。

①增加“单幅采集”按钮,单击事件,代码如下:

privatevoidXPU_TSM_OneShot_Click(objectsender,EventArgse)

{

XPU_OneShot();/*Startsthegrabbingofoneimage.*/

}

②在按钮事件代码之前首先编写XPU_OneShot函数:

③在Form_Main()函数中注册:

④实现相机设备基本代码。基本代码包括:

·XPU_OnGrabErrorEventCallback代码:

·XPU_OnDeviceRemovedEventCallback代码:

·XPU_OnDeviceOpenedEventCallback代码:

·XPU_OnDeviceClosedEventCallback代码:

·XPU_OnGrabbingStartedEventCallback代码:

·XPU_OnGrabbingStoppedEventCallback代码:

·XPU_OnImageReadyEventCallback代码:

⑤图像格式与Halcon图形变量HImage转换函数,

⑥XPU_EnableButtons代码

第三步,新建工程Pylon.NETSupportLibrary,该工程中包含相机操作的若干函数。

在“解决方案资源管理器”的“解决方案”下“添加”“新建项目”“类库”Pylon.NETSupportLibrary.cs,建立三个“类”程序:BitmapFactory.cs、DeviceEnumerator.cs、ImageProvider.cs,或直接将已有的Pylon.NETSupportLibrary.cs添加进来,并在主函数中“引用”相机动态链接库。

第四步,测试。点击“单幅采集”按钮,测试成功,如图8-8所示。

图8-8单幅采集界面

3)相机参数设置的用户控件

通过“用户控件”方法实现相机参数的设置:首次建立用户控件,需运行程序。运行后可自动添加到“工件箱”中;然后,将用户控件直接拖入需要的窗体中,设置响应参数即可。

(1)设计用户控件。

建立用户控件:在“Pylon.NETSupportLibrary”下“添加”“用户控件”项目,命名为EnumerationComboBoxUserControl.cs。

在EnumerationComboBoxUserControl.cs设计下,添加文本输入控件(Label)(属性:Name(XPU_LN_LabelName)、Text(ValueName:))和组合框(comboBox)(属性:Name(XPU_CB_comboBox)、DropDownStyle(DropDownList))。

(2)编写用户控件功能代码。

第一步,声明头文件函数。

usingPylonC.NETSupportLibrary;

usingPylonC.NET;

第二步,声明用户变量及函数。

第三步,连接相机参数。

第四步,定义“用户控件”节点新的属性。

第五步,相机事件代码实现。主要代码包括:

·XPU_DeviceOpenedEventHandler代码:

·XPU_DeviceClosingEventHandler代码:

·XPU_NodeCallbackEventHandler代码:

第六步,子函数功能代码实现,代码包括:

·XPU_Reset函数功能代码:

·XPU_UpdateValues函数功能代码:

第七步,响应事件代码实现。响应事件代码包括初始状态设置和SelectedIndexChanged实现。

·初始状态设置代码:

·SelectedIndexChanged实现代码:

(3)增添用户控件。

第一步,建立用户控件:在“Pylon.NETSupportLibrary”下“添加”“用户控件”项目,命名为SilderUserControl.cs。

在EnumerationComboBoxUserControl.cs设计下,添加trackBar控件(属性:Name(XPU_TB_Silder));4个Label控件(属性:Name(XPU_Label_Min)、Text(Min);Name(XPU_Label_Max)、Text(Max);Name(XPU_Label_ValueName)、Text(ValuName);Name(XPU_Label_CurrentValue)、Text(0);)。

第二步,编写功能代码。

①声明头文件函数。

②声明用户变量及函数。

③连接相机参数。

④定义“用户控件”节点新的属性。

⑤相机事件代码实现。相机事件代码包括:

·DeviceOpenedEventHandler代码:

·XPU_DeviceClosingEventHandler代码:

⑥子函数功能代码实现。子函数功能包括:

·XPU_Reset函数功能:

·XPU_UpdateValues函数功能:

⑦响应事件代码实现。响应事件代码包括初始状态设置代码和slider-Scroll模块代码。

·初始状态设置代码:

·slider_Scroll模块代码:

设计好编译运行成功后,在“工具箱”中即出现相应的用户控件。

(4)布局主窗体。

①增加控件,设置属性。

向主窗体增加GroupBox控件(属性:Name(XPU_GroupBox_CameraParameter)、Text(相机参数设置))。将两个用户控件1和四个用户控件2拖入GroupBox中。

用户控件1(属性:Name(XPU_UserC_ComboBox_TestImage)、NodeName(TestImageSelector)、Name(XPU_UserC_ComboBox_PixelFormat)、NodeName(PixelFormat))。

用户控件 2 (属性:Name(XPU_UserC_Silder_Silder_Gain)、NodeName(GainRaw)、Name(XPU_UserC_Silder_Silder_ExposureTime)、NodeName(ExposureTimeRaw)、Name(XPU_UserC_Silder_Silder_Width)、NodeName(Width)、Name(XPU_UserC_Silder_Silder_Height)、NodeName(Width))。

②设置相机参数代码。

在主函数Form_Main中,添加设置相机参数代码:

③相机参数设置程序测试,如图8-9所示。

图8-9相机参数设置

4)连续采集

第一步,增加按钮控件及属性设置。

控件属性:Name(XPU_TSM_ContinuousShot)、Text(连续采集);

第二步,编写按钮代码。

第三步,“连续采集”程序测试如图8-10所示。

图8-10连续采集

5)停止采集

第一步,增加按钮控件及属性设置。

控件属性:Name(XPU_TSM_Stop)、Text(停止采集);

第二步,编写按钮代码。

第三步,“停止采集”程序测试,如图8-11所示。

图8-11停止采集

6)保存和打开图像

第一步,增加两个按钮控件及属性设置。

控件属性:Name(XPU_TSM_OpenImage)、Text(打开图像);

控件属性:Name(XPU_TSM_SaveImage)、Text(保存图像);

第二步,编写按钮代码。

①“打开图像”代码实现:

②“保存图像”代码实现:

第三步,保存图像和打开图像测试,如图8-12所示。

图8-12保存图像和打开图像

7)开始检测

第一步,增加按钮控件及属性设置。

第二步,编写按钮代码。

第三步,建立算法类库。

在“解决方案资源管理器”中,“添加”“新建项目”的“类库”项目,命名为Algorithm。建立两个“类”程序Result.cs和Algorithm.cs,也可直接将现成项目添加进去。

(1)在Algorithm项目下,“添加”“新建项”的“类”文件,命名为Results.cs,并定义变量:

(2)在Algorithm项目下,“添加”“新建项”的“类”文件,命名为Algorithm.cs,导入从Halcon生成的代码。具体流程如下:

①声明Halcon库文件:

usingHalconDotNet;

②在publicclassAlgorithm中声明Results:

Resultsresult=newResults();

(3)在Halcon的HDevelop软件中编写二维码检测的算法,

(4)导出C# 语言。将上述代码导出为“C#”语言,导出参数设置,包括导出范围(程序)、函数属性、窗口导出和编码(UTF-8)。

(5)编写整合优化Halon二维码识别主程序。将Halcon导出的C# 代码放入主函数中,进行优化。

将导出的函数复制到初始化函数publicvoidInitHalcon()、运行入口函数publicvoidRunHalcon(HTupleWindow)、子函数privatevoidaction()、publicvoiddisp_message()和publicvoidset_display_font()等函数中,并进行修改。

第四步,关联主函数。

在主项目中,“引用”下“添加引用”Algorithm项目,并且在主函数代码声明Algorithm命名控件:usingAlgorithm。

第五步,结果测试。

二维码检测算已测试,如图8-13所示。

图8-13二维码检测

8.2.2离线功能实现

该示例功能是读取彩色图像并灰度转换。

1.编写Halcon代码

(1)在Halcon的HDevelop软件编写灰度转换代码:

(2)导出C# 语言。将上述代码导出为C# 语言,导出参数设置包括:导出范围(程序)、函数属性、窗口导出和编码(UTF-8)。导出后的程序有三个子函数action()、InitHalcon()和RunHalcon(HTupleWindow)。

2.编写C# 主程序

(1)编写整合优化主程序。将Halcon导出的C#代码放入主函数中。从导出的Halcon的C#中拷贝HDevelopExport类到命名空间中,并利用Halcon代码构造读取图像函数XPU_ReadImage和彩色转灰度函数XPU_ImageProcessing。

(2)编写按钮控件代码。

①在主函数中定义两个变量:

HDevelopExportXPU=newHDevelopExport();

stringImagePath;

②添加“打开图像”按钮响应事件:

③添加“开始检测”按钮响应事件:

XPU.XPU_ImageProcessing();

3.结果测试

“彩色转灰度”结果测试如图8-14所示。

图8-14彩色转灰度

8.2.3形状检测

形状检测程序是在上述相机连接、数据采集及保存打开等基础上设计的,相关功能模块不变,仅对形状检测算法进行分析。

1.编写Halcon代码

(1)检测照片中图像,且标记中心位置及其方向。

(2)导出C# 语言。将上述代码导出为“C#”语言,导出参数设置为:导出范围(程序)、函数属性、窗口导出和编码(UTF-8)。导出后的程序有子函数disp_continue_message、disp_message、set_display_font()、action()、InitHalcon()和RunHalcon(HTupleWindow)。

2.编写形状测试算法代码

将Halcon导出的算法模块复制到Algorithm.cs程序中,并修改子函数action程序。在acti

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论