搜索
您的当前位置:首页Halcon

Halcon

来源:智榕旅游


Halcon

目录

1、相机接入且拍摄 ......................................................................................................................... 2

1.1 步骤 .................................................................................................................................... 2 1.2 后续处理函数 .................................................................................................................... 5 2、相机标定 ..................................................................................................................................... 7

2.1标定步骤 ............................................................................................................................. 7 3、手眼系统标定 ........................................................................................................................... 11

3.1 标定步骤 .......................................................................................................................... 11 4、图像坐标和机器臂坐标转换 ................................................................................................... 13

4.1 转换步骤 .......................................................................................................................... 14 5、模版匹配(基于形状) ........................................................................................................... 19

5.1 步骤 .................................................................................................................................. 19 6、常见函数 ................................................................................................................................... 25

6.1 图像分割 .......................................................................................................................... 25 6.2 轮廓提取、处理 .............................................................................................................. 31

1、相机接入且拍摄

1.1 步骤

(1)连接相机

open_framegrabbe(Name, HorizontalResolution, VerticalResolution, ImageWidth,

ImageHeight,

StartRow,

StartColumn,

Field,

BitsPerChannel, ColorSpace, Generic, ExternalTrigger, CameraType, Device, Port, LineIn, AcqHandle) 在算子窗口内输入函数名,填入参数后点击“确定”按钮即可将函数加入程序中。 注:

Name: 图像采集设备的名称

可通过以下步骤确定:

1、 在Halcon菜单栏里点击“窗口”,选择“打开算子窗口”。

(若算子窗口已打开则直接进入第二步)

2、 在“输入算子或函数”栏内输入“open_framegrabbe”

回车后出现下图

2

3、 在“参数”栏中的Name后点击

即可自动检测连接的设

备(笔记本电脑摄像头检测后为’DirectShow’) 此参数若随意填写,可能导致程序报错

HorizontaResolution、VerticalResolution:预期的图像采集接口的水平分辨率和垂直分辨率

ImageWidth、ImageHeight:预期图像的宽度和高度部分 StartRow、StartColumn:显示预期图像的开始坐标 Field:预期图像是一半的图像或者是完整图像 BitsPerChannel: 每像素比特数和图像通道

ColorSpace:获取图像的输出形式(gray、raw、rgb、yuv、default) 说明:此参数设置不同的值可以得到不同的图像效果,如设置

3

“gray”则后续拍摄的图像为灰度图;选择“rbg”则会显示彩色图像

Generic: 通用参数与设备细节部分的具体意义 ExternalTrigger:是否有外部触发器 CameraType:使用相机的类型 Device: 连接到的设备

说明:此参数用于区分不同的摄像头,因此在连接多摄像头时需要设置不同的值。如程序中需要连接两个摄像头,则需要分别设值为‘0’和‘1’。

Port: 连接到的端口

LineIn:相机输入的多路转换器 AcqHandle: 图像获取设备的Handle

说明:此参数设置与Device类似,在同一程序中若有不同的相机也需要设置不同的值。并且此参数在后续摄像头进行拍摄时需要使用。

注:上述没有特别说明的参数,如果没有特定要求,则均可以设置为默认值。

(2)进行拍摄

4

grab_image( Image , AcqHandle ) 从指定图像采集装置抓取图像

注:Image: 采集后的图像将会保存在此变量中

AcqHandle:图像采集设备的Handle,由步骤(1)的函数唯

一确定。

(3)关闭设备

close_all_framegrabbers() 关闭所有连接的摄像头

1.2 后续处理函数

此部分内容主要用于在得到拍摄后的图像后,此图像无法较好地满

足图像处理要求的情况下,通过调用以下函数可以对图像进行一些简单的处理。

(1)decompose3(MultiChannelImage , Image1, Image2, Image3 ) 将一张三通道图像(如RGB)转换为三张单通道图像

注:如果之前在步骤(1)中设置ColorSpace参数为‘RGB’后,可对拍摄得到的图像进行此转换。

