加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Halcon(三)机器视觉工程开发步骤

(2017-07-20 22:45:17)
标签:

戴锦新

halcon

视觉

开发

分类: Halcon

机器视觉工程应用主要可以分为两个主要部分

 

硬件选型:光源,相机,镜头

软件使用:目前业内商业库:Halcon(霍肯-德国) , CONGNEX(康耐视-美国) DALSA (戴尔撒-加拿大) evision(比利时)IN (美国LabVIEW就是这家公司编写)

          开源的库:OpenCV  (美国INTER有千丝万缕的关系)

 

机器视觉软件应用工程开发的基本思路

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

Halcon下对这几个步骤进行一一阐述:

一,图像获取

Image Acquisition Interfaces : 图像采集接口

Halcon通过imageacquisition interfaces对各种图像采集卡及各种工业相机进行支持。

其中包括:模拟视频信号,

数字视频信号Camera Link

数字视频信号IEEE 1394

数字视频信号USB2.0

数字视频信号Gigabit Ethernet等。 


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

 

 

图像获取的基本思路:

A、打开设备,获取设备句柄;

B、调用算子,获取图像。

C、其他相关

 

A,打开设备,获取设备句柄;

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

 

0

integer

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

ImageHeight

 

0

integer

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

StartRow

 

0

integer

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

StartColumn

 

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

 相机输入的多路转接器

 

 

忽视

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

grab_image (Image, AcqHandle) //(同步采集)完后处理图像,然后再采集图像。采集图像的速率受处理速度影响。

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

 

C、图像采集其他相关

1、同步采集与异步采集    

grab_image_startAcqHandle, -1//该算子开始命令相机进行异步采集。只能与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

 

*=============================分割线===============================

 open_framegrabber ('DirectShow', 1, 1, 0, 0, 130, 360, 'default', 8, 'rgb', -1, 'false', 'default', '[0] BisonCam,NB Pro', 0, -1, AcqHandle)

grab_image_start (AcqHandle, -1)

while (true)

    grab_image_async (Image, AcqHandle, -1)

endwhile

close_framegrabber (AcqHandle)

*代码来自halcon-图像采集助手 (笔记本自带摄像头)

*====================================================================

 

2、相机参数读写

读取相机参数:

info_framegrabber( : : NameQuery InformationValueList)

 

get_framegrabber_param( : : AcqHandleParamValue : )  (常用)

写相机参数:

set_framegrabber_param( : : AcqHandleParamValue : )

 

二、图像分割

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

1、基于阈值的图像分割

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

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

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

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

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

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

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

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

 

  2017.6.5

 

三、形态学处理:

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

腐蚀,膨胀,开运算,闭运算是所有形态学图像处理的基本手法。

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

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

几何变换和仿射变换:

平移,旋转 (有时间要完善)

这四种基本手法算子为:

erosion1 :(腐蚀一个区域,输入为区域,输出为区域)

dilation1 :(膨胀一个区域,

opening : (先腐蚀再膨胀一个区域)

closing :  (先膨胀再腐蚀一个区域)

形态学其他算子:

Connection

select_shape

 

opening_circle

opening_rectangle1

closing_circle

closing_rectangle1

 

complement 
difference
 
intersection
 
union1
 
shaps_trans
 
fill_up

 

 

四,特征提取

area _center : 提取一个区域的面积(大小)以及中心(坐标)
moments :

smallest_rectangle1:提取包含区域的最小矩形

smallest_circleRegion::Row, Column, Radius)提取一个区域的最小半径

Row: 输出半径对应的Y值坐标

Column: 输出半径对应的X值坐标

Radius: 输出该区域的最小半径 (Radius >=0))

 

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

contlength:区域边界的长度

compactness

2、灰度特征

estimate_noise  (有时间要完善)

select_gray

 

五、输出结果:

1)获取满足条件的区域

2)区域分类,比如OCR

3)测量

4)质量检测

 

 

OCR识别:

partition_dynamic (Region;Partitioned:Distance,Percent:)

partition:分区      dynamic:动态

适用强拆粘连的字符串

Region:输入要分割的区域

Partitioned:输出分割后的区域

Distance:产生区域的大约宽度距离;

Percent:分散位置的最大变化

 

append_ocr_trainfCharacter,Image::Class,FileName

将字符添加到一个测试文本中

Character:输入对应字符的图像区域;

Image:输入对于字符的图像

Class:对于字符数组

FileName :输出的文件名

 

模板匹配:基于灰度

create_template (ImageReduced, 5, 4, 'sort', 'original', TemplateID)

为模板匹配准备一个格式

create_template ()

Template (input_object)  
输入一个要用作模板匹配的模板图像(Image

FirstError (input_control) 

首要误差

NumLevel (input_control)

金字塔层数:(一般用6)

Optimize (input_control)

是否优化匹配,默认sort 参考:none(根本不),sort(分类)

GrayValues (input_control)

增强原始灰度值 默认:original

参考:gradient(梯度), normalized(常态的,争强照明的), original(原始的), sobel(基于边缘)

 

 

adapt_template (Image, TemplateID)

适配模板

 

 

fast_match_mg (Image, Matches, TemplateID, 20, 3)

快速查找匹配

{best_match_mg (Image, Matches, TemplateID, 20, 3)  最优查找}

 

 

2017.6.6

 

课堂知识点

模板匹配:识别定位

           缺陷检测

Find_shape_models (多模板匹配)

例子:pm_multiple_models.hdev

 

Threshold_sub_pix  (光源不好的时候用)

Edges_sub_pix

第二种放射变换

Hom_mat2d_identity

Hom_mat2d_scale

Affine_trans_contour_xld()

Dyb_threshold

YUV----(概念

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有