系统模型
如图所示,为八参数方法的系统模型,其中相机、投影仪、参考面的三维坐标系原点分别为 O c O_c Oc、 O p O_p Op和 O O O。我们设置投影仪的投影中心 O p O_p Op与系统的参考面同处在 z z z轴方向,相机则以另一个视野处在参考面坐标系 O O O的 任意三维位置。假设空间中有一点 P P P,在参考面坐标系下的坐标为 ( x , y , z ) (x,y,z) (x,y,z),在相机坐标系下的坐标为 ( x c , y c , z c ) (x_c,y_c,z_c) (xc,yc,zc),该点成像于相机平面的 p ( u , v ) p(u,v) p(u,v)点。此外,点 P P P投影在参考面 X O Y XOY XOY下的点为 P ′ P' P′,并在 x x x轴的点为 P ′ ′ P'' P′′。投影仪投影到 P P P点的光线与参考面相交于 D D D点,且该点在 x x x轴的点为 D ′ ′ D'' D′′,因此可知, D D D点的相位与 P P P点的相位是相等的。
测量原理
参考面坐标系下相位与三维坐标关系
由相似三角形 △ O P ′ P ′ ′ \triangle OP'P'' △OP′P′′ ∼ \thicksim ∼ △ O D D ′ ′ \triangle ODD'' △ODD′′可知,
O P ′ O D = O P ′ ′ O D ′ ′ ( 1 ) \frac {OP'}{OD}=\frac {OP''}{OD''} \qquad (1) ODOP′=OD′′OP′′(1)
由相似三角形 △ D P P ′ \triangle DPP' △DPP′ ∼ \thicksim ∼ △ D O p O ′ ′ \triangle DO_pO'' △DOpO′′可知,
O P ′ O D = O O P − P ′ P O O p ( 2 ) \frac {OP'}{OD}=\frac {OO_P-P'P}{OO_p} \qquad (2) ODOP′=OOpOOP−P′P(2)
联立公式(1)和(2)可得:
O P ′ ′ O D ′ ′ = O O P − P ′ P O O p \frac {OP''}{OD''}=\frac {OO_P-P'P}{OO_p} OD′′OP′′=OOpOOP−P′P
由相位与位置关系可得:
O D ′ ′ = λ 2 π ( θ − θ 0 ) ( 3 ) OD'' = \frac{\lambda}{2\pi} (\theta - \theta_{0} ) \qquad(3) OD′′=2πλ(θ−θ0)(3)
其中, θ 0 \theta_{0} θ0为 O O O点的相位, θ \theta θ为 D D D点的相位, λ \lambda λ为条纹周期。
将公式(3)带入公式(2)得:
O P ′ ′ λ 2 π ( θ − θ 0 ) = O O P − P ′ P O O p \frac {OP''}{ \frac{\lambda}{2\pi} (\theta - \theta_{0} )}=\frac {OO_P-P'P}{OO_p} 2πλ(θ−θ0)OP′′=OOpOOP−P′P
2 π O P ′ ′ λ ( θ − θ 0 ) = O O P − P ′ P O O p \frac {2\pi OP''}{ \lambda (\theta - \theta_{0} )}=\frac {OO_P-P'P}{OO_p} λ(θ−θ0)2πOP′′=OOpOOP−P′P
2 π O P ′ ′ × O O p = λ ( O O P − P ′ P ) ( θ − θ 0 ) 2\pi OP'' \times OO_p = \lambda(OO_P-P'P)(\theta - \theta_{0}) 2πOP′′×OOp=λ(OOP−P′P)(θ−θ0)
2 π x × l = λ ( l − z ) ( θ − θ 0 ) 2\pi x \times l = \lambda(l-z)(\theta - \theta_{0}) 2πx×l=λ(l−z)(θ−θ0)
θ
=
2
π
l
x
λ
(
l
−
z
)
+
θ
0
(
4
)
\theta=\frac{2\pi lx}{\lambda(l-z)} + \theta_{0} \qquad(4)
θ=λ(l−z)2πlx+θ0(4)
于是我们得到了参考面坐标系
O
O
O下三维坐标与相位的关系。接下来我们需要获取相机坐标系下相位与三维坐标的关系,那需要建立一个参考面与相机的关系。
参考面坐标系 O O O与相机坐标系 O c O_c Oc的关系
[ x c y c z c ] = [ R T ] [ x y z 1 ] = [ r 1 r 2 r 3 t 1 r 4 r 5 r 6 t 2 r 7 r 8 r 9 t 3 ] [ x y z 1 ] ( 5 ) \begin{gathered} \begin{bmatrix} x_c \\ y_c \\ z_c \end{bmatrix}= \begin{bmatrix} \bm{R} & \bm{T} \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\1 \end{bmatrix}= \begin{bmatrix} r_1&r_2&r_3 & t_1 \\r_4&r_5&r_6 & t_2\\ r_7&r_8&r_9 & t_3 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\1 \end{bmatrix} \end{gathered} \quad(5) xcyczc =[RT] xyz1 = r1r4r7r2r5r8r3r6r9t1t2t3 xyz1 (5)
相机坐标系下三维点与相机的关系
通过联系投影仪与相机关系(4) 和 相位与三维的关系(5) 我们可以得到下面的公式,既相机坐标系下三维点
(
x
c
,
y
c
,
z
c
)
(x_c,y_c,z_c)
(xc,yc,zc) 与相位的关系:
θ
=
a
1
x
c
+
a
2
y
c
+
a
3
z
c
+
a
4
a
5
x
c
+
a
6
y
c
+
a
7
z
c
+
a
8
(
6
)
\theta=\frac{a_1x_c+a_2y_c+a_3z_c+a_4}{a_5x_c+a_6y_c+a_7z_c+a_8} \qquad(6)
θ=a5xc+a6yc+a7zc+a8a1xc+a2yc+a3zc+a4(6)
相机坐标系下三维坐标推导表示
在相机坐标系下,二维的图像坐标与三维坐标
(
x
c
,
y
c
,
z
c
)
(x_c,y_c,z_c)
(xc,yc,zc)有如下的关系
s
r
[
u
v
1
]
=
[
f
x
0
u
0
0
f
y
v
0
0
0
1
]
[
x
c
y
c
z
c
]
(
7
)
\begin{gathered} s^r \begin{bmatrix} u \\ v \\ 1 \end{bmatrix}= \begin{bmatrix} f_x & 0 & u_0 \\ 0 & f_y & v_0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x_c \\ y_c \\ z_c \end{bmatrix} \end{gathered} \qquad(7)
sr
uv1
=
fx000fy0u0v01
xcyczc
(7)
结合上面的公式(6)和(7),可以得三个方程,正好可以求解三个未知的三维坐标。
z
c
=
f
(
a
1
,
.
.
.
,
a
8
,
f
x
,
f
y
,
u
0
,
v
0
)
x
c
=
z
c
(
u
c
−
u
0
)
f
x
y
c
=
z
c
(
v
c
−
v
0
)
f
y
(
8
)
\begin{gathered} z_c=f(a_1,...,a_8,f_x,f_y,u_0,v_0) \\ x_c=\frac{z_c(u_c-u_0)}{f_x}\\ y_c=\frac{z_c(v_c-v_0)}{f_y} \end{gathered} \qquad(8)
zc=f(a1,...,a8,fx,fy,u0,v0)xc=fxzc(uc−u0)yc=fyzc(vc−v0)(8)
其中,(
u
0
u_0
u0,
v
0
v_0
v0)为相机的主点坐标,
a
1
,
.
.
.
a
8
a_1,...a_8
a1,...a8为相位与三维坐标的参数,
f
x
和
f
y
f_x和f_y
fx和fy为相机焦距。
实验
相机标定
Opencv和matlab都采用了多种相机标定的方法,一般采用棋盘格或者圆点特征标定板对相机标定,标定后可以得到相机的内参和外参矩阵。具体步骤如下:
1. 放置标定板
如下图所示,实验中使用了一个12×9的棋盘格进行标定,首先使用相机采集一张纯色的棋盘格照片,并提取其角点信息。
2. 投影条纹建立相位与三维坐标关系
在上面的基础上,不要移动标定板,继续投影一组条纹编码到棋盘格上,如相移+格雷码、多频外差等等。采集的部分图像如下图所示。通过相位解码方法,求取绝对相位信息,并进一步确定角点的相位信息,便可以建立相位与三维点的关系。
3. 重复1-2步骤多次
移动标定板姿态,继续重复1-2的步骤,重复8-12次,得到多组标定图像,可以确定如下的关系:(1)相机的内参;(2)相位与三维坐标的关系即 a 1 , . . . a 8 a_1,...a_8 a1,...a8。这样,公式(8)中的系统参数便可以得到。
三维测量
1. 条纹投影
如下图所示,实验对一个物体进行相移+格雷码条纹投影。
2. 相位求解
3. 点云重建
重建的三维点云如下所示,如需整套八参数法代码可以通过链接获取。