(2)trans_from_rgb(ImageRed, ImageGreen, ImageBlue ,ImageResult1,

5

ImageResult2 , ImageResult3,ColorSpace) 将一个RGB图像转换为任意格式的图像

注:ImageRed、ImageGreen、ImageBlue为decompose3函数中得

到的三个单通道图像

ColorSpace: 为指定图像的格式

该函数运行后生成三幅单通道图像,若要合成一张三通道图像,可由compose3函数实现。

6

2、相机标定

2.1标定步骤

代码部分可参考Halcon中自带的例程,位于浏览例程=》摄像机标定=》第一个例程

(1) 设置相机内部参数初始值 1、 Division畸变模型

cameraParam:[ Focus, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight]

2、 Polynomial畸变模型

CameraParam:[Focus, K1, K2, K3, P1, P2, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight]

注:当镜头为远心镜头时,Focus=0;Division畸变模型只适

用于精度要求不是很高,标定图片数量较少的情况;Polynomial畸变模型对镜像畸变和切向畸变都校正,精度较高,花费时间长。

Focus:镜头的标称焦距

Kappa、K1、K2、K3、P1、P2可全部初始化为0 Sx和Sy是相邻像元的水平和垂直距离 由CCD\\CMOS

确定建议取值

Cx和Cy是光心坐标初始值,可分别取ImageWidth和

7

ImageHeight大小的一半

ImageWidth和ImageHeight 由Halcon中进行处理的图片

大小决定

例:StartCamPar:=[0.016,0,0.0000074,0.0000074,326,247,652,494]

(2)标定板初始化

在代码中指定标定版描述文件(该类文件位于Halcon安装目录

下的calib目录下)

注:在此目录下有若干个不同的描述文件,选择时应根据实际

使用的标定版大小进行选择。如:实际使用标定版大小为30mm*30mm,则应选择文件名为:“caltab_30mm.descr”的文件。

例:CaltabName := 'caltab_30mm.descr'

(3)从标定版描述文件中读取标记中心点(中心点在后续步骤中需使用)

(4)读入图像,确定点在图像中的信息

8

caltab_points (CaltabName, X, Y, Z)

read_image (Image,Filename) 读取事先拍摄好的标定版图像

find_caltab(Image : Caltab : CalTabDescrFile, SizeGauss, MarkThresh,

MinDiamMarks : ) 在图像中提取出标定版以便于后续的处理

find_marks_and_pose(Image, CalTabRegion : : CalTabDescrFile, StartCamParam,

StartThresh,

DeltaThresh,

MinThresh,

Alpha,

MinContLength, MaxDiamMarks : RCoord, CCoord, StartPose) 将图像中点的数据写入RCoord和CCoord中

注:根据图像(拍摄标定版在不同图像区域)的个数对以上步骤进行循环,依次读入不同图像并进行标定。由于有不同图像,因此需要每次获取的RCoord、CCoord和StartPose加入到一个元组中

(5)完成标定

9

camera_calibration( : : NX, NY, NZ, NRow, NCol, StartCamParam,

NStartPose, EstimateParams : CameraParam, NFinalPose, Errors) 通过将(4)中获取的数据传入该函数,完成最后的标定。最终可得到相机的标定后的外参内参。

10

3、手眼系统标定

代码部分可参考Halcon中自带的例程,位于浏览例程=》手眼

系统标定=》第二个例程

3.1 标定步骤

(1)见相机标定步骤(1) (2)见相机标定步骤(2) (3)见相机标定步骤(3)

(4)读入图像和机械臂末端位置,循环进行标定

read_image (Image,Filename) 读取事先拍摄好的标定版图像

find_caltab(Image : Caltab : CalTabDescrFile, SizeGauss, MarkThresh, MinDiamMarks : ) 在图像中提取出标定版以便于后续的处理

find_marks_and_pose(Image,CalTabRegion,CalTabDescrFile, StartCamParam,

StartThresh,

DeltaThresh,

MinThresh,

Alpha,

MinContLength, MaxDiamMarks,RCoord, CCoord, StartPose) 将图像中点的数据写入RCoord和CCoord中

11

