Halcon(三)机器视觉工程开发步骤
(2017-07-20 22:45:17)
标签:
戴锦新halcon视觉开发 |
分类: Halcon |
机器视觉工程应用主要可以分为两个主要部分
硬件选型:光源,相机,镜头
软件使用:目前业内商业库:Halcon(霍肯-德国) , CONGNEX(康耐视-美国), DALSA (戴尔撒-加拿大), evision(比利时)IN (美国LabVIEW就是这家公司编写),
机器视觉软件应用工程开发的基本思路
图像获取,二、图像分割,三、形态学处理,四、特征提取,五、输出结果
在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_start(AcqHandle, -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,\
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
*=============================分割线===============================
grab_image_start (AcqHandle, -1)
while (true)
endwhile
close_framegrabber (AcqHandle)
*代码来自halcon-图像采集助手 (笔记本自带摄像头)
*====================================================================
2、相机参数读写
读取相机参数:
info_framegrabber( :
:
get_framegrabber_param( :
:
写相机参数:
set_framegrabber_param( :
:
二、图像分割
图像分割的定义:
所谓图像分割是指将图像中具有特殊含义的不同区域分割开来,这些区域是互相不交叉的,每个区域都满足特定区域的一致性。
1、基于阈值的图像分割
threshold —采用全局阈值分割图像。
格式:
2、基于边缘的图像分割:寻找区域之间的边界
watersheds —从图像中提取分水岭和盆地。
格式:
watersheds_threshold —使用阈值从图像中提取分水岭和盆地。
格式:
3、基于区域的图像分割:直接创建区域(ROI : gen_)
(
三、形态学处理:
形态学处理是以处理集合运算为基础的。
腐蚀,膨胀,开运算,闭运算是所有形态学图像处理的基本手法。
开操作(先腐蚀再膨胀)使对象的轮廓变得光滑,断开狭窄的间断和消除细的突出物。
闭操作(先膨胀再腐蚀) 填补狭窄的间断和长细的鸿沟,消除小的孔洞,填补轮廓线的断裂。
几何变换和仿射变换:
平移,旋转 (有时间要完善)。
这四种基本手法算子为:
erosion1 :(腐蚀一个区域,输入为区域,输出为区域)
dilation1 :(膨胀一个区域,…)
opening : (先腐蚀再膨胀一个区域)
closing :
形态学其他算子:
Connection
select_shape
opening_circle
opening_rectangle1
closing_circle
closing_rectangle1
complement
difference
intersection
union1
shaps_trans
fill_up
四,特征提取
area
moments :
smallest_rectangle1:提取包含区域的最小矩形
smallest_circle:(Region::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:分区
适用强拆粘连的字符串
Region:输入要分割的区域
Partitioned:输出分割后的区域
Distance:产生区域的大约宽度距离;
Percent:分散位置的最大变化
append_ocr_trainf(Character,Image::Class,FileName)
将字符添加到一个测试文本中
Character:输入对应字符的图像区域;
Image:输入对于字符的图像
Class:对于字符数组
FileName :输出的文件名
模板匹配:基于灰度
create_template (ImageReduced, 5, 4, 'sort', 'original', TemplateID)
为模板匹配准备一个格式
create_template ()
Template
输入一个要用作模板匹配的模板图像(Image)
FirstError
首要误差
NumLevel
金字塔层数:(一般用6层)
Optimize
是否优化匹配,默认sort, 参考:none(根本不),sort(分类)
GrayValues
增强原始灰度值 。 默认:original
参考:gradient(梯度),
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----(概念