0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

相机标定为什么能够达到小于0.01像素误差的精度?

3D视觉工坊 来源:如本科技RVBUST 作者:王朝阳 2022-11-22 10:34 次阅读

还记得当年的华南虎照片事件吗?我们能否从相机成像的原理来分析得知那是个纸板老虎?相机标定为什么能够达到小于0.01像素误差的精度?单相机能进行三维测量吗?这篇文章的下半部分里,将介绍与这些问题相关的知识。

Ⅰ前言

时间过得好快。自从完成了这篇关于高精度相机标定的文章的上半部分以来,两个多月过去了。这两个多月,我每天忙忙碌碌地做着各种工作,这其中也有一些相机标定的工作。转眼已经11月,美国各大商店也早已摆满了节日相关的商品。于是我蹬开被窝,决定把这下半部分写完,这样今年年底以前还能够有空完成下一篇文章。

在上半部分里,我描述了针孔成像的原理、相机成像的模型、以及相机标定的基本原理。在这下半部分,我将介绍相机标定的具体实施和几个基本的应用。

Ⅱ相机的成像与标定模型回顾
首先,我们回顾一下相机成像的数学模型。这个基于小孔成像的模型使得给定一个世界坐标系中的点,可以通过理论上的计算来得到它成像后在图像中的位置3b15c83e-675c-11ed-8abf-dac502259ad0.png

3b315720-675c-11ed-8abf-dac502259ad0.png

当考虑镜头畸变时,这个模型要分解为以下三步:

3b4e620c-675c-11ed-8abf-dac502259ad0.png

3b6be084-675c-11ed-8abf-dac502259ad0.png

3b844fc0-675c-11ed-8abf-dac502259ad0.png

显然,相机的标定就是把这个数学模型中涉及到的参数确定下来。这些参数包括

18个内参数:

3b9bf954-675c-11ed-8abf-dac502259ad0.png

6个外参数:3bb9e8ec-675c-11ed-8abf-dac502259ad0.png。其中3bf26f78-675c-11ed-8abf-dac502259ad0.png决定了9个转动参数3c309032-675c-11ed-8abf-dac502259ad0.png

因为相机成像的模型比较复杂,所以依赖于一张图像来标定相机是不可靠的。但是我们可以把世界坐标固定在标定板上,通过转动和平移标定板来得到多幅不同的图像。当采用M幅标定图像时,未知数的总数目是18+6M。 为了可靠、精确地得到这些未知数,一般采用Levenberg-Marquardt非线性最小二乘算法来优化如下残差: 3c437012-675c-11ed-8abf-dac502259ad0.png

这里,3c5ce150-675c-11ed-8abf-dac502259ad0.png3c6fd3a0-675c-11ed-8abf-dac502259ad0.png分别是模型函数求得的标识控制点的像素坐标和实际图像中检测到的像素坐标。

基于以上分析,我们可以看到,相机标定的关键步骤有两点:(1)精确地得到相机采集到的标定板图像中标识控制点的像素坐标位置;(2)运用迭代的方法来获取相机的内外参数。

Ⅲ 相机标定的实施

·图像中标识控制点的位置获取

如前所述,目前最常用的标定板图像有两种:棋盘格图案圆点(环)图案。通常情况下,使用圆环图案能得到比使用圆点和棋盘格图案更高的精度。此外,同心圆环的个数可以超过2个。为了尽可能提高准确度,圆心的位置可以按照以下步骤来检测

1. 利用灰度梯度信息对图像进行边缘检测,常用的算法是Canny边缘检测方法。

2. 搜索每一条连续的线。考虑到噪声的干扰,一条线上的点无须像素挨着像素,线可以有断开,而可允许的断开距离需要根据图像的情况设定。 3. 对属于同一条线上的点,用椭圆模拟结合最小二乘的方法来确定这条线是否是一个椭圆,如果是,则去除一小部分偏差最大的点,重新拟合椭圆并计算椭圆圆心的坐标。

4. 检查整幅图像中的圆心数目是否正确。如果不正确,则需要改变检测参数,重复搜索圆心。

5. 根据检测的圆心进行相机标定(详细过程见下一节)。

6. 根据标定结果把各图像转换为正面图像,再利用模板匹配的方法得到相应的圆心并转换回原始位置。这样就得到了更准确的标识控制点的坐标。

7. 再一次进行相机标定。

采用上面所述的方法再加上一些优化手段,相机标定的标识控制点的再次投影误差可控制在0.01像素以下,相比之下,最常用的OpenCV相机标定库和MATLAB相机标定工具箱只能得到0.1像素左右的误差。

·标定过程的算法实施

