摄像机标定2

来源:互联网 发布:淘宝首页视频如何制作 编辑:程序博客网 时间:2024/04/28 06:05

摄像机标定2

数字图像处理 2010-04-11 17:13:28 阅读67 评论0 字号:

 

引用

feifei17866摄像机标定2

相机标定在交通监管等方面有着广泛的应用,也是计算机视觉研究的一个重要问题之一。

本文首先讨论对于靶标上一个大小确定的圆,如何利用得到的像确定其圆心的像坐标问题,它是标定问题研究的一个非常关键环节。由于像与原像之间是一个非线性关系,圆的像一般不再是圆甚至也不是椭圆,所以只能通过整体图像去确定中心坐标。为此,我们首先取一个平面,再取该平面上一个按靶标大小确定的圆,这个圆依赖圆心参数和平面参数等多个变量。取定一组参数,按光学原理得到像平面上该圆的像,把该像与已有的图像做最优匹配。找到最优匹配的一个圆,求出其圆心,按照光学原理对应到像平面上就能近似地确定圆心的像坐标(模型见正文(10)式)。在设计算法时,我们选用搜索和简化计算等多种方法进行计算,对比得到结果。

然后,我们用所给的模型对文中的实例进行了验证,经过计算机帧面坐标系和像面坐标系的换算求出了原像中五个圆心的像坐标(见表4)。进而我们对原像所在的平面进行了拟合,效果图见附件1。从效果上观察,较为精确地反映了实例中的问题,由此也说明了我们所建模型的合理性。特别地,通过验证实例中的 是否近似地位于同一直线,对模型进行验证和调整。另外,我们也讨论各种参数变化对模型的影响、离散化及像素和距离的转换对模型的影响和畸变对图像影响等问题,并给出了一些改进建议。

最后,对通过标定方法确定两部固定相机的相对位置给出了数学模型。该模型利用多个靶标所得坐标,通过空间坐标变换和参数拟合等方法给出了一种确定两部相机相对位置的方法。

 

 

 

 

关键字:   标定  最优匹配  拟合 成像原理

 

 

1 问题的重述

相机标定是视觉检测系统标定的一个重要组成部分,它在交通监管等方面有重要的应用。如果要做到从像面上所获得的二维信息来推断、检测二维或三维信息,必须确定相机的具体参数。

该问题所用的定位方法是双目定位,即用两部相机来定位。对物体上一个特征点,用两部固定于不同位置的相机摄得物体的像,分别获得该点在两部相机像平面上的坐标。确定两部相机精确的相对位置,就可用几何的方法得到该特征点在固定一部相机的坐标系中的坐标,即确定了特征点的位置。于是对双目定位,精确地确定两部相机的相对位置就是关键,这一过程称为系统标定。

该问题所用的标定方法是在物平面上画若干个圆(称为靶标),它们的圆心就是几何的点。而它们的像一般会变形,所以必须从靶标上的这些圆的像中把圆心的像精确地找到,标定就可实现。

有人设计靶标如下,取1个边长为100 的正方形,分别以四个顶点为圆心,12 为半径作圆。以 边上距离 点30 处的 为圆心,12 为半径作圆,并用一位置固定的数码相机摄得其像。

1、建立数学模型和算法以确定靶标上圆的圆心在该相机像平面的像坐标, 这里坐标系原点取在该相机的光学中心,x-y平面平行于像平面;

2、对由题目给出的靶标及其像,计算靶标上圆的圆心在像平面上的像坐标, 该相机的像距(即光学中心到像平面的距离)是1577个像素单位(1毫米约为3.78个像素单位),相机分辨率为1024×768;

3、设计一种方法检验你们的模型,并对方法的精度和稳定性进行讨论;

4、建立用此靶标给出两部固定相机相对位置的数学模型和方法。

 

2 假设与符号

2.1 假设照相机的镜头由一个凸透镜构成;

2.2 假设经过相机镜头生成的像没有发生畸变;

2.3 假设所讨论的照相设备是最简单的情形,不具有广角等功能;

2.4 一幅图像一旦确定,其焦距等相机的参数都相应地确定;

2.5 靶标是一个固定大小的圆形图形位于一个平面上;

2.6 假设相机的光学中心就是相机镜头的中心;