read_pose( PoseFile,Pose) 读入当前机器臂末端坐标系相对于机器人基准坐标系的坐标点与三轴旋转角度(6自由度) 注:

1、 此函数采用文件名作为参数,读入的文件中包含有事先

输入的图像中机器臂当前的坐标,此坐标可由机器人运动学正解公式得到。

2、 相机的z轴方向沿镜头向外,x轴方向为垂直z轴方向

向图片的正右方,y轴方向以右手螺旋定则确定。 3、 机器手基准坐标(世界坐标)的选取中x轴方向须与摄

像头x轴方向一致,否者结果会产生一定的偏差。 4、 文件的生成可参考 Halcon自带例程“手眼系统标定”

==》第一个例程。

(5)完成标定

hand_eye_calibration( X, Y, Z, Row, Col, NumPoints, RobotPoses, CameraParam, Method, QualityType , CameraPose, CalibrationPose, Quality) 步骤(4)所获取的点的数据和相机标定后的内部参数作为此函数的参数输入,得到机器人基准坐标系相对于相机坐

12

标系的位姿和标定物在机器人基准坐标系中的位姿。

注:最终得到的两个参数建议写入文件,以便于后续使用。可采用 write_pose( Pose, PoseFile ) 函数写入进指定文件内。

4、图像坐标和机器臂坐标转换

代码部分可参考Halcon中自带的例程,位于浏览例程=》手眼系统标定=》第四个例程

13

4.1 转换步骤

(1)读取相机参数和手眼系统标定后得到的两个位姿

read_cam_par( CamParFile ,CameraParam) 读取相机标定后内部参数

read_pose( PoseFile,Pose) 读取手眼标定后得到的机器人基准坐标系相对于相机坐标的位姿和标定物在机器人基准坐标系中的位姿。

(2) 定义一个参考坐标系

define_reference_coord_system(ImageName,CamParam, WindowHandle ,PoseCamRef)

输入标准标定板文件以及此文件对应型号的标定板被拍摄的图像,建立一个参考坐标系

注:由于采用单目相机,因此无法直接确定待抓取物体的深度信息,因此引用参考坐标系,并且保证此参考坐标系与待抓取物体处于同一平面,这样就可以通过标准的标定板信息引入所需要的深度信息。

14

CalplateFile,

(3) 为了便于计算,将位姿转换为齐次矩阵

pose_to_hom_mat3d( Pose ,HomMat3D)

注:此步骤主要涉及到两个位姿的转化,分别为机器人基准坐标相对于相机坐标的位姿和参考坐标系在相机坐标系中的位姿。

(4) 提取出待抓取物体的位姿(像素坐标)

此步骤根据不同的场景进行不同的处理,主要涉及图像的提取,分割以及轮廓的处理。最终可以得到需要的在图像坐标系中的像素坐标点。

(5)将像素坐标转换为参考坐标系下的坐标,并将位姿转换为齐次矩阵

15

1) Image_points_to_world_plane(CameraParam , WorldPose , Rows , Cols , Scale , X , Y) 转换为参考坐标系

注:CameraParam 为相机标定后的参数

WorldPose 为定义的参考坐标系相对于图像坐标的相对

位姿

2)hom_mat3d_identity(HomMat3D) 初始化一个齐次变换矩阵

3) hom_mat3d_rotate( HomMat3D , Phi , Axis , Px , Py , Pz , HomMat3DRotate ) 增加一个旋转角度进入齐次变换矩阵

注:HomMat3D 为上一步骤中的齐次变换矩阵

Rows和Cols 分别为图像坐标的横纵坐标 Scale 为转换为参考坐标系后的单位 X和Y 分别为参考坐标系中的横纵坐标

Phi 为增加的旋转角度 Axis 为旋转的坐标轴

16

Px、Py、Pz 分别为三个坐标轴中在旋转过程中固定不动

的点的个数,可取默认值为0

4)hom_mat3d_translage( HomMat3D , Tx , Ty , Tz , HomMat3DTranslate ) 向齐次变换矩阵增加三个轴上的平移,在此例程中仅仅对X和Y轴增加了平移

注:HomMat3D 为上一步骤中生成的矩阵