Levenberg-Marquart非线性最小二乘算法是一种简单而非常强大的算法,它本质上是把高斯-牛顿算法和梯度下降算法结合了起来。大家如果没有用过,有时间的话可以自己写代码试一下。当然,如果实在觉得自己一行行地写这个相机标定优化的代码有难度,还有一个方法就是使用谷歌的开源库Ceres Solver以及相关的开源相机标定代码。现在,无论采用哪种方案,大家应该可以轻松搞定高精度相机标定了吧?!

其实事情还没有那么简单。原因是Levenberg-Marquart算法给出的是局部最优解,而不一定是全局最优解。为了解决这一问题,我们必须在迭代之前赋给标定参数们一些可靠的初始值。在所有的内参数中,我们其实只需要初始化α和β,其它的参数除了u0and v0设为图像宽度和高度的一半之外,一律设为0即可。当然,外参数是需要全部初始化的。

那么,如何初始化呢?其实也不难,但是具体的推导过程会需要一些篇幅。我建议大家去读一下Elan Dubrofsky的硕士论文[1]和张正友的那篇经典文章[2],就可以了!

此外,前面其实忽视了一个技术细节,就是关于旋转矩阵和它相应的旋转向量。它们之间的互相转换,没什么难度。但是迭代算法所需要的相关求导,推导起来会让人有些头大。纵然不能一一列出推导过程,但本着严谨求实又简单快捷的科研精神,我把初始化和旋转矩阵相关的关键公式列在这里。我相信如果你了解了Levenberg-Marquart算法,又读了前面所提到的相关文章,是能够看到这些公式的有用之处的!

旋转矩阵对旋转向量的导数:

3c835880-675c-11ed-8abf-dac502259ad0.png

这里,

3cb2b08a-675c-11ed-8abf-dac502259ad0.jpg

3cca0bc2-675c-11ed-8abf-dac502259ad0.jpg

3cd64cca-675c-11ed-8abf-dac502259ad0.jpg

3ce6d0a4-675c-11ed-8abf-dac502259ad0.png

内参的初始化公式:

3d017d8c-675c-11ed-8abf-dac502259ad0.jpg

其中

3d182b22-675c-11ed-8abf-dac502259ad0.png

H的计算以及实际编程中对一些变量的正则化,参考一下前述的文献就一目了然了。

外参的初始化公式:

3d2c49ae-675c-11ed-8abf-dac502259ad0.jpg

其中h的计算与上面的H类似,继续参考一下文献即可。

下面的动图,显示了上述相机标定的过程。

3d4ee23e-675c-11ed-8abf-dac502259ad0.gif

*高精度相机标定的步骤演示

Ⅳ 相机标定的扩展

得益于使用圆环图案、利用模板匹配更新圆心位置、以及使用复杂的镜头畸变模型等措施,上述的相机标定方法在实测中可以达到再次投影误差在0.005-0.01像素的范围内。而在后续的三维成像应用中,可以容易地帮助三维成像达到微米级的精度。但是,上述的相机标定的一个主要缺陷是它依赖于使用带标定图案的标定板。

在小尺度视野的相机标定中,尚可以使用光刻的微小标定板和变更的成像模型来实现标定。而在稍大尺度视野下的相机标定中,可以使用编码的标定图案,因为图案是可以随意放置的,如下图所示的几块标定板可以同时且随意地放在视野中。

41e469a4-675c-11ed-8abf-dac502259ad0.jpg

*编码的标定图案可以用来在较大视野下的相机标定

然而,在超大的视野下,采用标定板的相机标定方法是不可行的。如下图中对水坝位移的监测应用。关于这种情况的高精度标定方法,我将在接下来的几篇文章中有介绍,请耐心等待。

42146e2e-675c-11ed-8abf-dac502259ad0.jpg

*采用标定板的相机标定方法在超大视野应用中是不可行的

相机标定的几个基本应用

到此,相信大家已经清楚相机标定是怎么回事和怎么实施了。如果还有不明白的地方,就请把这篇文章的上下两部分再仔细读一遍。如果还需要帮助,那就......

但是,事情还没有结束。

既然我们花了这么长的篇幅介绍高精度相机标定,那就索性再多介绍一点儿关于相机标定的基本应用。比如,看下面这张几周前国庆70周年阅兵的一个镜头。假设相机或者摄像机是标定过了的话(注:这个标定其实属于超大视野标定),我们能够得到什么额外的常规相机不能提供的信息呢?

4225bc42-675c-11ed-8abf-dac502259ad0.jpg

*国庆70周年阅兵现场的一个镜头

为了回答这个问题,我们先再一次回顾一下相机的成像数学模型:

4249b426-675c-11ed-8abf-dac502259ad0.jpg

