Halcon——摄像机标定

本文详细介绍了如何使用Halcon进行摄像机标定,包括创建标定文件、设置相机参数、查找标定板和执行标定过程。通过示例代码展示了gen_caltab、create_calib_data、find_calib_object等函数的用法,强调了在标定前的参数只是中间结果,实际标定需使用calibrate_cameras函数。最后提到了标定后的测试步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

创建

  • gen_caltab (7, 7, 0.00375, 0.5, ‘caltab.descr’, ‘caltab.ps’)

首先创建标定文件 根据所用的标定板的款式输入不同的参数 前两个参数分别是X,Y轴两个方向上的点数,第三个是中心距单位mm 第四个为小圆点直径与中心距的比例 例如我用的中心距3.75mm 小圆直径1.875mm 则第四个参数填0.5 运行之后的descr文件之后会用到 ps文件可以查看

  • create_calib_data (‘calibration_object’, 1, 1, CalibDataID)

创建标定句柄 第一个参数选择标定类型 有手眼标定四个选项和摄像机标定,第二个参数为摄像机个数,第三个为标定板个数,第四个标定句柄。

  • StartCamPar := [0.016,0,8.3e-006,8.3e-006,800,600,1600,1200]
  • set_calib_data_cam_param (CalibDataID, 0, ‘area_scan_division’, StartCamPar)

这两句应一起使用 ,上一句是准备初始化相机参数,参数分别是【焦距单位m,Kappa单位1/m*m,像元宽单位m,像元高单位m,图像坐标系原点在像素坐标系的行坐标单位像素,图像坐标系原点在像素坐标系的行坐标单位像素,图像宽单位像素,图像高单位像素】
准备好相机初始化参数后,执行第二句话,第二句第一个参数为标定句柄,第二个参数为相机索引,第三个是
相机扫描类型有线扫,面扫等多个参数,根据相机扫描类型的不同,第四个参数相机参数也会有变化,这里选择的是面扫。第四个就是刚才准备好的相机初始化参数

  • set_calib_data_calib_object (CalibDataID, 0, CalTabDescrFile)

再设置标定句柄的标定文件参数 【标定句柄,相机索引,标定文件路径(就是descr文件,也可以是cpd文件)】

查找

  • TmpCtrl_FindCalObjParNames := [‘gap_tolerance’,‘alpha’,‘skip_find_caltab’]
  • TmpCtrl_FindCalObjParValues := [1,1,‘false’]
  • find_calib_object (Image, CalibDataID, 0, 0,Index, TmpCtrl_FindCalObjParNames, TmpCtrl_FindCalObjParValues)

该函数作用为在图像中查找标定板并且添加到句柄中,【图像,标定句柄,相机索引,标定板索引,pose位置索引,参数名称默认[],参数值默认[]】

  • get_calib_data_observ_pose (CalibDataID, 0, 0, Index, ObjInCameraPose)

查看当前标定板在图像坐标系中的Pose信息,【标定句柄,相机索引,标定板索引,姿态Pose索引,输出参数Pose】

  • get_calib_data_observ_contours (Contours, CalibDataID, ‘marks’, 0, 0, 0
Halcon相机标定代码.hdev 1.初始化 for example: Full image (640*480) Subsampling (320*240) ImageWidth 640 320 ImageHeight 480 240 2.标定板初始化 CaltabName := 'caltab_30mm.descr'//标定板描述文件 set_calib_data_calib_object (CalibDataID, 0, CaltabName) 3.创建数据模型 create_calib_data ('calibration_object', 1, 1, CalibDataID) 4.获取标定图片 相机拍摄不同位姿下图片8-15张,拍摄图片时标定板尽量覆盖整个视场(标定板要根据工作距离、视场大小定制);拍摄图片上的圆直径不得小于10个像素 5.加载所有图像,寻找标定板区域,确定圆心,将结果加载到组元中 for I := 1 to NumImages by 1 ... acquire image ... find_caltab (Image, Caltab, CaltabName, SizeGauss, MarkThresh, MinDiamMarks) find_marks_and_pose (Image, Caltab, CaltabName, StartCamPar, StartThresh, \ DeltaThresh, MinThresh, Alpha, MinContLength, MaxDiamMarks, RCoord, CCoord, StartPose) set_calib_data_observ_points (CalibDataID, 0, 0, I, RCoord, CCoord, 'all', StartPose) endfor 下面将Halcon中提取目标点的大致原理说一下: 首先find_caltab 算子对图像高斯滤波(核大小为SizeGauss),接着阈值分割(与之大小为MarkThresh)将标定板的区域找出来, find_marks_and_pose 算子对区域中的圆进行分割,找到圆的个数,周长,坐标位置等应该和标定板描述文件中的一致,否则会自动调整StartThresh,使得StartThresh按照DeltaThresh步长减小到MinThresh,知道找到准确的圆心。 6.有了所有图像中的圆心就可以标定了 calibrate_cameras (CalibDataID, Errors) 返回平均投影误差Errors
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vector_LW

我们终将成龙 加油

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值