2022-10-10 更新
个人感想
homography 适用的第一种情况,H 矩阵的组成有R,t,K等信息,很有感觉。
但是适用的第三种情况,H 矩阵直接就用矩阵的 9 个元素来表示,没什么感觉。
更新前的原文推导的公式是第一种情况的公式
homography 的相关说明
Projective Transformations aka Homographies aka Planar Perspective Maps
就是 这三个词是同义词。
注意,可以通过一个 homography 变换将一个二维平面变换到另外一个二维平面,就是两个平面局部坐标系的坐标存在一个变换。
在下面3种情况中,两个相机的像素点之间可以用一个 homography 矩阵进行转换:
- 两个相机看到的 3d 点在一个平面上。
- 两个相机没有平移只有旋转。
- 作者感觉就是 central projection 的例子,如2022-10-10更新的图10-10-4所示。
注意,homography矩阵刻画的是一种坐标之间的对应关系。
本文推导关于两个 像素坐标系下的 以及 在两个 相机坐标系下的 归一化 成像平面的对应点之间的 homography 矩阵。
Devices for Virtual Walkthroughs page25
首先在,3d场景下,有一个在 平面上的 3d 点 Q Q Q, 它在相机坐标系 C C C, C ′ C^{'} C′ 下的 3d 坐标分别是 Q 1 Q_1 Q1, Q 2 Q_{2} Q2。已知,两个相机坐标系的关系如下:
Q 2 = R Q 1 + t (1) Q_{2}= RQ_{1}+t \tag{1} Q2=RQ1+t(1)
其中
R
R
R,
t
t
t 分别为 从相机坐标系
C
C
C 转换到
C
′
C'
C′ 的
3
×
3
3\times3
3×3,
3
×
1
3\times1
3×1 的旋转矩阵和平移向量。
又由 图1 所示,
3
×
1
3\times1
3×1 向量
n
n
n 是平面的一个单位法向量,而且它指向相机 C 光心的那侧(因为一个平面的法向量有两个方向,本文故指定其方向)。故
d
=
−
n
T
Q
1
(2)
d=-n^{T}Q_{1}\tag{2}
d=−nTQ1(2)
其中
d
d
d 是三维场景中相机 C 的光心到平面 的距离。
Q
1
Q_{1}
Q1 代表由相机 C 的光心指向 三维点
Q
1
Q_{1}
Q1的向量。
对式(2)等式两边同除以
d
d
d,得
1
=
−
n
T
Q
1
d
(3)
1 = -\frac{n^{T}Q_{1}}{d} \tag{3}
1=−dnTQ1(3)
根据 式(1)、(2),得
Q
2
=
R
Q
1
−
t
n
T
Q
1
d
Q_{2} = RQ_{1}-t\frac{n^{T}Q_{1}}{d}
Q2=RQ1−tdnTQ1
可化为
Q
2
=
(
R
−
t
n
T
d
)
Q
1
(4)
Q_{2} = (R-t\frac{n^{T}}{d})Q_{1}\tag{4}
Q2=(R−tdnT)Q1(4)
注意,提取公共矩阵
Q
Q
Q 在原来项中都处于右侧,故提出去后必须放在括号右边,矩阵乘法无交换律。
另一方面,根据相机坐标系的点投影到像素平面,有
s
1
q
1
=
K
1
Q
1
(5)
s_{1}q_{1}=K_{1}Q_{1} \tag{5}
s1q1=K1Q1(5)
s
2
q
2
=
K
2
Q
2
(6)
s_{2}q_{2}=K_{2}Q_{2} \tag{6}
s2q2=K2Q2(6)
其中,
q
1
q_{1}
q1,
q
2
q_{2}
q2 分别是
Q
1
Q_{1}
Q1,
Q
2
Q_{2}
Q2 在各自像素平面上的像素点,
K
1
K_{1}
K1,
K
2
K_{2}
K2 分别为各自的
3
×
3
3\times3
3×3 相机内参矩阵。
进而,将式(4)带入(6),得
s
2
q
2
=
K
2
(
R
−
t
n
T
d
)
Q
1
(7)
s_{2}q_{2}=K_{2}(R-t\frac{n^{T}}{d})Q_{1} \tag{7}
s2q2=K2(R−tdnT)Q1(7)
根据 式(5)(7),得
s
2
q
2
=
s
1
K
2
(
R
−
t
n
T
d
)
K
1
−
1
q
1
s_{2}q_{2}= s_{1}K_{2}(R-t\frac{n^{T}}{d})K_{1}^{-1}q_{1}
s2q2=s1K2(R−tdnT)K1−1q1
可化为
q
2
=
s
K
2
(
R
−
t
n
T
d
)
K
1
−
1
q
1
(8)
q_{2}= sK_{2}(R-t\frac{n^{T}}{d})K_{1}^{-1}q_{1} \tag{8}
q2=sK2(R−tdnT)K1−1q1(8)
其中
s
=
s
1
s
2
s = \frac{s_{1}}{s_{2}}
s=s2s1
故从一个像素平面到另一个像素平面的 homography 矩阵
H
=
K
2
(
R
−
t
n
T
d
)
K
1
−
1
(9)
H = K_{2}(R-t\frac{n^{T}}{d})K_{1}^{-1} \tag{9}
H=K2(R−tdnT)K1−1(9)
又 Q 1 ˉ = K 1 − 1 q 1 (10) \bar{Q_{1}} = K_{1}^{-1}q_{1} \tag{10} Q1ˉ=K1−1q1(10) Q ˉ 2 = K 2 − 1 q 2 (11) \bar{Q}_{2} = K_{2}^{-1}q_{2}\tag{11} Qˉ2=K2−1q2(11)
其中
Q
1
ˉ
\bar{Q_{1}}
Q1ˉ,
Q
ˉ
2
\bar{Q}_{2}
Qˉ2 分别为各自相机坐标系下 normalized相机平面上的 3d 点。
故由式(8)(10)(11),得 各自相机坐标系下 归一化平面上的 homography 矩阵
H
ˉ
=
R
−
t
n
T
d
\bar{H} = R-t\frac{n^{T}}{d}
Hˉ=R−tdnT
应用
- 得到一张图像在另外的视角下面的图像。比如想得到道路的俯视图,但是没有俯视图,可以从其他视角的图像通过homography矩阵得到。
- 求得 H,K,解算R,t。
参考资料
Pinhole Camera: Homography
Visual Odometry on Mobile Devices for Virtual Walkthroughs
wiki:homography