基于HALCON和VC_混合编程的视觉测量系统设计
- 格式:pdf
- 大小:1.83 MB
- 文档页数:5
小杨说事-基于halcon的多相机坐标系统一原理个人理解
首先,多相机坐标系统是指使用多个相机来进行三维空间的测量和定位,以实现对目标物体在三维空间中的位置和姿态的准确识别和定位。
在基于Halcon的多相机坐标系统中,首先需要将多个相机通
过标定来获取相机内外参数,包括相机的焦距、畸变系数等内参数,以及相机之间的相对位置和姿态(外参数)。
标定过程一般会使用标定板或者特定的物体进行拍摄,通过计算和估计的方法来求解相机的参数。
然后,在实际运行时,通过多个相机同时拍摄目标物体,在图像中利用特征点或者标志物来进行匹配和定位。
通过相机的内外参数,可以将图像中的像素点转换为世界坐标系中的三维点。
在进行多相机的坐标转换时,需首先建立一个参考相机,将参考相机的坐标系定义为世界坐标系。
接下来,通过计算和测量,可以计算出每个相机的相对位置和姿态,以及相机光学中心与世界坐标系之间的变换矩阵。
根据变换矩阵和相机的内外参数,可以将每个相机的图像像素点转换为世界坐标系中的三维点。
最后,通过三维坐标点的计算和处理,可以实现目标物体的定位和姿态的准确识别和追踪。
总的来说,基于Halcon的多相机坐标系统利用多个相机来进
行三维空间的测量和定位,通过标定获取相机参数,利用特征匹配和计算来实现对目标物体位置和姿态的准确识别和定位。
系统具有较高的精度和稳定性,可以广泛应用于机器视觉领域中的三维重建、定位和追踪等应用。
基于HALCON的双目立体视觉系统实现双目立体视觉系统是一种模拟人眼观察物体的视觉系统,通过两个摄像机模拟人眼的双眼观察物体的方式,获取物体的三维信息。
HALCON是一种广泛应用于机器视觉领域的开发工具,可以用于开发和实现双目立体视觉系统。
双目立体视觉系统通过两个距离较短的摄像机成像同一个场景,利用两个图像的差异来计算场景中物体的深度信息。
在HALCON中,实现双目立体视觉系统的关键步骤包括相机校准、图像获取、图像匹配以及深度计算。
首先,进行相机校准。
双目相机系统的校准是获取准确三维信息的基础,HALCON提供了相机标定工具来获取相机的内参和畸变参数。
通过使用标定板或者特定的标定物体拍摄一组图像,可以通过HALCON的相机标定工具获取相机的校准参数。
接下来,进行图像获取。
使用两个相机同时拍摄同一个场景的图像,获取左右两个相机的图像。
HALCON提供了图像处理的函数和工具,可以方便地读取和处理图像。
然后,进行图像匹配。
通过对左右两个相机的图像进行匹配,找到对应的视差点对。
HALCON提供了多种图像匹配算法,可以根据具体的应用需求选择合适的算法,例如基于相似度的匹配算法、基于特征点的匹配算法等。
最后,进行深度计算。
根据图像匹配得到的视差点对,可以通过三角测量方法计算物体的深度信息。
HALCON提供了三角测量的函数和工具,可以根据视差和相机间的基线距离计算出物体的深度。
除了基本的双目立体视觉系统实现,HALCON还提供了丰富的图像处理和计算机视觉函数,可以进行目标检测、目标跟踪、图像分割等进一步的应用开发。
双目立体视觉系统在智能制造、机器人导航、自动驾驶等领域具有广泛应用。
通过HALCON的支持,可以方便地实现双目立体视觉系统,并为各种应用场景提供高效可靠的解决方案。
总结来说,基于HALCON的双目立体视觉系统实现,需要进行相机校准、图像获取、图像匹配和深度计算等步骤。
HALCON提供了丰富的函数和工具,可以方便地实现这些步骤,并为双目立体视觉系统的应用提供强大的支持。
因此,只要能够找到空间中某点在左右两个摄像机像面上的相应点,并且通过摄像机标定获得图5 校正后的双目立体视觉系统1.3 双目立体视觉系统标定摄像机内参数的标定和单目视觉系统标定一致,双目立体视觉系统的标定主要是指摄像机的内部参数标定后确定视觉系统的结构参数R和T(即两个摄像机之间的位置关系,R和T分别为旋转矩阵和平移向量)。
一般方法是采用标准的2D或3D精密靶标,通过摄像机图像坐标与三维世界坐标的对应关系求得这些参数。
具体的标定过程如下:1、将标定板放置在一个适当的位置,使它能够在两个摄像机中均可以完全成像。
通过标定确定两个摄像机的内部参数以及他们的外部参数(R1、T1与R2、T2),则R1、T1表示左摄像机与世界坐标系的相对位置,R2、T2表示右摄像机与世界坐标系的相对位置。
2、假定空间中任意一点在世界坐标系、左摄像机坐标系和右摄像机坐标系下的非齐次坐标分别为xw、x1、x2,则:消去xw,得到: 两个摄像机之间的位置关系R、T可以用以下关系式表示:1.4 双目立体视觉中的对应点匹配由双目立体视觉系统原理可以看出双目立体视觉是建立在对应点的视差基础之上,因此左右图像中各点的匹配关系成为双目立体视觉技术的一个极其重要的问题。
然而,对于实际的立体图像对,求解对应问题极富挑战性,可以说是双目立体视觉中最困难的一步。
为了能够增加匹配结果的准确性以及匹配算法的速度,在匹配过程中通常会加入下列几种约束:(1)极线约束。
在此约束下,匹配点已经位于两副图像中相应的极线上。
(2)唯一性约束。
两副图像中的对应的匹配点应该有且仅有一个。
(3)视差连续性约束。
除了遮挡区域和视差不连续区域外,视差的变化都是平滑的。
(4)顺序一致性约束。
位于一副图像极线上的系列点,在另一幅图像中极线上有相同的顺序。
图像匹配的方法有基于图像灰度(区域)的匹配、基于图像特征的匹配和基于解释的匹配或者多种方法结合的匹配。
二.使用HALCON进行双目立体视觉测量本节以电路板高度测量为例,讲述在HALCON中如何方便快捷地实现高效双目立体视觉测量(图像为640*480)。
基于HALCON的机器视觉系统的研究与实现一、引言机器视觉是一种将图像处理和分析技术与计算机视觉相结合的技术,用于使计算机具备对物体进行辨识、判别、分析和认知的能力。
HALCON (High-Level-Application-Programming-Interface-C-Library-Object-Navigator)是一种功能强大的机器视觉库,广泛应用于工业自动化、智能交通、智能仓储等领域。
本文将基于HALCON进行机器视觉系统的研究与实现。
二、研究内容1.系统需求分析根据实际应用需求,对机器视觉系统的功能进行分析和定义,包括物体识别、定位、测量等功能。
同时,对系统的性能要求进行明确,例如识别准确率、速度要求等。
2.图像采集与预处理设计合适的图像采集系统,选择合适的相机设备,并进行图像采集与预处理。
预处理包括图像去噪、灰度化、滤波等操作,以提高后续处理的准确性和可靠性。
3.物体识别与定位算法4.系统性能测试与优化对已实现的机器视觉系统进行性能测试,包括准确性、速度、稳定性等指标进行评估。
根据测试结果,对系统进行优化与调整,提高系统的整体性能。
5.系统集成与应用将机器视觉系统与实际应用场景进行集成,根据系统需求进行相应的界面设计,方便用户对系统的操作与使用。
并根据实际应用需求,进行系统的功能扩展与升级。
三、实验与结果在本文的研究中,我们选择了一个工业自动化的应用场景,以汽车零件尺寸的测量为例,进行了机器视觉系统的研究与实现。
经过系统设计与实现,我们成功地实现了对汽车零件进行测量的功能。
系统在准确性、速度和稳定性等方面均达到了实际需求,并得到了应用方的认可与好评。
四、结论本文基于HALCON进行了机器视觉系统的研究与实现,实现了对汽车零件尺寸的测量功能。
通过实践应用,验证了HALCON的强大功能和可靠性。
在实际生产中,机器视觉系统具有广泛的应用前景,可以大大提高生产效率和产品质量。
同时,我们也意识到系统的改进与优化是一个持续的过程,需要不断地进行迭代和创新。
示例:数字识别要识别的图片:1: *读取图片2: read」mage(lmage, 'D:/MyFile/halco n/数字识别/l.jpg')3:4: *图像处理5: decompose3(lmage, ImageR, ImageG, ImageB)6: threshold (ImageG, Regio ns, 0, 183)7: conn ecti on (Regi ons, Conn ecti on)8:9: select_shape (Connection, SelectedRegions, 'area' , 'and' 7500)10:11: read_ocr_class_mlp( 'Document_0-9.omc' ,OCRHandle)halcon 源码:1987.72,12: do_ocr_multi_class_mlp(SelectedRegio ns,lmageG,OCRHa ndle. Class, Con fide nee)halc on1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:导出的C#代码://// File gen erated by HDevelop for HALCON/DOTNET (C#) Versio n 10.0//// This file is in ten ded to be used with the HDevelopTemplate or// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c#using System;using Halc on DotNet;publicpartialclass HDevelopExport{public HTuple hv_ExpDefaultWinHandle;// Mai n procedureprivatevoid acti on(){// Local iconic variablesHObject ho_lmage, ho_ImageR, ho_ImageG, ho_lmageB;HObject ho_Regions, ho_Connection, ho_SelectedRegions;// Local con trol variablesHTuple hv_OCRHa ndle, hv_Class, hv_Confidence;//Initialize local and output iconic variablesHOperatorSet.GenEmptyObj( HOperatorSet.GenEmptyObj( HOperatorSet.GenEmptyObj( HOperatorSet.GenEmptyObj( HOperatorSet.GenEmptyObj( HOperatorSet.GenEmptyObj( HOperatorSet.Gout ho_lmage);out ho_ImageR);out ho_ImageG);out ho_ImageB);out ho_Regi on s);out ho_C onn ecti on);out ho_SelectedRegi ons);//读取图片ho_Image.Dispose();39: HOperatorSet.Readlmage( out ho_lmage, 识别/l.jpg");40:41: 42: 43: 44: 45: // 图像处理ho_ImageR.Dispose();ho_ImageG.Dispose();ho_ImageB.Dispose();HOperatorSet.Decompose3(ho_lmage, outII D:/MyFile/halco n/数字ho_lmageR, outho_ImageG, out ho_ImageB4647484950515253);ho_Regi on s.Dispose();HOperatorSet.Threshold(ho_lmageG,ho_C onn ectio n.Dispose();HOperatorSet.C onnection( ho_Regions,out ho_Regio ns, 0,183);out ho_C onnection);ho_SelectedRegio ns.Dispose();HOperatorSet.SelectShape(ho_C onn ection,"area" , "and",outho_SelectedRegio ns,54: 1987.72, 7500);55:56: HOperatorSet.ReadOcrClassMlp( "Document_0-9.omc", out hv_OCRHa ndle);57: HOperatorSet.DoOcrMultiClassMlp(ho_SelectedRegio ns, ho_ImageG, hv_OCRHa ndle,5859606162636465666768697071727374757677 out hv_Class, out hv_C on fide nee);ho_lmage.Dispose();ho_lmageR.Dispose();ho_lmageG.Dispose();ho_lmageB.Dispose(); ho_Region s.Dispose(); ho_C onn ection.Dispose(); ho_SelectedRegion s.Dispose();publicvoid In itHalc on(){// Default sett ings used in HDevelopHOperatorSet.SetSystem( "do_low_error" , "false"); } 一一publicvoid Ru nH alco n(HTuple Window)78: hv_ExpDefaultWi nHan die = Win dow;79: actio n();80: }81:82: }83:C#工程:1: using System;2: using System.Collectio ns.Ge neric;3: using p onen tModel;4: using System.Data;5: using System.Drawi ng;6: using Syste m丄inq;7: using System.Text;8: using System.Wi ndows.Forms;9:10: using HalconDotNet;11:12:13: namespaceNumericalRecognition14: {15: publicpartialclass FormMain : Form16: {17: //增加代码:18: HDevelopExport HD = n ewHDevelopExport();19: string ImagePath;20:21: public FormMain()22: {23: In itializeComp onen t();24: btnRecognitionNumber.Enabled = false ;25: }26:27: privatevoid btnOpenlmage_Click( object sender, EventArgs e)28: {29: ope nFileDialog1.Filter = "JPEG 文件|*jpg*|BMP 文件|*.bmp*|TIFF 文件|*.tiff*" ;30:31: ope nF ileDialog1.RestoreDirectory = true ;32:33: ope nF ileDialog1.Filterl ndex34:btnRecognitionNumber.Enabled =true ;} }privatevoid btnRecognitionNumber_Click( object sender, EventArgs e) { _HD.NumberRecog nitio n();labNumber.Text = HD.hv_Class.ToStri ng(); btnRecognitionNumber.Enabled = false ;} }//halcon 导出的类publicpartialclass HDevelopExport {public HTuple hv_ExpDefaultWinHandle;HObject ho_Image, ho_ImageR, ho_ImageG, ho_ImageB; HObject ho_Regi ons, ho_C onnection, ho_SelectedRegi ons;// Local con trol variablesHTuple hv_OCRHa ndle, hv_C on fide nee; public HTuple hv_Class; publicvoid In itHalc on(){// Default sett ings used in HDevelopHOperatorSet.SetSystem( "do_low_error" , "false");} 一 一publicvoid ReadImage(HTuple Window, string ImagePath){42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77if 35 36 37 38 39 40 41 ImagePath); (ope nF ileDialog1.ShowDialog() == DialogResult.OK) ImagePath = ope nF ileDialog1.FileName; HD.Readlmage(hWi ndowC on trol1.Halco nWin dow.hv_ExpDefaultWi nHan die = Win dow; //In itialize local and output ico nic variablesHOperatorSet.Ge nEmptyObj( out ho_lmage); //读取图片 ho_lmage.Dispose(); HOperatorSet.Readlmage( out ho_lmage, ImagePath); HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWi nHan dle); 87: } 88:89: publicvoid NumberRecognition() 90: { 91: HOperatorSet.Ge nEmptyObj( 92: HOperatorSet.Ge nEmptyObj( 93: HOperatorSet.Ge nEmptyObj( 94: HOperatorSet.Ge nEmptyObj( 95: HOperatorSet.Ge nEmptyObj( 96: HOperatorSet.Ge nEmptyObj( 97: //图像处理98: ho_ImageR.Dispose(); 99: ho_ImageG.Dispose(); 100: ho_ImageB.Dispose();107:108: ho_SelectedRegio ns.Dispose();109:HOperatorSet.SelectShape(ho_C onn ecti on, out 112 out hv_OCRHa ndle); 113: HOperatorSet.DoOcrMultiClassMlp(ho_SelectedRegio ns,102: );103: ho_Regi on s.Dispose();104:HOperatorSet.Threshold(ho_lmageG, out ho_Regions, 0183);105:ho_C onn ectio n.Dispose();106: HOperatorSet.C onnection( ho_Regi ons, out101: HOperatorSet.Decompose3(ho_lmage, out ho_ImageR, outho_ImageG, out ho_ImageB ho_C onn ectio n); 787980 818283 84 85 86 out ho_ImageR); out ho_ImageG); out ho_ImageB); out ho_Regi on s); out ho_C onnection); out ho_SelectedRegio ns); 110: 111:1987.72, 7500);"Document_0-9.omc", ho_SelectedRegions, "area" , "and", HOperatorSet.ReadOcrClassMlp(ho_ImageG, hv_OCRHa ndle,114: out hv Class, out hv Con fide nee);115:116:117: ho_lmage.Dispose();118: ho_lmageR.Dispose();119: ho_lmageG.Dispose();120: ho_lmageB.Dispose();121: ho_Regio ns.Dispose();122: ho_C onn ecti on .Dispose。
基于HALCON的机器视觉系统的研究和实现摘要近年来,机器视觉系统以其高效率、高可靠、低成本的特点在国外取得了广泛的使用。
机器视觉系统适用于众多领域,例如工业自动化、医药业、制造业、农业等,弥补了人类视觉的很多不足。
本文采用德国MVTec公司的专业机器视觉软件HALCON来开发机器视觉系统,提出了相关机器视觉实现方法,并且在机器视觉实验平台上完成了一个弹簧片检测任务。
目前关注较多的是机器视觉系统的硬件部分,而机器视觉软件部分关注较少,一个先进的机器视觉系统除了具有高性能的硬件外,还需要有高性能的软件,虽然说许多常见的开发软件例如Mircosoft的Visual Studio、NI的LabWindows\CVI 等等都可以开发机器视觉系统,但是开发周期比较长,针对性较弱,程序的复杂程度较高。
而采用HALCON作为机器视觉和图像处理核心软件,不仅大大缩短了开发周期,降低了开发难度,而且可以参考HALCON提供的众多机器视觉和图像处理例程来针对具体的任务做具体开发。
文章的第一章研究了机器视觉系统的组成、使用现状和发展,并且对机器视觉软件HALCON做了概述。
第二章根据相关要求,选择合适的硬件单元,设计和搭建了VS-ZM1200机器视觉实验平台。
第三章研究了机器视觉中常用的一些图像处理技术,重点讨论了在弹簧片检测任务中所采用的图像处理技术和算法,如图像的增强,分割,边缘检测等。
第四章研究了机器视觉软件,重点研究了HALCON,并且对在Visual C++开发环境下如何使用HALCON编写的程序做了讨论。
第五章介绍了在VS-ZM1200机器视觉实验平台上,使用HALCON和Visual C++开发的一套弹簧片检测系统,该系统完成关于弹簧片的尺寸参数测量和外观参数判别的任务。
第一章:绪论1.1机器视觉概述人类在征服自然、改造自然和推动社会进步的过程中,为了克服自身能力、能量的局限性,发明和创造了许多机器来辅助或代替人类完成任务。
基于芯片视觉检测的测量系统控制系统研究摘要:人工智能带动了机器视觉和自然语言处理的发展,工业自动化的健全更是带动了电子零部件及其检测技术的发展。
本设计将基于机器视觉技术主要运用Halcon算法和C#语言,设计出一款基于芯片视觉检测的测量系统。
本文主要研究内容为控制系统设计部分,主要涵括了硬件设备的选型、调试;基于MVS客户端对于工业相机的拍图测试;相机触发方式的考虑;基于Arduino使用UNO 板通过驱动器对于步进电机的控制最终得以显示出各引脚间及主体的相对距离, 以及相对芯片的合格率。
关键字:机器视觉;C#;芯片测量1引言随着经济的全球化发展和现今时代的技术革命,特别是计算机和信息技术的发展和革命创新,现代制造业及相关企业的进步日益显著。
现代制造业重中之重的标志是精度优、速度快、自动化程度高、批量大和标准性强。
在生产线上,还有精密部件的检查和测量,这正是确保产出的质量的最重要步骤。
工业自动化的发展目前伴随着信息时代的发展。
为适应电子信息产业的蓬勃发展,有关电力电子行业的元件的封装的方法和技术现在正朝着高速、微观和高性能的水平趋近。
表面贴装技术是现今世界范围内使用量最多使用范围最广的密封操作。
这种现今最普遍的的封装方法造就了一种非常重要的产品,也就是芯片。
在芯片的日常制造的途中,针对芯片的尺寸测量和缺陷等问题的检测正成为一个越来越重要的步骤。
芯片测量技术在整个芯片制造过程中发挥出的作用愈发显著。
现今,这主要是通过人工用眼睛进行视觉测量和激光回波测量出结果。
这两种测量方法都是非物质的,导致测量误差较大,而长时间单调重复工作会引起工人的视觉疲劳,进而导致新的不稳定性因素;此外,恶劣的工作环境会对雇员的健康形成不同程度的损害。
通过这点可得,上述方式造成的危害不可逆,并且也已经不能符合现今制造企业发展的需要。
本设计的构想为了引入机器视觉的可视化测量,灵活、实时、精度高、无接触。
为此,基于自身知识储备及研究方向的探索,设计出一款智能设备及控制系统,针对芯片表面非接触使用,且减轻人工负担,来进行芯片主体及引脚相对长度的测量。
VC下调用Halcon库VC环境下如何使用HALCON库。
C++的配置在VC环境下进行图像处理,往往需要自己写图像处理的类,现在有一些前人写好的类,比如CDib类、DIBAPI类等等,因此可以直接“拿来主义”。
HALCON库就相当于一个封装好的类,通过在VC下进行一些简单的设置,我们就可以使用其里面的函数了。
下面是在VC环境下如何设置:1. 首先在project->settings.....中的Link属性页-》常规-》对象库模板中添加halconcpp.lib;2. 其次在project->settings.....中的C/C++属性页中的Preprocessor中添加目录$(HALCONROOT)\include,$(HALCONROOT)\include\cpp;3. 然后在project->settings.....中的Link属性页中input下来菜单中添加路径$(HALCONROOT)\lib\x86sse2-win32;//根据不同的版本可能不所不同,可参考lib所在路径下的相关文件进行修改4. 最后当然是不要忘了在程序中添加类的头文件了:#include "halconcpp.h"上面的设置好了,一切OK了。
下面就可以在程序中调用HDevelop中的函数了。
C的配置1. 首先在project->settings.....中的Link属性页-》常规-》对象库模板中添加halconc.lib;2. 其次在project->settings.....中的C/C++属性页中的Preprocessor中添加目录$(HALCONROOT)/include3. 然后在project->settings.....中的Link属性页中input下来菜单中添加路径$(HALCONROOT)/lib/$(HALCONARCH)4. 最后当然是不要忘了在程序中添加类的头文件了:#include "HalconC.h"5. 添加名空间。