概述
摘要
matlab把点坐标看作行向量,而《视觉SLAM十四讲》(以下简称《十四讲》)把点坐标看作列向量,因此它们把世界坐标系下的点投影到像素坐标系下时,使用的公式有所不同。这导致使用matlab标定得到相机的内外参矩阵,与高翔《视觉SLAM十四讲》所说的内外参矩阵格式不一致。要想得到正确的参数,还需要弄清楚matlab内外参矩阵的数据格式。
结论
先给出结论,简单来说以标定板左上角作为世界坐标系原点,uv方向作为世界坐标系的XY轴,有一下结论:
- matlab标定得到的相机内参矩阵(IntrinsicMatrix, K m a t l a b K_{matlab} Kmatlab),对应的是《十四讲》中的 K T K^T KT;
- matlab标定得到的旋转矩阵(RotationMatrices , R m a t l a b R_{matlab} Rmatlab),对应的是《十四讲》中的 R w c ( 3 × 3 ) R_{wc(3times 3)} Rwc(3×3);
- matlab标定得到的平移向量(TranslationVectors, t m a t l a b t_{matlab} tmatlab),对应的是《十四讲》中的 t c w ( 1 × 3 ) T t_{cw(1times 3)}^T tcw(1×3)T。
内容
约定: 以标定板左上角作为世界坐标系原点,uv方向作为世界坐标系的XY轴。下标 c c c 表示camera(相机)坐标系, 下标 w w w 表示world(世界)坐标系,例如: T c w ( 3 × 4 ) T_{cw(3times 4)} Tcw(3×4) 表示在这个矩阵右边乘以world世界坐标系下的点,会得到camera相机坐标系下的点。
《十四讲》:《十四讲》里把点坐标看作列向量,其将世界坐标系下的点
[
X
Y
Z
1
]
begin{bmatrix} X \ Y \ Z \ 1 end{bmatrix}
⎣⎢⎢⎡XYZ1⎦⎥⎥⎤,投影到像素坐标系下的点
[
u
v
1
]
begin{bmatrix} u \ v \ 1 end{bmatrix}
⎣⎡uv1⎦⎤的公式如下 :
s
[
u
v
1
]
=
K
T
c
w
(
3
×
4
)
[
X
Y
Z
1
]
=
K
[
R
c
w
(
3
×
3
)
t
c
w
(
3
×
1
)
]
[
X
Y
Z
1
]
begin{aligned} sbegin{bmatrix} u \ v \ 1 end{bmatrix} &=KT_{cw(3times 4)}begin{bmatrix} X \ Y \ Z \ 1 end{bmatrix} =Kbegin{bmatrix} R_{cw(3times 3)} & t_{cw(3times 1)} end{bmatrix}begin{bmatrix} X \ Y \ Z \ 1 end{bmatrix} end{aligned}
s⎣⎡uv1⎦⎤=KTcw(3×4)⎣⎢⎢⎡XYZ1⎦⎥⎥⎤=K[Rcw(3×3)tcw(3×1)]⎣⎢⎢⎡XYZ1⎦⎥⎥⎤
matlab: matlab把点坐标看作行向量,其将世界坐标系下的点
[
X
Y
Z
1
]
begin{bmatrix} X & Y & Z & 1 end{bmatrix}
[XYZ1],投影到像素坐标系下的点
[
u
v
1
]
begin{bmatrix} u & v & 1 end{bmatrix}
[uv1]的公式如下 :
s
[
u
v
1
]
=
[
X
Y
Z
1
]
T
c
w
(
4
×
3
)
T
K
T
=
[
X
Y
Z
1
]
[
R
c
w
(
3
×
3
)
T
t
c
w
(
1
×
3
)
T
]
K
T
=
[
X
Y
Z
1
]
[
R
w
c
(
3
×
3
)
t
c
w
(
1
×
3
)
T
]
K
T
begin{aligned} sbegin{bmatrix} u & v & 1 end{bmatrix} &= begin{bmatrix} X & Y & Z & 1 end{bmatrix}T_{cw(4times 3)}^T K^T \ &= begin{bmatrix} X & Y & Z & 1 end{bmatrix}begin{bmatrix} R_{cw(3times 3)}^T \ t_{cw(1times 3)}^T end{bmatrix}K^T \ &= begin{bmatrix} X & Y & Z & 1 end{bmatrix}begin{bmatrix} R_{wc(3times 3)} \ t_{cw(1times 3)}^T end{bmatrix}K^T end{aligned}
s[uv1]=[XYZ1]Tcw(4×3)TKT=[XYZ1][Rcw(3×3)Ttcw(1×3)T]KT=[XYZ1][Rwc(3×3)tcw(1×3)T]KT
Note: 旋转矩阵R为正交矩阵,而对于正交矩阵有该性质: R R T = R R − 1 = E RR^T=RR^{-1}=E RRT=RR−1=E,即旋转矩阵的转置就是它的逆矩阵 R T = R − 1 R^T=R^{-1} RT=R−1。
综上可知,以标定板左上角作为世界坐标系原点,uv方向作为世界坐标系的XY轴,有一下结论,有如下结论成立:
- matlab标定得到的相机内参矩阵(IntrinsicMatrix, K m a t l a b K_{matlab} Kmatlab),对应的是《十四讲》中的 K T K^T KT;
- matlab标定得到的旋转矩阵(RotationMatrices , R m a t l a b R_{matlab} Rmatlab),对应的是《十四讲》中的 R w c ( 3 × 3 ) R_{wc(3times 3)} Rwc(3×3);
- matlab标定得到的平移向量(TranslationVectors, t m a t l a b t_{matlab} tmatlab),对应的是《十四讲》中的 t c w ( 1 × 3 ) T t_{cw(1times 3)}^T tcw(1×3)T。
相关/参考链接
matlab帮助:cameraParameters
最后
以上就是复杂香菇为你收集整理的matlab相机标定工具(camera calibrator)内外参矩阵数据格式摘要结论内容的全部内容,希望文章能够帮你解决matlab相机标定工具(camera calibrator)内外参矩阵数据格式摘要结论内容所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复