天天看点

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

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

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

软件:目前业内商业库主要有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、打开设备,获得该设备的句柄。

Parameter

Values

Default

Type

Description

Name

'DahengCAM'

string

Name of the HALCON interface.

HorizontalResolution

1

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

VerticalResolution

同上,表示垂直方向。

ImageWidth

<width>

integer

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

ImageHeight

<height>

所需的图像部分的高度(0”是完整的图像)

StartRow

所需的图像部分左上方的像素行坐标

StartColumn

<column>

所需的图像部分左上方的像素列坐标

Field

忽视

BitsPerChannel

ColorSpace

'default', 'gray', 'rgb'

'gray'

HALCON图像的通道模式

Generic

ExternalTrigger

'false', 'true'

'false'

外部触发状态

CameraType

'HV-13xx', 'HV-20xx', 'HV-30xx', 'HV-31xx','HV-50xx', 'SV-xxxx'

'HV-13xx'

所连接的摄像机系列型。

Device

'1', '2', '3', ...

'1'

相机连接第一个设备号“1”,第二个设备编号“2”。

Port

LineIn

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

图像采集其他相关算子:

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

例子:

3、相机参数读写

读取相机参数:

info_framegrabber( : : Name, Query : Information, ValueList)

写相机参数:

set_framegrabber_param( : : AcqHandle, Param, Value : )

二、图像分割:

图像分割的定义: 

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

1、基于阈值的图像分割

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

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

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

(1)计算灰度直方图 

(2)寻找出现频率最多的灰度值(最大值) 

(3)在threshold中使用与最大值有一定距离的值作为阈值

代码:

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

格式:    bin_threshold(Image : Region : : )

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

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

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)质量检测

本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sky-heaven/p/6004487.html,如需转载请自行联系原作者

继续阅读