《12-机器视觉应用实例分析教学课件.pptx》由会员分享,可在线阅读,更多相关《12-机器视觉应用实例分析教学课件.pptx(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、机器视觉及应用第十二章机器视觉应用实例分析3/主要内容 布料瑕疵检测 点阵字符分割与识别 Halcon与c#混合编程 镜片自动分拣4/1、在食品饮料行业,包装材料上需要打印生产日期等字符信息。尽管目前已经有不少企业采用激光打印可以得到更清晰的字符。但是,还存在大量采用传统的点阵字符喷码机进行字符打印。在打印过程中,由于喷码机、传送带、产品位置等都可能出现不可避免的故障,导致打印出来的字符存在各种缺陷。例如,喷码机的喷头出现油墨堵塞导致字符不清晰,传送带速度发生变化导致字符打印位置偏差,产品位置变动导致没有打印上字符等。生产日期是产品重要的标识,必须严格保证每个产品上的生产日期清晰可见。因此,需
2、要对其进行检测。5/2、该应用所使用的算法主要有二值化算法、形态学算法和分类识别算法。分类识别算法属于机器学习算法。作为数字图像处理中比较高级的算法。在此示例中,将简单介绍其原理以及应用方法。6/3、具体识别过程。(1)确定字符区域采用二值化算法对字符区域进行定位,为了避免光照变化的影响,采用动态阈值对其进行阈值分割。然后对分割后的区域进行区域闭运算操作,闭运算的结构元素可以选择比较大的圆形结构。由此可以将字符区域进行连通,再通过面积和高度特征对连通区域进行过滤,由此得到完整的字符区域。7/3、具体识别过程。(2)分割单个字符确定字符区域首先通过动态阈值算法分割出字符区域;然后,利用闭运算将单
3、个字符进行连通。采用比较小的结构元素进行闭运算。8/3、具体识别过程。(3)对分割字符进行排序字符分割之后,需要保证每个字符区域都按照图中所示顺序排列,需要对字符进行排序,这样是为了保证训练的结果与每个区域一一对应。对于图像中的字符区域,可以采用最小包围矩形区域的坐标来进行排序。采用此种方式排序,需要满足字符区域都处于水平位置。如果字符与水平线之间的角度较小,即使字符有一定的倾斜角度,也不会影响排序结果。如果角度比较大,需要对其进行倾斜校正后再排序。9/3、具体识别过程。(4)字符训练与识别在所有的识别中,首先需要对识别的对象进行训练。训练相当于人类的学习过程,对于计算机而言,只有学习过的对象
4、,才能够在下次遇到的时候进行识别。训练本质是将某个对象进行一种独特的表示。这种表示通常是一个向量,里面包含了各种数字。在进行识别时,通过判断待识别对象与训练中的每个对象的相似度,选择最相似的作为识别结果。训练出来的结果如果唯一性比较好,识别的结果也会比较好。在此过程中,需要保证有足够的训练的对象,否则将出现欠拟合的情况,但是训练对象过多,又可能出现过拟合的情况。因此,需要选择合适的训练数量10/3、具体识别过程。(4)字符训练与识别在本实例中,采用的是支持向量机(SVM,Support Vector Machine)的方式实现的训练和识别。具体的示例代码如例12-1所示。识别结果11/1、提取
5、凹面镜片区域采用动态阈值或局部阈值进行分割空洞填充、连通域过滤取凹面镜片12/2中心位置查找提取区域的边界轮廓,然后根据轮廓拟合圆的方式实现查找中心位置具体代码实现请见例12-213/布料在生产过程中,不可避免会产生各种污染,由此在布料上留下瑕疵,瑕疵的存在影响布料的美观。在生产过程中,需要将布料中的瑕疵检测出来。14/彩色图像分解第一通道图像第二通道图像第三通道图像灰度化图像彩色图像分解后的图与直接灰度化的图15/瑕疵区域提取瑕疵区域提取结果相减结果固定阈值分割结果具体代码请见例12-316/1、图像处理算法导出在halcon中选择菜单“文件”-“导出”。出现导出对话框。在该对话框中第二行选
6、择导出的类型,第一行选择导出的文件路径并命名导出文件的名称。在“导出范围”中选择“程序”,在“函数属性”中将所有框都选中,在“窗口导出”中选择“使用导出模板”,在“编码”中选择“原始”。然后点击“导出”按钮。将会在指定路径下生成该文件。由此完成图像处理算法的导出。17/1、图像处理算法导出halcon算法导出界面18/2、系统设计与算法集成打开visual studio 2015,选择“新建项目”19/2、系统设计与算法集成选择c#项目,中间的对话框中选择“windows窗体应用程序”,在下面的名称栏输入项目名称20/2、系统设计与算法集成在的“解决方案资源管理器”中,鼠标右键选择“引用”,点
7、击添加应用,点击“浏览”,选择halcon安装目录中的halcondotnet.dll文件21/2、系统设计与算法集成在图中,用鼠标右键选择“指针”,然后选择“选择项”,在对话框中选择顶部的“.NET Framework组件”,然后点击“浏览”按钮,选择halcondotnet.dll文件,出现两个打“”的组件,此组件是halcon用于图像显示的组件,点击“确定”完成,将会在工具箱中添加两个控件。22/2、系统设计与算法集成在下图所示位置,选择配置管理器,弹出配置管理器。选择“活动解决方案平台”中的“AnyCPU”下拉框,选择“新建”,出现新建解决方案平台,选择x64。点击“确定”按钮,完成项
8、目平台配置。具体是x86还是x64,根据安装的halcon来确定。本例中选择x6423/2、系统设计与算法集成在halcon的安装目录中,找到halcon.dll文件,将halcon.dll文件复制到项目文件中24/2、系统设计与算法集成鼠标右键选择项目“test”,然后选择“添加”-“添加现有项”,如图12.22所示,选择导出的charNum.cs文件,将该文件加入到项目中。至此,项目的准备工作完成。25/2、系统设计与算法集成项目的界面设计结果(控件设计)控件类型控件类型控件名称控件名称控件控件text属性属性hWindowControlhWindowControl1hWindowCont
9、rol1labellabel1低阈值TextBoxtb_lowThr0labelLabel2高阈值TextBoxtb_highThr255labelLabel3目标字符数量TextBoxtb_targetCharNum30Buttonbn_openImage打开图像Buttonbn_test测试Label1Label4测试结果TextBoxtb_result26/2、系统设计与算法集成项目的界面设计结果(界面设计)27/2、系统设计与算法集成双击解决方案资源管理中的charNum.cs文件,可以看到这是从halcon中导出的算法程序。在这个程序中,有三个函数,分别是action、InitHal
10、con和RunHalcon函数。其中的action函数是halcon设计的图像处理过程,RunHalcon函数调用action函数来执行图像处理过程,如果在主窗体的“测试”按钮中调用RunHalcon函数,传入正确的参数,即可完成整个图像处理过程。此外,也可以在“测试”按钮直接调用action函数来完成图像处理过程。在本例中,直接从“测试”按钮调用action函数。由于需要将参数传入action函数中,因此,需要对action函数进行修改。修改完成的action函数如下所示。public int action(HObject ho_Image,int lowThr,int highThr, r
11、ef HObject ho_ConnectedRegions) HObject ho_Regions; HTuple hv_Number = new HTuple(); HOperatorSet.Threshold(ho_Image, out ho_Regions, lowThr, highThr); HOperatorSet.Connection(ho_Regions, out ho_ConnectedRegions); HOperatorSet.CountObj(ho_ConnectedRegions, out hv_Number); return hv_Number;28/2、系统设计与算法集成双击设计界面上的“打开图像按钮”和“测试按钮”,打开Form1.cs的程序编辑界面29/2、系统设计与算法集成按照书上例子,在Form1.cs中完成书中的代码,程序运行结果如图: