如果已知如下这种sim3相似变换矩阵,如何求解出R, s, t ?
[
0.237345
0.0486276
−
0.366644
−
0.135602
0.0486276
0.0460356
−
0.0878448
−
0.0324891
−
0.366644
−
0.0878448
0.696721
0.244963
0
0
0
1
]
\begin{bmatrix} 0.237345 &0.0486276 & -0.366644 &-0.135602\\ 0.0486276 & 0.0460356 &-0.0878448 &-0.0324891\\ -0.366644& -0.0878448 & 0.696721 & 0.244963\\ 0 &0 & 0 & 1 \end{bmatrix}
⎣⎢⎢⎡0.2373450.0486276−0.36664400.04862760.0460356−0.08784480−0.366644−0.08784480.6967210−0.135602−0.03248910.2449631⎦⎥⎥⎤
首先我们知道sim3变换的矩阵具有形式如下:
s
i
m
3
=
[
s
R
3
×
3
t
3
×
1
0
1
]
4
×
4
(0)
sim3= \begin{bmatrix} sR_{3 \times 3} & t_{3 \times 1} \\ 0 & 1 \end{bmatrix}_{4 \times 4} \tag0
sim3=[sR3×30t3×11]4×4(0)
相似变换矩阵只是在旋转矩阵前面乘了一个常数 s s s
要从一个 4 × 4 4 \times 4 4×4的相似变换矩阵中分离 t t t很容易,直接取出矩阵对应位置的值即可。
但是要分离 s , R s,R s,R需要做一些非常简单的矩阵运算:
首先令,
A
=
s
R
3
×
3
(1)
A = sR_{3 \times 3} \tag 1
A=sR3×3(1)然后求
A
A
A的行列式的值
a
=
d
e
t
(
A
)
(2)
a = det(A) \tag 2
a=det(A)(2)
根据矩阵的性质知道
a
=
s
×
s
×
s
×
d
e
t
(
R
)
(3)
a = s \times s \times s \times det(R) \tag3
a=s×s×s×det(R)(3)
因为旋转矩阵有一个性质,它的行列式为1,所以
s = a 1 3 (4) s = a^{\frac{1}{3}} \tag4 s=a31(4)
那么将矩阵 A A A除以 s s s就能得到没有尺度的旋转矩阵
R = 1 s A (5) R = \frac{1}{s} A \tag5 R=s1A(5)