Tx、Ty、Tz 分别为三个坐标轴方向上增加的平移量 HomMat3DTranslate 为最后得到的齐次变换矩阵,即为

HomMat3DRotate 为最终输出的变换矩阵

此待抓取物体中心在参考坐标系下的位姿,可用于后续计算

(6)将待抓取物体在参考坐标系下的位姿转换为机器人坐标系下的位姿

hom_mat3d_compose (cam_H_ref, ref_H_grasp, cam_H_grasp)

17

矩阵的相乘

hom_mat3d_invert (cam_H_base, base_H_cam) 矩阵的转置 hom_mat3d_compose(base_H_cam,cam_H_grasp, base_H_grasp)

注:cam_H_ref 为参考坐标系在相机坐标系的位姿对应的齐次矩阵,cam_H_base为机器人基准坐标系在相机坐标系中的位姿对应的齐次矩阵。最终得到的位姿矩阵的数据形式为12个数据的数组,即运动学正解结果式。

(7)转换为指定坐标形式

convert_pose_type( PoseIn, OrderOfTransform, OrderOfRotation, ViewOfTransform , PoseOut) 调用此函数可将矩阵变换为6自由度的坐标信息。

18

5、模版匹配(基于形状)

代码部分可参考

Halcon中自带的例程,位于浏览例程=》模

版匹配(基于形状)=》第一个例程

本步骤最后可通过基于形状的模板匹配得到匹配图像的轮廓线,可用于后续计算坐标指导机器臂抓取物件。

5.1 步骤

(1)对要创建模版的物体进行拍摄

此步骤可参考“1、相机接入且拍摄”的步骤(1)和(2)

(2)根据模版的形状创建相应的区域

本例创建的为一个矩形区域,可根据不同的要求建立不同的图像区域,便于后续的区域采集

19

gen_rectangle1( Rectangle,Row1, Column1, Row2, Column2 ) 根据对角线上的两点坐标(图像像素点)建立一个矩形区域

(3)将模版所在区域从图像中分离出来

reduce_domain(Image, Region,ImageReduced)

注:Image:由步骤(1)得到的图像变量

Region: 由步骤(2)生成的几何区域 ImageReduced:分离后得到的图像

(4)创建模版

create_shape_model(Template,NumLevels,AngleStart,AngleExtent, AngleStep, Optimization, Metric, Contrast, MinContrast ,ModelID)

注:Template:由步骤(3)得到的分离后的图像

NumLevels:图像金字塔级数,该值越小,模版匹配时间越长,可设置为“auto”

AngleStart:模版起始角度

20

AngleExtent:模版角度幅度,若目标有旋转,模版需做

不同角度

AngleStep:角度步长,可设置自动“auto”

Optimization:模版点存储模式,设为“none”时,全点储存。当模版较大时,可较小点数,用于提速。

Metric:图像与模版中对比度差异不大时,选择“use_polarity”即可

ModelID:输出模版ID。唯一确定模版(在多模版情况

下)

(5)得到的模板的轮廓

get_shape_model_contours( ModelContours,ModelID, Level )

注:ModelContours:得到的模板轮廓 ModelID:由步骤(4)得到的模板ID Level:返回模板的金字塔水平

(6)在另一幅图像中寻找模板对应的区域

find_shape_model(Image,ModelID, AngleStart, AngleExtent,

21

MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness ,Row, Column, Angle, Score)

注:Image:待搜索的图像

ModelID:搜索模版对象的ID AngleStart:搜索起始角度

AngleExtent:搜索角度幅度(匹配时,搜索设定角度

范围内的模板)

MinScore:最小匹配分值。此参数定义模版匹配时,

至少有个什么样的质量参数才算是在图像中找到模版。MinScore设置的越大,搜索的就越快。

NumMatches:匹配个数。若满足匹配分值的结果个数大于该值,则返回质量系数最好的结果;若满足匹配分值的结果个数小于等于该值,则返回所有结果。设置为0时,返回所有满足的结果。

MaxOverLap:定义两个目标区域最多重叠的系数,以

