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

Halcon标定之后如何实现测量?

[复制链接]
andyzhao 发表于 2020-11-17 09:41:56 | 显示全部楼层 |阅读模式
求助问题      
1.Halcon在完成标定后,如何测量环形零件(轴承密封圈)的外直径和内直径?测量圆的卡尺命令在这里可以用吗?有没有类似的链接
      
我的步骤是:
用亚像素算子得到圆形图像的边缘;
Edges边缘转换为xld;xld转换成点的坐标;
用【image_points_to_world_plane】把最上、最下、最左、最右的点转换到世界坐标系下的(x,y)坐标,利用两点间的距离公式求出最上点到最下点的距离D1、最左点到最右点的距离D2,D1和D2可以作为想要测量的直径,但这种方法实在是有点“笨”。
      
2.硬件:迈德威视黑白相机,分辨率为630万(3088×2064)
目标精度:0.01mm
具体测量内容:利用亚像素方法测量轴承密封圈内直径和外直径的平均值、最大值、最小值。

之前咨询过一位蔡司三坐标测量仪的测量员,圆形零件的尺寸测量一般是基于点的拟合,利用亚像素方法得到圆形零件边缘的轮廓点,比如可以得到500个点,对这些点进行最小二乘拟合,得到的就是平均直径;对这些点进行最小外接拟合,得到的就是“最大直径”;对这些点进行最大外切拟合,得到的就是“最小直径”。

3.我希望在亚像素测量方法上有所创新(在已有的方法上进行一点点改进也算是创新),现在的亚像素方法主要有三种:插值法(多项式插值、三次样条插值、最邻近插值);拟合法(最小二乘拟合等);矩方法(灰度矩方法、Zernike矩方法、灰度矩方法)。

4.能够基于C++或C#开发出一款简易的测量软件,仅仅用于测量密封圈(密封圈的型号有很多)。这款软件可以安装在别的计算机上,连接工业相机,标定之后就可以测量。
  1. *标定之后获得的相机的内外参数
  2. CameraParameters := ['area_scan_division',0.0168107,-1.898,2.39981e-006,2.4e-006,1515.93,1018.5,3088,2064]
  3. CameraPose := [-0.00419203,0.00225051,0.31692,359.248,359.479,88.9519,0]

  4. edges_sub_pix (Image, Edges, 'canny', 1, 60, 100)
  5. *选取两条最长的轮廓,目的是删除可能带来干扰的轮廓
  6. select_contours_xld (Edges, SelectedContours1, 'contour_length', 800, 9000,800,12000)
  7. count_obj (SelectedContours1, Number)

  8. *找到外圆(内圆)的亚像素轮廓
  9. select_obj (SelectedContours1, ObjectSelected1, 1)
  10. dev_display (ObjectSelected1)
  11. *内(外)轮廓转换成点,得到点的坐标
  12. get_contour_xld (ObjectSelected1, Row1, Col1)
  13. tuple_max (Row1, Upper1)
  14. tuple_min (Row1, Lower1)
  15. tuple_max (Col1, Right)
  16. tuple_min (Col1, Left)
  17. *最高点世界坐标
  18. image_points_to_world_plane (CameraParameters, CameraPose, (Upper1+Lower1)/2, Left, 'mm', X1, Y1)
  19. *最低点世界坐标
  20. image_points_to_world_plane (CameraParameters, CameraPose, (Upper1+Lower1)/2, Right, 'mm', X2, Y2)
  21. *竖向直径=最高点和最低点的欧氏距离
  22. Diameter1 := sqrt((X2-X1)*(X2-X1)+(Y2-Y1)*(Y2-Y1))
  23. *最左点世界坐标
  24. image_points_to_world_plane (CameraParameters, CameraPose, Upper1, (Right+Left)/2, 'mm', X3, Y3)
  25. *最右点世界坐标
  26. image_points_to_world_plane (CameraParameters, CameraPose, Lower1, (Right+Left)/2, 'mm', X4, Y4)
  27. *横向直径=最左点和最右点的欧氏距离
  28. Diameter2 := sqrt((X4-X3)*(X4-X3)+(Y4-Y3)*(Y4-Y3))
复制代码

待测零件图像

待测零件图像


奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
adabyron 发表于 2020-11-20 17:36:06 | 显示全部楼层
我看你相机的畸变系数很小,图像转换为世界坐标后,应该是用你的相机的像素距离进行转换,你这样得出的不是零件的真实值,相机的像素距离是有算法进行算出来的。图像读取后一般要进行畸变校正。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
adabyron 发表于 2020-11-20 17:39:56 | 显示全部楼层
把标定板的参数发出来,我进行计算看是否是你要的结果!!
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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