机器视觉从业者详解视觉系统开发平台选择及学习路径

什么是机器视觉

机器视觉产业链主要由上游原材料零部件、中游装备制造以及下游终端应用行业构成。从深度来看,机器视觉的应用覆盖产业链的多个环节。以手机的制造为例,机器视觉可应用在结构件生产、模组生产、成品组装、锡膏和胶体的全制造环节,例如IPhone生产全过程就需要70套以上的机器视觉系统。从广度上看,机器视觉的下游行业众多,包括汽车、3C电子、半导体、食品饮料、光伏、物流、医药、印刷、玻璃、金属、木材等。

一套完整的视觉检测系统主要包含图像采集部分和图像分析部分,而图像采集部分主要由工业相机、工业镜头以及机器视觉光源承担。机器视觉的功能包括:物体定位、特征检测、缺陷判断、目标识别、计数和运动跟踪。正是由于机器视觉系统可以快速获取大量信息,而且易于自动处理,也易于同设计信息以及加工控制信息集成,因此,在现代自动化生产过程中,人们将机器视觉系统广泛地用于工况监测、成品检验和质量控制等领域。

机器视觉作为智能制造的大脑和眼睛,是工业互联网边缘层的重要数据入口:工业互联的趋势要求生产控制系统集成到上层的制造管理系统,并最终接入企业管理系统,实现信息从生产现场到管理层的贯通,行业内的企业、行业协会、产业联盟在机器视觉互联互通方面,正在不断合作和投入,制定数据接口、通讯协议等基础共性标准。

以前一直在实验室,接触的是图像的算法部分,至于是机器视觉还是计算机视觉傻傻分不清楚,也没有细分的必要,后来实习进入工业界,发现还是有必要把机器视觉单独拿出来,给他一个名分,同时整理一下自己对机器视觉的认识。

机器视觉,机器排在前面,当然离不开机器,机器越来越智能,代替人的工作,我们称之为机器人,经过多年的发展,工业机器人进化到第三代,第一代示教再现机器人,就是固定点位运动,第二代加入了对工作环境的仿真再规划路径,第三代智能机器人则加入了各种传感器,使之灵活调整工作状态,加入了工业相机则引入了机器视觉这一概念,"机器视觉",即采用机器代替人眼来做测量和判断。

机器视觉系统是指获取图像,然后将该图像传送至处理单元,通过数字化处理,根据像素分布和亮度、颜色等信息,来进行尺寸、形状、颜色等的判别。进而根据判别的结果来控制现场的设备动作。现在工业上主要用来装配定位,产品识别,尺寸测量,质量检测等方面。

机器视觉特点:
1、机器视觉是一项综合技术,其中包括数字图像处理技术,机械工程技术,控制技术,电光源 照明技术,光学成像技术,传感器技术,模拟与数字视频技术,计算机硬件技术,人机接口技术 等这些技术在机器视觉中式并列关系,相互协调 应用才能构成一个成功的工业机器视觉应用系统。

2、机器视觉更强调实用性,要求能够适应工业生产中恶劣的环境,要有合理的性价比,要有通用的工业接口,能够由普通工作来操作,有较高的容错能力和安全性,不会破坏工业产品,必须有较强的通用性和可移植性。

3、对机器视觉工程师来说,不仅要具有研究数学理论和编制计算机软件的能力,更需要的是光、机、电一体化的综合能力。

4、机器视觉更强调实时性,要求高速度和高精度,因而计算机视觉和数字图像处理中的许多技术目前还难以应用于机器视觉,他们的发展速度远远超过其在工业生产中的实际应用速度。

机器视觉开发平台及软件介绍

因为自己半路出家当了程序员,专业方向又是图像处理,通过视觉软件进入机器视觉行业,所以首先查阅资料了解行业成熟软件及库函数。

软件开发平台-编程语言

机器视觉当前的比较流行的开发模式是“软件开发平台+工具包”。在实际视觉项目中,软件平台的目的就是为客户做出一个应用程序,让客户一目了然地看到其产品的各项数据,例如:产量、日期、报表、NG/OK量、故障信息、调试信息、设置参数、操作工具、整个视觉控制系统等。当前机器视觉领域主要用的开发平台有:
1).VC++——目前主流选择平台

VC++ 的图像结果

最通用,功能最强大。用户多,和windows搭配,运行性能较好,可以自己写算法,也可以用工具包,而且基本上工具包都支持C++的开发。