便于将其分开为两个不同的目标区域分别返回。

SubPixel:精度控制。该参数的选择影响定位结果参数。

22

此值越高速度也越慢。None(不使用亚像素) 'interpolation'(差值亚像素) 'least_squares_high'(最小二乘亚像素) 'least_squares_high'

最小二

乘亚

像素

'least_squares_very_high'(最小二乘亚像素)

NumLevels:搜索时使用金字塔层数。可选为0

Greeddiness:用于控制定位加速。此值越大,匹配速

度越快,找丢模板的几率也越大。推荐值为0.7-0.8

Row:图像中与模板匹配的区域的像素横坐标(多个区域时以元组形式存在)

Column:图像中与模板匹配的区域的像素纵坐标(多个

区域时以元组形式存在)

Angle:图像中与模板匹配的区域的角度(多个区域时以

元组形式存在)

Score:图像中与模板匹配区域的个数

(4) 确定匹配位置的轮廓

23

vector_angle_to_rigid(Row1,

Column1,

Angle1,

Row2,

Column2, Angle2, HomMat2D) 从点和角度确定一个刚体仿射变换(矩阵) 注:

Row1、Column1和Angle1 分别为初始模板的像素横纵坐标和旋转角度。可设置为0,0,0。

Row2、Column2和Angle2分别为步骤(6)所确定的Row和Column。

HomMat2D是最后得到的结果。

affine_trans_contour_xld(Contours,ContoursAffinTrans , HomMat2D ) 得到匹配图像的轮廓线

24

注:

Contours:模板的轮廓线

ContoursAffinTrans:匹配图像的轮廓线

HomMat2D:上一个函数得到的刚体仿射变换矩阵

6、常见函数

6.1 图像分割

(1)threshold( Image , Region , MinGray , MaxGray ) 通过确定MinGray(最小灰度)和MaxGray(最大灰度)值对一幅灰度图像进行分割,满足区域灰度值介于最小最大之间的图像区域保存至Region变量中

注:此函数重点在于确定MinGray和MaxGray的数值,以下介绍如何使用Halcon中的工具进行确定。

25

1、 选择一幅图片,并且使其在Halcon中的“图形窗口”中打开,

如下图:

2、 鼠标右键单击图像,选择“灰度直方图”,出现下图所示窗口

26

3、

点击

后即可通过移动直方图中的绿线和红线进行最小最大灰度值值

确定,在移动两条线的过程中步骤1中打开的图像上会有红色区域的变化,此区域即为分割后的图像区域。

27

4、 确定完成后,将步骤2中的灰度直方图窗口中最小化和最大化

的数值填入函数中即可。

(2)connection( Region , ConnectedRegions ) 计算threshold函数分割出图像的连通分量

注:Region 为threshold函数输出的结果

28

ConnectedRegions为此函数最后的结果

(3)select_shape(Regions , SelectedRegions , Features , Operation , Min , Max ) 通过不同的特征选择出期望的图像

注:Regions 为处理前的图像

SelectedRegions 为特征处理后的图像 Features 为指定的特征,常用的值如下所示: ‘area’ 对象的面积 ‘width’ 区域的宽度 ‘height’ 区域的高度 ‘contlength’ 轮廓线的总长 ‘holes_num’ 区域内洞数 ‘area_holes’ 所有洞面积 以上条件可并列处理,在Operation中输入‘and’即可 Min和Max为特征的取值范围

29

(4)fill_up( Region , RegionFillUp ) 将区域中的洞填满

注:Region为处理前的图像 RegionFillUp为处理后的图像

此函数处理后的图像可方便进行目标物体的外轮廓提取

(5)area_center( Regions , Area , Row , Column ) 获取指定图形的像素面积以及图形中心点坐标 注:

Regions 为指定图形。 Area 为得到的图形像素面积。 Row 为图形中心像素横坐标。 Col 为图形中心像素纵坐标。

30

6.2 轮廓提取、处理

(1) gen_contour_region_xld( Regions , Contours , Mode ) 提取出指

定图像的外轮廓

注:

Regions 为指定图像 Contours 为提取出的轮廓线

