摄影测量中的计算机视觉之Camera Calibration

相机标定:主要目的是通过相机拍摄的图像恢复出相机参数

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=T1P 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=K100010001000[R0Tt1]=KR[IC]=[KRKRC]=:[MMC]
一个矩阵乘增广矩阵是左边右边都要乘进去的.
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. λ={m31m31 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
长宽比

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值