当前位置:文档之家› 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”回车后出现下图3、在“参数”栏中的Name后点击即可自动检测连接的设备(笔记本电脑摄像头检测后为’DirectShow’)此参数若随意填写,可能导致程序报错HorizontaResolution、VerticalResolution:预期的图像采集接口的水平分辨率和垂直分辨率ImageWidth、ImageHeight:预期图像的宽度和高度部分StartRow、StartColumn:显示预期图像的开始坐标Field:预期图像是一半的图像或者是完整图像BitsPerChannel:每像素比特数和图像通道ColorSpace:获取图像的输出形式(gray、raw、rgb、yuv、default)说明:此参数设置不同的值可以得到不同的图像效果,如设置“gray”则后续拍摄的图像为灰度图;选择“rbg”则会显示彩色图像Generic: 通用参数与设备细节部分的具体意义ExternalTrigger:是否有外部触发器CameraType:使用相机的类型Device: 连接到的设备说明:此参数用于区分不同的摄像头,因此在连接多摄像头时需要设置不同的值。

如程序中需要连接两个摄像头,则需要分别设值为‘0’和‘1’。

Port: 连接到的端口LineIn:相机输入的多路转换器AcqHandle: 图像获取设备的Handle说明:此参数设置与Device类似,在同一程序中若有不同的相机也需要设置不同的值。

并且此参数在后续摄像头进行拍摄时需要使用。

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

(2)进行拍摄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,ImageResult2 , ImageResult3,ColorSpace) 将一个RGB图像转换为任意格式的图像注:ImageRed、ImageGreen、ImageBlue为decompose3函数中得到的三个单通道图像ColorSpace: 为指定图像的格式该函数运行后生成三幅单通道图像,若要合成一张三通道图像,可由compose3函数实现。

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可全部初始化为0Sx和Sy是相邻像元的水平和垂直距离由CCD\CMOS 确定建议取值Cx和Cy是光心坐标初始值,可分别取ImageWidth和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)从标定版描述文件中读取标记中心点(中心点在后续步骤中需使用)caltab_points (CaltabName, X, Y, Z)(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中注:根据图像(拍摄标定版在不同图像区域)的个数对以上步骤进行循环,依次读入不同图像并进行标定。

由于有不同图像,因此需要每次获取的RCoord、CCoord和StartPose加入到一个元组中(5)完成标定camera_calibration( : : NX, NY, NZ, NRow, NCol, StartCamParam, NStartPose, EstimateParams : CameraParam, NFinalPose, Errors) 通过将(4)中获取的数据传入该函数,完成最后的标定。

最终可得到相机的标定后的外参内参。

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中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)所获取的点的数据和相机标定后的内部参数作为此函数的参数输入,得到机器人基准坐标系相对于相机坐标系的位姿和标定物在机器人基准坐标系中的位姿。

注:最终得到的两个参数建议写入文件,以便于后续使用。

可采用write_pose( Pose, PoseFile ) 函数写入进指定文件内。

4、图像坐标和机器臂坐标转换代码部分可参考Halcon中自带的例程,位于浏览例程=》手眼系统标定=》第四个例程4.1 转换步骤(1)读取相机参数和手眼系统标定后得到的两个位姿read_cam_par( CamParFile ,CameraParam) 读取相机标定后内部参数read_pose( PoseFile,Pose) 读取手眼标定后得到的机器人基准坐标系相对于相机坐标的位姿和标定物在机器人基准坐标系中的位姿。

相关主题