转自:http://www.cnblogs.com/hanzhaoxin/archive/2013/02/15/2912879.html

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

硬件:工程应用的第一步就是硬件选型。硬件选型很关键,因为它是你后面工作的基础。主要是光源、工业相机和镜头选择。

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


机器视觉工程应用的基本开发思路是:

一、图像采集,二、图像分割,三、形态学处理,四、特征提取,五、输出结果。

下面在Halcon下对这四个步骤进行讲解。

一、图像采集:

Halcon通过imageacquisition interfaces对各种图像采集卡及各种工业相机进行支持。其中包括:模拟视频信号,数字视频信号Camera Link,数字视频信号IEEE 1394,数字视频信号USB2.0,数字视频信号Gigabit Ethernet等。 
Halcon通过统一的接口封装上述不同相机的image acquisition interfaces,从而达到算子统一化。不同的相机只需更改几个参数就可变更使用。

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

1、打开设备,获得该设备的句柄。

 
open_framegrabber('DahengCAM', 1, 1, 0, 0, 0, 0, 'interlaced', 8, 'gray', -1, 'false','HV-13xx', '1', 1, -1, AcqHandle) //连接相机,并设置相关参数

Parameter

Values

Default

Type

Description

Name

'DahengCAM'

 

string

Name of the HALCON interface.

HorizontalResolution

1

1

 

1表示水平全部,2为水平1/2,表示图像截取。

VerticalResolution

1 1  

同上,表示垂直方向。

ImageWidth

<width>

0

integer

所需的图像部分的宽度('0 '代表了完整的图像)。

ImageHeight <height> 0 integer 所需的图像部分的高度(0”是完整的图像)
StartRow <width> 0 integer 所需的图像部分左上方的像素行坐标
StartColumn <column> 0 integer 所需的图像部分左上方的像素列坐标
Field       忽视
BitsPerChannel       忽视
ColorSpace 'default', 'gray', 'rgb' 'gray' string HALCON图像的通道模式
Generic       忽视
ExternalTrigger

'false', 'true'

'false' string 外部触发状态
CameraType 'HV-13xx', 'HV-20xx', 'HV-30xx', 'HV-31xx','HV-50xx', 'SV-xxxx' 'HV-13xx' string 所连接的摄像机系列型。
Device '1', '2', '3', ... '1' string 相机连接第一个设备号“1”,第二个设备编号“2”。
Port       忽视
LineIn       忽视

2、调用采集算子,获取图像。

grab_image (Image, AcqHandle) //(同步采集)完后处理图像,然后再采集图像。采集图像的速率受处理速度影响。
grab_image_async (Image, AcqHandle,MaxDelay) //(异步采集),一幅画面采集完后相机马上采集下一幅画面,不受处理速度影响。其中第三个参数为:MaxDelay,表示异步采集时可以允许的最大延时,本次采集命令距上次采集命令的时间不能超出MaxDelay,超出即重新采集。

图像采集其他相关算子:

grab_image_start,该算子开始命令相机进行异步采集。只能与grab_image_async(异步采集)一起使用。

例子:

* Select a suitable image acquisition interface nameAcqName
open_framegrabber(AcqName,1,1,0,0,0,0,'default',-1,'default',-1.0,\
                 'default','default','default',-1,-1,AcqHandle)
grab_image(Image1,AcqHandle)//进行同步采集
* Start next grab
grab_image_start(AcqHandle,-1.0)//命令相机进行异步图像采集开始
* Process Image1 ...
* Finish asynchronous grab + start next grab
grab_image_async(Image2,AcqHandle,-1.0)//读取异步采集的图像
* Process Image2 ...
close_framegrabber(AcqHandle)

3、相机参数读写

读取相机参数:

info_framegrabber( : : NameQuery : InformationValueList)

写相机参数:

set_framegrabber_param( : : AcqHandleParamValue : )

二、图像分割:

图像分割的定义: 
所谓图像分割是指将图像中具有特殊含义的不同区域分割开来,这些区域是互相不交叉的,每个区域都满足特定区域的一致性。

1、基于阈值的图像分割

threshold —采用全局阈值分割图像。

格式:    threshold(Image : Region : MinGray, MaxGray : )

自动全局阈值分割的方法:

(1)计算灰度直方图 
(2)寻找出现频率最多的灰度值(最大值) 
(3)在threshold中使用与最大值有一定距离的值作为阈值

代码:

gray_histo(Regions, Image,AbsoluteHisto, RelativeHisto) //计算出图像区域内的绝对和相对灰度值直方图。
PeakGray := sort_index(AbsoluteHisto)[255] //求出出现频率最多的灰度值
threshold(Image,Region,0,PeakGray-25)

bin_threshold — 使用一个自动确定的阈值分割图像。

格式:    bin_threshold(Image : Region : : )

dyn_threshold —使用一个局部阈值分割图像。