2).C#——逐渐发展使用

C# vs 的图像结果

也是VS studio带的,现在已经支持跨平台。比较容易上手,特别是完成界面等功能比用VC+MFC难度低了很多,已经逐渐成为流行的使用平台了,算法在调用标准的库或者使用C#+C++混合编程。可以看到目前很多相机厂商的SDK都已经开始使用C#做应用程序了。
3).LabVIEW——NI的工具图形化开发平台

LabVIEW 的图像结果

开发软件快,特别是做工控行业或者自动化测试行业的很多工程师,由于使用labview进行测试测量的广泛性,所以都有labview的基础,再调用NI的Vision图像工具包开发,开发周期短,维护较为容易。适用人群有一定的限制性。
4).VB、delphi、java及其他

在机器视觉领域内,基本绝迹江湖,鲜有人使用。

工具包软件和库函数

软件开发平台生成的应用程序通过控制整个视觉系统来获取检测对象的图像信息,并对该图像信息进行信息提取处理,这就需要相应功能的函数和算子,那么就需要包含大量功能函数的API工具包。当前机器视觉领域主要用的工具包有:目前相关工具包软件和库函数绝大部分来自于国外,主要是德国,日本,美国。涉及到的软件有Halcon, visionPro(CVL), Evision, labview+vision,MIL(Matrox Imaging Library), HexSight, OpenCV, 其中OpenCV开源免费。

1,Halcon

Halcon mvt 机器视觉 的图像结果

HALCON是德国MVtec公司开发的一套完善的标准的机器视觉算法包。底层的封装功能算法很多,运算性能快,使用方便简单,若有一定软件功底和图像处理理论,使用其开发将会非常快速便捷。它的特点是:

a,运行速度快。SSE2加速之后效果明显,能满足大部分设计要求,我用HDevelop XL处理12K分辨率,60M的图片,虽然只是一些基本的形态学操作,耗时200左右毫秒还是可以接受的,只是好多算子内存分配不足不能用怎么破。装了Halcon之后线运行一下Optimize Parallelization(SSE2)还是有效果的。

b,HALCON包含了一套交互式的程序设计界面HDevelopa,可在其中以HALCON程序代码直接撰写,修 改,执行程序,并且可以查看计算过程中的所有变量,设计完成后,可以直接输出C、C++、VB、C#、vb等程序代码。

c,提供大量例程。从应用范围,工业领域,具体方法,算子等方面给出具体例程,当你没有思路或者不清楚某个算子的具体用法时看看例程还是很有用的,有时候对例程加以修改就可以直接派上用场了。文档也值得一看,目前只有英文。

d,第三方学习资料不太多。想要解决某个问题,如果没有例程,好像不知道怎么下手,希望找到一些从宏观上提供解决思路的资料。

2,visionPro

在这里插入图片描述

康耐视家的,和Halcon不相上下,提供图形编程界面,有网友说其定位测量功能更好,开发方便自然。估计要采用他自家的图像采集卡。

3,NI Vision:NI的特点是自动化测试大多数需要的软硬件都有解决方案,有点事软件图形化编程,上手快,开发周期快,缺点是并不是每个软件都非常厉害。视觉工具包的优势是售价比大多数工具包或者算法的天文数字便宜了不少,而且整个工具包一个价格,而不是一个算法一个算法地卖,性能方面在速度和精度没有前两种软件好。

NI Vision 的图像结果

4, labview+vision

图形编程界面,其他再补充。

5,MIL(Matrox Imaging Library)

Matrox Imaging Library 的图像结果

来自加拿大maxtrox,是Matrox Imaging Library 的简写。早期推广和普及程度不错,当前似乎主要用户还是早期的做激光设备的一些用户在用,所以用于定位的较多。MIL软件包是一种硬件独立、有标准组件的32位图象库。它有一整套指令,针对图象的处理和特殊操作,包括:斑痕分析、图象校准、口径测定、二维数据读写、测量、图案识别及光学符号识别操作。它也支持基本图形设备。MIL能够处理二值,灰度或彩色图象。

6,HexSight

HexSight 的图像结果

Adept公司出品的HexSight是一款高性能的、综合性的视觉软件开发包,它提供了稳定、可靠及准确定位和检测零件的机器视觉底层函数。其功能强大的定位器工具能精确地识别和定位物体,不论其是否旋转或大小比例发生变化。

