设为首页收藏本站
授权版本:2024_07
开启左侧

求助大佬们!Halcon 使用标定好的内外参测量圆直径误差好大

[复制链接]
夜问夜问 发表于 2023-12-7 16:55:35 | 显示全部楼层 |阅读模式
悬赏5视觉币
代码如下:
  1. dev_update_off ()

  2. * Calibration 01: Code generated by Calibration 01
  3. *相机内参
  4. CameraParameters := ['area_scan_division',0.0349517,16.0174,2.19737e-06,2.2e-06,909.193,2007.29,2592,1944]
  5. *相机外参
  6. CameraPose := [0.00335217,-0.0315526,0.511801,12.1381,0.797679,177.005,0]

  7. stop ()

  8. list_image_files ('Images', 'default', [], ImageFiles)

  9. read_image (Image, 'C:/Users/WP/Desktop/相机标定图片/圆形测量3.bmp')

  10. change_radial_distortion_cam_par ('adaptive', CameraParameters, 0, CamParamOut)
  11. gen_radial_distortion_map (Map, CameraParameters, CamParamOut, 'bilinear')
  12. map_image (Image, Map, ImageMapped)


  13. *获取图片大小
  14. get_image_size (ImageMapped, Width, Height)

  15. create_metrology_model (MetrologyHandle)

  16. set_metrology_model_image_size (MetrologyHandle, Width, Height)

  17. set_metrology_model_param (MetrologyHandle, 'camera_param', CameraParameters)

  18. set_metrology_model_param (MetrologyHandle, 'plane_pose', CameraPose)

  19. Width1:=Width/5
  20. Height1:=Height/5

  21. dev_close_window ()

  22. dev_get_window (WindowHandle)

  23. *将图片转换为灰度图片
  24. rgb1_to_gray (ImageMapped, GrayImage)
  25. *1.第一步提圆形口的真实边缘
  26. *对图片进行动态阈值分割

  27. auto_threshold (GrayImage, Regions, 2)

  28. select_obj (Regions, DarkRegion, 1)
  29. *对区域进行开运算
  30. opening_circle (DarkRegion, RegionOpening, 3.5)
  31. *对区域进行闭运算
  32. closing_circle (RegionOpening, RegionClosing, 3.5)
  33. *在对开运算后的孔洞进行填充防止闭运算后还有孔洞没有被消除
  34. fill_up (RegionClosing, RegionFillUp)
  35. *对膨胀后的图片进行边缘提取 最外圈
  36. boundary (RegionFillUp, RegionBorder, 'outer')

  37. dilation_circle (RegionBorder, RegionDilation, 3.5)

  38. shape_trans (RegionDilation, RegionTrans, 'outer_circle')

  39. *求圆心中心坐标
  40. area_center (RegionTrans, Area, Row, Column)

  41. *生成用户在窗口中交互创建的圆的参数
  42. *draw_circle_mod:生成用户在窗口中交互创建的圆的参数要创建一个圆
  43. *预计圆的中心坐标Rowln和Columnln的半径为Radiusln。在创建的圆心中再次单击鼠标后,
  44. *您可以移动它。单击圆弧附近可以修改圆的半径。按右鼠标键可终止该过程。
  45. * draw_circle_mod (WindowHandle,Row, Column, 200, Row, Column, Radius)


  46. gen_contour_region_xld (RegionDilation, Contours, 'border')

  47. fit_circle_contour_xld (Contours, 'algebraic', -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)

  48. *gen_circle_contour_xld:创建圆或圆弧的XLD轮廓,创建一个或多个圆弧或闭合圆。圆圈由它们的中心(行,列)和它们的半径指定。

  49. * gen_circle_contour_xld (ContCircle, Row, Column, Radius, 0, 6.28318, 'positive', 1)


  50. gen_circle_contour_xld(ContCircle, Row, Column, 2, StartPhi, StartPhi, 'positive', 1)
  51. dev_display(ContCircle)
  52. gen_circle_contour_xld(ContCircle2, Row-Radius, Column, 2, StartPhi, StartPhi, 'positive', 1)
  53. dev_display(ContCircle2)
  54. gen_circle_contour_xld(ContCircle3, Row+Radius, Column, 2, StartPhi, StartPhi, 'positive', 1)
  55. dev_display(ContCircle3)


  56. image_points_to_world_plane (CameraParameters, CameraPose, Row-Radius, Column, 'mm', x1, y1)
  57. image_points_to_world_plane (CameraParameters, CameraPose, Row+Radius, Column, 'mm', x2, y2)
  58. distance_pp(x1, y1, x2, y2, Distance)



  59. *求圆心中心坐标
  60. * area_center (RegionDilation, Area, Row, Column)
  61. *把图像坐标转化为世界坐标
  62. * image_points_to_world_plane (CameraParameters, CameraPose, Row, Column, 'mm', X, Y)

  63. dev_display (ContCircle)
  64. dev_set_color ('green')

  65. *1首先创建一个计量模型
  66. * create_metrology_model (MetrologyHandle)


  67. *添加一个找圆工具
  68. add_metrology_object_circle_measure (MetrologyHandle, Row, Column, Radius, 25, 5, 1.2, 30, [], [], Index)


  69. *2将计量对象加入到计量模型中
  70. * add_metrology_object_generic (MetrologyHandle, 'circle', [Row, Column, Radius], 20, 5, 1, 30, [], [], Index)

  71. * set_metrology_object_param (MetrologyHandle, 'all', 'measure_transition', 'negative')//白到黑

  72. * set_metrology_object_param (MetrologyHandle, 'all', 'measure_select', 'last')//选择第一条

  73. *3测量,第一个参数输入的图像,第二个参数输入的句柄
  74. apply_metrology_model (GrayImage, MetrologyHandle)

  75. *4获取计量模型中测量的所有结果
  76. get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'all_param', Parameter)

  77. *5显示圆形轮廓测量范围 显示卡尺
  78. get_metrology_object_result_contour (Contour, MetrologyHandle,'all', 'all', 1.5)


  79. *6显示圆的边缘轮廓

  80. get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Row1, Column1)

  81. gen_cross_contour_xld (Cross, Row1, Column1, 6, 0.785398)


  82. *拟合成圆
  83. * fit_circle_contour_xld (Cross, 'algebraic', -1, 0, 0, 3, 2, Row1, Column1, Radius, StartPhi, EndPhi, PointOrder)

  84. dev_display (Contour)
  85. stop ()

  86. *7清空计量模型
  87. clear_metrology_model (MetrologyHandle)

  88. dev_display (GrayImage)
  89. dev_display (Contour)


  90. message1:='CenterRow:'+ (Parameter[0]*1000)
  91. message2:='CenterCol:'+ (Parameter[1]*1000)
  92. message3:='Radious:'+ (Parameter[2]*1000*2)

  93. *设置字体
  94. set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
  95. disp_message (WindowHandle, message1, 'window', 0, -1, 'forest green', 'false')
  96. disp_message (WindowHandle, message2, 'window', 20, -1, 'forest green', 'false')
  97. disp_message (WindowHandle, message3, 'window', 40, -1, 'forest green', 'false')
