前言
三维坐标系之间的转换关系:R(旋转矩阵) 、T(平移矩阵)
在大地测量、工程测量、摄影测量等领域中,坐标系之间的转换是必不可少的。空间坐标转换的实质是用公共点的2套坐标和非公共点的1套坐标推估非公共点的另1套坐标。
坐标转换过程通常分2步,先由公共点坐标解算转换参数,再由转换参数转换非公共点。转换参数通常分为旋转、平移和尺度参数,其中旋转参数的确定是坐标转换的核心。
传统的三维坐标转换模型是用3个旋转角作为旋转参数,建立的模型是非线性的,常需要用泰勒级数展开的方法将模型线性化,计算比较繁杂。
在小角度旋转情况下,可对旋转矩阵作近似处理,得到线性模型,如常用的布尔莎模型。
针对大旋角的坐标转换问题,多采用罗德里格矩阵表示旋转矩阵的坐标转换方法,仅有3个旋转参数,计算过程无需线性化,且能适用大旋角转换。
数学模型描述
布尔莎模型:前提是旋转角为微小旋转角
设矩阵 A 为 A 坐标系下公共点的三维坐标,矩阵B为B坐标系下公共点的三维坐标。由三维坐标转换模型可得,A、B 两坐标系的三维坐标转换方程如下所示:
[
x
y
z
]
B
=
[
Δ
x
Δ
y
Δ
z
]
+
(
1
+
k
)
R
[
x
y
z
]
A
(1)
\left[\begin{array}{l}x \\ y \\ z\end{array}\right]_{B}=\left[\begin{array}{l}\Delta x \\ \Delta y \\ \Delta z\end{array}\right]+(1+k) \boldsymbol{R}\left[\begin{array}{l}x \\ y \\ z\end{array}\right]_{A}\tag{1}
⎣⎡xyz⎦⎤B=⎣⎡ΔxΔyΔz⎦⎤+(1+k)R⎣⎡xyz⎦⎤A(1)
式中:
Δ
x
、
Δ
y
、
Δ
z
Δx、Δy、Δz
Δx、Δy、Δz 表示坐标原点的平移量,
k
k
k 为尺度因子,
R
R
R 为 A 站位到 B 站位的旋转矩阵。为了对坐标转换精度进行分析,将三维坐标转换模型作如下简化:
[
x
y
z
]
B
=
k
[
x
y
z
]
A
+
[
0
−
ε
z
ε
y
ε
z
0
−
ε
x
−
ε
y
ε
x
0
]
⋅
[
x
y
z
]
A
+
[
Δ
x
Δ
y
Δ
z
]
(2)
\left[\begin{array}{c}x \\ y \\ z\end{array}\right]_{B}=k\left[\begin{array}{c}x \\ y \\ z\end{array}\right]_{A}+\left[\begin{array}{ccc}0 & -\varepsilon_{z} & \varepsilon_{y} \\ \varepsilon_{z} & 0 & -\varepsilon_{x} \\ -\varepsilon_{y} & \varepsilon_{x} & 0\end{array}\right] \cdot\left[\begin{array}{l}x \\ y \\ z\end{array}\right]_{A}+\left[\begin{array}{c}\Delta x \\ \Delta y \\ \Delta z\end{array}\right] \tag{2}
⎣⎡xyz⎦⎤B=k⎣⎡xyz⎦⎤A+⎣⎡0εz−εy−εz0εxεy−εx0⎦⎤⋅⎣⎡xyz⎦⎤A+⎣⎡ΔxΔyΔz⎦⎤(2)
应注意到,式(2)中
ε
x
、
ε
y
、
ε
z
ε_x 、ε_y 、ε_z
εx、εy、εz 均为微小角,则$sin{x} = x ,cos{x}=1 $因此,应在利用坐标转换模型前通过初步的坐标系转换得到一组转站参数的初值,使 A、B 两坐标系之间的转换满足微小角近似。式(2)可进一步写成:
[
x
y
z
]
B
=
[
1
0
0
0
z
−
y
x
0
1
0
−
z
0
x
y
0
0
1
y
−
x
0
z
]
A
⋅
[
Δ
x
Δ
y
Δ
z
ε
x
ε
y
ε
z
k
]
(3)
\left[\begin{array}{l}x \\ y \\ z\end{array}\right]_{B}=\left[\begin{array}{lllllll}1 & 0 & 0 & 0 & z & -y & x \\ 0 & 1 & 0 & -z & 0 & x & y \\ 0 & 0 & 1 & y & -x & 0 & z\end{array}\right]_{A} \cdot\left[\begin{array}{l}\Delta x \\ \Delta y \\ \Delta z \\ \varepsilon_{x} \\ \varepsilon_{y} \\ \varepsilon_{z} \\ k\end{array}\right] \tag{3}
⎣⎡xyz⎦⎤B=⎣⎡1000100010−zyz0−x−yx0xyz⎦⎤A⋅⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡ΔxΔyΔzεxεyεzk⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤(3)
根据式(3),可将 n 个公共点的坐标转换写为$ B=AX$ 的形式,其中:
A
=
(
1
0
0
0
z
1
−
y
1
x
1
0
1
0
−
z
1
0
x
1
y
1
0
0
1
y
1
−
x
1
0
z
1
1
0
0
0
z
2
−
y
2
x
2
0
1
0
−
z
2
0
x
2
y
2
0
0
1
y
2
−
x
2
0
z
2
1
0
0
0
z
n
−
y
n
x
n
0
1
0
−
z
n
0
x
n
y
n
0
0
1
y
n
−
x
n
0
z
n
)
A
(4)
\boldsymbol{A}=\left(\begin{array}{ccccccc}1 & 0 & 0 & 0 & z_{1} & -y_{1} & x_{1} \\ 0 & 1 & 0 & -z_{1} & 0 & x_{1} & y_{1} \\ 0 & 0 & 1 & y_{1} & -x_{1} & 0 & z_{1} \\ 1 & 0 & 0 & 0 & z_{2} & -y_{2} & x_{2} \\ 0 & 1 & 0 & -z_{2} & 0 & x_{2} & y_{2} \\ 0 & 0 & 1 & y_{2} & -x_{2} & 0 & z_{2} \\ 1 & 0 & 0 & 0 & z_{n} & -y_{n} & x_{n} \\ 0 & 1 & 0 & -z_{n} & 0 & x_{n} & y_{n} \\ 0 & 0 & 1 & y_{n} & -x_{n} & 0 & z_{n}\end{array}\right)_{A} \tag{4}
A=⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛1001001000100100100010010010−z1y10−z2y20−znynz10−x1z20−x2zn0−xn−y1x10−y2x20−ynxn0x1y1z1x2y2z2xnynzn⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞A(4)
利用最小二乘法对转换参数进行参数估计,可得转换参数
X
X
X 的估值为:
X
=
(
A
T
Q
−
1
A
)
−
1
A
T
Q
B
(5)
\boldsymbol{X}=\left(\boldsymbol{A}^{\mathrm{T}} \boldsymbol{Q}^{-1} \boldsymbol{A}\right)^{-1} \boldsymbol{A}^{\mathrm{T}} \boldsymbol{Q} \boldsymbol{B}\tag{5}
X=(ATQ−1A)−1ATQB(5)
式中:
Q
Q
Q 为B 坐标系下$ n$ 个公共点坐标测量误差的协方差矩阵,则得转换参数方差阵为:
Q
x
=
(
A
T
Q
−
1
A
)
−
1
=
[
q
11
q
12
⋯
q
17
q
21
q
22
⋯
q
27
⋮
q
71
q
72
⋯
q
77
]
(6)
\boldsymbol{Q}_{x}=\left(\boldsymbol{A}^{\mathrm{T}} \boldsymbol{Q}^{-1} \boldsymbol{A}\right)^{-1}=\left[\begin{array}{cccc}q_{11} & q_{12} & \cdots & q_{17} \\ q_{21} & q_{22} & \cdots & q_{27} \\ & & \vdots & \\ q_{71} & q_{72} & \cdots & q_{77}\end{array}\right]\tag{6}
Qx=(ATQ−1A)−1=⎣⎢⎢⎢⎡q11q21q71q12q22q72⋯⋯⋮⋯q17q27q77⎦⎥⎥⎥⎤(6)
对于空间任意一点
P
P
P,其坐标转换误差方差阵为:
Q
P
=
B
P
Q
x
B
P
T
=
[
q
x
x
q
x
y
q
x
z
q
y
x
q
y
y
q
y
z
q
z
x
q
z
y
q
z
z
]
\boldsymbol{Q}_{P}=\boldsymbol{B}_{P} \boldsymbol{Q}_{x} \boldsymbol{B}_{P}^{\mathrm{T}}=\left[\begin{array}{lll}q_{x x} & q_{x y} & q_{x z} \\ q_{y x} & q_{y y} & q_{y z} \\ q_{z x} & q_{z y} & q_{z z}\end{array}\right]
QP=BPQxBPT=⎣⎡qxxqyxqzxqxyqyyqzyqxzqyzqzz⎦⎤
罗德里格矩阵模型
空间直角坐标系转换模型
[
X
Y
Z
]
=
λ
R
[
x
y
z
]
+
[
Δ
X
Δ
Y
Δ
Z
]
(1)
\left[\begin{array}{l}X \\ Y \\ Z\end{array}\right]=\lambda \boldsymbol{R}\left[\begin{array}{l}x \\ y \\ z\end{array}\right]+\left[\begin{array}{l}\Delta X \\ \Delta Y \\ \Delta Z\end{array}\right] \tag{1}
⎣⎡XYZ⎦⎤=λR⎣⎡xyz⎦⎤+⎣⎡ΔXΔYΔZ⎦⎤(1)
λ
\lambda
λ为尺度比例因子,假设其初值是1;
R
R
R 为
3
×
3
3×3
3×3的旋转矩阵;
引入一个具有3个独立元素的反对称矩阵:
S
=
[
0
−
c
−
b
c
0
−
a
b
a
0
]
(2)
S=\left[\begin{array}{rrr}0 & -c & -b \\ c & 0 & -a \\ b & a & 0\end{array}\right] \tag{2}
S=⎣⎡0cb−c0a−b−a0⎦⎤(2)
式中 $ a,b,c$ 相互独立,则罗德里格矩阵可由反对称矩阵构建为:
R
=
(
I
+
S
)
(
I
−
S
)
−
1
(3)
R=(I+S)(I-S)^{-1} \tag{3}
R=(I+S)(I−S)−1(3)
式中
R
R
R是个正交矩阵,其中
I
I
I 是 3 阶单位阵,将旋转矩阵
R
R
R 展开带入式(1)可解得平移矢量:
[
X
i
Y
i
Z
i
]
=
λ
1
+
a
2
+
b
2
+
c
2
[
1
+
a
2
−
b
2
−
c
2
−
2
a
b
−
2
c
−
2
b
+
2
a
c
2
c
−
2
a
b
1
−
a
2
+
b
2
−
c
2
−
2
a
−
2
b
c
2
a
c
+
2
b
2
a
−
2
b
c
1
−
a
2
−
b
2
+
c
2
]
[
x
i
y
i
z
i
]
+
[
Δ
X
Δ
Y
Δ
Z
]
(4)
\left[\begin{array}{c}X_{i} \\ Y_{i} \\ Z_{i}\end{array}\right]=\frac{\lambda}{1+a^{2}+b^{2}+c^{2}}\left[\begin{array}{ccc}1+a^{2}-b^{2}-c^{2} & -2 a b-2 c & -2 b+2 a c \\ 2 c-2 a b & 1-a^{2}+b^{2}-c^{2} & -2 a-2 b c \\ 2 a c+2 b & 2 a-2 b c & 1-a^{2}-b^{2}+c^{2}\end{array}\right]\left[\begin{array}{c}x_{i} \\ y_{i} \\ z_{i}\end{array}\right]+\left[\begin{array}{c}\Delta X \\ \Delta Y \\ \Delta Z\end{array}\right]\tag{4}
⎣⎡XiYiZi⎦⎤=1+a2+b2+c2λ⎣⎡1+a2−b2−c22c−2ab2ac+2b−2ab−2c1−a2+b2−c22a−2bc−2b+2ac−2a−2bc1−a2−b2+c2⎦⎤⎣⎡xiyizi⎦⎤+⎣⎡ΔXΔYΔZ⎦⎤(4)
式(4)中未知参数共有 7 个,即 $λ 、a 、 b 、 c 、 ΔX 、 Δ Y 、 ΔZ $,进行线性化处理得到误差方程:
v
=
A
Δ
x
+
l
(5)
\boldsymbol{v}=\boldsymbol{A} \Delta \boldsymbol{x}+\boldsymbol{l} \tag{5}
v=AΔx+l(5)
对式(5),利用最小二乘法可得到:
Δ
x
=
(
A
T
P
A
)
−
1
(
A
T
P
l
)
(6)
\boldsymbol{\Delta} \boldsymbol{x}=\left(\boldsymbol{A}^{\mathrm{T}} \boldsymbol{P} \boldsymbol{A}\right)^{-1}\left(\boldsymbol{A}^{\mathrm{T}} \boldsymbol{P} \boldsymbol{l}\right) \tag{6}
Δx=(ATPA)−1(ATPl)(6)
式(6)中,
P
P
P位单位矩阵;
A
=
[
∂
X
i
∂
λ
∂
X
i
∂
a
∂
X
i
∂
b
∂
X
i
∂
c
∂
X
i
∂
Δ
X
∂
X
i
∂
Δ
Y
∂
X
i
∂
Δ
Z
∂
Y
i
∂
λ
∂
Y
i
∂
a
∂
Y
i
∂
b
∂
Y
i
∂
c
∂
Y
i
∂
Δ
X
∂
Y
i
∂
Δ
Y
∂
Y
i
∂
Δ
Z
∂
Z
i
∂
λ
∂
Z
i
∂
a
∂
Z
i
∂
b
∂
Z
i
∂
c
∂
Z
i
∂
Δ
X
∂
Z
i
∂
Δ
Y
∂
Z
i
∂
Δ
Z
]
\boldsymbol{A}=\left[\begin{array}{ccccccc}\frac{\partial X_{i}}{\partial \lambda} & \frac{\partial X_{i}}{\partial a} & \frac{\partial X_{i}}{\partial b} & \frac{\partial X_{i}}{\partial c} & \frac{\partial X_{i}}{\partial \Delta X} & \frac{\partial X_{i}}{\partial \Delta Y} & \frac{\partial X_{i}}{\partial \Delta Z} \\ \frac{\partial Y_{i}}{\partial \lambda} & \frac{\partial Y_{i}}{\partial a} & \frac{\partial Y_{i}}{\partial b} & \frac{\partial Y_{i}}{\partial c} & \frac{\partial Y_{i}}{\partial \Delta X} & \frac{\partial Y_{i}}{\partial \Delta Y} & \frac{\partial Y_{i}}{\partial \Delta Z} \\ \frac{\partial Z_{i}}{\partial \lambda} & \frac{\partial Z_{i}}{\partial a} & \frac{\partial Z_{i}}{\partial b} & \frac{\partial Z_{i}}{\partial c} & \frac{\partial Z_{i}}{\partial \Delta X} & \frac{\partial Z_{i}}{\partial \Delta Y} & \frac{\partial Z_{i}}{\partial \Delta Z}\end{array}\right]
A=⎣⎡∂λ∂Xi∂λ∂Yi∂λ∂Zi∂a∂Xi∂a∂Yi∂a∂Zi∂b∂Xi∂b∂Yi∂b∂Zi∂c∂Xi∂c∂Yi∂c∂Zi∂ΔX∂Xi∂ΔX∂Yi∂ΔX∂Zi∂ΔY∂Xi∂ΔY∂Yi∂ΔY∂Zi∂ΔZ∂Xi∂ΔZ∂Yi∂ΔZ∂Zi⎦⎤
Δ x = [ Δ λ Δ a Δ b Δ c Δ X Δ Y Δ Z ] T \Delta \boldsymbol{x}=\left[\begin{array}{llllll}\Delta \lambda & \Delta a & \Delta b & \Delta c & \Delta X & \Delta Y & \Delta Z\end{array}\right]^{\mathrm{T}} Δx=[ΔλΔaΔbΔcΔXΔYΔZ]T
l = [ l 1 l 2 l 3 ] T \boldsymbol{l}=\left[\begin{array}{lll}l_{1} & l_{2} & l_{3}\end{array}\right]^{\mathrm{T}} l=[l1l2l3]T
转换参数求解
参数解算过程可分3步,先求尺度参数,再求旋转参数,最后求平移参数。 尺度参数可由2个公共点在不同坐标系 下的距离之比算出:
λ
=
(
X
2
−
X
1
)
2
+
(
Y
2
−
Y
1
)
2
+
(
Z
2
−
Z
1
)
2
(
x
2
−
x
1
)
2
+
(
y
2
−
y
1
)
2
+
(
z
2
−
z
1
)
2
\lambda=\frac{\sqrt{\left(X_{2}-X_{1}\right)^{2}+\left(Y_{2}-Y_{1}\right)^{2}+\left(Z_{2}-Z_{1}\right)^{2}}}{\sqrt{\left(x_{2}-x_{1}\right)^{2}+\left(y_{2}-y_{1}\right)^{2}+\left(z_{2}-z_{1}\right)^{2}}}
λ=(x2−x1)2+(y2−y1)2+(z2−z1)2(X2−X1)2+(Y2−Y1)2+(Z2−Z1)2
公共点较多时,可求出各点间多个距离比,再取平均值;
在解算旋转参数 $a,b,c $时,可以先消去平移参数,将2个公共点的坐标代入式( 1),分别按照式(1) 做差得:
[
X
2
−
X
1
Y
2
−
Y
1
Z
2
−
Z
1
]
=
λ
R
[
x
2
−
x
1
y
2
−
y
1
z
2
−
z
1
]
\left[\begin{array}{l}X_{2}-X_{1} \\ Y_{2}-Y_{1} \\ Z_{2}-Z_{1}\end{array}\right]=\lambda \boldsymbol{R}\left[\begin{array}{l}x_{2}-x_{1} \\ y_{2}-y_{1} \\ z_{2}-z_{1}\end{array}\right]
⎣⎡X2−X1Y2−Y1Z2−Z1⎦⎤=λR⎣⎡x2−x1y2−y1z2−z1⎦⎤
联系式(2)式(3) 可得:
[
0
λ
z
21
+
Z
21
λ
y
21
+
Y
21
λ
z
21
+
Z
21
0
−
λ
x
21
−
X
21
−
λ
y
21
−
Y
21
−
λ
x
21
−
X
21
0
]
[
a
b
c
]
=
[
λ
x
21
−
X
21
λ
y
21
−
Y
21
λ
z
21
−
Z
21
]
\left[\begin{array}{ccc}0 & \lambda z_{21}+Z_{21} & \lambda y_{21}+Y_{21} \\ \lambda z_{21}+Z_{21} & 0 & -\lambda x_{21}-X_{21} \\ -\lambda y_{21}-Y_{21} & -\lambda x_{21}-X_{21} & 0\end{array}\right]\left[\begin{array}{l}a \\ b \\ c\end{array}\right]=\left[\begin{array}{l}\lambda x_{21}-X_{21} \\ \lambda y_{21}-Y_{21} \\ \lambda z_{21}-Z_{21}\end{array}\right]
⎣⎡0λz21+Z21−λy21−Y21λz21+Z210−λx21−X21λy21+Y21−λx21−X210⎦⎤⎣⎡abc⎦⎤=⎣⎡λx21−X21λy21−Y21λz21−Z21⎦⎤
式中:
x
21
=
x
2
−
x
1
;
y
21
=
y
2
−
y
1
;
z
21
=
z
2
−
z
1
X
21
=
X
2
−
X
1
;
Y
21
=
Y
2
−
Y
1
;
Z
21
=
Z
2
−
Z
1
\begin{array}{l}x_{21}=x_{2}-x_{1} ; y_{21}=y_{2}-y_{1} ; z_{21}=z_{2}-z_{1} \\ X_{21}=X_{2}-X_{1} ; Y_{21}=Y_{2}-Y_{1} ; Z_{21}=Z_{2}-Z_{1}\end{array}
x21=x2−x1;y21=y2−y1;z21=z2−z1X21=X2−X1;Y21=Y2−Y1;Z21=Z2−Z1
这个方程组左边的系数矩阵为奇异阵,3个方程里仅有2个独立,需要至少2个这样的方程组才能解算出a,b,c,也就是至少需要 3 个公共点。 当有n个公共点时,可列出( n-1)个形如上式的方程 ,共有 3(n-1)个方程,其总误差方程为:
V
=
B
3
(
n
−
1
)
×
3
X
3
×
1
−
L
3
(
n
−
1
)
×
3
V=\underset{3(n-1) \times 3}{B} \underset{3 \times 1}{X}-\underset{3(n-1) \times 3}{L}
V=3(n−1)×3B3×1X−3(n−1)×3L
式中:
B
=
[
0
−
λ
z
21
−
Z
21
−
λ
y
21
−
Y
21
−
λ
z
21
−
Z
21
0
λ
x
21
+
X
21
λ
y
21
+
Y
21
λ
x
21
+
X
21
0
⋮
⋮
⋮
0
−
λ
z
n
1
−
Z
n
1
−
λ
y
n
1
−
Y
n
1
−
λ
z
n
1
−
Z
n
1
0
λ
x
n
1
+
X
n
1
λ
y
n
1
+
Y
n
1
λ
x
n
1
+
X
n
1
0
]
B=\left[\begin{array}{ccc}0 & -\lambda z_{21}-Z_{21} & -\lambda y_{21}-Y_{21} \\ -\lambda z_{21}-Z_{21} & 0 & \lambda x_{21}+X_{21} \\ \lambda y_{21}+Y_{21} & \lambda x_{21}+X_{21} & 0 \\ \vdots & \vdots & \vdots \\ 0 & -\lambda z_{n 1}-Z_{n 1} & -\lambda y_{n 1}-Y_{n 1} \\ -\lambda z_{n 1}-Z_{n 1} & 0 & \lambda x_{n 1}+X_{n 1} \\ \lambda y_{n 1}+Y_{n 1} & \lambda x_{n 1}+X_{n 1} & 0\end{array}\right]
B=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡0−λz21−Z21λy21+Y21⋮0−λzn1−Zn1λyn1+Yn1−λz21−Z210λx21+X21⋮−λzn1−Zn10λxn1+Xn1−λy21−Y21λx21+X210⋮−λyn1−Yn1λxn1+Xn10⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
X = [ a , b , c ] T X=[a, b, c]^{\mathrm{T}} X=[a,b,c]T
L = [ X 21 − λ x 21 Y 21 − λ y 21 Z 21 − λ z 21 ⋯ X n 1 − λ x n 1 Y n 1 − λ y n 1 Z n 1 − λ z n 1 ] T \begin{array}{cccc}L= & {\left[X_{21}-\lambda x_{21}\right.} & Y_{21}-\lambda y_{21} & Z_{21}-\lambda z_{21} & \cdots \\ X_{n 1}-\lambda x_{n 1} & Y_{n 1}-\lambda y_{n 1} & \left.Z_{n 1}-\lambda z_{n 1}\right]^{\mathrm{T}}\end{array} L=Xn1−λxn1[X21−λx21Yn1−λyn1Y21−λy21Zn1−λzn1]TZ21−λz21⋯
按最小二乘法间接平差原理求解未知数:
X
=
(
A
T
A
)
−
1
A
T
L
X=\left(A^{\mathrm{T}} A\right)^{-1} A^{\mathrm{T}} L
X=(ATA)−1ATL
计算出 $a,b,c $后,即可求出旋转矩阵,然后按下式求解平移参数:
[
Δ
X
Δ
Y
Δ
Z
]
=
[
X
i
Y
i
Z
i
]
−
λ
R
[
x
i
y
i
z
i
]
\left[\begin{array}{l}\Delta X \\ \Delta Y \\ \Delta Z\end{array}\right]=\left[\begin{array}{l}X_{i} \\ Y_{i} \\ Z_{i}\end{array}\right]-\lambda R\left[\begin{array}{l}x_{i} \\ y_{i} \\ z_{i}\end{array}\right]
⎣⎡ΔXΔYΔZ⎦⎤=⎣⎡XiYiZi⎦⎤−λR⎣⎡xiyizi⎦⎤
尺度相同:
三维重建方法通常会自己估计相机的$R,T 矩 阵 , 这 些 矩 阵 定 义 了 一 个 世 界 坐 标 系 , 在 使 用 客 观 的 评 估 方 法 如 [ M i d d l e b u r y ] 来 评 估 精 度 时 , 需 要 使 用 评 估 方 法 提 供 的 相 机 的 矩阵,这些矩阵定义了一个世界坐标系,在使用客观的评估方法如[Middlebury]来评估精度时,需要使用评估方法提供的相机的 矩阵,这些矩阵定义了一个世界坐标系,在使用客观的评估方法如[Middlebury]来评估精度时,需要使用评估方法提供的相机的R,T$矩阵,这些矩阵定义了另外一个世界坐标系,两者通常会有尺度、旋转、平移的差别,这就需要在坐标系之间进行转换。
两个相同尺度的世界坐标系可以通过 R , T R,T R,T进行转换,计算转换关系需要知道双方 N N N个对应点的坐标,设为 A A A, B B B,则求解 B = R ∗ A + T B=R∗A+T B=R∗A+T即可。由于 N N N可能比较大,因此此方程通常为超定方程,可使用奇异值分解(Singular Value Decomposition (SVD))进行计算,其内部原理是最小二乘法。
对公共点坐标进行重心化处理:
c
e
n
t
r
o
i
d
A
=
1
N
∑
i
=
1
N
(
A
)
centroid_A =\frac{1}{N} ∑^N_{i=1}(A)
centroidA=N1i=1∑N(A)
c e n t r o i d B = 1 N ∑ i = 1 N ( B ) centroid_B =\frac{1}{N} ∑^N_{i=1}(B) centroidB=N1i=1∑N(B)
求:
H
=
∑
i
=
1
N
(
P
A
i
−
c
e
n
t
r
o
i
d
A
)
(
P
B
i
−
c
e
n
t
r
o
i
d
B
)
T
H=∑^N_{i=1}(P^{i}_{A}−centroid_A)(P^i_B−centroid_B)^T
H=i=1∑N(PAi−centroidA)(PBi−centroidB)T
[ U , S , V ] = S V D ( H ) [U,S,V]=SVD(H) [U,S,V]=SVD(H)
R = V U T R=V U^T R=VUT
T = − R ∗ c e n t r o i d A + c e n t r o i d B T=−R∗centroid_A+centroid_B T=−R∗centroidA+centroidB
其中 c e n t r o i d A centroid_A centroidA和 c e n t r o i d B centroid_B centroidB是 A , B A,B A,B的平均中心。
%计算平均中心点
centroid_A = mean(A);
centroid_B = mean(B);
N = size(A,1);
H = (A - repmat(centroid_A, N, 1))' * (B - repmat(centroid_B, N, 1));
[U,S,V] = svd(H);
R = V*U';
if det(R) < 0
printf('Reflection detected\n');
V(:,3) = -1*V(:,3);
R = V*U';
end
t = -R*centroid_A' + centroid_B';
detr=det(R)
存在的一些问题:
转换模型精度与公共控制点的数量的关系值得探讨;目前坐标转换精度的评价方式通常是利用转站前后公共点坐标差值的均方根值来进行评价。该方法只能获得用于计算的公共点坐标转换精度,并不能得到空间中任意被测点的转换精度分布情况,对于提高整体测量精度以及改进公共点布设方案缺乏指导意义。
主要参考来源:
[1]. 刘猛奎, 赵明金, 石波, 等. 基于 RANSAC 的坐标系转换抗差算法研究[J]. 全球定位系统, 2019, 44(1): 39-47.
[2].韩梦泽, 李克昭. 基于罗德里格矩阵的空间坐标转换[J]. 测绘工程, 2016 (4): 25-27.
[3].张皓琳, 林嘉睿, 邾继贵. 三维坐标转换精度及其影响因素的研究[J]. 光电工程, 2012, 39(10): 26-31.
[4].https://proj.org/operations/transformations/index.html;