机器视觉应用工程开发思路

机器视觉应用工程主要可划分为两大部分,硬件部分和软件部分。

1.硬件部分,硬件的选型至关重要,决定了后续工作是否可以正常开展,其中关键硬件部分包括:光源,相机以及镜头。

2.软件部分,目前业内商业库主要有Halcon,康耐视,DALSA,evision,NI等,开源库有OpenCV.其中NI的labview+vision模块。

机器视觉应用工程大致开发思路:

      一、获取图像       

      图像采集可以来源多个途径,用算子read_image去读取图像文件;用相机助手,可读取单个或多个相机视频;使用读文件或读取路径(可用tuple实现读取多个图像文件)助手。

其中,使用相机助手获取相机图像最为常用。

Halcon通过ImageAcquisition Interfaces对各种图像采集卡及各种工业相机进行支持。其中包括:模拟视频信号,数字视频信号Camera Link,数字视频信号IEEE 1394,数字视频信号USB2.0,数字视频信号Gigabit Ethernet等。

Halcon通过统一的接口封装上述不同相机的image acquisition interfaces,从而达到算子统一化。不同的相机只需更改几个参数就可变更使用。

Halcon图像获取的思路:1、打开设备,获得该设备的句柄。2、调用采集算子,获取图像。

      二、图像颜色空间变换

      颜色的定义,颜色是光作用于人眼引起除形象以外的视觉特性。计算机常用的颜色空间主要有两种,RGB和HSV。RGB颜色空间,主要是依据人眼的生理结构,人眼有三类视锥体细胞,分别是红,绿,蓝。而HSV颜色空间,是基于颜色本身的属性,H代表色相,主要由波长决定;S代表纯度,取决于峰值能量与其他频段能量白色光的比例;V代表亮度。H与S属性,常常会混为一谈,是为颜色的色度特性。

因此,在一副彩色图像中,倘若在RGB颜色空间中无法寻得合适阈值进行分割时,常常可以将RGB颜色空间转换到HSV颜色空间,去观察图像的色相以及饱和度属性。

     三、图像预处理

     图像预处理,即对采集的图像不是很满意,以致于会影响后续图像处理的结果,因此必须对采集的图像进行预处理。图像预处理,并未对图像做出实质性的提取和改变,主要是以滤波、增强对比度等改善图像质量为目的。

图像预处理,主要包括了四个部分,图像的点运算(即操作直方图),图像的几何变换、图像的增强处理以及图像的正交变换。

图像的点运算,主要用于改变一幅图像的灰度分布范围;图像的几何变换,主要包括图像的平移变换、镜像变换、图像的转置、缩放和旋转等内容;图像的增强处理,主要对图像的噪声过滤以及对比度增强,即平滑、锐化处理;图像的正交变换,主要包括傅里叶变换、哈达玛变换、离散余旋变换以及K-L变换等,将信号从空间域变换到空间频域,以便于更好的处理信号。

      四、区域及轮廓提取(提取ROI)

    区域以及轮廓的提取,即提取ROI,这一步是整个图像处理软件中的核心步骤。就我目前的知识水平大致可分为三个方法:Blob分析,模板匹配以及机器学习识别模式。

Blob分析的基本思想,通过其灰度值的差别来识别图像中前景的像素。Blob分析三兄弟,图像分割,图像形态学处理,特征提取。

模板匹配,主要包括形状匹配以及灰度值匹配。关键步骤,创建模板;在图像中查找模板。

机器学习识别,基于多层感知的自我训练,通过监督学习,形成分类器。主要分为四步,创建trf训练文件(绑定字符图像与字符),创建神经分类器,训练分类器,将分类器保存为ocm文件(即可用于识别)。

       五、图像识别及诊断(或要进行相机标定)