复制代码


我实际用卡尺测量是21.149mm,程序运行测量的是22.0559mm,这误差有点大,是哪里有问题求大佬们指导


奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| 夜问夜问 发表于 2023-12-11 18:28:46 | 显示全部楼层
本帖最后由 夜问夜问 于 2023-12-11 18:30 编辑
Francisco 发表于 2023-12-11 09:47
分享的内容没了,重新分享下网盘
相机标定内外参,和要测量产品的图片。
链接:https://pan.baidu.com/s/15jYXegwCO8djQ-hKfIwHvQ?pwd=ABCD
提取码:ABCD
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

Ggg3434 发表于 2023-12-7 17:10:38 | 显示全部楼层
标定和检测的平面是需要在同一个平面的
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

 楼主| 夜问夜问 发表于 2023-12-7 19:11:15 | 显示全部楼层
就是在一个平面上的
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

fate. 发表于 2023-12-7 19:27:41 | 显示全部楼层
把图片附上
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

 楼主| 夜问夜问 发表于 2023-12-7 19:53:22 | 显示全部楼层
图片4.8M上传不了呀,留下你的邮箱发给你

奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

Criss 发表于 2023-12-7 21:16:35 | 显示全部楼层
夜问夜问 发表于 2023-12-7 19:53
图片4.8M上传不了呀,留下你的邮箱发给你

图片上传不了请自行上传图像文件(包括多张图片)自己的网盘再提供下载链接即可。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

 楼主| 夜问夜问 发表于 2023-12-8 08:06:16 | 显示全部楼层
这是要测量的图片,我想测量圆边在任意角度测得的直径都是21.149mm,该怎么做呢?
链接:https://pan.baidu.com/s/1idsXt5Z8ZqT79l5526Y1zQ?pwd=ABCD
提取码:ABCD
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

暗翼小哥 发表于 2023-12-8 17:00:19 | 显示全部楼层
我感觉9,10,42这几行代码有问题,但是我水平不高,还是请大佬来看一下吧
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

暗翼小哥 发表于 2023-12-8 17:02:23 | 显示全部楼层
而且现在看不到图片了已经
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

 楼主| 夜问夜问 发表于 2023-12-9 08:12:08 | 显示全部楼层
看不到图片吗?可以看的到呀!
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

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

本版积分规则

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