当我们拿到一幅由已经标定过的相机拍摄的照片后,对于照片中每一个基本单元—像素,上面公式中有四个未知量:426f664e-675c-11ed-8abf-dac502259ad0.png。方程有几个?只有三个!这就意味着我们是不能解得那四个未知量的。这倒也符合我们的常识:单凭单个相机是不能用来做三维成像的。接下来,问题来了。我们本着爱钻研的精神,想:能不能引入一些额外信息,使得方程可解呢?答案是肯定的。

我们知道天安门城楼上毛泽东画像的尺寸是有规格的,于是查了一下:高6.4米,宽5米。现在,我们任选这个画像的三个角点,那么显然上面的公式将给我们总共12个未知量和9个方程。与此同时,这12个未知量中的9个三维坐标还会根据画像的尺寸组成下面三个公式:

428436dc-675c-11ed-8abf-dac502259ad0.jpg

完美!因为现在我们有12个未知量和12个方程,问题可以解决了!也就是说,我们是可以通过解方程来得到画像的三维坐标的。即便画像在图像中不是正对着相机而是倾斜的,也没有问题。另外,我们也可以得到其它的一些信息,比如拍摄者距离天安门有多远。这个例子在当前的热门领域—网售和物流—是有重要应用的,它可以检测商品和包装盒的姿态来配合机械臂进行分拣。

在写上面单相机进行三维测量的过程中,我想起了多年前的华南虎照片一事。相信大家都知道此事,实在不知道怎么一回事的就百度一下吧。这件事情的核心,就是陕西省安康市某村一个叫周正龙村民,从年画上复印了一张老虎的图片,再贴到纸板上并立到草丛中,然后在几米到10米不等的距离处拍了几十张照片。之后,宣称自己拍摄到了濒危动物野生华南虎。一出闹剧之后,陕西省政府正式通报,照片中的老虎其实是纸板老虎。

42a26c42-675c-11ed-8abf-dac502259ad0.jpg

*曾经轰动一时的周正龙所拍摄的“华南虎”照片

我提这件事情的原因是想给大家出一道“作业题”:根据周正龙所拍的一系列照片,虽然我们不能去标定当时的相机,通过本篇文章所介绍的知识,你能否通过计算分析得出那个老虎是个平面老虎?

让我们再回到四个未知量和三个方程。现在假设我们有两个相机,在共同的世界坐标系下标定后,那么对于物体或场景中的任何一个实际点来说,如果它能同时出现在两个相机分别拍摄的照片中,总共就有五个未知量:42b80778-675c-11ed-8abf-dac502259ad0.png和六个方程。也就是,未知量居然比方程数还少一个!毫无疑问,问题是可解的。这也就是我们常说的立体视觉。例如下图中的人脸三维成像。

42c8420a-675c-11ed-8abf-dac502259ad0.jpg

*使用双相机的人脸三维成像

当然,这种基于双相机的三维成像有一个难点:左右图像的匹配。也就是对于一幅图像中的一个像素42ded5e2-675c-11ed-8abf-dac502259ad0.png,必须在另一幅图像中找到对应的另一个像素42fcd36c-675c-11ed-8abf-dac502259ad0.png。为了使匹配容易,一些产品例如苹果手机的三维人脸成像传感器、英特尔的RealSense三维测量传感器,都会采用红外的点结构光来辅助图像的匹配。关于这个话题,我将在以后专门写一篇文章。

事情到这里,细心的读者也许会有一个疑问:我们既然“一不小心”把未知量数目减少得比方程数目多了从而使得事情变复杂了—也就是需要左右图像的匹配,那么我们能否把未知量数目增加一个回去,从而使得匹配的问题变简单呢?

答案是可以的。比如我们只匹配水平方向的像素,那么未知量的数目是六个:43183986-675c-11ed-8abf-dac502259ad0.png,结合六个方程,问题是可解的!可是,怎么实现呢?

这时,有的读者也许会马上想到:Image Rectification 呀!不错,Image Rectification正是只匹配了一个方向!不过遗憾的是,如果这个Rectification的方案可行,那么有了图像后,马上解方程好了,根本不再需要做任何匹配。而那个Middleburry数据库和评估网站也可以马上关掉了。显而易见,这个方案是有问题的。至于原因,就再留给大家思考好了!






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • matlab
    +关注

    关注

    175

    文章

    2917

    浏览量

    228409
  • OpenCV
    +关注

    关注

    29

    文章

    611

    浏览量

    40758
  • 相机成像
    +关注

    关注

    0

    文章

    15

    浏览量

    5597

原文标题:重磅!如何做到相机高精度标定?

