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

求助大佬,焊接轨迹同心度测量

[复制链接]
aicanjia 发表于 2024-4-10 12:19:28 | 显示全部楼层 |阅读模式
253.png 456.png 557.png
如上图,想要求左边二个焊接轨迹圆心的距离,请求大佬指点
下面是想要的效果图
结果.png

奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
易安呀 发表于 2024-4-10 14:39:14 | 显示全部楼层
  1. *1.裁切roi
  2. read_image (Image1, 'C:/Users/Annan/Downloads/焊接/557.png')
  3. * read_image (Image1, 'C:/Users/Annan/Downloads/焊接/456.png')
  4. * read_image (Image1, 'C:/Users/Annan/Downloads/焊接/253.png')
  5. gen_circle (ROI_0, 273.938, 236.098, 165.243)
  6. area_center (ROI_0, Area, RowC, ColumnC)
  7. reduce_domain (Image1, ROI_0, ImageReduced)
  8. gen_cross_contour_xld (Cross, RowC, ColumnC, 36, 0.785398)
  9. dev_display (Image1)
  10. dev_set_draw ('margin')
  11. dev_display (Cross)
  12. dev_display (ROI_0)
  13. stop ()
  14. *2.预处理
  15. rgb1_to_gray (ImageReduced, GrayImage)
  16. mean_image (GrayImage, ImageMean, 12, 12)
  17. *3.动态阈值取边缘
  18. dyn_threshold (GrayImage, ImageMean, RegionDynThresh, 20, 'dark')
  19. connection (RegionDynThresh, ConnectedRegions2)
  20. select_shape (ConnectedRegions2, SelectedRegions, 'outer_radius', 'and', 30, 200)
  21. select_shape (SelectedRegions, SelectedRegions1, 'width', 'and', 10, 99999)
  22. union1 (SelectedRegions1, RegionUnion)
  23. *4.连接边缘
  24. dilation_circle (RegionUnion, RegionDilation, 3.5)
  25. *5.展开坐标系 去除毛刺干扰
  26. area_center (RegionDilation, Area1, Row, Column)
  27. get_image_size (ImageReduced, Width, Height)
  28. OuterRadius:=200
  29. InnerRadius:=0
  30. polar_trans_region (RegionDilation, PolarTransRegion, Row, Column, 0, 6.28319, 0, OuterRadius, Width, Height, 'nearest_neighbor')
  31. opening_circle (PolarTransRegion, RegionOpening, 7)
  32. *6.逆变换
  33. polar_trans_region_inv (RegionOpening, XYTransRegion, Row, Column, 0, 6.28319, 0, OuterRadius, Width, Height, Width, Height, 'nearest_neighbor')
  34. *7.提取边缘区域骨架
  35. connection (XYTransRegion, ConnectedRegions)
  36. skeleton (ConnectedRegions, Skeleton)
  37. *8.区域转轮廓
  38. gen_contour_region_xld (Skeleton, Contours, 'center')
  39. *9.轮廓拟合椭圆
  40. fit_ellipse_contour_xld (Contours, 'fitzgibbon', -1, 0, 0, 200, 3, 2, Row1, Column1, Phi, Radius1, Radius2, StartPhi, EndPhi, PointOrder)
  41. gen_ellipse (Ellipse, Row1, Column1, Phi, Radius1, Radius2)
  42. *8.筛选两个圆
  43. select_shape (Ellipse, SelectedRegions1, 'outer_radius', 'and', 95, 105)
  44. select_shape (Ellipse, SelectedRegions2, 'outer_radius', 'and', 70, 80)
  45. concat_obj (SelectedRegions1, SelectedRegions2, ObjectsConcat)
  46. *9.求圆心并显示
  47. area_center (ObjectsConcat, Area2, Row2, Column2)
  48. gen_cross_contour_xld (Cross1, Row2, Column2, 36, 0.785398)
  49. dev_display (Image1)
  50. dev_set_draw ('margin')
  51. dev_display (ObjectsConcat)
  52. dev_display (Cross1)
复制代码

效果图

效果图

效果图

效果图

效果图

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

使用道具 举报

halcon2016 发表于 2024-4-10 15:10:44 | 显示全部楼层
本帖最后由 halcon2016 于 2024-4-17 11:21 编辑

2024-04-10_150828.png 2024-04-10_150850.png 2024-04-10_150912.png
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| aicanjia 发表于 2024-4-11 08:22:07 | 显示全部楼层
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| aicanjia 发表于 2024-4-11 08:58:38 | 显示全部楼层

大佬好,mean_image算子中的12这个参数是根据哪里算出来的,不太明白
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
halcon2016 发表于 2024-4-11 13:20:21 | 显示全部楼层

竟然还用到了极坐标变换,而且还是用区域转换的轮廓再拟合,搞得有点复杂了,这种图片直接用二维测量才是最佳方法
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
易安呀 发表于 2024-4-11 16:46:53 | 显示全部楼层
halcon2016 发表于 2024-4-11 13:20
竟然还用到了极坐标变换,而且还是用区域转换的轮廓再拟合,搞得有点复杂了,这种图片直接用二维测量才是 ...

通用算法 主要是思路 测量在halcon里好用 在opencv你不一定好实现。至于为什么要用到极坐标变换 是为了去除杂质 区域是圆形的 开运算会破坏原有的轮廓 所以需要转换后 在去除
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复 支持 1 反对 0

使用道具 举报

易安呀 发表于 2024-4-11 16:48:32 | 显示全部楼层
aicanjia 发表于 2024-4-11 08:58
大佬好,mean_image算子中的12这个参数是根据哪里算出来的,不太明白

