HALCON-从入门到入门-相机标定-内参外参

1.废话

为什么要进行相机标定

几个坐标系

像素坐标系(图片坐标系)

就是我们在电脑上看到图片的坐标系,以左上角为原点(2d坐标系)单位是像素pixel

相机坐标系

相机物方视野投影的坐标系,单位是mm

世界坐标系

就是真实的世界坐标系,单位是mm

标定的结果

标定的结果中有内参矩阵,外参,畸变系数

先说内参矩阵表示为K

包含的信息有焦距,感光芯片尺寸和分辨率(像素数量)等信息

包含了像素坐标系和相机坐标系的互相转换信息。

畸变系数

表示相机镜头 加工或安装过程中造成的畸变

然后是外参,包括旋转矩阵和平移向量

包含了相机坐标系和世界坐标系的转换关系

根据上面的三个标定数据,我们就可以将一个像素坐标转换为世界坐标系中的真实坐标了。

这对于我们使用相机进行测量,引导具备重要意义。

2.标定助手标定

首先拍一些标定板的照片

打开halcon标定助手

点击加载按钮 加载一些图片进来(也可以连接相机直接拍摄)

点击每一张图片,查看halcon对标定板的识别情况

正常情况就是会识别到标定板上的每个点,并给出坐标轴显示

不同姿态的标定板都可以稳定识别

识别算法还是写得非常棒

点击第一张图片(也可以选择其他的,主要是看标定结果你是用在平面上还是一个斜面上)

设置为参考位姿

最后给出的外参结果就是基于这个选择生成的。

确认其他所有的细节都搞定了之后点击标定按钮

好的,告诉我们标定成功了

然后给出了标定结果

包括摄像机参数-内参

摄像机位姿-外参

选择后面的代码生成

点击上面标定一栏的插入代码,即可将标定结果插入到脚本编写界面

3.脚本标定

首先把图片加载进来

list_files ('G:/20240620-halcon_calib/image', 'files', Files)

创建相机标定对象

gen_cam_par_area_scan_division (0.008, 0, 0.0000086, 0.0000086, 320, 256, 640, 512, StartCamPar)
CalTabDescrFile := 'caltab_big.descr'
create_calib_data ('calibration_object', 1, 1, CalibDataID)
set_calib_data_cam_param (CalibDataID, 0, [], StartCamPar)
set_calib_data_calib_object (CalibDataID, 0, CalTabDescrFile)

这里的相机参数 需要指定一个初始的,不需要太精确

标定板描述文件,根据算子生成,官方的标定板在安装目录有现成的标定板描述文件

接着循环识别每一张图片,使用刚才创建的标定对象识别每一张图片

for Index := 0 to |Files|-1 by 1
    read_image (Image, Files[Index])
    
    
    find_calib_object (Image, CalibDataID, 0, 0, Index, [], [])
    get_calib_data (CalibDataID, 'camera', 0, 'init_params', StartCamPar)
    get_calib_data_observ_points (CalibDataID, 0, 0, Index, Row, Column, Index2, Pose)
    get_calib_data_observ_contours (Contours, CalibDataID, 'caltab', 0, 0, Index)
    gen_cross_contour_xld (Cross, Row, Column, 6, 0.785398)
    dev_set_color ('green')
    dev_display (Contours)
    dev_set_color ('yellow')
    dev_display (Cross)
endfor

等到每一张图片都识别成功了,调用下面代码执行标定

calibrate_cameras (CalibDataID, Error)
get_calib_data (CalibDataID, 'camera', 0, 'params', CamParam)

没有问题

4.文件

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

黄晓魚

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

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

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

打赏作者

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

抵扣说明:

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

余额充值