Skip to content

3D线扫相机标定

算子功能

对相机进行两两标定,输出标定矩阵和标定文件。使用线扫相机对指定的标定块进行取图后,在参考图像和目标图像上分别进行选点,根据选点结果,计算相机之间的标定矩阵。

参数介绍

输入参数

参数范围默认值说明图示
输入参考图像0-80参考图像输入的IM编号
输入目标图像0-81目标图像输入的IM编号

计算参数

参数范围默认值说明图示
选点模式手动/自动手动手动模式下需要手动选点,并且选点位置需要和标定块上的预设选点位置向匹配。需要至少选择5对不共面的点,选点范围为四棱台的顶点以及底座上表面的4个顶点;自动模式下需要输入仅含标定块的图像,并且标定块图像是完整的。此时算法会自动计算四棱台的8个顶点。
选点列表仅在手动模式下显示。点A-点L对应标定块上的顶点位置见图示中。标定块选点位置
输出标定文件路径标定文件的保存路径
输出图像0-80图像输出的IM编号。其中显示的图像为变换后的目标图像以及参考图像

输出参数

名称类型范围说明
Resultbooltrue/falsetrue为成功
false为失败
Warningbooltrue/falsetrue表示有警告
false表示没有
Messagestring输出成功或错误或警告信息,如果没有错误或警告为空
Timefloat算子执行时间,单位: ms
matrix_tgt2refmatrix目标相机坐标系到参考相机坐标系的标定矩阵。
rms_obj2refmatrix标定块上的对应点经过变换后,与参考图像上的对应点之间,计算出的均方根误差。
rms_obj2tgtmatrix标定块上的对应点经过变换后,与目标图像上的对应点之间,计算出的均方根误差。
rms_tgt2refmatrix目标图像上的对应点经过变换后,与参考图像上的对应点之间,计算出的均方根误差。

异常排查

序号异常信息对应参数解决方法
1输入图像为空检查输入图像是否为空
2标定文件路径参数为空选择正确的文件路径
3至少需要3个点进行矩阵计算至少设置3个点
4点对数量不匹配在参考图上设置的点数需要和在目标图像上设置的点数相同

示例介绍

本示例中,分别通过手动选点模式、自动选点模式,计算出目标相机坐标系到参考相机坐标系的标定矩阵。

工程设计

手动选点模式

  1. 选择3个加载3D点云算子
  2. 选择Lua脚本算子。
  3. 选择2个3D线扫相机标定算子。

自动选点模式

  1. 选择3个加载3D点云算子。
  2. 选择2个3D线扫相机标定算子,

工具使用

手动选点模式

  1. 选择3个加载3D点云算子。分别按顺序将3个相机拍摄的标定块图像输入到IM0,IM1,IM2。

  2. 选择Lua脚本算子,在脚本中输入相机1、相机2、相机3图像中的对应点坐标,如下:

    lua
    println('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)
  3. 选择一个3D线扫相机标定算子,进行相机1和相机2之间的标定。参考图像选点和目标图像选点都设置为手动模式。在参考图像选点列表和目标图像选点列表中分别绑定1_C至1_J、2_C至2_J。输出标定文件路径设置为./calib_21.json。输出图像编号设置为3。

  4. 选择一个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。

自动选点模式

  1. 选择3个加载3D点云算子。分别按顺序将3个相机拍摄的标定块图像输入到IM0,IM1,IM2。
  2. 选择一个3D线扫相机标定算子,进行相机1和相机2之间的标定。参考图像选点和目标图像选点都设置为自动模式。输出标定文件路径设置为./calib_21.json。输出图像编号设置为3。
  3. 选择一个3D线扫相机标定算子,进行相机2和相机3之间的标定。参考图像选点和目标图像选点都设置为手动模式。输出标定文件路径设置为./calib_32.json。输出图像编号设置为4。

本地图片

AI-Vision,让3D测量更简单