2.7 表示焦距, 表示物距, 表示像距。

 

3 问题分析

为了更准确地解决以上的几个问题,首先,我们对涉及到的光学成像原理及我们所讨论的问题进行一些简要的分析。

为表述相机的成像关系,系统中存在多个坐标系,如世界坐标系、摄像机坐标系、帧面坐标系等。按本问题的要求,我们取一部相机的光学中心为原点,以实际中的上方为 轴的正方向,过光学中心指向实物的一方为 轴的正向,根据与 轴垂直且 轴成右手关系确定 轴的正向。如图1所示。摄像机标定2 - feifei17866 - feifei17866的博客

图1

由光学透视原理,我们知道

                              (1)

其中 为焦距, 为物距, 为像距。

轴垂直于像平面且交像平面于 点, 的坐标为 。 是计算机帧面坐标系,以像素为离散单位。

通过解析方法可求解物平面点 到像平面点 透视变换关系:

                (2)

上式是在假设光学系统理想的情况下推得的数学模型, 是透视变换矩阵, 是光学成像系统的缩放系数。

题目中要求的几个问题的关键是已知靶标是一个大小确定的圆,由该圆的像去推测哪一点是由该圆的圆心映得的像。如果这个问题能回答,则问题2可看作对所给的模型的应用和验证。一般而言,所给的数学模型仅仅是实际情形的理想化反映,而实际中由于受各种因素影响会出现一定的偏差,通过验证可以对模型进行一定的修订。在上述问题都能得到解决的前提下,最后一个问题可以看作是同一实物在不同的两个位置拍摄的像已知的情形下,推测两个相机的位置的相对关系。从几何上看相当于一个坐标转换问题。

 

4 模型的建立与求解

4.1 问题1的模型

首先,本文为适应单摄像机视觉检测的需要,依据光学系统原理和二维测量的特点,提出了一种基于图像匹配最优、高精度地确定圆心的像坐标的数学模型。

4.1.1模型的建立

假设靶标上的圆的大小是固定的,其半径为 ,圆心的坐标为 。

那么按相机的成像原理 一定在相平面上对应唯一的一点 ,即

,              (3)

关键是要通过得到的图像反求出 的可能值。

因此,模型可以描述如下:

由于靶标上的圆在一个平面上,则圆面方程为

                  (4)

其中第一个方程表示靶标上的一个圆所在的球体,第二个方程表示靶标所在的平面,参数 满足

                         (6)

即圆心在平面上。六个参数中有五个是独立的。

由成像原理,圆上的点在像平面成的像为

       (7)

这里需要说明的是圆上的点 的每个坐标都依赖于所取的参数, 对一幅图像是常数,但 是与参数有关的量。由此说明物平面中点的变化与对应像平面的变化成复杂的非线性关系,这也是本问题的难度所在。

其中  是靶标上圆中的点, 是圆中点的像坐标。

即需要被匹配的图像中的点的集合。

记 。

令 表示我们选择的图像的像素值,当 时,其值为0,当 其值为1; 为 在点 的像素值,当 时,其值为0,当 其值为1。

确定参数 使得

                       (8)

得到圆心的像坐标为

,即               (9)

记 ,则模型表述为:

          (10)

其中 中 表示最优匹配圆的圆心的像坐标。

4.1.2  算法设计

1) 根据上面给的模型,我们首先给出模型求解的一般方法:

i 每取定一组参数值 得到一个平面的圆,即靶标圆的图形;

ii 按照成像原理把该靶标圆中的点对应到像平面,然后得到一个像平面的图像;

iii 让该图像与实际的图像之间作匹配,估计误差,找出误差小于我们规定的即可;

iv 把搜索到的圆的中心 ,在光学原理下求出其对应的像的坐标,即可作为圆心的像坐标。

图2为该算法的流程图。摄像机标定2 - feifei17866 - feifei17866的博客

 

开始

 

 

取a,b,c,A,B,C的值

 

 

得到靶标的

圆方程

 

 

利用像成像原理得到圆的像方程

 

 

与真实像方程对比,判断误差是否大于规定值

 

 

(a,b,c)为圆心

 

 

得到圆心的

像坐标

 

 

结束

 

 

N

 

 

Y

 

图2