看你边缘的内宽大概是多少像素 一般设置为一半以上
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
wenbo_bob 发表于 2024-4-12 08:47:30 | 显示全部楼层
学习一下
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
西牛皮 发表于 2024-4-12 10:34:09 | 显示全部楼层
  1. *1.裁切roi

  2. read_image (Image1, './1.png')

  3. * read_image (Image1, 'C:/Users/Annan/Downloads/焊接/557.png')
  4. * read_image (Image1, 'C:/Users/Annan/Downloads/焊接/456.png')
  5. * read_image (Image1, 'C:/Users/Annan/Downloads/焊接/253.png')
  6. gen_circle (ROI_0, 273.938, 236.098, 165.243)
  7. area_center (ROI_0, Area, RowC, ColumnC)
  8. reduce_domain (Image1, ROI_0, ImageReduced)
  9. gen_cross_contour_xld (Cross, RowC, ColumnC, 36, 0.785398)
  10. dev_display (Image1)
  11. dev_set_draw ('margin')
  12. dev_display (Cross)
  13. dev_display (ROI_0)
  14. stop ()
  15. *2.预处理
  16. rgb1_to_gray (ImageReduced, GrayImage)
  17. mean_image (GrayImage, ImageMean, 12, 12)
  18. *3.动态阈值取边缘
  19. dyn_threshold (GrayImage, ImageMean, RegionDynThresh, 20, 'dark')
  20. connection (RegionDynThresh, ConnectedRegions2)
  21. select_shape (ConnectedRegions2, SelectedRegions, 'outer_radius', 'and', 30, 200)
  22. select_shape (SelectedRegions, SelectedRegions1, 'width', 'and', 10, 99999)
  23. union1 (SelectedRegions1, RegionUnion)
  24. *4.连接边缘
  25. dilation_circle (RegionUnion, RegionDilation, 3.5)

  26. *--------------方法1:blob------------------------
  27. skeleton (RegionDilation, Skeleton1)
  28. gen_contour_region_xld (Skeleton1, Contours1, 'center')
  29. select_obj (Contours1, ObjectSelected, 1)
  30. segment_contours_xld (ObjectSelected, ContoursSplit, 'lines_ellipses', 5, 4, 1)
  31. select_shape_xld (ContoursSplit, SelectedXLD1, ['circularity','area'], 'and', [0.24704,3792.88], [1,50000])

  32. fit_ellipse_contour_xld (SelectedXLD1, 'fhuber', -1, 0, 0, 200, 3, 2, \
  33.                          Row1, Column1, Phi, Radius1, Radius2, StartPhi, EndPhi, PointOrder)

  34. gen_ellipse_contour_xld (ContEllipse, Row1, Column1, Phi, Radius1, Radius2, \
  35.                          StartPhi, EndPhi, PointOrder, 1.5)

  36. select_shape_xld (ContEllipse, SelectedXLD, 'area', 'and', 25658.8, 50000)


  37. select_obj (Contours1, ObjectSelected1, 2)
  38. fit_ellipse_contour_xld (ObjectSelected1, 'fhuber', -1, 0, 0, 200, 3, 2, \
  39.                          Row1, Column1, Phi, Radius1, Radius2, StartPhi, EndPhi, PointOrder)

  40. gen_ellipse_contour_xld (ContEllipse1, Row1, Column1, Phi, Radius1, Radius2, \
  41.                          StartPhi, EndPhi, PointOrder, 1.5)
  42. *-----------------------------------------------------------------


  43. *--------------------------方法2---------------------------
  44. *5.展开坐标系 去除毛刺干扰
  45. area_center (RegionDilation, Area1, Row, Column)
  46. get_image_size (ImageReduced, Width, Height)
  47. OuterRadius:=200
  48. InnerRadius:=0
  49. polar_trans_region (RegionDilation, PolarTransRegion, Row, Column, 0, 6.28319, 0, OuterRadius, Width, Height, 'nearest_neighbor')
  50. opening_circle (PolarTransRegion, RegionOpening, 7)
  51. *6.逆变换
  52. polar_trans_region_inv (RegionOpening, XYTransRegion, Row, Column, 0, 6.28319, 0, OuterRadius, Width, Height, Width, Height, 'nearest_neighbor')
  53. *7.提取边缘区域骨架
  54. connection (XYTransRegion, ConnectedRegions)
  55. skeleton (ConnectedRegions, Skeleton)
  56. *8.区域转轮廓
  57. gen_contour_region_xld (Skeleton, Contours, 'center')
  58. *9.轮廓拟合椭圆
  59. fit_ellipse_contour_xld (Contours, 'fitzgibbon', -1, 0, 0, 200, 3, 2, Row1, Column1, Phi, Radius1, Radius2, StartPhi, EndPhi, PointOrder)
  60. gen_ellipse (Ellipse, Row1, Column1, Phi, Radius1, Radius2)
  61. *8.筛选两个圆
  62. select_shape (Ellipse, SelectedRegions1, 'outer_radius', 'and', 95, 105)
  63. select_shape (Ellipse, SelectedRegions2, 'outer_radius', 'and', 70, 80)
  64. concat_obj (SelectedRegions1, SelectedRegions2, ObjectsConcat)

  65. *--------------------------------------------------------

  66. *9.求圆心并显示
  67. area_center (ObjectsConcat, Area2, Row2, Column2)
  68. gen_cross_contour_xld (Cross1, Row2, Column2, 36, 0.785398)
  69. dev_display (Image1)
  70. dev_set_draw ('margin')
  71. dev_display (ObjectsConcat)
  72. dev_display (Cross1)
复制代码
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复 支持 2 反对 0

使用道具 举报

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

本版积分规则

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