前言

相机标定是机器视觉项目的基础环节,其目的是求解相机内参(如焦距、主点坐标等),消除镜头畸变带来的测量误差,为后续的精准测量、目标定位、三维重建等任务提供保障。本文将基于 Halcon 软件,详细讲解Halcon标定板实现相机内参标定的完整流程,包含代码解析、关键参数说明及实操注意事项,适合机器视觉入门者学习参考。

一、标定前期准备

1. 硬件与素材准备

  • 标定板:选用 30mm 间距的棋盘格标定板(对应描述文件caltab_30mm.descr,Halcon 自带或自定义生成)。
  • 标定图像:拍摄 10 张不同姿态的标定板图像(姿态需多样化,包含平移、旋转、轻微倾斜,避免图像完全平行 / 垂直),命名格式为calib_01.png~calib_10.png,存放至./calib/目录下。
  • 相机:待标定的面阵相机(本文采用面阵相机参数配置)。

2. 核心原理

通过检测不同姿态下标定板的特征点,利用相机成像模型建立像素坐标与世界坐标的映射关系,优化求解相机内参及畸变参数,最终输出满足精度要求的相机参数文件。

gen_cam_par_area_scan_division (0.016, 0, 0.0000074, 0.0000074, 326, 247, 652, 494, CameraParam)
* 创建标定数据模型(CalibDataID)
create_calib_data ('calibration_object', 1, 1, CalibDataID)
* 向标定模型中设置相机初始内参(第0个相机使用StartCamPar)
set_calib_data_cam_param (CalibDataID, 0, [], CameraParam)
* 向标定模型中设置标定板描述文件(30mm间距的棋盘格标定板,文件为'caltab_30mm.descr')
set_calib_data_calib_object (CalibDataID, 0, 'caltab_30mm.descr')
* 功能:读取10张不同姿态的标定板图像,检测每张图像中的标定板,将特征数据存入标定模型
NumImages := 10
ImgPath := './calib/'
* 注:不使用用于推导测量平面位姿的图像(专注于内参标定)
for I := 1 to NumImages by 1 
    * 读取第I张标定图像(文件名格式:calib_01~10,I$'02d'表示两位数补零)
    read_image (Image, ImgPath + 'calib_' + I$'02d')
    * 在窗口中显示当前标定图像
    dev_display (Image)  
    * 检测当前图像中的标定板,将观测数据存入标定模型
    * 参数:图像(Image)、标定模型(CalibDataID)、第0个相机、第0个标定板、第I个观测(与图像序号对应)
    find_calib_object (Image, CalibDataID, 0, 0, I, [], [])
    * 从标定模型中提取当前观测的标定板轮廓(用于可视化检测结果)
    get_calib_data_observ_contours (Caltab, CalibDataID, 'caltab', 0, 0, I)
    * 轮廓颜色设为绿色
    * 在图像上叠加显示标定板轮廓,验证检测是否成功
    dev_set_color ('green')  
    dev_display (Caltab)  
    * 循环结束,10张图像的标定板特征均已存入模型
endfor
* 执行相机标定:基于标定模型中的观测数据,优化相机内参,返回重投影误差(Error)
calibrate_cameras (CalibDataID, Error)
* 从标定模型中提取优化后的相机内参(第0个相机的参数)
get_calib_data (CalibDataID, 'camera', 0, 'params', CamParam)
* 将优化后的内参写入文件('camera_parameters.dat'),供后续程序使用(如测量、位姿估计)
write_cam_par (CamParam, 'camera_parameters.dat')

二、实操注意事项

  1. 标定图像拍摄要求
  • 拍摄 10~20 张图像(本文用 10 张,数量越多标定精度越高),姿态多样化(左右平移、上下平移、前后旋转、轻微倾斜)。
  • 标定板需占据图像 1/3~1/2 区域,避免过小;确保标定板清晰,无反光、遮挡。
  1. 标定板描述文件
  • 若使用非 30mm 间距的标定板,需对应修改描述文件(如caltab_20mm.descr),或自定义生成标定板描述文件。
  • 描述文件需与标定板实际参数一致,否则会导致标定误差偏大。
  1. 重投影误差判断
  • 若重投影误差大于 1 像素,需检查:标定图像是否清晰、姿态是否多样化、标定板描述文件是否正确、初始内参是否合理。
  • 误差过大时,可增加标定图像数量,或重新拍摄姿态更丰富的图像。
  1. 资源释放
  • 标定完成后,通过clear_calib_data释放标定数据模型资源,避免内存泄漏。
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