虽然上面的算法思想在理论上是可行的,但在实际计算中,第二步、第三步中参数较多,运算量较大。为此,由参数每确定一个圆,就可以通过一定宽度的网格去划分,只取网格点进行优化。这样虽然降低了准确性,但大大降低了运算量。

2) 简化算法

根据成像原理,我们可以知道在物像平面的一些特殊特征可以保持不变,为此我们给出下面的命题,它对简化我们的算法有所帮助。

命题 成像时把物平面上的直线映为像平面的直线,把水平直线映为水平直线(相对于本问题中的坐标系),把垂直直线映为垂直直线,把凸形图像映为凸形图像。

由此命题我们可以简化计算圆心的像坐标。

具体算法如下:

i 在得到的每个圆的像上找上下、左右各两条与像相切的直线;

ii 这些直线相交四个点,在像平面做成一个矩形;

iii 求出该矩形的对角线的交点,把其作为圆中心的像坐标;

iv 通过拟合等其他方法进行校正。

该方法将在下一节实例中给与具体应用。

 

4.2 问题2的求解

首先在像平面所在的平面建立一个以所得像的左边界为x轴,以所得像的上边界为y轴的平面直角坐标系(帧面坐标系),如图3所示。根据相机的分辨率1024×768,将像的纵边分成768个单位,将像的横边分成1024个单位。摄像机标定2 - feifei17866 - feifei17866的博客

 

 

图3

将靶标的像读入Matlab,并按照以上建立的坐标系确定其各个像素点的坐标。利用Matlab将该图像转化成二值图像,即图像上的各个点根据其所在位置分别用0、1表示,其中0代表像平面上的圆内的点,1代表像平面上圆以外的点(源代码见附件2)。接下来将利用三种方法计算靶标上圆的圆心在像平面上的像坐标。

首先建立以相机的光学中心为原点,x-y平面平行于像平面的空间坐标系,且x轴,y轴的正方向与问题1中所规定的方向相同,如图4。由坐标系的定义可以知道像平面垂直于z轴,即像平面上的各点的第三分向量均为常数,1577个像素单位。由照相机的构造可知,相机的光学中心在像平面上所对应的点为整个像平面的坐标原点。因此,可以通过平移和数据转换,将圆的圆心在计算机帧面坐标系下的像转换到像平面坐标下的坐标。

摄像机标定2 - feifei17866 - feifei17866的博客

图4沿z轴正方向所看到的像平面

 

然后,我们利用上节建立的模型,对五个靶标分别用匹配的方法求得圆心的像坐标,然后利用像的集合特征及光学成像原理,用简化的方法也得到了圆心的像坐标。

(1) 匹配搜索方法

对每个靶标,按上节的算法思想,利用Matlab进行编程搜索,设置各参数的步长为五个像素单位,最后取精度为1(像素)。然后再换算成单位为毫米的长度。所得结果列在表1中。

 

 

 

 

横坐标

 

纵坐标

 

A

 

195

 

-188

 

B

 

187

 

-89

 

C

 

170

 

127

 

D

 

-118

 

71

 

E

 

-118

 

-227

表1 匹配搜索方法得到的各圆心的像坐标(单位:像素)

 

(2) 内切圆法

在此方法中,分别求出各个圆的像的最大内切圆,将其圆心认为是靶标上圆的圆心在像平面上的像。

根据最大内切圆的定义,先找出圆的像内的所有点(包括边界点)到各个边界点的距离的最小值,然后找出这些最小值中的最大值,与其相对应的像内的点就是所求的内切圆的圆心,从而得到靶标上圆的圆心在像平面上的坐标,同时得到最大内切圆的半径(源代码见附件3)。所得结果列在表2中。

 

 

 

 

 

横坐标(像素)

 

纵坐标(像素)

 

半径(像素)

 

半径(毫米)

 

A

 

194

 

-190

 

40.3609

 

10.6775

 

B

 

187

 

-89

 

38.833

 

10.2733

 

C

 

171

 

128

 

34.7131

 

9.1834

 

D

 

-118

 

72

 

30.4138

 

8.0460

 

E

 

-118

 

-228

 

34.4384

 

9.1107

表2 求内切圆方法得到的各圆心的像坐标

 

(3) 凸形切线法

