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

自动9点标定算法原理详解

[复制链接]
halcon2016 发表于 2024-7-17 16:23:35 | 显示全部楼层 |阅读模式
本帖最后由 halcon2016 于 2024-7-25 17:20 编辑

在视觉定位项目中,标定就是将像素坐标映射到机台坐标的过程,是非常重要的一个环节。比较常见简单的标定方法是手动9点标定,即拍摄9个mark点得到像素坐标,然后用标定针去对mark点的中心得到对应的机台坐标,即可计算得到像素坐标到机台坐标的映射矩阵,此方法虽然简单,但实际操作起来比较麻烦,在很多设备中可能不具备装配标定针的条件,且靠人眼去对准中心,精度也难以达到较高水平。另一种比较高级一点的标定算法是halcon里面的自动手眼标定算法,该方法可以做到自动化,设置好参数后能自动完成标定过程,中间不需要人为干预,但该方法需要借助halcon标定板,实际项目中高精度标定板一般价格都比较昂贵,且相机静止安装时需要机构带着标定板去移动,这对有些设备来说不怎么好操作。因此本文详细介绍了一种基于9点标定的自动标定算法,该算法不需要标定针,也不需要标定板,中间不需要人为干预,在实际项目中具有很高的实用价值。

文章部分内容截图:
2024-07-17_162419.png

2024-07-17_162641.png

自动9点标定算法原理详解_watermark.rar (579.82 KB, 下载次数: 8, 售价: 500 视觉币)
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| halcon2016 发表于 2024-7-18 11:15:37 | 显示全部楼层
本帖最后由 halcon2016 于 2024-7-29 09:39 编辑

本文算法是来自实际项目中,可以直接使用。由于时间精力有限,如有不细致周到之处,可留言讨论。

特别提醒和补充:文章最后一步提到的旋转角度时,为了提高精度,可以旋转多个角度(理想情况下是旋转一周),最后得到以XT,YT为未知数的线性超定方程组,解超定方程组即可以直接采用最小二乘法求解参考https://www.cnblogs.com/narjaja/p/9304472.html,也可用halcon里面的solve_matrix算子求解。


奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
wenbo_bob 发表于 2024-7-18 08:28:55 | 显示全部楼层
学习一下
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
inter1999 发表于 2024-7-18 09:40:27 | 显示全部楼层
500视觉币有点小贵
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
Leo_Zsu 发表于 2024-7-20 14:42:53 | 显示全部楼层
感谢分享,非常实用!
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
wwwbdabc 发表于 2024-7-25 15:36:04 | 显示全部楼层
本帖最后由 wwwbdabc 于 2024-7-25 15:43 编辑

没有halcon程序演示一下的吗?至少搞点图片demo一下,就一个pdf文档。。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| halcon2016 发表于 2024-7-25 16:08:25 | 显示全部楼层
wwwbdabc 发表于 2024-7-25 15:36
没有halcon程序演示一下的吗?至少搞点图片demo一下,就一个pdf文档。。

本文所用关键算子和公式文中都有介绍,而且直接给出了最终的结果公式,只要把对应坐标代入计算就行,就是最基本的加减乘除运算,计算不复杂
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| halcon2016 发表于 2024-7-25 16:51:11 | 显示全部楼层
本帖最后由 halcon2016 于 2024-7-26 14:00 编辑
halcon2016 发表于 2024-7-25 16:08
本文所用关键算子和公式文中都有介绍,而且直接给出了最终的结果公式,只要把对应坐标代入计算就行,就是 ...

如果你想彻底理解原理和推导过程,需要一些矩阵运算的知识,halcon里面有对应的算子。本文主要用到了矩阵相乘和矩阵求逆两个算子

文中像上面这样的计算可以看成是两个矩阵相乘即:
2024-07-25_165044.png
halcon里面对应的算子实现过程为:
  1. *假设
  2. x0:=100
  3. y0:=100
  4. c0:=rad(10)
  5. XT:=200
  6. YT:=200
  7. CT:=rad(10)

  8. m1[0] := cos(c0)
  9. m1[1] := -sin(c0)
  10. m1[2] := x0
  11. m1[3] := sin(c0)
  12. m1[4] := cos(c0)
  13. m1[5] := y0
  14. m1[6] := 0
  15. m1[7] := 0
  16. m1[8] := 1
  17. create_matrix(3, 3, m1, m1_ID)

  18. m2[0] := cos(CT)
  19. m2[1] := -sin(CT)
  20. m2[2] := XT
  21. m2[3] := sin(CT)
  22. m2[4] := cos(CT)
  23. m2[5] := YT
  24. m2[6] := 0
  25. m2[7] := 0
  26. m2[8] := 1
  27. create_matrix(3, 3, m2, m2_ID)

  28. mult_matrix (m1_ID, m2_ID, 'AB', MatrixMultID)
  29. get_full_matrix (MatrixMultID, Values)
  30. XF := Values[2]
  31. YF := Values[5]
  32. CF := atan2(Values[3], Values[0])
复制代码


另外文中像上面这种形式的表示矩阵求逆,halcon对应实现为:
  1. u1:=100
  2. v1:=100
  3. c1:=0
  4. m1[0] := cos(c1)
  5. m1[1] := -sin(c1)
  6. m1[2] := u1
  7. m1[3] := sin(c1)
  8. m1[4] := cos(c1)
  9. m1[5] := v1
  10. m1[6] := 0
  11. m1[7] := 0
  12. m1[8] := 1
  13. create_matrix(3, 3, m1, m1_ID)
  14. invert_matrix (m1_ID, 'general', 0, MatrixInvID)
复制代码
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
wwwbdabc 发表于 2024-7-26 13:48:56 | 显示全部楼层
halcon2016 发表于 2024-7-25 16:51
如果你想彻底理解原理和推导过程,需要一些矩阵运算的知识,halcon里面对应的算子。本文主要用到了矩阵相乘 ...

好的 学习了
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
zcc 发表于 2024-7-27 15:34:27 | 显示全部楼层
感谢分享,非常实用
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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