Appearance
3D线扫相机标定
算子功能
对相机进行两两标定,输出标定矩阵和标定文件。使用线扫相机对指定的标定块进行取图后,在参考图像和目标图像上分别进行选点,根据选点结果,计算相机之间的标定矩阵。
参数介绍
输入参数
参数 | 范围 | 默认值 | 说明 | 图示 |
---|---|---|---|---|
输入参考图像 | 0-8 | 0 | 参考图像输入的IM编号 | |
输入目标图像 | 0-8 | 1 | 目标图像输入的IM编号 |
计算参数
参数 | 范围 | 默认值 | 说明 | 图示 |
---|---|---|---|---|
选点模式 | 手动/自动 | 手动 | 手动模式下需要手动选点,并且选点位置需要和标定块上的预设选点位置向匹配。需要至少选择5对不共面的点,选点范围为四棱台的顶点以及底座上表面的4个顶点;自动模式下需要输入仅含标定块的图像,并且标定块图像是完整的。此时算法会自动计算四棱台的8个顶点。 | |
选点列表 | 仅在手动模式下显示。点A-点L对应标定块上的顶点位置见图示中。 | ![]() | ||
输出标定文件路径 | 空 | 标定文件的保存路径 | ||
输出图像 | 0-8 | 0 | 图像输出的IM编号。其中显示的图像为变换后的目标图像以及参考图像 |
输出参数
名称 | 类型 | 范围 | 说明 |
---|---|---|---|
Result | bool | true/false | true为成功 false为失败 |
Warning | bool | true/false | true表示有警告 false表示没有 |
Message | string | 输出成功或错误或警告信息,如果没有错误或警告为空 | |
Time | float | 算子执行时间,单位: ms | |
matrix_tgt2ref | matrix | 目标相机坐标系到参考相机坐标系的标定矩阵。 | |
rms_obj2ref | matrix | 标定块上的对应点经过变换后,与参考图像上的对应点之间,计算出的均方根误差。 | |
rms_obj2tgt | matrix | 标定块上的对应点经过变换后,与目标图像上的对应点之间,计算出的均方根误差。 | |
rms_tgt2ref | matrix | 目标图像上的对应点经过变换后,与参考图像上的对应点之间,计算出的均方根误差。 |
异常排查
序号 | 异常信息 | 对应参数 | 解决方法 |
---|---|---|---|
1 | 输入图像为空 | 检查输入图像是否为空 | |
2 | 标定文件路径参数为空 | 选择正确的文件路径 | |
3 | 至少需要3个点进行矩阵计算 | 至少设置3个点 | |
4 | 点对数量不匹配 | 在参考图上设置的点数需要和在目标图像上设置的点数相同 |
示例介绍
本示例中,分别通过手动选点模式、自动选点模式,计算出目标相机坐标系到参考相机坐标系的标定矩阵。
工程设计
手动选点模式
- 选择3个
加载3D点云算子
。 - 选择
Lua脚本
算子。 - 选择2个
3D线扫相机标定
算子。
自动选点模式
- 选择3个
加载3D点云
算子。 - 选择2个
3D线扫相机标定
算子,
工具使用
手动选点模式
选择3个
加载3D点云
算子。分别按顺序将3个相机拍摄的标定块图像输入到IM0,IM1,IM2。选择
Lua脚本
算子,在脚本中输入相机1、相机2、相机3图像中的对应点坐标,如下:luaprintln('Hello AI-Vision!') -- 相机1上的点 SetPoint3D("1_C", 15.5,63.0799980164,-5.95093011856) SetPoint3D("1_D", 45.4799995422,63.3099975586,-5.33064985275) SetPoint3D("1_E", 28.8999996185,48.1399993896,4.03621006012) SetPoint3D("1_F", 38.3799972534,48.1299972534,4.19015979767) SetPoint3D("1_G", 28.7799987793,37.969997406,4.01133012772) SetPoint3D("1_H", 38.6399993896,38.2599983215,4.21365976334) SetPoint3D("1_I", 16.6999988556,3.37999987602,-5.81731987) SetPoint3D("1_J", 46.5799980164,3.42999982834,-5.53338003159) -- 相机2上的点 SetPoint3D("2_C", 6.33999967575,62.3099975586,-6.11768007278) SetPoint3D("2_D", 36.5,62.8599967957,-5.6080198288) SetPoint3D("2_E", 19.9200000763,47.6499977112,3.81477999687) SetPoint3D("2_F", 29.4200000763,47.3999977112,3.99586009979) SetPoint3D("2_G", 19.7799987793,37.6899986267,3.84138989449) SetPoint3D("2_H", 29.5999984741,37.8999977112,3.98522996902) SetPoint3D("2_I", 7.57999992371,2.72000002861,-6.00668001175) SetPoint3D("2_J", 37.3199996948,3.07999992371,-5.76390981674) -- 相机3上的点 SetPoint3D("3_D", 24.98, 62.549999, -5.75619) SetPoint3D("3_E", 8.44, 47.32, 3.68806) SetPoint3D("3_F", 17.9, 47.16, 3.86188) SetPoint3D("3_G", 8.26, 37.309998, 3.6232) SetPoint3D("3_H", 18.119999, 37.649998, 3.8217) SetPoint3D("3_J", 25.959999, 2.84, -5.93972)
选择一个
3D线扫相机标定
算子,进行相机1和相机2之间的标定。参考图像选点和目标图像选点都设置为手动模式。在参考图像选点列表和目标图像选点列表中分别绑定1_C至1_J、2_C至2_J。输出标定文件路径设置为./calib_21.json。输出图像编号设置为3。选择一个
3D线扫相机标定
算子,进行相机2和相机3之间的标定。参考图像选点和目标图像选点都设置为手动模式。在参考图像选点列表中绑定2_D、2_E、2_F、2_G、2_H、2_J,在在目标图像选点列表中绑定3_D、3_E、3_F、3_G、3_H、3_J。输出标定文件路径设置为./calib_32.json。输出图像编号设置为4。
自动选点模式
- 选择3个
加载3D点云
算子。分别按顺序将3个相机拍摄的标定块图像输入到IM0,IM1,IM2。 - 选择一个
3D线扫相机标定
算子,进行相机1和相机2之间的标定。参考图像选点和目标图像选点都设置为自动模式。输出标定文件路径设置为./calib_21.json。输出图像编号设置为3。 - 选择一个
3D线扫相机标定
算子,进行相机2和相机3之间的标定。参考图像选点和目标图像选点都设置为手动模式。输出标定文件路径设置为./calib_32.json。输出图像编号设置为4。