沙姆模型推导过程
点P在世界坐标系下的坐标为
P
世界
=
[
X
Y
Z
]
P_{世界} = \left[\begin{array}{l} X \\ Y \\ Z \end{array}\right]
P世界=
XYZ
利用旋转矩阵R、平移向量T构成的外参数,将P{世界}映射到小孔相机坐标系下,点P在小孔相机坐标系下的坐标为
P
小孔
=
[
X
′
Y
′
Z
′
]
=
R
(
[
X
′
Y
′
Z
′
]
−
T
)
P_{小孔} = \left[\begin{array}{l} X^{\prime} \\ Y^{\prime} \\ Z^{\prime} \end{array}\right] = R(\left[\begin{array}{l} X^{\prime} \\ Y^{\prime} \\ Z^{\prime} \end{array}\right]-T)
P小孔=
X′Y′Z′
=R(
X′Y′Z′
−T)
点P和点Ps在同一条直线上,由透视变换,点Ps可表示为:
P
s
小孔
=
λ
P
小孔
=
λ
[
X
′
Y
′
Z
′
]
P_{s_{小孔}} = {\lambda}P_{小孔} = {\lambda}\left[\begin{array}{l} X^{\prime} \\ Y^{\prime} \\ Z^{\prime} \end{array}\right]
Ps小孔=λP小孔=λ
X′Y′Z′
引入沙姆旋转角度 τ x \tau_x τx和 τ y \tau_y τy,使得垂直平面旋转为倾斜平面,旋转矩阵为 R τ R_\tau Rτ,
R τ = [ cos ( τ y ) 0 sin ( τ y ) 0 1 0 − sin ( τ y ) 0 cos ( τ y ) ] [ 1 0 0 0 cos ( τ x ) − sin ( τ x ) 0 sin ( τ x ) cos ( τ x ) ] = [ cos ( τ y ) sin ( τ x ) sin ( τ y ) cos ( τ x ) sin ( τ y ) 0 cos ( τ x ) − sin ( τ x ) − sin ( τ y ) sin ( τ x ) cos ( τ y ) cos ( τ x ) cos ( τ y ) ] \begin{aligned} R_\tau & =\left[\begin{array}{ccc} \cos \left(\tau_y\right) & 0 & \sin \left(\tau_y\right) \\ 0 & 1 & 0 \\ -\sin \left(\tau_y\right) & 0 & \cos \left(\tau_y\right) \end{array}\right]\left[\begin{array}{ccc} 1 & 0 & 0 \\ 0 & \cos \left(\tau_x\right) & -\sin \left(\tau_x\right) \\ 0 & \sin \left(\tau_x\right) & \cos \left(\tau_x\right) \end{array}\right] \\ & =\left[\begin{array}{ccc} \cos \left(\tau_y\right) & \sin \left(\tau_x\right) \sin \left(\tau_y\right) & \cos \left(\tau_x\right) \sin \left(\tau_y\right) \\ 0 & \cos \left(\tau_x\right) & -\sin \left(\tau_x\right) \\ -\sin \left(\tau_y\right) & \sin \left(\tau_x\right) \cos \left(\tau_y\right) & \cos \left(\tau_x\right) \cos \left(\tau_y\right) \end{array}\right] \end{aligned} Rτ= cos(τy)0−sin(τy)010sin(τy)0cos(τy) 1000cos(τx)sin(τx)0−sin(τx)cos(τx) = cos(τy)0−sin(τy)sin(τx)sin(τy)cos(τx)sin(τx)cos(τy)cos(τx)sin(τy)−sin(τx)cos(τx)cos(τy)
垂直平面的法向量为 n ⃗ = ( 0 , 0 , 1 ) \vec{n}=(0,0,1) n=(0,0,1),将法向量进行旋转,得到倾斜平面的法向量 n ⃗ s = R τ n ⃗ \vec{n}_s=R_\tau \vec{n} ns=Rτn,
n ⃗ s = R τ n ⃗ = [ cos ( τ y ) sin ( τ x ) sin ( τ y ) cos ( τ x ) sin ( τ y ) 0 cos ( τ x ) − sin ( τ x ) − sin ( τ y ) sin ( τ x ) cos ( τ y ) cos ( τ x ) cos ( τ y ) ] [ 0 0 1 ] = [ cos ( τ x x ) sin ( τ y ) − sin ( τ x ) cos ( τ x ) cos ( τ y ) ] \begin{aligned} \vec{n}_s =R_\tau \vec{n}&=\left[\begin{array}{ccc} \cos \left(\tau_y\right) & \sin \left(\tau_x\right) \sin \left(\tau_y\right) & \cos \left(\tau_x\right) \sin \left(\tau_y\right) \\ 0 & \cos \left(\tau_x\right) & -\sin \left(\tau_x\right) \\ -\sin \left(\tau_y\right) & \sin \left(\tau_x\right) \cos \left(\tau_y\right) & \cos \left(\tau_x\right) \cos \left(\tau_y\right) \end{array}\right]\left[\begin{array}{l} 0 \\ 0 \\ 1 \end{array}\right] \\ & = \left[\begin{array}{ccc} \cos \left(\tau_{x x}\right) \sin \left(\tau_y\right) \\ -\sin \left(\tau_x\right) \\ \cos \left(\tau_x\right) \cos \left(\tau_y\right) \end{array}\right] \end{aligned} ns=Rτn= cos(τy)0−sin(τy)sin(τx)sin(τy)cos(τx)sin(τx)cos(τy)cos(τx)sin(τy)−sin(τx)cos(τx)cos(τy) 001 = cos(τxx)sin(τy)−sin(τx)cos(τx)cos(τy)
则倾斜平面上的向量 o c P s → \overrightarrow{o_c P_s} ocPs点乘法向量 n ⃗ s \vec{n}_s ns为零,如下所示:
o c P s → ⋅ n ⃗ s = 0 ⇔ [ λ X ′ λ Y ′ λ Z ′ − 1 ] ⋅ [ cos τ x sin τ y − sin τ x cos τ x cos τ y ] = 0 \overrightarrow{o_c P_s} \cdot \vec{n}_s=0 \Leftrightarrow\left[\begin{array}{c} \lambda X^{\prime} \\ \lambda Y^{\prime} \\ \lambda Z^{\prime}-1 \end{array}\right] \cdot\left[\begin{array}{c} \cos \tau_x \sin \tau_y \\ -\sin \tau_x \\ \cos \tau_x \cos \tau_y \end{array}\right]=0 ocPs⋅ns=0⇔ λX′λY′λZ′−1 ⋅ cosτxsinτy−sinτxcosτxcosτy =0
可求得
λ
\lambda
λ,
λ
=
cos
τ
x
sin
τ
y
X
′
cos
τ
x
sin
τ
y
−
Y
′
sin
τ
y
+
Z
′
cos
τ
x
cos
τ
y
\lambda=\frac{\cos \tau_x \sin \tau_y}{X^{\prime} \cos \tau_x \sin \tau_y-Y^{\prime} \sin \tau_y+Z^{\prime} \cos \tau_x \cos \tau_y}
λ=X′cosτxsinτy−Y′sinτy+Z′cosτxcosτycosτxsinτy
将
λ
\lambda
λ代入,可得
P
s
小孔
P_{s_{小孔}}
Ps小孔
P
s
小孔
=
cos
τ
x
sin
τ
y
X
′
cos
τ
x
sin
τ
y
−
Y
′
sin
τ
y
+
Z
′
cos
τ
x
cos
τ
y
⋅
[
X
′
Y
′
Z
′
]
P_{s_{小孔}}=\frac{\cos \tau_x \sin \tau_y}{X^{\prime} \cos \tau_x \sin \tau_y-Y^{\prime} \sin \tau_y+Z^{\prime} \cos \tau_x \cos \tau_y}\cdot \left[\begin{array}{l} X^{\prime} \\ Y^{\prime} \\ Z^{\prime} \end{array}\right]
Ps小孔=X′cosτxsinτy−Y′sinτy+Z′cosτxcosτycosτxsinτy⋅
X′Y′Z′
旋转坐标系,将小孔相机坐标系转到沙姆相机坐标系,则
P
s
沙姆
=
R
τ
t
P
s
小孔
P_{s_{沙姆}} = R^{t}_{\tau}P_{s_{小孔}}
Ps沙姆=RτtPs小孔
注意:由于旋转矩阵
R
τ
R_{\tau}
Rτ是倾斜平面到垂直平面的旋转矩阵,所以旋转坐标系时,应左乘
R
τ
R_{\tau}
Rτ的逆。
具体原因可参考: https://blog.csdn.net/Lee_Mon_Tree/article/details/136880423?spm=1001.2014.3001.5502
P
s
沙姆
=
R
τ
t
P
s
小孔
=
[
cos
(
τ
y
)
0
−
sin
(
τ
y
)
sin
(
τ
x
)
sin
(
τ
y
)
cos
(
τ
x
)
sin
(
τ
x
)
cos
(
τ
y
)
cos
(
τ
x
)
sin
(
τ
y
)
−
sin
(
τ
x
)
cos
(
τ
x
)
cos
(
τ
y
)
]
[
λ
X
′
λ
Y
′
λ
Z
′
]
P_{s_{沙姆}}=R^{t}_{\tau}P_{s_{小孔}}= \left[\begin{array}{ccc} \cos \left(\tau_y\right) & 0 & -\sin \left(\tau_y\right) \\ \sin \left(\tau_x\right) \sin \left(\tau_y\right) & \cos \left(\tau_x\right) & \sin \left(\tau_x\right) \cos \left(\tau_y\right) \\ \cos \left(\tau_x\right) \sin \left(\tau_y\right) & -\sin \left(\tau_x\right) & \cos \left(\tau_x\right) \cos \left(\tau_y\right) \end{array}\right]\left[\begin{array}{c} \lambda X^{\prime} \\ \lambda Y^{\prime} \\ \lambda Z^{\prime} \end{array} \right]
Ps沙姆=RτtPs小孔=
cos(τy)sin(τx)sin(τy)cos(τx)sin(τy)0cos(τx)−sin(τx)−sin(τy)sin(τx)cos(τy)cos(τx)cos(τy)
λX′λY′λZ′
= [ cos τ x cos τ y ( X ′ cos τ y − Z ′ sin τ y ) X ′ sin τ y cos τ x − Y ′ sin τ x + Z ′ cos τ x cos τ y + sin τ y cos τ x cos τ y ( X ′ sin τ x sin τ y + Y ′ cos τ x + Z ′ sin τ x cos τ y ) X ′ sin τ y cos τ x − Y ′ sin τ x + Z ′ cos τ x cos τ y − sin τ x cos τ y 1 ] = \left[\begin{array}{c} \frac{\cos \tau_x \cos \tau_y\left(X^{\prime} \cos \tau_y-Z^{\prime} \sin \tau_y\right)}{X^{\prime} \sin \tau_y \cos \tau_x-Y^{\prime} \sin \tau_x+Z^{\prime} \cos \tau_x \cos \tau_y}+\sin \tau_y \\ \frac{\cos \tau_x \cos \tau_y\left(X^{\prime} \sin \tau_x \sin \tau_y+Y^{\prime} \cos \tau_x+Z^{\prime} \sin \tau_x \cos \tau_y\right)}{X^{\prime} \sin \tau_y \cos \tau_x-Y^{\prime} \sin \tau_x+Z^{\prime} \cos \tau_x \cos \tau_y}-\sin \tau_x \cos \tau_y \\ 1 \end{array}\right] = X′sinτycosτx−Y′sinτx+Z′cosτxcosτycosτxcosτy(X′cosτy−Z′sinτy)+sinτyX′sinτycosτx−Y′sinτx+Z′cosτxcosτycosτxcosτy(X′sinτxsinτy+Y′cosτx+Z′sinτxcosτy)−sinτxcosτy1
= [ cos ( τ x ) cos ( τ y ) 0 sin ( τ y ) 0 cos ( τ x ) cos ( τ y ) − sin ( τ x ) cos ( τ y ) 0 0 1 ] R τ t [ X ′ Y ′ Z ′ ] = \left[\begin{array}{ccc} \cos \left(\tau_x\right) \cos \left(\tau_y\right) & 0 & \sin \left(\tau_y\right) \\ 0 & \cos \left(\tau_x\right) \cos \left(\tau_y\right) & -\sin \left(\tau_x\right) \cos \left(\tau_y\right) \\ 0 & 0 & 1 \end{array}\right] \mathbf{R}_\tau^t\left[\begin{array}{c} X^{\prime} \\ Y^{\prime} \\ Z^{\prime} \end{array}\right] = cos(τx)cos(τy)000cos(τx)cos(τy)0sin(τy)−sin(τx)cos(τy)1 Rτt X′Y′Z′
此时求出来的
P
s
沙姆
P_{s_{沙姆}}
Ps沙姆的坐标是在沙姆相机坐标系下的坐标
P
s
沙姆
=
[
x
y
z
]
=
[
cos
τ
x
cos
τ
y
(
X
′
cos
τ
y
−
Z
′
sin
τ
y
)
X
′
sin
τ
y
cos
τ
x
−
Y
′
sin
τ
x
+
Z
′
cos
τ
x
cos
τ
y
+
sin
τ
y
cos
τ
x
cos
τ
y
(
X
′
sin
τ
x
sin
τ
y
+
Y
′
cos
τ
x
+
Z
′
sin
τ
x
cos
τ
y
)
X
′
sin
τ
y
cos
τ
x
−
Y
′
sin
τ
x
+
Z
′
cos
τ
x
cos
τ
y
−
sin
τ
x
cos
τ
y
1
]
=
[
cos
(
τ
x
)
cos
(
τ
y
)
0
sin
(
τ
y
)
0
cos
(
τ
x
)
cos
(
τ
y
)
−
sin
(
τ
x
)
cos
(
τ
y
)
0
0
1
]
R
τ
t
[
X
′
Y
′
Z
′
]
P_{s_{沙姆}}=\left[\begin{array}{ccc} x \\ y \\ z \end{array} \right]= \left[\begin{array}{c} \frac{\cos \tau_x \cos \tau_y\left(X^{\prime} \cos \tau_y-Z^{\prime} \sin \tau_y\right)}{X^{\prime} \sin \tau_y \cos \tau_x-Y^{\prime} \sin \tau_x+Z^{\prime} \cos \tau_x \cos \tau_y}+\sin \tau_y \\ \frac{\cos \tau_x \cos \tau_y\left(X^{\prime} \sin \tau_x \sin \tau_y+Y^{\prime} \cos \tau_x+Z^{\prime} \sin \tau_x \cos \tau_y\right)}{X^{\prime} \sin \tau_y \cos \tau_x-Y^{\prime} \sin \tau_x+Z^{\prime} \cos \tau_x \cos \tau_y}-\sin \tau_x \cos \tau_y \\ 1 \end{array}\right] \\ = \left[\begin{array}{ccc} \cos \left(\tau_x\right) \cos \left(\tau_y\right) & 0 & \sin \left(\tau_y\right) \\ 0 & \cos \left(\tau_x\right) \cos \left(\tau_y\right) & -\sin \left(\tau_x\right) \cos \left(\tau_y\right) \\ 0 & 0 & 1 \end{array}\right] \mathbf{R}_\tau^t\left[\begin{array}{c} X^{\prime} \\ Y^{\prime} \\ Z^{\prime} \end{array}\right]
Ps沙姆=
xyz
=
X′sinτycosτx−Y′sinτx+Z′cosτxcosτycosτxcosτy(X′cosτy−Z′sinτy)+sinτyX′sinτycosτx−Y′sinτx+Z′cosτxcosτycosτxcosτy(X′sinτxsinτy+Y′cosτx+Z′sinτxcosτy)−sinτxcosτy1
=
cos(τx)cos(τy)000cos(τx)cos(τy)0sin(τy)−sin(τx)cos(τy)1
Rτt
X′Y′Z′
上述求得点
P
s
沙姆
P_{s_{沙姆}}
Ps沙姆在沙姆相机坐标系下的坐标(z=1),该坐标乘上内参矩阵,得到像素坐标系下的坐标:
P s u , v = [ u v 1 ] = K [ cos ( τ x ) cos ( τ y ) 0 sin ( τ y ) 0 cos ( τ x ) cos ( τ y ) − sin ( τ x ) cos ( τ y ) 0 0 1 ] R τ t R ( [ X Y Z ] − T ) \begin{aligned} P_{s_{u,v}} = \left[\begin{array}{l} u \\ v \\ 1 \end{array}\right]=K\left[\begin{array}{ccc} \cos \left(\tau_x\right) \cos \left(\tau_y\right) & 0 & \sin \left(\tau_y\right) \\ 0 & \cos \left(\tau_x\right) \cos \left(\tau_y\right) & -\sin \left(\tau_x\right) \cos \left(\tau_y\right) \\ 0 & 0 & 1 \end{array}\right] \mathbf{R}_\tau^t \mathbf{R}\left(\left[\begin{array}{l} X \\ Y \\ Z \end{array}\right]-\mathbf{T}\right) \end{aligned} Psu,v= uv1 =K cos(τx)cos(τy)000cos(τx)cos(τy)0sin(τy)−sin(τx)cos(τy)1 RτtR XYZ −T
符号说明:
(1)OwXwYwZw:世界坐标系
(2)OcXcYcZc:小孔相机坐标系(镜头平面与成像平面垂直)
(3)OsXsYsZs:沙姆相机坐标系(镜头平面与成像平面倾斜)
(4)点P:世界坐标系中的一个目标点
(5)点Pc:直线OP与垂直像平面的交点
(6)点Ps:直线OP与倾斜像平面的交点
(7)旋转矩阵Rτ:垂直像平面到倾斜像平面的旋转