Halcon 摄像机标定流程-代码实现

1. 标定参数的构成

• 标定参数分为相机的内参和外参;
• 内参:内参标定的是摄像系统的内部结构和关系,镜头的畸变在出厂的时候就已经固定下来的,唯一可能改变的是镜头和相机之间的组装关系。所以如果相机和镜头没有拆卸过,就不需要重新标定相机的内参了;
• 外参:外参是指摄像系统的坐标系与世界坐标系之间的关系,如果测量表面上下移动了,或测量表面旋转了,这时需要重新标定相机的外参,也就是重新确定摄像机在世界坐标系中的姿态。而标定外参只需要一张图像即可。
世界到相机的变换矩阵如下,object to camera
在这里插入图片描述
相机到世界的变换矩阵如下,camera to world
在这里插入图片描述

2. 标定流程代码

Halcon代码以及标定板图片/标定板参数文件下载地址:
链接:https://pan.baidu.com/s/1jbF9KIvPIwte1dOR7nk4fA
提取码:3qml

以下是halcon代码:以下代码完成的事情和使用标定助手完成内外参标定是一样的。

open_framegrabber ('KsjCamera_Release-19_11_x64', 1, 1, 0, 0, 0, 0, 'progressive', 8, 'default', -1, 'false', 'default', '255', 0, -1, AcqHandle)
grab_image_start (AcqHandle, -1)

* 1.创建标定模型
create_calib_data ('calibration_object', 1, 1, CalibDataID)

* 2.设置相机初始参数
* 相机类型/焦距/Kappa/像元尺寸/中心点坐标/分辨率
StartParameters:=['area_scan_division',0.008,0,3.2e-006,3.2e-006,1024,768,2048,1536]
set_calib_data_cam_param (CalibDataID, 0, [], StartParameters)

* 3.设置标定板参数
set_calib_data_calib_object (CalibDataID, 0, './Mycaltab.descr')

dev_get_window (WindowHandle)
for Index := 1 to 12 by 1
       grab_image_async (Image, AcqHandle, -1)
       write_image (Image, 'jpeg', 0, './'+Index)
       * 4.标定板的查找(圆形阵列、蜂窝)
       try
               find_calib_object (Image, CalibDataID, 0, 0, Index-1, [], [])
               * 5.显示  
               get_calib_data_observ_points (CalibDataID, 0, 0, Index-1, Row, Column, Index1, Pose)
               gen_cross_contour_xld (Cross, Row, Column, 26, 0.785398)
               get_calib_data_observ_contours (Contours, CalibDataID, 'caltab', 0, 0, Index-1)
               disp_3d_coord_system (WindowHandle, StartParameters, Pose, 0.02)      
       catch (Exception)
              Index:=Index-1
       endtry

       stop()
endfor

close_framegrabber (AcqHandle)

* 6.摄像机标定
calibrate_cameras (CalibDataID, Error)
* 7.获得内外参
get_calib_data (CalibDataID, 'camera', 0, 'params', CameraParam)
get_calib_data (CalibDataID, 'calib_obj_pose', [0,0], 'pose', obj_in_camera)
* 去掉厚度
set_origin_pose (obj_in_camera, 0, 0, 0.001, PoseNewOrigin)//标定板厚度1mm
* 保存内外参
write_cam_par (CameraParam, './campar.dat')
write_pose (PoseNewOrigin, './campose.dat')
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MechMaster

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值