关闭

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

标签: 应用halcon
2304人阅读 评论(0) 收藏 举报
分类:

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

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

软件:目前业内商业库主要有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

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 忽视

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( : : Name, Query : Information, ValueList)

写相机参数:

set_framegrabber_param( : : AcqHandle, Param, Value : )

二、图像分割:

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

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

作者:韩兆新

出处:http://hanzhaoxin.cnblogs.com/

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

0
0
查看评论

Halcon学习(一) 初识Halcon HDevelop下载安装

听师兄推荐了一个叫做Halcon的软件,经过几天找找资料,把环境装好了。 Halcon机器视觉软件是德国MVtec公司开发的一套完善的标准的机器视觉算法包,拥有应用广泛的机器视觉集成开发环境。相比于opencv,Halcon有自己的开发环境并且支持可视化窗口,在欧洲和日本比较流行,当然它们还有一个...
  • chaipp0607
  • chaipp0607
  • 2017-01-14 16:34
  • 5234

halcon小例:ORC识别

最近在学halcon,比起opencv,halcon在网上的资料较少。这篇是我自己利用halcon做ORC识别的小例子,供大家参考。(才疏学浅,不好勿喷,欢迎留言交流)原图 识别后 Halcon代码如下:*关闭窗口 dev_close_window () *读取图片 read_imag...
  • zxc024000
  • zxc024000
  • 2016-03-21 13:58
  • 1377

halcon/c++接口基础 之 halcon初认识

从今天开始,开始更新博客,主要分享自己最近正在翻译的Halcon/C++教程。先给出第一篇文章,由于此文章,是用latex写的,直接导成html,保存在七牛云存储上,所以直接点击链接就看到,后面我将直接分享到csdn博客上,我也希望大家将自己的一些原创资料分享出来,为此我建了一个qq群 ,希望志同道...
  • xiamentingtao
  • xiamentingtao
  • 2016-08-31 23:11
  • 1656

labview与halcon的机器视觉例子

  • 2012-11-19 16:26
  • 61KB
  • 下载

用Labview调用Halcon进行机器视觉编程

  • 2014-04-01 13:33
  • 73KB
  • 下载

使用halcon解决工业相机外部触发模式下的超时问题

使用halcon解决工业相机外部触发模式下的超时问题
  • u011661384
  • u011661384
  • 2014-12-31 10:26
  • 7976

从HALCON12导出程序至Visual Studio VC++工程

从HALCON12导出程序至Visual Studio VC++工程1.从HALCON12.0导出C++程序Halcon中写完程序,单击:文件—导出 弹出窗口中如下配置即可: HALCON会自动生成如下C++代码: 2.建立HALCON12.0的Visual Studio C++工程新...
  • shizhuoduao
  • shizhuoduao
  • 2015-10-25 16:32
  • 2782

LabVIEW与halcon.net混合编程实例

  • 2015-10-29 11:20
  • 450KB
  • 下载

LABVIEW中调用halcon的简单说明

  • 2015-02-01 16:07
  • 1.77MB
  • 下载

图像形状特征(八)--SC形状上下文

 形状上下文特征是一种很流行的形状描述子,多用于形状匹配,目标识别,它采用一种基于形状轮廓的特征描述方法,其在对数极坐标系下利用直方图描述形状特征能够很好地反映轮廓上采样点的分布情况。 形状上下文的基本原理如下: Step1:对于给定的一个形状,通过边缘检测算子(如:canny算子)获...
  • striving1234
  • striving1234
  • 2017-04-27 17:05
  • 380
    个人资料
    • 访问:104723次
    • 积分:1749
    • 等级:
    • 排名:千里之外
    • 原创:61篇
    • 转载:29篇
    • 译文:1篇
    • 评论:6条
    文章分类
    最新评论