相机标定

本文详细介绍了相机坐标系的几种类型及其之间的变换过程,包括世界坐标系、相机坐标系、像素坐标系和图像坐标系。同时深入探讨了张友正标定法的基本原理与步骤,帮助读者理解如何计算相机的内外参数及畸变系数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础知识

几个重要的坐标系

  • world coordinates
    描述我们处于的这个世界的三维直角坐标系,原点和坐标轴的选择有很大自由度
  • camera coordinates
    可以看作是world coordinates的一个具体化,原点定在镜头光心,z轴是光轴,x,y轴构成一个和z轴垂直的面,这个面和后面的成像平面平行

    世界坐标系坐标 (xw,yw,zw) ( x w , y w , z w ) 和 相机坐标系坐标 (xc,yc,zc) ( x c , y c , z c ) 通过旋转和平移进行转换,矩阵形式如下

    (xc,yc,zc,1)T=R,T0,1×(xw,yw,zw,1)T ( x c , y c , z c , 1 ) T = [ R , T 0 , 1 ] × ( x w , y w , z w , 1 ) T

    其中R是旋转矩阵, T是平移矩阵

  • pixel coordinates
    一个二维直角坐标系, x-y轴的单位是CCD或CMOS的成像单元的尺寸

  • image coordinates
    图像处理中最常见的二维直角坐标系, x-y轴单位是像素点个数(这里的像素点和pixel coordinates中的pixel不是一个东西. pixel coordinates里的pixel是物理尺寸, 而此处是逻辑尺寸,逻辑上像素是没有大小的)

    像素坐标系 (X,Y) ( X , Y ) 和 图像坐标系 (u,v) ( u , v ) 通过缩放和平移进行转换,矩阵形式如下

    (u,v,1)T=1/dX,0,u00,1/dY,v00,0,1×(X,Y,1)T ( u , v , 1 ) T = [ 1 / d X , 0 , u 0 0 , 1 / d Y , v 0 0 , 0 , 1 ] × ( X , Y , 1 ) T

    其中 1/dX 1 / d X 1/dY 1 / d Y 是成像单元在x和y轴上的物理尺寸

  • 小孔成像
    截至目前,已知以下两组坐标变换
    world coordinates -> camera coordinates
    pixel coordinates -> image coordinates
    目标是获得world coordinates -> image coordinates的变换, 缺少 camera coordinates -> pixel coordinates的变换, 这个变换需要利用小孔成像原理.
    这里写图片描述
    上图采用相机坐标系, o是光心,O是成像平面, P(xP,yP,zP) P ( x P , y P , z P ) 是三维空间的一个物点, p(xp,yp) p ( x p , y p ) 是P在像平面上的像点, f=|oO| f = | o O | 是相机的焦距, 利用相似三角形对应边成比例可以得到
    xp=xP×fzP x p = x P × f z P
    yp=yP×fzP y p = y P × f z P
    齐次坐标矩阵形式如下

    zP×(xp,yp,1)T=f,0,0,00,f,0,00,0,1,0×(xP,yP,zP,1)T z P × ( x p , y p , 1 ) T = [ f , 0 , 0 , 0 0 , f , 0 , 0 0 , 0 , 1 , 0 ] × ( x P , y P , z P , 1 ) T

    zP z P 可以当作一个比例因子 s s 处理
    网上找了一个图,对几个坐标系有个直观的了解
    这里写图片描述

相机内参/外参和透射变换

把上述几个坐标系变换合并在一起,得到   

s×[uv1]=[1dX,0,u00,1dY,v00,0,1][f,0,0,00,f,0,00,0,1,0][R,T0,1][xwywzw1]

=ax,0,u0,00,ay,v0,00,0,1,0R,T0,1xwywzw1 = [ a x , 0 , u 0 , 0 0 , a y , v 0 , 0 0 , 0 , 1 , 0 ] [ R , T 0 , 1 ] [ x w y w z w 1 ]

=M1M2Xw=MXw = M 1 M 2 X w = M X w

其中 M1 M 1 是相机的内参矩阵, M2 M 2 是相机的外参矩阵, M M 是投影矩阵
M1=[ax,0,u0,00,ay,v0,00,0,1,0]

M2=R,T0,1 M 2 = [ R , T 0 , 1 ]

畸变参数(distortion parameters)

畸变就是一条直线投影到图片上不能保持直线,原因很多,其中比较显著的两个是径向畸变和切向畸变.
这里写图片描述
实际位置和理想位置存在一定的角度差(切向畸变)和到中心的距离差(径向畸变)

  • 径向畸变
    这里写图片描述
    距离光心越远,径向位移越大,光心处没有畸变,左边时枕形畸变,右边时桶形畸变. 这种畸变可以用principle point(主点)周围的泰勒级数建模,公式如下

    x0=x(1+k1r2+k2r4+k3r6) x 0 = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 )

    y0=y(1+k1r2+k2r4+k3r6) y 0 = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 )

  • 切向畸变

    x0=x+[2p1y+p2(r2+2x2)] x 0 = x + [ 2 p 1 y + p 2 ( r 2 + 2 x 2 ) ]

    y0=y+[2p2x+p1(r2+2y2)] y 0 = y + [ 2 p 2 x + p 1 ( r 2 + 2 y 2 ) ]

