如何编写高精度的相机标定程序?

如何编写高精度的相机标定程序?

熟悉机器视觉的朋友肯定都接触过相机标定,目前有各种各样的途径来完成相机标定,其中开源的有opencv和matlab;商业软件有VisionPro,Halcon。opencv和matlab中比较常用的标定图案是棋盘格标定板,Halcon中使用的是网格圆,其中由于圆形图案的提取精度高于棋盘格,因此,许多高精度的相机标定软件都是使用的是圆/圆环作为标定图案。因此,如何使用圆形图案标定板搭建自己的高精度标定程序呢

前提条件

要想搭建好基于圆形图案的相机标定程序,必须具有以下两个条件:

  • 高精度的特征提取方法;
  • 优化相机内外参的标定框架。
    首先,讲一下第二点,关于相机标定框架,大家肯定首先想到的是张正友标定方法(非常正确)。该标定框架目前已经非常成熟,被广泛应用于各种领域。
    其次,如何获取高精度的特征提取方法呢?
    对于圆形标定板,在经过相机的透视投影后将会变成椭圆,因此我们需要的是高精度的椭圆检测和拟合方法。自己从头开始写?NO,NO,NO!!!如果要自己写,那我这边文章就没有写的意义了。

搭建高精度相机标定

在Halcon中,存在高精度的边缘检测方法和椭圆拟合算子,见下图:

如何编写高精度的相机标定程序?_第1张图片
  • Halcon中检测椭圆特征中心的算法流程
    1)利用标定板的黑色边界框定位标定板区域;
如何编写高精度的相机标定程序?_第2张图片

2)在标定板区域提取像素级边缘;

如何编写高精度的相机标定程序?_第3张图片

3)使用轮廓圆度和长度筛选轮廓,最终得到所有正确的椭圆轮廓;
4)对于每个筛选过的轮廓进行亚像素边缘提取。

如何编写高精度的相机标定程序?_第4张图片

最重要的一点是,Halcon虽然是商业软件,但是它每个月提供试用许可证,因此你不需要破解也可以使用它,唯一的缺点是每个月要更新许可证。
因此,我的想法是:
使用Halcon中的特征提取算子来进行高精度的圆形标定板特征提取,使用opencv中的张正友标定框架来进行相机标定。
以下为构建的相机标定软件:

如何编写高精度的相机标定程序?_第5张图片
如何编写高精度的相机标定程序?_第6张图片

以下为标定结果:

如何编写高精度的相机标定程序?_第7张图片

重投影误差为0.023pixel,相比于棋盘格的标定误差,是不是提升了很多呢?
如果有对标定软件源码感兴趣的朋友可以加入我的知识星球:3D视觉指南针。

2022.03.20软件版本更新

如何编写高精度的相机标定程序?_第8张图片

你可能感兴趣的:(相机标定,相机标定,Halcon,机器视觉)