由前面的命题,我们知道,图像能保持平面上的直线性质不变。因此,找出分别与两个坐标平行的像的四条切线,不同方向上的两条切线必相交且相互垂直,如图3。

摄像机标定2 - feifei17866 - feifei17866的博客

图3

 

连接不在同一条切线上的交点,所得线段的交点认为是靶标上圆的圆心在像平面上的坐标,结果如表3。

 

 

 

 

横坐标

 

纵坐标

 

A

 

194.5

 

-189

 

B

 

187.5

 

-89

 

C

 

170.5

 

128

 

D

 

-119

 

71

 

E

 

-118

 

-227

表3 凸形切线法得到的各圆心的像坐标(单位:像素)

 

将上述结果对比发现,三种方法所求圆心的像坐标几乎相同。将利用匹配搜索方法求得圆心的像坐标转化成以毫米为单位,得到的结果如下:

 

 

 

 

A

 

B

 

C

 

D

 

E

 

X

 

51.4567

 

49.4862

 

45.1977

 

-31.4768

 

-31.1569

 

Y

 

-50.0278

 

-23.5460

 

33.8358

 

18.7124

 

-60.1413

 

Z

 

-417.1958

 

-417.1958

 

-417.1958

 

-417.1958

 

-417.1958

表4 各个圆的圆心的像坐标(单位:毫米)

 

将圆心的像根据所求出的像坐标在像平面上标出,如图5。

摄像机标定2 - feifei17866 - feifei17866的博客

图5 沿z轴正方向所看到的像平面(坐标单位:毫米)

 

4.3 问题2的进一步讨论

在本节中,我们将根据所给的模型,对问题2给与更详细的讨论。模拟出五个靶标所在的平面,以及通过该例说明模型的合理性。

通过搜索匹配,我们求出五个靶标相对于光学中心的近似距离,结果如下:

 

 

 

 

A

 

B

 

C

 

D

 

E

 

物距

 

468.87

 

487.32

 

545.15

 

622.22

 

549.5

表5 圆A、B、C、D、E的物距(单位:毫米)

 

通过分析 之间的长度与其像 相应点之间的长度比例变化和光学原理的比例关系,近似估算出 五个圆心相对于所建坐标系的坐标。其数据如表6所示。

 

 

 

 

A

 

B

 

C

 

D

 

E

 

X

 

-63.9606

 

-61.5112

 

-56.1807

 

39.1256

 

38.7280

 

Y

 

62.1845

 

29.2677

 

-42.0579

 

-23.2595

 

74.7556

 

Z

 

466.4446

 

487.7676

 

544.7487

 

618.1976

 

548.4187

表6 根据平均物距得到的各圆圆心的坐标(单位:毫米)

 

设物平面的方程为 ,由上面的数据进行拟合得出的物平面方程的表达式为:

                   (11)

图6反映了物平面与像平面及光学中心坐标系的关系。为了表述明确,我们在图中作了一个与像平面平行的参照平面。从图中可以发现,物平面有一定的倾斜,其中 两个靶标倾向镜头, 远离镜头。按照成像近大远小的原理和其中所给的靶标的像的规律,发现该结论和实际相符。

摄像机标定2 - feifei17866 - feifei17866的博客

 

图6

 

5 模型的检验与修订

我们将建立的模型在第4节给出了具体应用,但是在应用中我们没有太多的讨论误差问题。本节我们主要对在应用中出现的问题给与修订和改进。

5.1 模型的检验

1) 问题2中 点可以作为检验模型的点。按照我们所给的命题, 三点应该位于一条直线上。因此我们先求 的方程,然后求出 点与该直线的距离,如果实际距离或相对距离很小,说明模型是可以接受的。用此方法对模型检验过程如下:

用表6中的数据作出 直线方程为

                    (12)

根据点到空间直线的距离,求出 ,说明 点与直线 非常接近。再将该距离与前面得到的物距相比,我们可以认为 点几乎就在直线 上。

由此可得到我们的模型是可以接受的。

2) 用所求的各圆圆心的坐标拟合实际的平面,然后求各圆的圆心到该平面的距离,如果实际距离或相对距离较小,说明模型是可以接受的。用此方法检验模型的过程如下:

根据拟合出的平面方程与所求的 点的坐标(如表6),求得 到物平面的实际距离分别为:0.0032 ,0.0037 ,0.0004 ,0.0008 ,0.0008 。与前面得到的物距相比,这些距离几乎可以忽略不计,可见拟合效果比较理想。

因此,我们所建立的模型是可以接受的。

3) 标尺验证方法

我们根据所求的物像的坐标通过现场模拟来验证模型。在一个标尺上确定两个标记点,测量得到两标记点间较为精确的距离,再根据所得的两标记点的像利用我们所建的模型反求两标记点间的距离。

试验过程中我们得到如下数据:标尺上两个编码点的实际距离是45.61 ,利用模型所求的距离为45.44 .相对误差为0.4%。

因此可以认为,模型相对比较合理,稳定性比较好。

5.2 模型的修订

我们通过得到的图像,在物平面恢复原像。再把该复原图像和最初给定的图像进行对比,以重新修改模型中的参数,由此确定新的圆心的像坐标。由于我们所给的模型涉及到几个图像坐标等问题的转换,而且利用了仿射变换等方法,不能完全恢复图像,具有一定的失真率。因此上述的调整要多进行几次。

5.3 畸变对模型的影响

实际上摄像机的光学系统存在畸变,包括径向畸变和切向畸变两种,以径向畸变为主。当只考虑径向畸变影响时,空间点在像面上的实际对应位置就与理想位置不一致了。

透镜径向畸变可用二阶多项式近似:

                         (13)

上式中 为畸变系数, 。

实际图像坐标到计算机帧坐标变换如下式:

                          (14)

其中 为像面中心, 图像平面上单位距离的像素点数, 为相机的纵横比,它反映相机纵横向的放缩比。

5.4 离散化对模型的影响

实际的物像的轮廓是一条连续曲线,在数值计算时需要离散化,这会引起误差;同样把一个数码相机的成像,按像素读出数值再换算成具体的长度单位也会引起误差,不过这种误差相对较小。

5.5 各种参数变化对模型的影响及改进方式

模型中有多个参数,在搜索时,单个的误差对要求的量就会产生共同的一个误差。由于靶标圆的坐标 都是参数 的函数,以横坐标 为例当参数有一个小的误差 和 时, 会与他们都有关系。但由模型可知,它们之间是连续依赖的,因此只要搜索步长很小就能得到比较精确的结果。

 

6 两部相机定位的数学模型

两个测量平面直角坐标系间的严格转换过程可分为三个阶段: 第一个阶段是将坐标旋转,第二个阶段是将坐标系平移,第三个阶段是将平移后的坐标压缩或拉伸(即尺度修正)。

假设两部相机具有相同的参数指标,所置位置的光学中心分别为 和 ,对同一靶标进行拍摄。若分别以 和 为坐标原点按第二节的方法建立两个坐标系,则同一靶标会在两个相机中分别的得到两幅图像。用我们建立的模型,可以相应地求出像的圆心坐标 和 , 由此可以近似地反推出靶心分别在不同的坐标系下的坐标 和 。

设 ,其中 为旋转矩阵, 为平移向量。

共有十二个参数需要确定。

因此靶标上若只有一个圆很难确定两部相机的位置,至少有四个圆拍摄后才能确定两部相机的位置。

对于 ,我们用拟合的方法给出下面的模型。

设函数

     (15)

求 ,使得

                      (16)

此时,如果把第一个相机作为参照相机,其光学中心为 ,则第二个相机的光学中心相对于第一个就为 。由于模型和相机本身就有误差,以及不同的相机在拍摄成像时总有差别,一般即使是对同一靶标拍摄,其推测的位置在世界坐标系下也不是严格的一点,因此在一平面上多设置靶点对提高两部相机的定位准确性就很有必要了。

 

7 结 论

从上面的讨论可以看出,一般的标定问题是一个非常复杂的问题。由像去推断那个点是由靶标中心映到的,是一个复杂的非线性问题。我们的模型是用匹配图像的方法去推断结论,在比较理想的条件下是可行的,但运算量较大。

在本问题中,虽然简化方法也很容易的得到相近的结果,但本问题比较特殊,靶标直径不大,其像非常接近椭圆,因此简化结果较理想。但这种简化方法不能推而广之到一般标定问题,因此我们的模型还是很有意义的。

 

 

