1. 实物与图片坐标之间的转换
示例:用图像引导机器人的针头插入
任务:根据器官的透视投影图像进行多根针插入
真实世界坐标中的目标物体被摄像头捕捉到,并在图片坐标中存储为图片。(假设所有目标物都在同一平面)机器人以此为判断依据,把针头插入目标物。
1.1 校准
Calibration
校准,是识别转换参数的过程
图片:
[
x
y
]
\begin{bmatrix} x \\ y \end{bmatrix}
[xy]
物体:
[
X
Y
]
\begin{bmatrix} X \\ Y \end{bmatrix}
[XY]
[
x
y
]
=
P
R
T
[
X
Y
]
\begin{bmatrix} x \\ y \end{bmatrix}=PRT \begin{bmatrix} X \\ Y \end{bmatrix}
[xy]=PRT[XY]
T: translation
平移 R: rotation
旋转 P:perspective projection
透视投影
T
(
−
w
)
:
[
X
Y
]
+
[
−
v
x
−
v
y
]
=
[
X
′
Y
′
]
T(-w):\begin{bmatrix} X \\ Y \end{bmatrix}+ \begin{bmatrix} -v_x \\ -v_y \end{bmatrix}= \begin{bmatrix} X' \\ Y' \end{bmatrix}
T(−w):[XY]+[−vx−vy]=[X′Y′]
R
(
−
α
)
:
[
c
o
s
α
−
s
i
n
α
s
i
n
α
c
o
s
α
]
[
X
′
Y
′
]
=
[
X
′
′
Y
′
′
]
R(-\alpha):\begin{bmatrix} cos\alpha & -sin\alpha\\ sin\alpha & cos\alpha \end{bmatrix} \begin{bmatrix} X' \\ Y' \end{bmatrix} =\begin{bmatrix} X'' \\ Y'' \end{bmatrix}
R(−α):[cosαsinα−sinαcosα][X′Y′]=[X′′Y′′]
P
:
−
β
[
X
′
′
Y
′
′
]
=
[
x
y
]
P: -\beta\begin{bmatrix} X'' \\ Y'' \end{bmatrix}=\begin{bmatrix} x \\ y \end{bmatrix}
P:−β[X′′Y′′]=[xy]
T
:
[
x
y
]
=
[
a
11
a
12
a
13
a
21
a
22
a
23
]
[
X
Y
1
]
T:\begin{bmatrix} x \\ y \end{bmatrix}= \begin{bmatrix} a_{11}&a_{12}&a_{13} \\ a_{21}&a_{22}&a_{23} \end{bmatrix} \begin{bmatrix} X \\ Y \\ 1 \end{bmatrix}
T:[xy]=[a11a21a12a22a13a23]⎣⎡XY1⎦⎤
a
i
j
:
a_{ij}:
aij:transformation parameters
转换参数
[
x
y
]
=
[
a
11
a
12
a
13
a
21
a
22
a
23
]
[
X
Y
1
]
=
[
X
Y
1
0
0
0
0
0
0
X
Y
1
]
[
a
11
a
12
a
13
a
21
a
22
a
23
]
\begin{bmatrix} x \\ y \end{bmatrix}= \begin{bmatrix} a_{11}&a_{12}&a_{13} \\ a_{21}&a_{22}&a_{23} \end{bmatrix} \begin{bmatrix} X \\ Y \\ 1 \end{bmatrix}= \begin{bmatrix} X&Y&1&0&0&0 \\ 0&0&0&X&Y&1 \end{bmatrix} \begin{bmatrix} a_{11} \\ a_{12} \\ a_{13} \\ a_{21}\\a_{22}\\a_{23} \end{bmatrix}
[xy]=[a11a21a12a22a13a23]⎣⎡XY1⎦⎤=[X0Y0100X0Y01]⎣⎢⎢⎢⎢⎢⎢⎡a11a12a13a21a22a23⎦⎥⎥⎥⎥⎥⎥⎤
[
x
1
y
1
x
2
y
2
x
N
y
N
]
=
[
X
1
Y
1
1
0
0
0
0
0
0
X
1
Y
1
1
X
2
Y
2
1
0
0
0
0
0
0
X
2
Y
2
1
X
N
Y
N
1
0
0
0
0
0
0
X
N
Y
N
1
]
[
a
11
a
12
a
13
a
21
a
22
a
23
]
\begin{bmatrix} x_1 \\ y_1 \\ x_2 \\ y_2 \\ \\ x_N\\y_N\end{bmatrix}=\begin{bmatrix} X_1&Y_1&1&0&0&0 \\ 0&0&0&X_1&Y_1&1 \\ X_2&Y_2&1&0&0&0\\0&0&0&X_2&Y_2&1\\\\X_N&Y_N&1&0&0&0\\0&0&0&X_N&Y_N&1 \end{bmatrix} \begin{bmatrix} a_{11} \\ a_{12} \\ a_{13} \\ a_{21}\\a_{22}\\a_{23} \end{bmatrix}
⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡x1y1x2y2xNyN⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡X10X20XN0Y10Y20YN01010100X10X20XN0Y10Y20YN010101⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎡a11a12a13a21a22a23⎦⎥⎥⎥⎥⎥⎥⎤
a
=
(
X
T
X
)
−
1
X
T
x
a=(X^TX)^{-1}X^Tx
a=(XTX)−1XTx是最小误差
∣
∣
x
−
X
a
∣
∣
2
||x-Xa||^2
∣∣x−Xa∣∣2的解(最小二乘逼近)。
(最小二乘逼近的详细推导在supply中)
假设我们做了一系列的实验,期望输出
y
y
y被一个关于
t
t
t的线性函数近似,
y
=
C
+
D
t
y=C+Dt
y=C+Dt;
y
1
=
C
+
D
t
1
y
2
=
C
+
D
t
2
.
.
.
y
N
=
C
+
D
t
N
→
[
x
1
y
1
.
.
.
y
N
]
=
[
1
t
1
1
t
2
.
.
.
1
t
N
]
[
C
D
]
→
b
=
A
x
\begin{matrix} y_1=C+Dt_1 \\ y_2=C+Dt_2\\...\\y_N=C+Dt_N \end{matrix}\rightarrow \begin{bmatrix} x_1 \\ y_1 \\ ... \\ y_N\end{bmatrix}= \begin{bmatrix} 1&t_1 \\ 1&t_2 \\ ... \\ 1&t_N \end{bmatrix}\begin{bmatrix} C \\ D \end{bmatrix} \rightarrow b=Ax
y1=C+Dt1y2=C+Dt2...yN=C+DtN→⎣⎢⎢⎡x1y1...yN⎦⎥⎥⎤=⎣⎢⎢⎡11...1t1t2tN⎦⎥⎥⎤[CD]→b=Ax
A
T
A
x
=
A
T
b
→
A
T
A
[
C
ˉ
D
ˉ
]
=
A
T
b
→
[
C
ˉ
D
ˉ
]
=
(
A
T
A
)
−
1
A
T
b
→
[
C
ˉ
D
ˉ
]
=
[
N
∑
t
i
∑
t
i
∑
t
i
2
]
−
1
[
∑
y
i
∑
t
i
y
i
]
A^TAx=A^Tb\rightarrow A^TA\begin{bmatrix} \bar{C} \\ \bar{D} \end{bmatrix}=A^Tb\rightarrow \begin{bmatrix} \bar{C} \\ \bar{D} \end{bmatrix}=(A^TA)^{-1}A^Tb\rightarrow \begin{bmatrix} \bar{C} \\ \bar{D} \end{bmatrix}=\begin{bmatrix} N&\sum t_i \\ \sum t_i & \sum t_i^2\end{bmatrix}^{-1} \begin{bmatrix} \sum y_i\\ \sum t_iy_i \end{bmatrix}
ATAx=ATb→ATA[CˉDˉ]=ATb→[CˉDˉ]=(ATA)−1ATb→[CˉDˉ]=[N∑ti∑ti∑ti2]−1[∑yi∑tiyi]
2. 齐次坐标
Homogeneous coordinates
齐次坐标,齐次向量对应于一条经过原点的直线。
[
x
y
z
]
↔
[
k
x
k
y
k
z
1
]
,
k
≠
0
\begin{bmatrix} x \\ y \\ z \end{bmatrix} \leftrightarrow \begin{bmatrix} kx \\ ky \\ kz\\1 \end{bmatrix},k\neq0
⎣⎡xyz⎦⎤↔⎣⎢⎢⎡kxkykz1⎦⎥⎥⎤,k=0
齐次坐标的优势:平移和透视变换可以用矩阵形式表示,连续几何变换可以表示为具有矩阵乘法的一系列矩阵。
图像点:
u
i
=
[
x
i
y
i
]
→
u
^
i
=
[
k
x
i
k
y
i
k
]
u_i=\begin{bmatrix} x_i \\ y_i \end{bmatrix} \rightarrow \hat u_i=\begin{bmatrix} kx_i \\ ky_i \\ k \end{bmatrix}
ui=[xiyi]→u^i=⎣⎡kxikyik⎦⎤
实物点:
X
0
=
[
x
0
y
0
z
0
]
→
X
^
0
=
[
k
x
0
k
y
0
k
z
0
k
]
X_0=\begin{bmatrix} x_0 \\ y_0 \\ z_0 \end{bmatrix} \rightarrow \hat X_0=\begin{bmatrix} kx_0 \\ ky_0 \\ kz_0 \\ k \end{bmatrix}
X0=⎣⎡x0y0z0⎦⎤→X^0=⎣⎢⎢⎡kx0ky0kz0k⎦⎥⎥⎤
在齐次坐标的平移:
[
x
y
z
1
]
n
e
w
=
[
1
0
0
t
x
0
1
0
t
y
0
0
0
1
]
[
x
y
z
1
]
\begin{bmatrix} x \\ y \\ z\\1 \end{bmatrix}_{new}= \begin{bmatrix} 1&0&0&t_x \\ 0&1&0&t_y \\ 0&0&0&1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}
⎣⎢⎢⎡xyz1⎦⎥⎥⎤new=⎣⎡100010000txty1⎦⎤⎣⎢⎢⎡xyz1⎦⎥⎥⎤
T
−
1
=
[
1
0
0
−
t
x
0
1
0
−
t
y
0
0
1
−
t
z
0
0
0
1
]
T^{-1}=\begin{bmatrix} 1&0&0&-t_x \\ 0&1&0&-t_y \\ 0&0&1&-t_z\\0&0&0&1 \end{bmatrix}
T−1=⎣⎢⎢⎡100001000010−tx−ty−tz1⎦⎥⎥⎤
缩放:
S
=
[
S
x
0
0
0
0
S
y
0
0
0
0
S
z
0
0
0
0
1
]
S=\begin{bmatrix} S_x&0&0&0 \\ 0&S_y&0&0 \\ 0&0&S_z&0\\0&0&0&1 \end{bmatrix}
S=⎣⎢⎢⎡Sx0000Sy0000Sz00001⎦⎥⎥⎤
旋转:
R
z
,
θ
=
[
c
o
s
θ
s
i
n
θ
0
0
−
s
i
n
θ
c
o
s
θ
0
0
0
0
1
0
0
0
0
1
]
R
x
,
α
=
[
1
0
0
0
0
c
o
s
α
s
i
n
α
0
0
−
s
i
n
α
c
o
s
α
0
0
0
0
1
]
R
y
,
β
=
[
c
o
s
β
0
−
s
i
n
β
0
0
1
0
0
s
i
n
β
0
c
o
s
β
0
0
0
0
1
]
R_{z,\theta}=\begin{bmatrix} cos\theta & sin\theta & 0 & 0 \\ -sin\theta & cos\theta & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} R_{x,\alpha}=\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & cos\alpha & sin\alpha & 0 \\ 0 & -sin\alpha & cos\alpha & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} R_{y,\beta}=\begin{bmatrix} cos\beta &0 & -sin\beta & 0 \\ 0 & 1 & 0 & 0 \\ sin\beta & 0 & cos\beta & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}
Rz,θ=⎣⎢⎢⎡cosθ−sinθ00sinθcosθ0000100001⎦⎥⎥⎤Rx,α=⎣⎢⎢⎡10000cosα−sinα00sinαcosα00001⎦⎥⎥⎤Ry,β=⎣⎢⎢⎡cosβ0sinβ00100−sinβ0cosβ00001⎦⎥⎥⎤
复合变换:
A
=
R
z
,
θ
S
T
→
P
′
=
A
P
A=R_{z,\theta}ST \rightarrow P'=AP
A=Rz,θST→P′=AP
透视投影:从平面上的一点到三维空间的反透视变换对应于一条直线,即一个齐次向量。
Z
>
>
f
Z>>f
Z>>f
相似三角形:
x
f
=
−
X
Z
−
f
=
X
f
−
Z
\frac{x}{f}=-\frac{X}{Z-f}=\frac{X}{f-Z}
fx=−Z−fX=f−ZX
y
f
=
−
Y
Z
−
f
=
Y
f
−
Z
\frac{y}{f}=-\frac{Y}{Z-f}=\frac{Y}{f-Z}
fy=−Z−fY=f−ZY
矩阵形式的透视投影:
c
h
=
P
w
h
=
[
1
0
0
0
0
1
0
0
0
0
1
0
0
0
−
1
f
1
]
[
k
X
k
Y
k
Z
k
]
=
[
k
X
k
Y
k
Z
−
k
Z
f
+
k
]
c_h=Pw_h=\begin{bmatrix} 1 &0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & -\frac{1}{f} & 1 \end{bmatrix}\begin{bmatrix} kX \\ kY \\ kZ \\ k \end{bmatrix}= \begin{bmatrix} kX \\ kY \\ kZ \\ -\frac{kZ}{f}+k \end{bmatrix}
ch=Pwh=⎣⎢⎢⎡10000100001−f10001⎦⎥⎥⎤⎣⎢⎢⎡kXkYkZk⎦⎥⎥⎤=⎣⎢⎢⎡kXkYkZ−fkZ+k⎦⎥⎥⎤
图像点的笛卡尔坐标:
c
=
[
x
y
z
]
=
[
f
X
f
−
Z
f
Y
f
−
Z
f
Z
f
−
Z
]
c= \begin{bmatrix} x \\ y \\ z \\ \end{bmatrix}= \begin{bmatrix} \frac{fX}{f-Z} \\ \frac{fY}{f-Z} \\ \frac{fZ}{f-Z} \end{bmatrix}
c=⎣⎡xyz⎦⎤=⎣⎢⎡f−ZfXf−ZfYf−ZfZ⎦⎥⎤
反透视变换映射图像点回到三维:
W
h
=
P
−
1
C
h
W_h=P^{-1}C_h
Wh=P−1Ch
P
−
1
=
[
1
0
0
0
0
1
0
0
0
0
1
0
0
0
−
1
f
1
]
P^{-1}=\begin{bmatrix} 1 &0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & -\frac{1}{f} & 1 \end{bmatrix}
P−1=⎣⎢⎢⎡10000100001−f10001⎦⎥⎥⎤
3. Camera Model and Calibration
Camera Model
:
实际中,摄像机和世界系统不一致,安装在gimbal
万向架上的摄像机可以调整
x
x
x轴和
X
X
X轴之间的角度和
z
z
z轴和
Z
Z
Z轴之间的角度。
1.从世界坐标原点到万向节中心的平移
2.
x
x
x轴平移(绕
z
z
z轴旋转一个角度
θ
\theta
θ)
-平移角是在
x
x
x轴和
X
X
X轴之间测量的。
3.
z
z
z轴的倾斜(绕
x
x
x轴旋转一个
α
\alpha
α)
-倾斜角度是测量之间的
z
z
z和
Z
Z
Z轴。
4.从万向节中心到摄像机坐标系原点的平移。
5.从意象点到世界点的透视转换。
C
h
=
P
T
(
r
)
R
x
(
α
)
R
z
(
θ
)
T
(
w
0
)
W
h
C_h=PT(r)R_x(\alpha)R_z(\theta)T(w_0)W_h
Ch=PT(r)Rx(α)Rz(θ)T(w0)Wh
在齐次坐标下,场景点或实物点在世界坐标
X
X
X上的投影到图像点
u
u
u由一个简单的线性映射给出。
u
=
M
X
→
[
k
X
k
Y
k
Z
k
]
=
[
a
11
a
12
a
13
a
14
a
21
a
22
a
23
a
24
a
31
a
32
a
33
a
34
a
41
a
42
a
43
a
44
]
[
X
Y
Z
1
]
u=MX\rightarrow \begin{bmatrix} kX \\ kY \\ kZ \\ k \end{bmatrix}= \begin{bmatrix} a_{11} & a_{12} &a_{13}&a_{14}\\ a_{21} & a_{22} &a_{23}&a_{24}\\ a_{31} & a_{32} &a_{33}&a_{34}\\ a_{41} & a_{42} &a_{43}&a_{44}\\ \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \\ 1 \end{bmatrix}
u=MX→⎣⎢⎢⎡kXkYkZk⎦⎥⎥⎤=⎣⎢⎢⎡a11a21a31a41a12a22a32a42a13a23a33a43a14a24a34a44⎦⎥⎥⎤⎣⎢⎢⎡XYZ1⎦⎥⎥⎤
如果缩放系数为1:
[
X
Y
Z
1
]
=
[
a
11
a
12
a
13
a
14
a
21
a
22
a
23
a
24
a
31
a
32
a
33
a
34
a
41
a
42
a
43
a
44
]
[
x
y
z
1
]
\begin{bmatrix} X \\ Y \\ Z \\ 1 \end{bmatrix}= \begin{bmatrix} a_{11} & a_{12} &a_{13}&a_{14}\\ a_{21} & a_{22} &a_{23}&a_{24}\\ a_{31} & a_{32} &a_{33}&a_{34}\\ a_{41} & a_{42} &a_{43}&a_{44}\\ \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}
⎣⎢⎢⎡XYZ1⎦⎥⎥⎤=⎣⎢⎢⎡a11a21a31a41a12a22a32a42a13a23a33a43a14a24a34a44⎦⎥⎥⎤⎣⎢⎢⎡xyz1⎦⎥⎥⎤
在接收平面上
z
=
0
z=0
z=0,忽略掉
z
z
z项:
[
x
y
1
]
=
[
a
11
a
12
a
13
a
14
a
21
a
22
a
23
a
24
a
31
a
32
a
33
a
34
a
41
a
42
a
43
1
]
[
X
Y
Z
1
]
\begin{bmatrix} x \\ y \\ 1 \end{bmatrix}= \begin{bmatrix} a_{11} & a_{12} &a_{13}&a_{14}\\ a_{21} & a_{22} &a_{23}&a_{24}\\ a_{31} & a_{32} &a_{33}&a_{34}\\ a_{41} & a_{42} &a_{43}&1\\ \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \\ 1 \end{bmatrix}
⎣⎡xy1⎦⎤=⎣⎢⎢⎡a11a21a31a41a12a22a32a42a13a23a33a43a14a24a341⎦⎥⎥⎤⎣⎢⎢⎡XYZ1⎦⎥⎥⎤
有11个自由参数,可以改写为:
[
x
y
]
=
X
α
X
=
[
X
Y
Z
1
0
0
0
0
−
x
X
−
x
Y
−
x
Z
0
0
0
0
X
Y
Z
1
−
y
X
−
y
Y
−
y
Z
]
α
=
[
α
1
α
2
α
3
α
4
α
5
α
6
α
7
α
8
α
9
α
10
α
11
]
\begin{bmatrix} x \\ y \end{bmatrix}=X\alpha \\ X= \begin{bmatrix} X&Y&Z&1&0&0&0&0&-xX&-xY&-xZ \\ 0 &0& 0& 0 &X&Y&Z&1&-yX&-yY&-yZ \end{bmatrix} \alpha= \begin{bmatrix} \alpha_1 \\ \alpha_2 \\ \alpha_3 \\ \alpha_4 \\ \alpha_5 \\ \alpha_6 \\ \alpha_7 \\ \alpha_8 \\ \alpha_9 \\ \alpha_{10} \\ \alpha_{11} \\ \end{bmatrix}
[xy]=XαX=[X0Y0Z0100X0Y0Z01−xX−yX−xY−yY−xZ−yZ]α=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡α1α2α3α4α5α6α7α8α9α10α11⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