一.halcon单摄像机标定

说明:

In the reference manual,operator signatures are visualized in the following way:
operator ( iconic input : iconic output : control input : control output )

在HALCON所有算子中,变量皆是如上格式,即:图像输入:图像输出:控制输入:控制输出,其中四个参数任意一个可以为空。控制输入量可以是变量、常量、表达式,控制输出以及图像输入和输入必须是变量,以存入算子计算结果中。

1.caltab_points:从标定板中读取marks中心坐标,该坐标值是标定板坐标系统里的坐标值,该坐标系统以标定板为参照,向右为X正,下为Y正,垂直标定板向下为Z正。该算子控制输出为标定板中心3D坐标。

2.create_calib_data:创建Halcon标定数据模型。输出一个输出数据模型句柄。

3.set_calib_data_cam_param:设定相机标定数据模型中设置相机参数的原始值和类型。设置索引,类型,以及相机的原始内参数等。

4.set_calib_data_calib_object:在标定模型中设定标定对象。设定标定对象句柄索引,标定板坐标点储存地址。

5.find_caltab:分割出图像中的标准标定板区域。输出为标准的标定区域,控制

6.find_marks_and_pose:抽取标定点并计算相机的内参数。输出MARKS坐标数组,以及估算的相机外参数。

即标定板在相机坐标系中的位姿,由3个平移量和3个旋转量构成。

7.set_calib_data_observ_points( : : CalibDataID,CameraIdx,CalibObjIdx,CalibObjPoseIdx,Row,Column,Index,Pose: )

收集算子6的标定数据,将标定数据储存在标定数据模型中。输入控制分别为标定数据模型句柄,相机索引,标定板索引,位姿索引,行列坐标,位姿。

8.calibrate_cameras( : : CalibDataID: Error)标定一台或多台相机,依据CalibDataID中的数据。控制输出平均误差。

9.get_calib_data( : :CalibDataID,ItemType,ItemIdx,DataName: DataValue)获得标定数据。

依靠索引号和数据名称来返回输出的数据值。可查询与模型相关的数据,与相机相关的数据(包括相机的内外参数等),与标定对象相关的数据,与标定对象的姿态相关的数据。控制输出是要查询的标定数据。

如:get_calib_data (CalibDataID, 'camera', 0, 'params', CamParam) //查询相机的位姿

get_calib_data (CalibDataID, 'calib_obj_pose', [0, NumImage], 'pose', Pose) //查询标定板位姿

10.write_cam_par( : :CameraParam,CamParFile: ) 记录相机的内参数,输入控制为内参数,输出控制为

存取相机内参数的文件名。

11.set_origin_pose( : :PoseIn,DX,DY,DZ: PoseNewOrigin)

设置新的坐标原点,控制输入为原始的位姿和沿着世界坐标系的三个坐标轴的平移量,控制输出为新的位姿。

 

补充点:摄像机标定过程,涉及到三个坐标系之间的坐标转换问题。即图像坐标系(成像平面,是一个二维坐标系,即我们看到摄像机的成像,单位为像素,原点在左上角,x轴水平向右,Y轴垂直向下)、相机坐标系(以摄像机成像中心为原点,Z轴垂直向下,单位为公制单位)、世界坐标系(相机坐标系Z轴与被测物所在平面的交点为世界坐标系的原点,Z轴垂直向上,刚好和相机坐标系方向相反,单位为公制单位)

所谓的相机标定,即是确定世界坐标系和相机坐标系之间的转换参数(外参)以及相机坐标系和成像坐标系之间的转换参数(即为内参)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值