Halcon学习笔记——机器视觉应用工程开发思路及相机标定的更多相关文章

  1. halcon学习笔记——机器视觉工程应用的开发思路【转】

    转自:http://www.cnblogs.com/hanzhaoxin/archive/2013/02/15/2912879.html 机器视觉工程应用主要可划分为硬件和软件两大部分. 硬件:工程应 ...

  2. AppleWatch___学习笔记(一)开发思路和框架

    一.开发须知 如果你没有开发过 iphone,直接来做watch,我建议你不要这么做,不是不可以,而是目前所有的第三方应用都必须基于iphone的扩展,原生的watch应用,苹果目前还没有开放给开发者 ...

  3. halcon机器视觉工程开发思路

    参考:halcon学习笔记——机器视觉工程应用的开发思路https://www.cnblogs.com/hanzhaoxin/archive/2013/02/15/2912879.html

  4. VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式

    原文:VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式 Excel包含很多公式,如数学.日期.文本.逻辑等公式,非常方便,可以灵活快捷的对数据进行处理,达到我们想要的效果.Exce ...

  5. Spring MVC 学习笔记12 —— SpringMVC+Hibernate开发(1)依赖包搭建

    Spring MVC 学习笔记12 -- SpringMVC+Hibernate开发(1)依赖包搭建 用Hibernate帮助建立SpringMVC与数据库之间的联系,通过配置DAO层,Service ...

  6. springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定

    springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...

  7. Android:日常学习笔记(8)———探究UI开发(5)

    Android:日常学习笔记(8)———探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ...

  8. Android:日常学习笔记(7)———探究UI开发(4)

    Android:日常学习笔记(7)———探究UI开发(4) UI概述  View 和 ViewGrou Android 应用中的所有用户界面元素都是使用 View 和 ViewGroup 对象构建而成 ...

  9. Android:日常学习笔记(8)———探究UI开发(3)

    Android:日常学习笔记(8)———探究UI开发(3) 详解四种基本布局 前言 布局定义用户界面的视觉结构,如Activity或应用小部件的 UI.您可以通过两种方式声明布局: 在 XML 中声明 ...

随机推荐

  1. 墨菲定律与 IndexOutOfBoundsException(数组越界异常)

    今天维护又反馈了一问题过来,查询试卷时报数组越界异常: 2017-02-28 10:45:24,827[ERROR] HttpException[10.32.111.7:60446:2D07867BE ...

  2. Java程序员修炼之路

    作者简介:王成委,CSDN知识库特邀编辑,Java高级工程师,熟悉Java编程语言和Oracle数据库.专注于高并发架构设计和大数据存储方向的研究. 我们为什么选择Java 大多数人选择Java可能只 ...

  3. 【python】collections模块(有序字典,计数器,双向队列)

    collections模块基本介绍 我们都知道,Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collections模块在这些内置数据类型的基础上 ...

  4. 八大排序算法的python实现(八)简单选择排序

    代码: #coding:utf-8 #author:徐卜灵 # L = [6, 3, 2, 32, 5, 4] def Select_sort(L): for i in range(0,len(L)) ...

  5. day44--浮动和清浮动基本小结

    浮动和清浮动 一:浮动 浮动元素会生成一个块级框,而不论它本身是何种元素. 关于浮动的两个特点: 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止. 由于浮动框不在文档的普 ...

  6. python学习之路---day12

    生成器和生成器表达式一:生成器 生成器实质上就是迭代器. 三种方式获取生成器: 01:通过生成器函数 02:通过各种推导式实现生成器 03:通过数据的转换也可以获取生成器 eg:普通函数 def fu ...

  7. python环境搭建以及pycharm的安装

    要实现python自动化,环境和IDE都是必须的.我选择的是python3.4.4版本以及pycharm社区版.      资源链接:https://pan.baidu.com/s/1hRqyRe3J ...

  8. C++_IO与文件3-用cin进行输入

    接下来讨论的是如何给程序提供数据? cin对象将标准输入表示为字节流. 通常情况下是通过键盘来生成这种字节流 cin对象根据接收值得变量类型,使用其方法将字符序列转换为所需的类型. cin>&g ...

  9. P4320 道路相遇

    [Luogu4320] 必经点数==圆方树上两点路径上圆点数 也就等于边数/2+1 没什么好说的 , 看代码 #include<cstdio> #include<iostream&g ...

  10. HDU 6357.Hills And Valleys-动态规划(区间翻转l,r找最长非递减子序列)

    题意:给一串由n个数字组成的字符串,选择其中一个区间进行翻转,要求翻转后该字符串的最长非降子序列长度最长,输出这个最长非降子序列的长度以及翻转的区间的左右端点 #include<bits/std ...