参考文献

[1] 姜启源,谢金星,数学模型,高等教育出版社,1987年4月。

[2] 吕林根 许子道,解析几何,高等教育出版社,1960年9月。

[3] 王家文 李仰军,MATLAB7.0 图形图像处理,国防工业出版社,2006年6月。

[4] 曾建军 李世航 王永国 叶仁玉 夏慧异,MATLAB语言与数学建模,安徽大学出版社,2005年10月。

[5] 张洪涛等,基于网格靶标快速高精度摄像机标定方法,光电工程,第33卷第11期,57-60,2006。

附件1  物平面的拟合效果图

  摄像机标定2 - feifei17866 - feifei17866的博客

 

为靶标所在的平面, 为像平面。由 面附近的点之间的距离可见计算结果与实际相差很小。

 

 

 

 

附件2

%%%把图像转化成计算机帧平面坐标系,存储在C中,C为1024*768矩阵

A=imread('jianmo.bmp','bmp');%把图像读入到Matlab中

level=graythresh(A);%level是归一化的阀值,值域为[0,1].

C=im2bw(A,level);%将计算机读到的灰度图像数据转化成二值图像(white和black)

D=bwperim(C,4);%用四邻域地方法提取边界点,是边界点为1,不是为0

 

 

 

 

 

 

 

附件3

%%%用内切圆法求圆心的像的坐标(这里给出第一个圆的计算方法,其他的4个类似,只需改范围限定值)

n=1;

for i1=100:1:250

    for j1=250:1:370%取遍第i个圆的所有点

        if C(i,j)==0

            XA(n)=i;YA(n)=j;%记录计算机帧坐标系中为0点的像素坐标

            for k=1:(n1-1)                  

               D1(k)=(i-X1(k))^2+(j-Y1(k))^2;%求该点到边界的距离

            end

            dmiA(n)=min(D1);

            %找出该点到边界的距离的最小值,记为该点的半径

            n=n+1;

        end

    end

end

[dmax,I]=max(dmiA)

%找出所有符合点的半径,并求出所有点的最大值,记为该圆圆心的像坐标

xo(1)=XA(I);

yo(1)=YA(I);%记录圆心的像的帧坐标

 

 

 

附件4

%%%%做拟合平面,实际点与拟合点的Matlab图像

%作出像平面的上像的边界

for i=1:1024

    for j=1:768

        if D(j,i)==1

            x=(i-512)/3.78;y=(384-j)/3.78;

            %转化成世界坐标系毫米坐标

            plot3(x,y,-417.1958);%作图

            hold on      

        end

    end

end

x0=(yo-512)/3.78;y0=(384-xo)/3.78;

z0=[-417.1958,-417.1958,-417.1958,-417.1958,-417.1958];

plot3(x0,y0,z0,'+')%作出圆心的像的点

%读入实际圆心的坐标的数据

X=[63.961,61.511,56.181,-39.126,-38.728];

Y=[62.184,29.268,-42.058,-23.259,74.756];

ZO1=[466.4446  487.7676  544.7487  618.1976  548.4187];

%在立体图中作出实际点与拟合点,比较变化大小

for i=1:5

    XO1(i)=Y(i);YO1(i)=-X(i);

    Z(i)=-0.7047*XO1(i)+0.9224*YO1(i)+568.0997;

    plot3(XO1(i),YO1(i),Z(i),'+')

    %作出拟合平面上的5个圆心的点

    hold on

    plot3(XO1(i),YO1(i),ZO1(i),'*')

    %作出实际圆心的点

    hold on

end

ezmesh('-0.7047*x+0.9224*y+568.0997',[-150,150],[-150,150],100)

%作出拟合平面,其参数由线性拟合而来

alpha(.4)%透明化处理

ezmesh('520.09',[-150,150],[-150,150],100)%作出参照面

alpha(.4)

ezmesh('-417.1958',[-150,150],[-150,150],5)%作出像平面

alpha(.4)

axis([-150,150,-150,150,-500,800]);%限定作图范围

ezplot3('0','0','t',[-500,1500]);%作出z轴

cm=ones(64,3)*0.5;

colormap(cm);%控制面的颜色,这里为灰色

 

 http://lttian1068.blog.163.com/blog/static/132150608201031151328307/