文章出处:【微信号:3D视觉工坊,微信公众号:3D视觉工坊】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    维视图像告诉您工业相机选择的一般规则

    定位的误差,将视野比物体适当放大),假如能够取到很好的图像(比如可以打背光),而且我们软件的测量精度可以考虑1/2亚像素精度,那么我们需要的
    发表于 06-18 17:18

    关于LabVIEW相机标定的问题!!!!求解

    单元换算到实际单位时的大小,然后根据像素坐标计算实际坐标,那么如果我用相似三角形的原理的话,是不是可以结合它来使用而不进行相机标定求各位迷惑的和搞清楚的人都说一下你们的见解!!谢谢!!
    发表于 05-20 15:49

    关于工业相机和镜头的选型

    。再看看景深是否有符合我们要求的镜头。 接下来在看看这个精度相机感应片是有每个很小的像源组成的,靶面尺寸就是通过像素值*像源尺寸得到的边缘距离,在整个工业加工过程中,会产生一的误差
    发表于 01-07 11:41

    请问labview标定怎么提高测量精度

    0.6mm,但是实验要求测量误差在±0.1mm,所以想问一下大家有没有做过类似labview的标定,有没有方法提高测量精度??在此谢过了[抱拳]。
    发表于 11-10 11:21

    MK系列光学定位相机 工业相机

    时传输给后端,供二次开发使用。 MK光学定位相机特点采用千兆网接口,POE供电,单网线完成供电和数据传输高速检测,200万像素时帧率可达200FPS高精度,中心坐标定
    发表于 01-16 13:32

    一种不依赖于棋盘格等辅助标定物体实现像素相机和激光雷达自动标定的方法

    主要内容本文提出了一种不依赖于棋盘格等辅助标定物体,实现像素相机和激光雷达自动标定的方法。方法直接从点云中提取3D边特征,一避免遮挡问题,并且使用了精确度更高的深度连续边。文中首先指
    发表于 09-01 07:42

    深圳市四元数数控技术有限公司机器视觉应用之标定板的使用?

    在机器视觉应用中,标定板的使用非常必要,因为对于精度测量来讲,镜头本身的畸变不可避免,同时又需要达到客户满意的精度,因此要求本身的图像就非常真实、准确,否则软件水平再高,那也是基于有
    发表于 02-25 09:55

    相机标定介绍

    什么是摄相机标定?摄相机标定方法的分类?感兴趣的小伙伴们可以瞧一瞧。
    发表于 09-22 12:04 0次下载

    C形臂的手术导航相机标定

    算法实现变得高效;同时,提出了带有双层金属球的校准靶,通过识别小球的投影数据来实现相机标定。在校准点验证实验中,可以验证经变换后的坐标的残余误差均不超过0. 002像素;在导航验证实验
    发表于 12-14 15:31 5次下载

    遗传算法的单目相机标定

    针对张正友标定方法中相机内参数的求解可能陷入局部最优解的问题,考虑镜头的三阶径向畸变和二阶离心畸变,提出一种基于改进遗传算法的单目相机内参数优化标定方案。该方法可显著提高
    发表于 01-05 16:11 1次下载

    HALCON的3D相机标定

    转自:微信公众号AI图像 创建标定数据模型 你可以用算子create_calib_data创建一个标定数据模型,指定相机标定物体的数量。当用一个
    的头像 发表于 10-31 11:31 3491次阅读
    HALCON的3D<b class='flag-5'>相机</b><b class='flag-5'>标定</b>

    张正友教授相机标定法原理与实现

    张正友相机标定法是张正友教授1998年提出的单平面棋盘格的相机标定方法。传统标定法的标定板是需要
    的头像 发表于 12-31 10:06 5541次阅读
    张正友教授<b class='flag-5'>相机</b><b class='flag-5'>标定</b>法原理与实现

    相机标定含义(解决什么是相机标定

    在大多数条件下,这些参数必须通过实验与计算才能得到。无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响
    的头像 发表于 06-21 11:12 7717次阅读

    张正友标定方法是手眼标定吗 如何分析相机标定参数的好坏

    张正友标定方法是一种经典的相机标定方法,目前是最受欢迎的方法之一。该方法通过一种机器学习的方法,利用大量匹配的数据点像素坐标、世界坐标,基于极大似然估计拟合得到一个最优解。
    发表于 08-03 10:59 728次阅读
    张正友<b class='flag-5'>标定</b>方法是手眼<b class='flag-5'>标定</b>吗 如何分析<b class='flag-5'>相机</b><b class='flag-5'>标定</b>参数的好坏

    常用视觉的三种相机标定总结

    选中Export Camera Parameters按钮,将计算得到的相关参数导入到Matlab中;若要进行更精确的标定,可在标定时考虑畸变误差或采用双目相机
    发表于 10-09 10:51 677次阅读
    常用视觉的三种<b class='flag-5'>相机</b><b class='flag-5'>标定</b>总结