见长与定位吧。

7,OpenCV

OpenCV 的图像结果

免费开源,科研利器,资料很多。感觉openCV更多的还是用在计算机视觉领域,在机器视觉领域其实不算太多,应为机器视觉领域当前主要的应用还是定位、测量、外观、OCR/OCV,感觉这几项都不是opencv的专长。自动化公司可以基于OpenCV积累建立自己的库,应该可以省下不少钱吧。

8,CK Vision。创科公司的软件包,相对前面几个工具包来说价格优势比较明显,另外机器视觉需要的功能也基本都有,所以在国内自动化设备特别是批量设备同时需要保护版权的企业而言,用量很大,推广也不错。

9,迈斯肯:迈斯肯的视觉主要产品还是条码阅读一类,图像工具包没有用过,不了解,不评价。

10,eVision

机器视觉软件包是由比利时euresys公司推出的一套机器视觉软件开发SDK,资料较少

机器视觉---视觉系统基本组成

从视觉软件进入机器视觉行业,有必要全局认识一下机器视觉系统组成。

机器视觉系统基本组成 的图像结果

查看源图像

图 1

  典型的机器视觉系统可以分为:图像采集部分、图像处理部分和运动控制部分。基于PC的视觉系统具体由如图1所示的几部分组成
①工业相机与工业镜头——这部分属于成像器件,通常的视觉系统都是由一套或者多套这样的成像系统组成,如果有多路相机,可能由图像卡切换来获取图像数据,也可能由同步控制同时获取多相机通道的数据。根据应用的需要相机可能是输出标准的单色视频(RS-170/CCIR)、复合信号(Y/C)、RGB信号,也可能是非标准的逐行扫描信号、线扫描信号、高分辨率信号等。

②光源——作为辅助成像器件,对成像质量的好坏往往能起到至关重要的作用,各种形状的LED灯、高频荧光灯、光纤卤素灯等都容易得到。

③传感器——通常以光纤开关、接近开关等的形式出现,用以判断被测对象的位置和状态,告知图像传感器进行正确的采集。

④图像采集卡——通常以插入卡的形式安装在PC中,图像采集卡的主要工作是把相机输出的图像输送给电脑主机。它将来自相机的模拟或数字信号转换成一定格式的图像数据流,同时它可以控制相机的一些参数,比如触发信号,曝光/积分时间,快门速度等。图像采集卡通常有不同的硬件结构以针对不同类型的相机,同时也有不同的总线形式,比如PCI、PCI64、Compact PCI,PC104,ISA等。

⑤PC平台——电脑是一个PC式视觉系统的核心,在这里完成图像数据的处理和绝大部分的控制逻辑,对于检测类型的应用,通常都需要较高频率的CPU,这样可以减少处理的时间。同时,为了减少工业现场电磁、振动、灰尘、温度等的干扰,必须选择工业级的电脑。

⑥视觉处理软件——机器视觉软件用来完成输入的图像数据的处理,然后通过一定的运算得出结果,这个输出的结果可能是PASS/FAIL信号、坐标位置、字符串等。常见的机器视觉软件以C/C++图像库,ActiveX控件,图形式编程环境等形式出现,可以是专用功能的(比如仅仅用于LCD检测,BGA检测,模版对准等),也可以是通用目的的(包括定位、测量、条码/字符识别、斑点检测等)。

⑦控制单元(包含I/O、运动控制、电平转化单元等)——一旦视觉软件完成图像分析(除非仅用于监控),紧接着需要和外部单元进行通信以完成对生产过程的控制。简单的控制可以直接利用部分图像采集卡自带的I/O,相对复杂的逻辑/运动控制则必须依靠附加可编程逻辑控制单元/运动控制卡来实现必要的动作。

查看源图像

  一个完整的机器视觉系统的主要工作过程如下:

1、工件定位检测器探测到物体已经运动至接近摄像系统的视野中心,向图像采集部分发送触发脉冲。

2、图像采集部分按照事先设定的程序和延时,分别向摄像机和照明系统发出启动脉冲。

3、摄像机停止目前的扫描,重新开始新的一帧扫描,或者摄像机在启动脉冲来到之前处于等待状态,启动脉冲到来后启动一帧扫描。

4、摄像机开始新的一帧扫描之前打开曝光机构,曝光时间可以事先设定。

5、另一个启动脉冲打开灯光照明,灯光的开启时间应该与摄像机的曝光时间匹配。