格式:    dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : )

例子:

mean_image(Image,Mean,21,21)
dyn_threshold(Image,Mean, RegionDynThresh,15,'dark')

var_threshold —阈值图像局部均值和标准差的分析。

格式:    var_threshold(Image : Region : MaskWidth, MaskHeight, StdDevScale, AbsThreshold, LightDark : )

2、基于边缘的图像分割:寻找区域之间的边界

watersheds —从图像中提取分水岭和盆地。

格式:    watersheds(Image : Basins, Watersheds : : )

watersheds_threshold —使用阈值从图像中提取分水岭和盆地。

格式:    watersheds_threshold(Image : Basins : Threshold : )

3、基于区域的图像分割:直接创建区域

三、形态学处理

形态学处理以集合运算为基础。

腐蚀、膨胀、开操作、闭操作是所有形态学图像处理的基础。

开操作(先腐蚀再膨胀)使对象的轮廓变得光滑,断开狭窄的间断和消除细的突出物。

闭操作(先膨胀再腐蚀)消弥狭窄的间断和长细的鸿沟,消除小的孔洞,填补轮廓线的断裂。

形体学基础算子:

erosion1 
dilation1 
opening 
closing

常用的形态学相关算子 
connection 
select_shape 
opening_circle 
closing_circle 
opening_rectangle1 
closing_rectangle1 
complement 
difference 
intersection 
union1 
shaps_trans 
fill_up

形态学高级算子: 
boundary 
skeleton

四、特征提取:

1、区域特征:

area 
moments

smallest_rectangle1

smallest_circle

convexity:区域面积与凸包面积的比例

contlength:区域边界的长度

compactness

2、灰度特征

estimate_noise

select_gray

五、输出结果:

(1)获取满足条件的区域

(2)区域分类,比如OCR

(3)测量

(4)质量检测

作者:韩兆新
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

halcon学习笔记——机器视觉工程应用的开发思路【转】的更多相关文章

  1. Halcon学习笔记——机器视觉应用工程开发思路及相机标定

    机器视觉应用工程开发思路 机器视觉应用工程主要可划分为两大部分,硬件部分和软件部分. 1.硬件部分,硬件的选型至关重要,决定了后续工作是否可以正常开展,其中关键硬件部分包括:光源,相机以及镜头. 2. ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Android:日常学习笔记(8)———探究UI开发(2) 对话框 说明: 对话框是提示用户作出决定或输入额外信息的小窗口. 对话框不会填充屏幕,通常用于需要用户采取行动才能继续执行的模式事件. 提示 ...

随机推荐

  1. 给JBoss种蛊分析

    JBoss又发现漏洞了,安全圈儿为之一紧. 知道创宇安全研究团队再次本着科普的情怀收集跟JBoss安全相关的材料,为安全行业再出一把力. 这里先给JBoss正下名.通常所说的JBoss,全称是JBos ...

  2. Python模块(radom)

    radom radom模块提供了随机生成对象的方法 Help on module random: NAME random - Random variable generators. FILE /usr ...

  3. 三层交换配置VLAN+DHCP+ACL

    使用思科模拟软件Cisco Packet Tracer Student,软件功能有限,只能架设简单的网络架构,适合初学者使用.

  4. REST Security with JWT using Java and Spring Security

    Security Security is the enemy of convenience, and vice versa. This statement is true for any system ...

  5. 微信成为开发者C#代码

    第一句话都会这么去写:程序猿就是苦逼,除了开发还要会写博文!今天咱就和大家探讨下如何让自己成为开发者!那么怎么才能成为开发者呢? 首先给大家一个微信的截图,看到这个截图,是不是有想去尝试的冲动?

  6. 3.HelloWorld

    准备开发环境和运行环境开发工具:eclipse运行环境:apache-tomcat-7.0.4工程:动态web 工程Spring 框架下载:spring-framework-3.2.3.RELEASE ...

  7. MJRefresh简单处理

    //下拉刷新 默认 self.bottomTableVeiw.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ [self he ...

  8. execute、executeQuery和executeUpdate之间的区别

    JDBCTM中Statement接口提供的execute.executeQuery和executeUpdate之间的区别 Statement 接口提供了三种执行 SQL 语句的方法:executeQu ...

  9. JAVA的JVM虚拟机工作原理.V.1.0.0

    注意:一下内容纯属个人理解,如有错误,欢迎批评指正. (90度弯腰)谢谢. java在JVM上的运行过程: 1,编辑好的java代码(IDE无报错,测试运行无错误): 2,java源代码通过javac ...

  10. Java基础(4):Scanner输入的典型应用

    import java.util.Scanner; /* * 功能:为指定的成绩加分,直到分数大于等于60为止 * 输出加分前的成绩和加分后的成绩,并且统计加分的次数 * 步骤: * 1.定义一个变量 ...