赞
踩
世界坐标系坐标(下标为w)左乘RT矩阵,变换到相机坐标系(下标为c)下
[
R
T
0
1
]
[
X
w
Y
w
0
1
]
=
[
X
c
Y
c
Z
c
1
]
(
1
)
[
r
11
r
12
r
13
t
1
r
21
r
22
r
23
t
2
r
31
r
32
r
33
t
3
0
0
0
1
]
[
X
w
Y
w
0
1
]
=
[
X
c
Y
c
Z
c
1
]
(
2
)
上式左右两边可以写为:
r 11 X w + r 12 Y w + t 1 = λ u − c x f x r 21 X w + r 22 Y w + t 2 = λ v − c y f y ( 3 ) r 31 X w + r 32 Y w + t 3 = λ r_{11}X_{w}+r_{12}Y_{w}+t_{1}=\lambda\frac{u-c_{x}}{f_{x}}\\r_{21}X_{w}+r_{22}Y_{w}+t_{2}=\lambda\frac{v-c_{y}} {f_{y}} (3)\\r_{31}X_{w}+r_{32}Y_{w}+t_{3}=\lambda r11Xw+r12Yw+t1=λfxu−cxr21Xw+r22Yw+t2=λfyv−cy(3)r31Xw+r32Yw+t3=λ
其中,等式右边等价为像素坐标uv左乘相机内参的结果,Lambda为scaling factor.
[
X
c
Y
c
Z
c
1
]
=
λ
M
−
1
[
u
v
1
]
=
[
λ
u
−
c
x
f
x
λ
v
−
c
y
f
y
λ
]
(
4
)
式(3)可以写为:
r 11 X w + r 12 Y w − λ u − c x f x = − t 1 r 21 X w + r 22 Y w − λ v − c y f y = − t 2 r 31 X w + r 32 Y w − λ = − t 3 r_{11}X_{w}+r_{12}Y_{w}-\lambda\frac{u-c_{x}}{f_x}=-t_{1}\\r_{21}X_{w}+r_{22}Y_{w}-\lambda\frac{v-c_{y}}{f_{y}}=-t_2\\r_{31}X_{w}+r_{32}Y_{w}-\lambda=-t_3 r11Xw+r12Yw−λfxu−cx=−t1r21Xw+r22Yw−λfyv−cy=−t2r31Xw+r32Yw−λ=−t3
于是,上式等价为AX=b, 解出X后,取X(3)即为 λ \lambda λ, 带入式(4),即可求得 X c , Y c , Z c X_c,Y_c,Z_c Xc,Yc,Zc
Eigen::Vector3d featureMap2d_3d(cv::Point2d p, cv::Mat camK, Eigen::Matrix3d R, Eigen::Vector3d t) { double fx = camK.at<double>(0, 0); double fy = camK.at<double>(1, 1); double cx = camK.at<double>(0, 2); double cy = camK.at<double>(1, 2); //归一化平面z=1 Eigen::Vector3d P_normal((p.x - cx) / fx, (p.y - cy) / fy, 1.); Eigen::Matrix3d A = R; A.block(0, 2, 3, 1) = -P_normal; Eigen::Vector3d b = -t; Eigen::Vector3d x = A.colPivHouseholderQr().solve(b); //x.z()为lambda系数 Eigen::Vector3d Pc = x.z() * P_normal; return Pc; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。