6、摄像机曝光后,正式开始一帧图像的扫描和输出。

7、图像采集部分接收模拟视频信号通过A/D将其数字化,或者是直接接收摄像机数字化后的数字视频数据。

8、图像采集部分将数字图像存放在处理器或计算机的内存中。

9、处理器对图像进行处理、分析、识别,获得测量结果或逻辑控制值。

10、处理结果控制流水线的动作、进行定位、纠正运动的误差等。

查看源图像

到底如何学习机器视觉?

在与大家交流的过程中,发现了一个问题,一直想说出来。可是通常实话都不会那么顺耳,所以总有些犹豫。可后再一想,既然大家来此的目的不过是为了讨论问题、互通有无,那么说了也应无妨。这个问题就是:我发现国内80%搞这行(机器视觉)的朋友所走的路子是错的。

这个感觉是从论坛上大家所问的问题得出来的。因为。在论坛中看到不少朋友所问的问题,是相当可笑的。说可笑并非指所提问题过于简单幼稚,而是所问的问题一看就是从书本上抄来的,而不是在实际情况下所遇到的。换句话说,论坛中的朋友大多只是在纸上谈兵,极少有人真正自已动手开发视觉系统。这样说是因为自己搞开发的人绝对问不出某些奇怪问题来的。往深了说一点,好象国内的朋友们只喜欢啃书本,并不愿意(也可能是懒得)动手。

到底如何学习机器视觉?为了说明这个问题,我觉得应该先要简单地说明另一个问题:国内外机器视觉发展的不同。我本人认为,只有先搞清了两边的不一样,才便于说清如何下手学习。 国外机器视觉发展到今天,已经从“一包到底”式的工作程序,发展到了细致分工的阶段了。由于篇幅问题。就不细讲这一行当如何从“一包到底”发展到细致分工过程。

一句话,国外机器视觉发展到今天,已经可以清清楚楚分为三个部分:

1,底层开发部分。
2,二次开发部分。
3,最终使用部分。

于是在国外,从事这一行业的人现在也就可以简单而清楚地分成三种人:
1,底层开发的人(从事底层开发工作的人)。
2,二次开发的人(从事二次开工作的人)。
3,使用及操作机器视觉系统的人(从事最终使用工作的人)。

第一类人。就是我们常说的,开发通用视觉系统(如:DVT,西门子,欧姆龙,EVISION,COGNEX等等)的开发人员,也就是DVT,COGNEX这些公司开发部的技术职工。 第二类。就是大家所说的OEM用户。是专门用第一类人所开发出的系统,给第三类人搞二次开发,开发各种专为第三类人所用的系统。 第三类人,就是用户(end user)。这类人是真正将机器视觉系统应用到各个领域中的人,他们不仅在各自的行业中使用种种已经开发成型的机器视觉系统。而且负责对各类系统进行测试及评估。

举个实际例子,这里有不少朋友问过这类问题:如何检测某一工件;检测光盘表面的系统该如何配置CCD相机、镜头及灯源等。问这些问题的朋友应该算是第三类人。他们公司要他们寻找一个系统可以用来检测本公司的产品。但由于第一类人所开发的,只是通用的系统以及视觉系统开发工具的软件包。并没有哪家公司专门开发一套系统来检测光盘或是某种特定的工件。所以,这些朋友就应该来找我,因为我是第二类人。

我的工作就是,专门用DVT,EVISION,COGNEX等的视觉卡,以及视觉系统开发工具软件包为他们专门开发一套他们所需要的光盘检测系统或是工件检测系统。 但是,我在这里所看到奇怪的现象却是,这些第三类的朋友一直问的,都是第二类人所问的问题。如:问应该用哪家公司的开发软件;用什么样的CCD;如何标定等等。我真的不知道如何回答你:你明明是第三类人,要找第二类人帮忙。现在却以第二类人的身份甚至是以第一类人的身份问问题。 绕了老大一圈,其实要说的问题就是一个----我所发现的问题:这里80%以上朋友把自己的身分混淆了,越俎代庖。

或许有的朋友会这样说:我虽然是第三类人,但我对机器视觉有兴趣,想自己学习啊!。这就是我想讨论的:到底如何学习机器视觉? 我个人认为,应该先确定自己的身份,从自己具体的需要入手来学习。举个例子:大家一定都有学习英文的经验,而且也一定都有同样的感觉----怎么学也学不好----我就是这样。我们抛开所谓的语言天分不说,大家学不好的原因其实很简单:没有语言环境。一语中的啊!学而不用,怎么也不会学好。