张友正标定法

摄像机标定就是计算出相机的内参,外参和畸变系数. 张友正标定法由于操作简单,精度高的优势而得到广泛应用. 其基本思路是:
* 通过拍摄标定板在不同角度下的图片
标定板上斑点的物理尺寸是要作为参数送入算法
* 提取特征点
* 计算单应性矩阵
* 计算内参
* 计算外参
* 计算畸变系数

提取特征点

提取特征点就是获得两幅图像中对应点的相对位置,每一个点对都可以提供两个方程,供后续求解操作

计算单应性矩阵

在计算视觉中,单应性是一个平面到另一个平面的投影映射 (PS: 这个单应性概念提出的很奇怪, 没有什么更深的含义的,名字和含义没看出什么关系).

s×uv1=ax,0,u0,00,ay,v0,00,0,1,0R,T0,1xwywzw1=M1M2Xw=MXw s × [ u v 1 ] = [ a x , 0 , u 0 , 0 0 , a y , v 0 , 0 0 , 0 , 1 , 0 ] [ R , T 0 , 1 ] [ x w y w z w 1 ] = M 1 M 2 X w = M X w

这里的M就是我们这一步的目标矩阵.上式是从世界坐标 (xw,yw,zw,1) ( x w , y w , z w , 1 ) 映射到图像坐标
s×(u,v,1) s × ( u , v , 1 ) , 我们移动世界坐标系原点,可以令 zw=0 z w = 0 ,则有
s×uv1=M¯¯¯¯¯xwyw1 s × [ u v 1 ] = M ¯ [ x w y w 1 ]

M¯¯¯¯¯ M ¯ 3×3 3 × 3 的矩阵,而且因为齐次坐标的缘故,其最后一个元素是1,即只包含8个未知参数,需要至少4组点对(8个方程)即可求解单应性矩阵 M¯¯¯¯¯ M ¯ (这里只是需要4组点对,一个标定板的图像就可以了)

计算内参

前面单应性矩阵 M¯¯¯¯¯ M ¯ 已经求解出来,我们把它写成三个列向量的形式

M¯¯¯¯¯=[m1,m2,m3] M ¯ = [ m 1 , m 2 , m 3 ]

同样我们把外参矩阵 M2 M 2 也写成三个列向量的形式
M2=λ[r1,r2,t] M 2 = λ [ r 1 , r 2 , t ]

其中 r1 r 1 是绕x轴旋转向量, r2 r 2 是绕y轴旋转向量, t t 是平移向量, λ是一个比例因子,则有
[m1,m2,m3]=λM1[r1,r2,t] [ m 1 , m 2 , m 3 ] = λ M 1 [ r 1 , r 2 , t ]

r1=M11m1 r 1 = M 1 − 1 m 1

r2=M11m2 r 2 = M 1 − 1 m 2

r1 r 1 r2 r 2 满足如下两个限制
* r1 r 1 r2 r 2 正交,即 rT1r2=0 r 1 T r 2 = 0
* 旋转向量的模是1,即 |r1|=|r2|=1 | r 1 | = | r 2 | = 1
消除 r1 r 1 r2 r 2 得到
mT1MT1M11m2=0 m 1 T M 1 − T M 1 − 1 m 2 = 0

mT1MT1M11m1=mT2MT1M11m2 m 1 T M 1 − T M 1 − 1 m 1 = m 2 T M 1 − T M 1 − 1 m 2

上面两个方程中 m1,m2 m 1 , m 2 已经求解,则只有内参矩阵 M1 M 1 待求解, M1 M 1 有4个未知量,则
至少需要两个单应性矩阵才可以求出内参矩阵 M1 M 1 (有的文献中 M1 M 1 有5个未知量,则至少需要三个单应性矩阵). 一个角度下的棋盘图只能获得一个单应性矩阵,所以至少需要两幅不同角度下的棋盘图才可以求解出内参矩阵

计算外参

我们再回到下面这个式子

[m1,m2,m3]=λM1[r1,r2,t] [ m 1 , m 2 , m 3 ] = λ M 1 [ r 1 , r 2 , t ]

现在单应性矩阵
[m1,m2,m3] [ m 1 , m 2 , m 3 ]

和内参 M1 M 1 已知
r1=λM1m1 r 1 = λ M − 1 m 1
r2=λM1m2 r 2 = λ M − 1 m 2
r3=r1×r2 r 3 = r 1 × r 2
t=λM1m3 t = λ M − 1 m 3
其中 λ λ 是比例因子,需要保证 |r1|=|r2|=1 | r 1 | = | r 2 | = 1 ,所以
λ=1M11m1=1M11m2 λ = 1 M 1 − 1 m 1 = 1 M 1 − 1 m 2

* r3 r 3 是怎么出来的 ?????????? *

计算畸变系数

上面给出求解参数需要的最小点对数和最小标定图数目只时理想情况下的理论值,实际中考虑到噪声的存在,需要用多组数据,利用最优化方法求解相机参数, 张氏标定法中采用Levenberg-Marquardt求解最大似然估计,获得参数和畸变参数

参考资料

http://blog.youkuaiyun.com/lql0716
https://blog.youkuaiyun.com/zkl99999/article/details/48372203
https://blog.youkuaiyun.com/piaoxuezhong/article/details/75268535

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值