admin管理员组

文章数量:1558929

文章目录

      • 一、标定板描述文件生成
        • 1、标定板采买
        • 2、标定板描述文件生成
      • 二、标定助手使用
        • 1、安装标定板描述文件和相机参数
          • ①、相机模型选择
        • image-20240520165744285
          • ②、相机参数填写
        • 1、标定
        • 2、结果
        • 3、代码生成
          • 标定文件生成
      • 三、测量助手使用![image-20240521092547087](https://i-blog.csdnimg/blog_migrate/e0046ab670c87612851945d3a032e035.png)
        • 1、输入
        • 边缘判定
        • 模糊测量
        • 结果
        • 代码生成
      • 例程讲解
        • calibrate_cameras_telecentric_tilt.hdev
        • camera_calibration_external
      • 参考链接

一、标定板描述文件生成

1、标定板采买

​ 本次标定板采购的是高精度铝制Halcon标定板7X7圆点漫反射校正片光学测试标定板 HC050-1.875_浮法玻璃,商品详情页或商家都会提供标定板的相关信息,如下图。

2、标定板描述文件生成

使用gen_caltab算子,输入标定板信息,变量分别为阵列:(XNum×YNum: 7×7)、标记间距[单位米]:(MarkDist: 0.00375)、标记直径和距离的比值:(DiameterRatio: 0.5)。输出标定板参数文件 Caltab.descr 和标定板图像文件 Caltab.ps。此次把文件写入到D盘,不指明路径会生成在该程序目录下。

二、标定助手使用

1、安装标定板描述文件和相机参数

使用gen_caltab生产描述文件后。根据相机镜头参数填写安装参数,详细如下

①、相机模型选择

对于面阵相机,两种畸变模型可供使用:划分模型(Division)和多项式模型。划分模型(Division)用一个参数来构造径向畸变,多项式模型用5个参数来构造径向和离心畸变。

划分模型的优势是畸变可以被快速的应用,尤其是对于反向畸变,例如如果世界坐标被映射到图像平面。还有,如果只有几张标定图像被使用或者视野覆盖不足,划分模型则会比多项式模型得到更稳定的结果。多项式模型的主要优势是它可以更精确的构造畸变,因为其用了更高阶的项去构造径向畸变,并且它也构造了离心畸变。需要注意的是,多项式模型不能够反推。因此,反向畸变必须被迭代计算看,其要比划分模型反向畸变的计算要慢。

一般的,划分模型应该被用来标定。如果标定的精度不高,可以用多项式模型。但是需要注意的是,被用于多项式模型的标定序列必须提供一个完整的区域覆盖,这个区域在后边用于测量。畸变可能会在没有被标定板覆盖的区域外边被不准确的构造出来。这种情况发生在图像边缘,也发生在标定板没有覆盖到的视野区域内部。

②、相机参数填写

​ 以此次使用的MV-CH250-90GC相机和WTL260-0154X20镜头为例,查相机的参数文件得知其像元尺寸为 2.5 µ m × 2.5 µm。镜头为远心镜头[常见带调焦的都是投影镜头],查参数为 放大倍数0.154 物距260。因此参数填写如下:

1、标定

标定板图像可以通过两种方式读取[读文件夹图或者图像助手连接的相机],推荐图像助手方式。点击加载放入图片并识别,要关注下方的品质问题,标定板尽可能覆盖完全[绿色区域]。还可以取一个正向的标定板作为参考位姿,否则第一张为参考位姿,结束后点击标定

2、结果

通常第一张为参考位姿,可以设置原点在图像角,但是位姿不变

3、代码生成

生成模式有3种,建议第一种。还有应用示例选择性生成参考。生成模式有3种,建议第一种。还有应用示例选择性生成参考。

标定文件生成

生成模式选择:标定数据(File),下方的文件路径填写完整,点击插入代码即可生成相机的内参和位姿数据文件

点击插入代码获得标定的算子

三、测量助手使用

1、输入

选择图像源,标定来源可选不标定和标定,标定后可直接转为世界坐标,本次选择标定数据。

边缘判定

使用绘画线段进行ROI区域绘画,以绘画线段为例,ROI宽相当于以线段为中心的ROI矩形宽度,为了提供精确,边缘通常是成对出现,以成对的中点为测量点。如果边缘不清晰导致定位不到边缘,适当调整边缘提取下的3个参数,直到ROI定位出边界。

模糊测量

暂时不研究,跳过

结果

如果不勾引边缘对,这距离是从指定ROI标记到下个ROI标记的距离。

如果勾选边缘对,则距离是这个边缘对的右ROI标记到下一个边缘对的左ROI标记的距离。为了测量精准,真实距离要在加上两个边缘对宽的一半,例如0和1的实际精确距离为(0.247823+0.254225)/2+4.74446=4.995484.

代码生成

和标定助手相同,点击插入代码,把测量助手的配置转换成算子输出到编辑框

例程讲解

calibrate_cameras_telecentric_tilt.hdev

讲解了远心倾斜镜头矫正相机

  1. 讲解了远心倾斜镜头光轴要垂直于测量平面,否则就需要矫正

  2. 用crop_rectangle1裁剪图像用于演示,演示了光轴不垂直的影响-不重要~56

  3. 矫正的准备过程

    1. 指定初始相机倾斜角,
    2. 指定旋转角度,即传感器的x轴和镜头的倾斜轴之间的夹角
    3. 确定镜头放大倍数
    4. 定义像素的大小
  4. 使用gen_cam_par_area_scan_tilt_bilateral_telecentric_division生成远心双侧斜视相机的内参和外参()—StartCamParam

  5. 创建矫正数据模型

    1. 创建矫正对象create_calib_data-----CalibDataID
    2. 为对象(CalibDataID)添加初始相机参数(StartCamParam)set_calib_data_cam_param
    3. 为对象(CalibDataID)添加标定板描述文件(calplate_40mm.cpd)set_calib_data_calib_object
  6. 相机标定板采样

    1. 标定板图片读取
    2. 使用find_calib_object找到标定目标并估计相对位姿,获得的观测数据保存在对象(CalibDataID)的相对索引(Index)下
    3. 使用get_calib_data_observ_contours提取上一步的观测数据中的具体项目到指定输出中,可做显示(基于等高线)
  7. 矫正相机

    1. 通过calibrate_cameras计算对象(CalibDataID)内的矫正模型并优化,输出矫正误差(error)
    2. 使用get_calib_data查询矫正模型中的数据及其对应数据名称
    3. 使用display_camera_parameters(本地函数)进行前后对比和误差的显示。
  8. 矫正后的使用

    1. 读取尺子加标定板的图片caliper_measurement_plane

    2. 使用find_calib_object获得观测数据含相对位姿

    3. 使用get_calib_data_observ_points提取上一步的观测数据中的具体项目到指定输出中,可做显示(基于点)

    4. 远心相机不需要对板厚进行补偿

    5. 使用gen_measure_rectangle2画出测量矩形,类似于测量助手的ROI。输出MeasureHandle里存储了度量对象的数据结构

    6. 使用measure_pairs执行测量任务,根据边缘的幅度和阈值确定边缘,根据边缘的特性筛选边缘,输出带方向的区分上下前后的边缘坐标、输出边缘对内的间距、输出边缘对之间的间距。

      (36条消息) 一维测量中measure_pos和measure_pairs算子_沐细雨如春风的博客-CSDN博客

    7. 根据边缘对的前后坐标求出每个边缘对的中心坐标,使用gen_cross_contour_xld让中心坐标生成十字形的xld

    8. 使用image_points_to_world_plane让中心坐标从图像坐标系换算成世界坐标系。注意:此次需要输入相机的内参(由7-2得出)、需要物体与相机的相对位姿(由8-3得出)

    9. 使用distance_pp计算两点之间的距离(输入的是3对点,输出的也是3个距离)。

    10. 对得到的点集求平均值和之间的偏差度,并显示。

    camera_calibration_external

    演示了用相机矫正卡尺测量位置

    1. 先用camera_calibration_internal.hdev获得相机内参文件

      1. 使用gen_cam_par_area_scan_division生成面扫相机的初始参数矩阵—StartCamParam
      2. 创建矫正数据模型
        1. 创建矫正对象create_calib_data-----CalibDataID
        2. 为对象(CalibDataID)添加初始相机参数(StartCamParam)set_calib_data_cam_param
        3. 为对象(CalibDataID)添加标定板描述文件(calplate_40mm.cpd)set_calib_data_calib_object
      3. 相机标定板采样
        1. 标定板图片读取
        2. 使用find_calib_object找到标定目标并估计相对位姿,获得的观测数据保存在对象(CalibDataID)的相对索引(Index)下
        3. 使用get_calib_data_observ_contours提取上一步的观测数据中的具体项目到指定输出中,可做显示(基于等高线)
      4. 矫正相机
        1. 通过calibrate_cameras计算对象(CalibDataID)内的矫正模型并优化,输出矫正误差(error)
        2. 使用get_calib_data查询矫正模型中的数据CamParam
        3. 使用write_cam_par把数据写入到camera_parameters.dat文件中
      5. 使用clear_calib_data释放矫正数据模型CalibDataID
    2. 使用read_cam_par读取相机内参文件camera_parameters.dat到CamParam

    3. 读取尺子加标定板的图片caliper_measurement_plane

    4. 创建矫正数据模型

      1. 创建矫正对象create_calib_data-----CalibDataID
      2. 为对象(CalibDataID)添加相机参数(CamParam)set_calib_data_cam_param
      3. 为对象(CalibDataID)添加标定板描述文件(caltab_30mm.descr)set_calib_data_calib_object
    5. 标定采样

      1. 使用find_calib_object找到标定目标并估计相对位姿,获得的观测数据保存在对象(CalibDataID)下
      2. 使用get_calib_data_observ_contours提取上一步的观测数据中的具体项目到指定输出中,可做显示(基于等高线)
      3. 使用get_calib_data_observ_points提取上一步的观测数据中的具体项目到指定输出中,可做显示(基于点),含相对位姿信息(PoseForCalibrationPlate)
      4. 使用disp_caltab将标定板的3D模型投影到图像中
      5. 使用disp_circle将观测数据中的点投影到图像中
      6. 使用set_origin_pose将标定板高度加到相对位姿信息(PoseForCalibrationPlate)中
    6. 使用clear_calib_data释放矫正数据模型CalibDataID

    7. 使用上面的数据得到准确测量值(CamParam)

      1. 读卡尺图并做准备工作
        1. 输入卡尺世界坐标下的4个点的xyz坐标
        2. 输入上面4个点对应的图像平面坐标
        3. 将这4个点的图像坐标标记出—disp_cross
      2. 使用vector_to_pose计算世界和图像坐标间的绝对姿态
      3. 用write_pose将上面的姿态数据(FinalPose)保存下来(pose_from_three_points.dat)
    8. 任意点击得出图像上的世界坐标,以卡尺为基准

      1. 获得点击处的图像坐标–get_mbutton
      2. 在点击处标记–disp_cross
      3. 坐标转换为世界坐标–image_points_to_world_plane,并显示
    9. 定义ROI的四个世界坐标

    10. 使用pose_to_hom_mat3d获得一个可以变换坐标系姿态的矩阵,世界转相机的坐标系转换矩阵

    11. 使用affine_trans_point_3d将上面获得的矩阵和4个ROI世界坐标转为仿射出的ROI相机坐标

    12. 使用project_3d_point将ROI相机坐标转为像素单位的行列坐标

参考链接

  1. 【4.5 单相机标定:标定板+标定助手】视觉检测实战项目 - 知乎 (zhihu)
  2. 甲盾士 高精度铝制Halcon标定板7X7圆点漫反射校正片光学测试标定板 HC050-1.875_浮法玻璃【图片 价格 品牌 报价】-京东 (jd)
  3. (36条消息) 如何生成halcon标定板的描述文件_create_caltab_gq1156的博客-CSDN博客
  4. (36条消息) 标定精度_视觉hacon标定板如何选型_木子淇的博客-CSDN博客
  5. Halcon 标定详解和精密测量标定 - 杨萌珂 - 博客园 (cnblogs)

本文标签: 测量文件内参精度助手