同样,学习机器视觉,无论你在书本上看了多少理论,你自己若没有实际动手操作、编程的经验也是枉然。还不如从你每天能接触得到的东西开始学习。教游泳的教材随手可得,但为什么并非人人都下得了水呢?! 不客气的说,目前国内搞这行的朋友似乎都有些好高骛远。不少从事第二部分工作朋友(搞二次开发的第二类人)对于机器视觉有关知识的了解,尚不如国外第三类人的知识水平(我是从大家所问的问题感觉到的)。而国内第三类朋友知识水平就更可想而知。

可是奇怪的是,每个人所问的却都是第二类人要问的,有些甚至是一类人才会问的问题。好象,机器视觉是个十分简单的技术,凭大家随便问几个“关键性”的问题,再由所谓的“专家”三言两语的回答一下。大家就一夜之间都可以自己搞底层开发,成第一类人了。

要成为第一类人,又分硬件及软件两种。要对自己所负责的这个模块非常了解,搞软件要知道算法及运行速度;搞硬件要明白公司所选用芯片的特点等等。同时还要清楚对手公司的优缺点以及机器视觉这一行的种种动态和最新技术。

想成为第二类人,你一定要是个通才。就是说什么都要知道一点。不仅要了解第三类人的要求,而且也要知道各种第一类人(不同品牌的视觉卡及软件包)的水平。

要成为第三类人,不仅要有机器视觉基本的相关知识。而且,要对自己所工作的行业及领域的机器视觉系统非常熟悉。专作你这行的机器视觉公司有哪几家?各有什么优缺点等等。 总结一下。这三种人相比,第一类人一定要专业,对机器视觉的某一领域非常非常了解;第二类人虽比不上第一类人那么专业,但更加全面;第三类人更熟悉各个应用系统开发公司(第二类人)的优缺点。

现在大家可以看得出,机器视觉发展到今天,其分工已经越来越细,每个部分的工作其实是很难相互取代的。大家不要以为第三类人就比第一类人低一等,这是一个错误的等级概念。我本人过去曾属于第一类人,现在作的是第二类工作。而我的几个“师弟师妹”(当初曾一起作第一类人时的同事)现在就在干第三类工作。大家别小看第三类工作,以为这是小儿科,你能真作好这一行也不是很容易。毕竟这也是一门行当也是一个饭碗!

以上所讲,是从工程(engineering)以及实际应用的角度来谈如何学习机器视觉。

以下是实习经历的体会:

1,算法不是全部

在工业运用当中,机器视觉系统设计是一个庞大的工程,它包括硬件选择,比如相机,镜头,采集卡,光源,PC或者FPGA,DSP之类;确定打光方案;算法设计。而在学校里面,学习的大部分是图像处理相关知识,针对给定的图像,设计合理算法,尽可能从算法上上解决问题,以为算法厉害了就万事大吉。而在工业上,则试图通过硬件选择和合理的打光来输出理想的图像,为算法设计提供最大方便,有时候,算法变得不那么重要,巧妙的打光可以化解大部分难题。所以想要在机器视觉方面有所作为不仅需要熟悉算法,更是要积累硬件,打光方面的经验。

2,解决疑难杂症

在学校实验室里验证新的算法的时候,我们总是试图找到某些理想的条件,比如一致性好的图片,特征明显的样本,来证明我们的算法能够很好地解决一类问题,一些疑难杂症被不自觉的屏蔽了。但是在工业运用时,主要需要解决的是就是疑难杂症,通过合理的打光,针对理想的输入图像,简单的算法就能搞定,但是对于不友好的图像,比如,图像的边缘处,对比度低的地方,当然不能不自觉的屏蔽掉,大部分时间都在想办法处理这些疑难杂症。

3,简单可靠省时

在学校里,总是爱给老的算法加上一些新鲜的成分,使他它变得更时髦,哪怕时间开销蹭蹭往上涨;对于一些简单问题,也喜欢用复杂的方法解决,表现出腻害的样子。但在工业上,这些都行不通了,我能说实习六个月,一个团队所有的工作,一个一点都不LOW的工程,算法工作的核心就是-----阈值,这个阈值看上去很简单,其实不然,能够保证在极端的情况下满足生产的要求,阈值也是巨大的生产力。工业上算法的选择都是权衡利弊的考虑,既要有效,又要时间开销小,不存在完美的算法,大部分的选择都是折中的结果,将简单算法的潜力发挥到极致,解决问题才是根本。

