小杨说事 您所在的位置:网站首页 棋盘格代表什么数字 小杨说事

小杨说事

2024-07-10 08:06| 来源: 网络整理| 查看: 265

       前言

        机器视觉定位中,当产品尺寸比较大时,往往会采用多相机方案,而这种方案在业界目前做的比较好并且被国内机器视觉厂商纷纷效仿的就是康耐视的国际专利-带二维码信息的棋盘格二维码,关于这方面内容的简介可以参考小杨上一篇博客:

小杨说事-基于Halcon的多相机坐标系统一原理个人理解_halcon多相机统一_果汁分你一半哈哈的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_34836838/article/details/124059280?spm=1001.2014.3001.5502        本篇文章在上一篇的基础上,主要探讨怎么利用棋盘格上的二维码来辅助定位棋盘格的角点并且将角点按照顺序进行排序。下图是使用康耐视视觉软件VisionPro的对导入的带DM码的棋盘格图片使用标定工具处理得到的结果,可以看到其提取出了角点并将角点的图像坐标及对应的在棋盘格上的物理坐标进行了排序显示。

VisionPro对二维码棋盘格图处理效果

        

一、技术分析

        其实,多相机标定可以使用的标定板有很多,可以自行设计,你可以不用棋盘格,直接在标定板上打印圆形Mark点,在每个相机视野范围内能看到各自对应的Mark点,并且这些Mark点之间在和棋盘格上物理坐标是唯一确定的即可。相比之下,直接使用二维码来标记棋盘格的物理信息更加具备通用性,因此可以看到海康机器人的VisionMaster、凌云光、OPT、思谋等一些视觉公司的软件都是基于自己定制的二维码来制作标定板的。

海康VisionMaster自带标定板制作工具

        在Opencv里面,有一种用于AR、SLAM、机械手手眼标定的Aruco码,可以调用Opencv自带算子实现以下效果。

Chessboard+ArUco=ChArUco Chessboard+ArUco=ChArUco

        还可以利用一个国外网站,在线设计标定板:

Online ArUco markers generator (chev.me)icon-default.png?t=N7T8https://chev.me/arucogen/Camera Calibration Pattern Generator – calib.ioicon-default.png?t=N7T8https://calib.io/pages/camera-calibration-pattern-generator        生成了标定板的图纸后,可以直接找外面的标定板制作公司制作高精度的标定板,或者直接找这些公司直接买,因为这种标定方法已经应用在很多实际项目中,他们有很多制作经验,适用于什么光源等等,比如这里介绍一家购买过的公司深圳微米视觉科技有限公司。

        当然,咱么最重要的技术还没讨论,小杨搜索了很多资料,发现难点其实在于怎么精准的找到棋盘格的角点,为此特地去看了Halcon和Opencv里面角点检测的算子,发现这些算子都不能自适应,而且抗干扰性不强,想想康耐视的标定只需要导入一张图片,没有输入额外参数,就可以自动准确地找到角点,当然很多人都对此进行了改进,其中最有效地就是基于生长法地角点提取法,以下是目前在CSDN上找到地唯一一篇直接展示将生长法用于ChArUco标定板的,看起来是思谋的视觉软件的实现方式。

基于opencv的用于精确测量的单目相机标定,世界坐标和像素坐标相互转换_opencv 标定 测量_Blues_vision的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_68681926/article/details/128003512另外再附一篇关于生长法的原理介绍,后续文章小杨想直接在Halcon中实现。

基于生长的棋盘格角点检测方法--(1)原理介绍_51CTO博客_opencv棋盘格角点检测icon-default.png?t=N7T8https://blog.51cto.com/u_14318213/6688520        哈哈,说了这么多,想必大家也已经大概知道了难点,其实小杨一直想自己实现一下,奈何水平有限,但是最近项目需要,经过辗转反侧的几个夜晚,终于想到了一种曲线救国的方法,这种方法是在Halcon里面实现,主要考虑到DM码解析的成功率问题,因此没有用Opencv实现,此外角点提取也没有使用生长法,而是使用了大家最常见的直线卡尺+求交点的方法,所以这种点是不是也可以叫交点了呢,嘿嘿。

        好啦,好啦,话不多说,小伙伴们肯定迫不及待了,小杨说事这就开始。

二、Halcon实现步骤

        以上是在Halcon实现的大致流程,接下来我们再具体探索一下。

        首先是针对棋盘格上的DM码进行解析,获取二维码轮廓的四个顶点图像坐标,计算四点中心点当作二维码中心点图像坐标。

读码并获取码轮廓的四个顶点图像坐标 DM码中心提取效果

        得到了所有二维码中心点图像坐标,我们根据二维码识别得到的中心点物理坐标信息分别按照行从小到大和列从小到大进行排序(如果按图像坐标排序不好写,容易出错),同时计算出一组粗略的棋盘格图像坐标的仿射变换关系用于最终计算所有角点物理坐标(最后会用到)。

按照中心点物理行和列排序+计算仿射变换矩阵

        接下来,我们可以根据刚刚得到的排序好的第一行和第一列坐标,分别找到其中的第一个和最后一个二维码中心的物理坐标来确定棋盘格的物理坐标系的行和列的正方向,这一步的目的是可以做到自适应棋盘格方向,因为实际应用过程中会出现任意翻转效果。

确定棋盘格物理坐标系的行和列正方向 图像上绘制出棋盘格物理坐标系方向

        有了棋盘格的物理坐标系方向,咱们再来计算单个棋盘格子在图像上的行和列方向占用的像素长度,然后根据棋盘格实际分布情况自动绘制直线卡尺的测量区域。这里需要说明一下,我们的方法是找出图像上能找到的DM码中心点所确认的一个矩形范围,默认情况下咱们只在这个范围内生成直线卡尺测量区域阵列,但是为了方便测量区域之外的咱们也开放了按照行和列方向自动拓展的参数,可以测量没有二维码的范围之外的区域。

生成直线卡尺测量区域阵列

图像上绘制出直线卡尺测量区域阵列

        好啦,好啦,万事具备,只欠东风了,有了直线卡尺测量区域,咱们就直接调用卡尺测量工具,获取所有的棋盘格直线边缘,这里小杨建议开放出直线卡尺参数,可以适应各种成像质量。获取所有直线卡尺的直线结果,利用halcon交点计算工具,得到所有交点的图像坐标,最后利用第一步中粗略计算的放射变换矩阵转换得到每个角点的棋盘格物理坐标,四舍五入即可。

图像渲染出所有角点结果

        终于又水完了一篇博客,嘿嘿。

三、总结与感悟

        以上只是个人的一点见解,里面有很多细节,还需要进一步完善,尤其是我们把交点当作角点,当然这可以解决角点查找的抗干扰性差、过曝角点缺失的效果,这种找直线的方法还涉及到运行效率问题等等,还需要持续优化。

        小杨再唠两句,工业自动化是一个很苦逼的行业,相比于互联网,我们赚得不多,但是却在支撑中国最基础的制造业转型,希望大家都能把自己领悟到的,学习到的知识分享出来,让更多的小伙伴少走弯路,同时也能让自己变得更强。加油,奥里给!!!!

     



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有