设置首页收藏本站
开启左侧

单目相机标定提示没有查找参数?

[复制链接]
csh2230995021 发表于 2025-7-26 11:16:19 | 显示全部楼层 |阅读模式
悬赏2视觉币
123.png
采集的单目相机拍摄棋盘格标定后,运行程序,发现 出了一个这样的错误,整半天没整明白哪里不能调用了,求大佬们解答帮助

  1. * 标定文件路径
  2. ImgPath := 'C:/Users/admin/Desktop/办公/标定图片/'
  3. *关闭窗口
  4. dev_close_window ()
  5. *创建新窗口
  6. dev_open_window (0, 0, 640, 480, 'black', WindowHandle)
  7. *关闭更新,可以提升性能
  8. dev_update_off ()
  9. *区域以边缘显示
  10. dev_set_draw ('margin')
  11. *设定线宽
  12. dev_set_line_width (3)
  13. *设定字体
  14. set_display_font (WindowHandle, 22, 'mono', 'true', 'false')

  15. * 相机标定.
  16. * 1. 根据畸变模型生成参数数组,例程选择的是area_scan_division模型(适用场景:精度不高,标定图片数量少),所以有9参数
  17. * area_scan_polynomial精度较高,对径向畸变、切向畸变都进行校正
  18. * 参数 CameraParam := ['area_scan_division',Focus,Kappa,Sx,Sy,Cx,Cy,ImageWidth,ImageHeight]
  19. * Focus: 代表焦距,按照镜头参数进行填写,远心镜头填写0;
  20. * Kappa: 代表畸变大小,因为在标定之前,所以填写0;
  21. * Sx,Sy: 代表像元大小,即像元尺寸,产找相应相机参数即可;0.00000375m,0.000375cm,0.00375mm,3.75um;上面的单位都是m
  22. * Cx,Cy: 代表图像的坐标中心,即图像像素尺寸宽高的一半;
  23. * ImageWidth, ImageHeight: 代表图像的宽和高
  24. gen_cam_par_area_scan_division (0.008, 0, 0.0000048, 0.0000048, 1296, 102, 2592, 2048, StartCamPar)
  25. * 创建标定数据模型
  26. * CalibSetup:'calibration_object'用于标定一个或多个相机的内参以及相机位姿,其他的四个用于手眼标定
  27. create_calib_data ('calibration_object', 1, 1, CalibDataID)
  28. * 2. 在标定数据模型中写入标定的类型以及初始相机参数,StartCamPar 第一步已经生成,所以直接使用即可
  29. set_calib_data_cam_param (CalibDataID, 0, [], StartCamPar)
  30. * 3. 在标定模型中定义标定的目标,即标定板文件的相关配置,引号中应该是内置的,未找到相应文件
  31. set_calib_data_calib_object (CalibDataID, 0, 'calplate_80mm.cpd')
  32. * 5. 标定板识别
  33. NumImages := 9
  34. for I := 1 to NumImages by 1
  35.     * 读取图像
  36.     * Image Acquisition 01: Code generated by Image Acquisition 01
  37.     list_files ('C:/Users/admin/Desktop/办公/标定图片/L', ['files','follow_links'], ImageFiles)
  38.     tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
  39.     for Index := 0 to |ImageFiles| - 1 by 1
  40.     read_image (Image, ImageFiles[Index])
  41.     * Image Acquisition 01: Do something
  42.     endfor
  43. dev_display (Image)
  44.     * 找到标定板,并向标定数据模型中写入提取到的点和finder pattern 轮廓,可以到帮助里面仔细看下finder pattern的介绍
  45.     find_calib_object (Image, CalibDataID, 0, 0, 0, [], [])
  46.     * 从标定数据模型中获取提取到的 finder pattern 轮廓
  47.     get_calib_data_observ_contours (Caltab, CalibDataID, 'caltab', 0, 0, I)
  48.     * 从标定数据模型中获取提取到的圆中心点
  49.     get_calib_data_observ_points (CalibDataID, 0, 0, I, Row, Column, Index, StartPose)
  50.     dev_set_color ('green')
  51.     dev_display (Caltab)
  52.     dev_set_color ('red')
  53.     disp_circle (WindowHandle, Row, Column, gen_tuple_const(|Row|,1.5))
  54. endfor
  55. * 6. 通过标定数据模型计算相机的内参和外参,Errors:标定后投影的均方根误差,单位像素
  56. calibrate_cameras (CalibDataID, Errors)
  57. * 7. 获取标定数据模型中存储或计算的数据,CamParam中的数值与1中的相应项对应
  58. get_calib_data (CalibDataID, 'camera', 0, 'params', CamParam)
  59. * The reference image, i.e., the image in which the calibratio
  60. * plate is located on the ruler is the first image

  61. * 8. 获取相机的位姿
  62. get_calib_data (CalibDataID, 'calib_obj_pose', [0,1], 'pose', Pose)
  63. * To take the thickness of the calibration plate into account, the z-valu
  64. * of the origin given by the camera pose has to be translated by the
  65. * thickness of the calibration plate.
  66. * Deactivate the following line if you do not want to add the correction.
  67. * 9. 如果将标定板的厚度考虑进去,请执行下面一条命令
  68. set_origin_pose (Pose, 0, 0, 0.002, Pose)
  69. * measure the distance between the pitch lines
  70. * 10. 读取一张测试图像
  71. read_image (Image, ImgPath + 'ruler')
  72. dev_display (Image)
  73. * 11. 创建一个测量句柄
  74. gen_measure_rectangle2 (690, 680, rad(-0.25), 480, 8, 1280, 960, 'bilinear', MeasureHandle)
  75. measure_pairs (Image, MeasureHandle, 0.5, 5, 'all', 'all', RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
  76. Row := (RowEdgeFirst + RowEdgeSecond) / 2.0
  77. Col := (ColumnEdgeFirst + ColumnEdgeSecond) / 2.0
  78. disp_cross (WindowHandle, Row, Col, 20, rad(45))
  79. * 12.将像素左边转换到实际坐标系中
  80. image_points_to_world_plane (CamParam, Pose, Row, Col, 'mm', X1, Y1)
  81. distance_pp (X1[0:11], Y1[0:11], X1[1:12], Y1[1:12], Distance)
  82. tuple_mean (Distance, MeanDistance)
  83. tuple_deviation (Distance, DeviationDistance)
  84. disp_message (WindowHandle, 'Mean distance: ' + MeanDistance$'.3f' + 'mm +/- ' + DeviationDistance$'.3f' + 'mm', 'window', 30, 60, 'yellow', 'false')
复制代码

最佳答案

查看完整内容

第32行是设置标定板的描述文件,这个文件可能不存在。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
大凡光学,专注标定板提供
Criss 发表于 2025-7-26 11:16:20 | 显示全部楼层
  1. set_calib_data_calib_object (CalibDataID, 0, 'calplate_80mm.cpd')
复制代码

第32行是设置标定板的描述文件,这个文件可能不存在。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表