学习机器视觉的经验,只是其中的一条路径

所以怎么样学习机器视觉,就请踏实下来,戒浮躁,从最基本地学起。在这里介绍下目前常见的具体学习方式采用VS2010中C++构造MFC应用程序,相信WINDOWS开发的对VC肯定不会不熟,作为一个经典的版本VC6.0可谓很多人的开发工具,从早期一直演变过来的VC6.0除了程序员常用外,作为现在的很多高等学校的教学工具,VC一个履行着它的使命,就是到现在经过VS2008的洗礼后,相信还有很多开发人员还存留着VC6.0,这个版本对于程序员而言有着太多的感慨,然而随着Visual Studio2010的发布,相信这作为一个时代经典的产品也必将开始慢慢的走出人们的视线,让我们开始从VC转向Visual Studio 2010。

首先当属Visual C++工程及其构建系统,这其中包括了MSBuild、VC__目录、工程依赖性、宏与环境变量等,我们举个简单的例子,现在VC++目录设置位于两个地方,可以使用项目属性页来设置每个项目对应的VC++目录,也可以使用属性管理器和一个属性表来设置全局性的并且使每个配置值对应的VC++目录。

第二,Visual Studio 2010中VC++库变化。这其中包括到analyze警告、重启动管理器、MFC库、ATL宏、新库等,在Visual Studio 2010中新引入了CTaskDialog类可用于代替标准的AfxMessageBox消息框。CTaskDialog类能够显示和收集比标准的消息框更多的信息。

第三、集成开发环境(IDE)变化。主要变化有改进的错误智能感知支持、#include自动完成特征等。在Visual Studio 2010中,集成开发环境(IDE)支持更好地检测可能导致丢失智能感知支持的错误,并在这些内容下面显示以红色波浪下划线。此外,集成开发环境还支持把智能感知的错误输出到错误列表窗口中。要想观察导致问题的相关代码,你只需要双击错误列表窗口中的错误即可。当然在#include自动完成特征中也有体现。

言归正传,初学者使用Visual Studio 2010中的C++ MFC开发视觉应用程序,有以下几点优势:

语法方面:C的语法构造比较少,有限的几种是:struct union enum等类型定义,函数定义,指针和数组派生类型,变量定义,三类(顺序、分支、循环)基本结构构造语句,各种繁多的运算符以及特殊的赋值,其中全局可见的只有类型、变量和函数,函数内部可以拥有除了函数以外的任意构造,但是,对于函数的返回值类型有限制。总之,C是语法简单,一致性较好,相对正交,基本可以任意组合的语言。

库方面:C语言的标准库很少,除了基本的IO库以外,就是低层次的memory和string操作的库了,还有一些非常基本的数学库。剩下的文件系统相关的(包括ftp,nfs,http,smtp,pop等高层网络协议)库不存在,图形图像处理的库也不存在。控件库,数据库访问库,多媒体编码解码库,安全库,加密库,认证库也都不存在。不过,它们都可以通过非标准C库来获得。另外别的类型的库也都存在,而且跟C语言的结合比较自然,跟C语言以及标准C库的感觉一样,因为它们大都是C写的。总之,C标准库非常少,但是扩展库很全,不至于造成某些壁垒。

开发工具方面:C语言的语法特征比较少,可以完全记在脑子里,所以编程序的时候不太依赖于辅助工具,当然,能够提供指示库接口的开发工具仍然是受欢迎的。

MFC建立应用程序框架有以下几点特点:

第一、MFC类图。MFC为编程人员提供了几大用来构建一个Windows程序的类,在通过VC++创建项目时,IDE会给程序员自动添加这些类。

第二、RTTI(Run-Time Type Identification)运行时类型识别。

第三、Dynamic Creation(动态创建)。

第四、Persistence(永久保存)机制。MFC中通过这个机制,将用户输入的数据全部都保存下来,同时也可以打开同类型的文件。

第五、Message Mapping(消息映射)。MFC程序中系统消息能够传到每个类各自负责的函数、方法中,每个类都能处理属于他独特的消息事件,主要就是通过消息映射来完成的,其实消息映射有点像第二个技术动态创建类的结构关系,而这里只是针对程序中每个类中的消息进行一个动态链表的建立。