Mode 为轮廓线的模式,可取值如下:

‘center’ 边缘像素点的中心作为轮廓点 ‘border’ 边缘像素点的外边作为轮廓点

(2) segment_contours_xld( Contours , ContoursSplit , Mode ,

SmoothCont , MaxLineDist1 , MaxLineDist2 ) 将轮廓线分为多个部分

注: Contours 为待分割的轮廓线

ContoursSplit 为分割后的轮廓线片段

31

Mode 指定分割轮廓的方式,可取值如下: ‘lines’ 使用直线分割

‘lines_circles’ 使用直线段和圆进行分割 ‘lines_ellipses’ 使用直线段和椭圆弧进行分割 SmoothCont 轮廓平滑的参数,若此值取得大于0的数值,

则在分割之前会进行轮廓的平滑处理

MaxLineDist1:在第一次迭代过程中轮廓线和近似直线的最

大距离。默认取值为4

MaxLineDist2: 在第二次迭代过程中轮廓线和近似直线的最

大距离。默认取值为2

(3) select_contours_xld( Contours , SelectedContours , Feature , Min1 , Max1 , Max2 , Max2 ) 通过不同的特征,提取出分割后轮廓中满足要求的轮廓线段。 注:

Contours 为一组由原始轮廓分割后的片段。 SelectedContours 为提取出满足条件的线段。 Feature: 为提取条件,常用取值如下:

32

‘contour_length’ 长度,指定此值后,通过Min1

和Max1即可确定范围,Min2和Max2没有作用。

‘direction’ 方向,由倾斜角度表示;指

定此值后,通过Min1和Max1即可确定范围,Min2和Max2没有作用。

‘closed’ 起始点和终止点距离的上限;

由Max1即可确定。

‘open’ 起始点和终止点距离的下限;由Min1即可确定。

(4)select_obj(Objects , ObjectSelected , Index ) 通过编号选择出某一对象,可用于从轮廓线段集合中选择指定线段。 注:

33

‘Min1’,‘Max1’分别为取值的范围

Objects 为待选择的对象集合 ObjectSelected 为选择得到的对象 Index 为指定的对象编号

(5) get_contour_xld( Contour , Row , Col ) 获取指定轮廓上点的像素坐标 注: Contour 为指定的轮廓线段 Row 为返回的像素点横坐标 Col 为返回的像素点的纵坐标

(6)reduce_domain( Image , Region , ImageReduced ) 线Region内的图像提取出来 注:

Image为待提取的图像。 Region 为轮廓线。

ImageReduced 为提取后的图像。

34

将位于轮廓 (7)distance_cc_min( Contour1 , Contour2 , Mode , DistanceMin) 计算两个轮廓线之间最小的距离 注:

Contour1 和 Contour2 为两条待比较的轮廓线。 Mode 为计算距离的类型,可取值如下:

‘point_to_point’ 两轮廓线中点之间的最短距离。 ‘point_to_segment’ 两轮廓线中线段之间的最短距离。 DistanceMin 为最终得到的结果。

7、标定板

7.1 Halcon 标准标定板描述文件

Halcon中预先制订了相机标定过程中使用的标定板,其描述文件

位于Halcon软件安装根目录下“calib”目录中。如下图所示:

35

文件名中的尺寸即为打印后标定板的尺寸。每个描述文件中的格式是一致的,主要记录了标定板中各个点的位置坐标信息。其中“caltab_10mm.descr”文件中的描述信息可见本文档同级目录“附件”中的“参数”文档。其余描述文件中的信息与此类似。

7.2 标定版制作

推荐采用CAD制图,根据标准标定板描述文件中的信息画出相应

标定板的样图。若在CAD制图中采用比例制图,则可只根据任意一个描述文件中的信息画图,打印的时候根据不同的需求按照不同比例

36

打印即可。如:同级目录“附件”中提供的CAD制图中样图为“1000*1000单位”,若打印后结果为“30mm*30mm”的标定板,则在打印时选择自定义比例为1:300即可。

37

因篇幅问题不能全部显示,请点此查看更多更全内容

Top