Halcon 多相机统一坐标系(标定)

多相机统一坐标系是指将多个不同位置的相机的图像采集到同一个坐标系下进行处理和分析的方法。 在计算机视觉和机器视觉领域中,多相机统一坐标系被广泛应用于三维重建、立体视觉、目标跟踪等任务中。

以gen_binocular_rectification_map(生成描述图像映射的转换图的双目相机对进行校正)为例,

gen_binocular_rectification_map(Map1,Map2:CamParam1, CamParam2,RalPose,SubSanpling,Method,MapType:,CamParamRect1,CamParamRect2,CamPoseRect1,CamPoseRect2,RelPoseRect )

最重要得三个参数输入为:CamParam1, CamParam2,RalPose

那么针对如何获取这三个参数做相机标定为案例

Step1 - 读取图片获取图片大小以及标定类型

复制代码
ImgPath := 'stereo/board/'
CalDescrFile := 'caltab_30mm.descr'
read_image (ImageL, ImgPath + 'calib_l_01')
read_image (ImageR, ImgPath + 'calib_r_01')
get_image_size (ImageL, WidthL, HeightL)
get_image_size (ImageR, WidthR, HeightR)

Step2 - 内部和外部摄像机参数

复制代码
gen_cam_par_area_scan_division (0.0125, 0, 1.48e-5, 1.48e-5, WidthL / 2.0, HeightL / 2.0, WidthL, HeightL, StartCamPar)

Step3 - 创建 HALCON 校准数据模型。

create_calib_data ( :CalibSetup,NumCameras,NumCalibObjets,CalibDataID)

CalibSetup 校准类型(输入)

NumCameras (摄像机数量)校准设置中的相机数量(输入)

NumCalibObjets 校准对象(输入)

CalibDataID 创建的校准数据模型的句柄。(输出)

复制代码
create_calib_data ('calibration_object', 2, 1, CalibDataID)

Step4 - 在校准数据中设置相机的类型和初始参数

set_calib_data_cam_param( :CalibDataID,CameraIdx ,CameraType ,CameraParam )

CalibDataID 校准数据模型的句柄。(输入)

CameraIdx 相机索引 (输入)

CameraType 相机的类型(输入)

CameraParam 初始相机内部参数(输入)

复制代码
set_calib_data_cam_param (CalibDataID, 'all', [], StartCamPar)

Step5 - 在校准模型中定义校准对象。

set_calib_data_calib_object( :CalibDataID,CalibObjIds ,CalibObjDescr )

CalibDataID 校准数据模型的句柄(输入)

CalibObjIds 校准对象索引。(输入)

CalibObjDescr 3D 点坐标或描述文件名(输入)

Step6 - 读取所有使用的校准图像

复制代码
read_image (ImagesL, ImgPath + 'calib_l_' + [1:15]$'02d')
read_image (ImagesR, ImgPath + 'calib_r_' + [1:15]$'02d')
count_obj (ImagesL, Number)
for I := 1 to Number by 1
    select_obj (ImagesL, ImageL, I)
    select_obj (ImagesR, ImageR, I)
    * 查找校准板
    find_calib_object (ImageL, CalibDataID, 0, 0, I, [], [])
    find_calib_object (ImageR, CalibDataID, 1, 0, I, [], [])
    *可视化提取的校准标记和由估计姿势定义的坐标系。
    get_calib_data_observ_points (CalibDataID, 0, 0, I, Row, Column, Index, StartPoseL)
    get_calib_data_observ_points (CalibDataID, 1, 0, I, Row, Column, Index, StartPoseR)
    dev_set_window (WindowHandle1)
    dev_display (ImageL)
    disp_caltab (WindowHandle1, CalDescrFile, StartCamPar, StartPoseL, 1)
    dev_set_window (WindowHandle2)
    dev_display (ImageR)
    disp_caltab (WindowHandle2, CalDescrFile, StartCamPar, StartPoseR, 1)
endfor

Step7 - 执行实际校准

复制代码
calibrate_cameras (CalibDataID, Error)
get_calib_data (CalibDataID, 'camera', 0, 'params', CamParamL)
get_calib_data (CalibDataID, 'camera', 1, 'params', CamParamR)
get_calib_data (CalibDataID, 'camera', 1, 'pose', cLPcR)

至此,gen_binocular_rectification_map中的CamParam1, CamParam2,RalPose 获取完成。其一次对应CamParamL, CamParamR, cLPcR

相关推荐
yzx9910138 小时前
递归算法入门:像俄罗斯套娃一样思考
人工智能·算法
心中有国也有家8 小时前
从零上手 CANN 学习中心:像逛技术便利店一样学昇腾
学习·算法·开源
隐层漫游者8 小时前
2026年了,你还只会调包?手把手教你K-Means、随机森林、XGBoost与朴素贝叶斯,全网最硬核机器学习实战指南!
机器学习
oo哦哦8 小时前
搜索矩阵系统的最短路密码:用Dijkstra算法和网络流理论,解释为什么你做了1000个关键词,流量还不如别人30个
网络·算法·矩阵
Matlab程序猿小助手8 小时前
【MATLAB源码-第319期】基于matlab的帝王蝶优化算法(MBO)无人机三维路径规划,输出做短路径图和适应度曲线.
开发语言·算法·matlab
l1t8 小时前
DeepSeek总结的在 DuckDB 中试驾 Lance 数据湖仓格式
数据库·人工智能·机器学习·duckdb
图码8 小时前
二分查找进阶:如何在有序数组中快速找到Upper Bound?
数据结构·算法·面试·分类·柔性数组
试剂界的爱马仕8 小时前
《古董局·终局5:潮生》第 2 章:镜子的天赋
大数据·人工智能·算法
Cthy_hy8 小时前
树状数组(BIT)进阶:差分优化实现区间修改、区间查询
数据结构·python·算法
北小菜9 小时前
xclabel是一款开源图像标注与模型训练工具,采用Python+Flask开发,跨平台支持Windows/Linux/Mac
python·神经网络·计算机视觉·labelme·视频行为分析系统