第六、Command Routing(命令传递)。MFC的消息有两类,一类是普通消息,一类是系统消息,普通消息都是从派生类将消息传递到父类中。系统消息先由CFrameWnd类接受消息,并且传递给其父类CWind类,这里CWind类中的消息处理只是做一个消息传递的工作,而CWind类则交给CView类处理,如果没有处理函数这要CView类的父类CWind处理,同样这里CWind类中的消息处理只是做一个消息传递的工作,如果还没有找到,则系统会要求CDocument类处理,如果没有匹配的则又会回到CWind类中,然后在CWind类遍历自己的消息映射表,如果没有对应的处理则表消息处理权流回到CWinApp类中,如果还没有找到则会退回到CWind类中执行DefWindowProc()函数。因此整个消息传递过程就结束了。

有了应用程序后,那么就能为用户提供实在看得着操作得了的软体界面程序,但仅只有逻辑层面,并没有处理功能模块。也就虚有其表,中看不中用的地步。因此为了满足实际视觉项目需要,学习一门图像处理至关重要。在这里推荐学习HALCON,因为HALCON是德国MVtec公司开发的一套完善的标准的机器视觉算法包,拥有应用广泛的机器视觉集成开发环境 。它节约了产品成本,缩短了软件开发周期——HALCON灵活的架构便于机器视觉,医学图像和图像分析应用的快速开发。在欧洲以及日本的工业界已经是公认具有最佳效能的Machine Vision软件。事实上,这是一套image processing library,由一千多个各自独立的函数,以及底层的数据管理核心构成。其中包含了各类滤波,色彩以及几何,数学转换,型态学计算分析,校正,分类辨识,形状搜寻等等基本的几何以及影像计算功能,由于这些功能大多并非针对特定工作设计的,因此只要用得到图像处理的地方,就可以用HALCON强大的计算 分析能力来完成工作。应用范围几乎没有限制,涵盖医学,遥感探测,监控,到工业上的各类自动化检测。HALCON支持Windows,Linux和Mac OS X操作环境,它保证了投资的有效性。整个函数库可以用C,C++,C#,Visual basic和Delphi等多种普通编程语言访问。HALCON为大量的图像获取设备提供接口,保证了硬件的独立性。它为百余种工业相机和图像采集卡提供接口,包括GenlCam,GigE和IIDC 1394。

选择HALCON出于以下3点理由:

1.为了让使用者能在最短的时间里开发出视觉系统,HALCON包含了一套交互式的程序设计界面HDevelop,可在其中以HALCON程序代码直接撰写,修 改,执行程序,并且可以查看计算过程中的所有变量,设计完成后,可以直接输出C、C++、VB、C#、vb等程序代码,套入您的程序中。 HDevelop同时和数百个范例程序链接,除了个别计算功能的说明,您也可以随时依据不同的类别找到应用的范例,方便参考。此外,以问题为导向的手册, 可以让您找到最适切的使用说明以及作业观念。

2.HALCON不限制取像设备,可以自行挑选合适的设备。原厂已提供了60 余种相机的驱动链接,即使是尚未支持的相机,除了可以透过指标(pointer)轻易的抓取影像,还可以利用HALOCN开放性的架构,自行撰写DLL文件和系统连接。

3.使用HALOCN,在设计人机接口时没有特别的限制,也不必特别的可视化组件,您可以完全使用开发环境下的程序语言,例如visual studio、.NET、Mono等等,架构自己的接口,end user看不到您的开发工具,而且在执行作业的机器上,只需要很小的资源套件。

最后,机器视觉项目里,我们需要在VC++中编写出应用程序,作为操作平台,用HALCON做出特定图像处理功能模块,混合编程后植入主程序里,最后实现客户需求完成可视化。其中,当做不同的项目时候,很大程度上,主体程序无须重新做,可以在以前做好的程序框架加以修改,减少工作量,只需要重新做新的图像处理,再植入主程序即可。

视觉魔法师

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

单目3D目标检测调研

单目3D目标检测调研 一、 简介 现有的单目3D目标检测方案主要方案主要分为两类,分别为基于图片的方法和基于伪雷达点云的方法。   基于图片的方法一般通过2D-3D之间的几何约束来学习,包括目标形状信息&#xff0