相机标定:主要目的是通过相机拍摄的图像恢复出相机参数
1 图像获取
详细说明使用相机的重要参数, 比如类型,分辨率等.
2 控制点测量
选取至少6个三维点(在现实世界中选取,最好选取墙角这种自带坐标轴的点, 单位mm), 以及他们对应的二维点(在图像中选取 单位piexl).
3 计算投影矩阵.
x = PX
估计相机的外部方向
确定相机的内部方向
第一步 依旧是归一化
详情见上一篇homography.
2D : T = [1/sx 0 -tx/sx; 0 1/sy -ty/sy; 0 0 1] (matlab写法)
3D : T = [1/sx 0 0 -tx/sy; 0 1/sy 0 -ty/sy; 0 0 1/sz -tz/sz; 0 0 0 1]
第二步, 构造设计矩阵
证明传不上来
第三步 用SVD解出p
Ap = 0
第四步
p转化成4*4的
P
~
\tilde{P}
P~.
P
~
\tilde{P}
P~转化成P.
P
=
T
′
−
1
P
~
T
\boldsymbol{P}=\boldsymbol{T}^{\prime-1} \widetilde{\boldsymbol{P}} \boldsymbol{T}
P=T′−1P
T
影矩阵的各个参数
P
=
K
[
1
0
0
0
0
1
0
0
0
0
1
0
]
[
R
t
0
T
1
]
=
K
R
[
I
−
C
]
=
[
K
R
∣
−
K
R
C
]
=
:
[
M
∣
−
M
C
]
\boldsymbol{P}=\boldsymbol{K}\left[\begin{array}{cccc} {1} & {0} & {0} & {0} \\ {0} & {1} & {0} & {0} \\ {0} & {0} & {1} & {0} \end{array}\right]\left[\begin{array}{cc} {\boldsymbol{R}} & {\boldsymbol{t}} \\ {\boldsymbol{0}^{T}} & {1} \end{array}\right]=\boldsymbol{K} \boldsymbol{R}[\boldsymbol{I}-\boldsymbol{C}]=[\boldsymbol{K} \boldsymbol{R} |-\boldsymbol{K} \boldsymbol{R} \boldsymbol{C}]=:[\boldsymbol{M} |-\boldsymbol{M} \boldsymbol{C}]
P=K⎣⎡100010001000⎦⎤[R0Tt1]=KR[I−C]=[KR∣−KRC]=:[M∣−MC]
一个矩阵乘增广矩阵是左边右边都要乘进去的.
P = K [R|t](t=-RC)
C是三维世界中摄像机投影中心, R是从世界坐标系到相机坐标系的旋转.
RQ分解将m x m的非奇异矩阵A分解为一个上三角阵R与一个正交矩阵Q之积.三角矩阵对角线上的元素必须是正数.
取P的前三列为M.
可以对M进行RQ分解.
如何分解:
首先对P进行归一化,
λ
\lambda
λ为缩放因子,M的行列式是判断依据.
λ
=
{
1
∥
m
3
∥
if
det
(
M
)
>
0
−
1
∥
m
3
∥
otherwise
\lambda=\left\{\begin{array}{cc} {\frac{1}{\left\|\mathbf{m}^{3}\right\|}} & {\text { if } \operatorname{det}(\mathbf{M})>0} \\ {-\frac{1}{\left\|\mathbf{m}^{3}\right\|}} & {\text { otherwise }} \end{array}\right.
λ={∥m3∥1−∥m3∥1 if det(M)>0 otherwise
就是上三角上对角线上的元素都要>0.
如果<=0应该怎么办?
求解答
如何解出C?
1 由于C是相机在三维世界的坐标,所以PC = 0,经过投影矩阵的变换后,C转换到相机坐标系的原点,因此可以用SVD来解出C.
2 在P经过归一化后, P = [M|-MC]
也就是说P的第四列=-MC 所以-M^-1*P = C.
为什么一定要经过归一化?而且我解出来归一化的结果是相差一个
λ
\lambda
λ的
求解答~~
3 直接用定义解
C
=
(
X
0
,
Y
0
,
Z
0
,
W
0
)
⊤
\mathbf{C}=\left(X_{0,} Y_{0,} Z_{0,} W_{0}\right)^{\top}
C=(X0,Y0,Z0,W0)⊤
X
0
=
det
(
[
p
2
,
p
3
,
p
4
]
)
Y
0
=
−
det
(
[
p
1
,
p
3
,
p
4
]
)
Z
0
=
det
(
[
p
1
,
p
2
,
p
4
]
)
W
0
=
−
det
(
[
p
1
,
p
2
,
p
3
]
)
\begin{aligned} &X_{0}=\operatorname{det}\left(\left[\mathbf{p}_{2}, \mathbf{p}_{3}, \mathbf{p}_{4}\right]\right)\\ &Y_{0}=-\operatorname{det}\left(\left[\mathbf{p}_{1}, \mathbf{p}_{3}, \mathbf{p}_{4}\right]\right)\\ &Z_{0}=\operatorname{det}\left(\left[\mathbf{p}_{1}, \mathbf{p}_{2}, \mathbf{p}_{4}\right]\right)\\ &W_{0}=-\operatorname{det}\left(\left[\mathbf{p}_{1}, \mathbf{p}_{2}, \mathbf{p}_{3}\right]\right) \end{aligned}
X0=det([p2,p3,p4])Y0=−det([p1,p3,p4])Z0=det([p1,p2,p4])W0=−det([p1,p2,p3])
Pi 是P的第i列.
如何解出Rotation matrix R和 calibration matrix K ?
利用OPencv里的RQDecomp3x3.
然后如何得到内参和外参呢?
外参由旋转角和投影中心的位置共6个参数组成.C为投影中心的位置(3个)
另外三个分别为旋转角(
ω
\omega
ω.
ϕ
\phi
ϕ,
κ
\kappa
κ)
ω
\omega
ω = atan(-r32/r33);
ϕ
\phi
ϕ = asin(r31);
κ
\kappa
κ = atan(-r21/r11)
这个要背住!
内参由K中元素决定.
principle distance [in pixel]
α
\alpha
αy: k11
Skew s: k12
a factor accounting for the skew due to non-rectangular pixels
对大多数相机来说,由于图像都是长方形,所以s接近于0
用degree表示. acot(-s/
α
\alpha
αx)
Principle point x0 y0: k13 , k23
非常接近图像中心, 假如图像像素是4000*6000 那么Principle point(2000,3000)
Aspect ration
α
\alpha
αx /
α
\alpha
αy k11, k22
长宽比