计算机视觉的那些事——相机标定(一)

相机标定

相机标定目的

获取相机的内参和外参矩阵,同时也会得到每一副标定图像的旋转和平移矩阵。内参和外参可以对之后相机拍摄的图像进行矫正,得到畸变相对很小的图像。

原理

摄像机标定(Camera calibration)简单来说是从世界坐标系转换为相机坐标系,再由相机坐标系转换为图像坐标系的过程,也就是求最终的投影矩阵的过程。即:世界坐标系 --> 相机坐标系 --> 图像坐标系 --> 像素坐标系
世界坐标系(world coordinate system):用户定义的三维世界的坐标系,为了描述目标物在真实世界里的位置而被引入,单位为m。
相机坐标系(camera coordinate system):在相机上建立的坐标系,为了从相机的角度描述物体位置而定义,作为连通世界坐标系和图像/像素坐标系的中间一环。单位为m。
图像坐标系(image coordinate system):为了描述成像过程中物体从相机坐标系到图像坐标系的投影透射关系而引入,方便进一步得到像素坐标系下的坐标,单位为m。
像素坐标系(pixel coordinate system):为了描述物体成像后的像点在数字图像上(相片)的坐标而引入,是我们真正从相机内读取到的信息所在的坐标系。单位为个(像素数目)。

世界坐标系到相机坐标系的转换

从世界坐标系转换到相机坐标系上属于刚体变换,即不会发生形变,也就是说只有旋转和平移。
世界坐标系到相机坐标系的转换设绕Z轴旋转角度为 θ \theta θ ,点 ( X w Y w Z w ) \begin{pmatrix} X_w&Y_w&Z_w\end{pmatrix} (XwYwZw)为世界坐标系坐标,点 ( X c Y c Z c ) \begin{pmatrix} X_c&Y_c&Z_c\end{pmatrix} (XcYcZc)为相机坐标系坐标,得(极坐标系下计算)
{ X c = X w cos ⁡ θ − Y w sin ⁡ θ Y c = X w sin ⁡ θ + Y w cos ⁡ θ Z c = Z w \begin{cases} X_c=X_w\cos\theta-Y_w\sin\theta\\ Y_c=X_w\sin\theta+Y_w\cos\theta\\ Z_c=Z_w\end{cases} Xc=XwcosθYwsinθYc=Xwsinθ+YwcosθZc=Zw
即:
[ X c Y c Z c ] = [ cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ 0 0 0 1 ] ⋅ [ X w Y w Z w ] = R 1 [ X w Y w Z w ] \begin{bmatrix} X_c\\ Y_c \\Z_c\end{bmatrix}=\begin{bmatrix} \cos\theta& -\sin\theta&0\\ \sin\theta&\cos\theta&0\\0&0&1\end{bmatrix}\cdot\begin{bmatrix} X_w\\ Y_w \\Z_w\end{bmatrix}=R_1\begin{bmatrix} X_w\\ Y_w \\Z_w\end{bmatrix} XcYcZc=cosθsinθ0sinθcosθ0001XwYwZw=R1XwYwZw
设绕X轴旋转角度为 ϕ \phi ϕ,得
{ Y c = Y w cos ⁡ ϕ − Z w sin ⁡ ϕ Z c = Y w sin ⁡ ϕ + Z w cos ⁡ ϕ X c = X w \begin{cases} Y_c=Y_w\cos\phi-Z_w\sin\phi\\ Z_c=Y_w\sin\phi+Z_w\cos\phi\\ X_c=X_w\end{cases} Yc=YwcosϕZwsinϕZc=Ywsinϕ+ZwcosϕXc=Xw
即:
[ X c Y c Z c ] = [ 1 0 0 0 c o s ϕ − s i n ϕ 0 sin ⁡ ϕ cos ⁡ ϕ ] ⋅ [ X w Y w Z w ] = R 2 [ X w Y w Z w ] \begin{bmatrix} X_c\\ Y_c \\Z_c\end{bmatrix}=\begin{bmatrix}1&0&0 \\ 0&cos\phi& -sin\phi \\ 0&\sin\phi&\cos\phi\end{bmatrix}\cdot\begin{bmatrix} X_w\\ Y_w \\Z_w\end{bmatrix}=R_2\begin{bmatrix} X_w\\ Y_w \\Z_w\end{bmatrix} XcYcZc=1000cosϕsinϕ0sinϕcosϕXwYwZw=R2XwYwZw
设绕Y轴旋转角度为 ω \omega ω,得
{ X c = X w cos ⁡ ω − Z w sin ⁡ ω Z c = X w sin ⁡ ω + Z w cos ⁡ ω Y c = X w \begin{cases} X_c=X_w\cos\omega-Z_w\sin\omega\\ Z_c=X_w\sin\omega+Z_w\cos\omega\\ Y_c=X_w\end{cases} Xc=XwcosωZwsinωZc=Xwsinω+ZwcosωYc=Xw
即:
[ X c Y c Z c ] = [ cos ⁡ ω 0 − sin ⁡ ω 0 1 0 sin ⁡ ω 0 cos ⁡ ω ] ⋅ [ X w Y w Z w ] = R 3 [ X w Y w Z w ] \begin{bmatrix} X_c\\ Y_c \\Z_c\end{bmatrix}=\begin{bmatrix}\cos\omega&0& -\sin\omega \\ 0&1&0 \\ \sin\omega&0&\cos\omega\end{bmatrix}\cdot\begin{bmatrix} X_w\\ Y_w \\Z_w\end{bmatrix}=R_3\begin{bmatrix} X_w\\ Y_w \\Z_w\end{bmatrix} XcYcZc=cosω0sinω010sinω0cosωXwYwZw=R3XwYwZw
故旋转矩阵为:
R = R 1 R 2 R 3 R=R_1R_2R_3 R=R1R2R3
偏移矩阵:
t = [ t x t y t z ] t=\begin{bmatrix}t_x \\ t_y \\t_z\end{bmatrix} t=txtytz
即外参矩阵为(三维变四维为了将旋转与平移统一起来,方便计算):
[ R 3 × 3 t 3 × 1 0 T 1 ] \begin{bmatrix}R_{3\times3}&t_{3\times1}\\0^T&1\end{bmatrix} [R3×30Tt3×11]

相机坐标系到图像坐标系的转换

针孔成像模型
针孔成像模型
因为有负号,不方便计算,于是将图像平面移到针孔平面与物体之间,使数学形式更简单。点 ( x , y ) \begin{pmatrix}x,y\end{pmatrix} (x,y)为图像坐标系坐标,点 ( X c , Y c , Z c ) \begin{pmatrix}X_c,Y_c,Z_c\end{pmatrix} (Xc,Yc,Zc)为相机坐标系坐标,将焦距 f f f分成沿X轴和Y轴方向的两个焦距 f x f_x fx f y f_y fy
{ x = f x ⋅ X c Z c y = f x ⋅ Y c Z c \begin{cases}x=f_x\cdot \frac{X_c}{Z_c} \\ y=f_x\cdot\frac{Y_c}{Z_c}\end{cases} {x=fxZcXcy=fxZcYc

设内参矩阵 K K K,相机坐标系 Q ( X c , Y c , Z c ) Q\begin{pmatrix}X_c,Y_c,Z_c\end{pmatrix} Q(Xc,Yc,Zc),投影图像坐标系 q ( x , y ) q\begin{pmatrix}x,y\end{pmatrix} q(x,y)(二维变三维方便计算)
Z c [ x y 1 ] = [ f x 0 0 0 f y 0 0 0 1 ] ⋅ [ X c Y c Z c ] = [ f x X c f y Y c Z c ] Z_c\begin{bmatrix} x\\ y \\1\end{bmatrix}=\begin{bmatrix}f_x&0& 0 \\ 0&f_y&0 \\ 0&0&1\end{bmatrix}\cdot\begin{bmatrix} X_c\\ Y_c \\Z_c\end{bmatrix}=\begin{bmatrix} f_xX_c\\f_y Y_c \\Z_c\end{bmatrix} Zcxy1=fx000fy0001XcYcZc=fxXcfyYcZc

图像坐标系到像素坐标系的转换

像素坐标系和图像坐标系都在成像平面上,只是各自的原点和度量单位不一样。图像坐标系的原点为相机光轴与成像平面的交点,通常情况下是成像平面的中点。图像坐标系的单位为mm,属于物理单位,而像素坐标系的单位是pixel,我们平常描述一个像素点都是几行几列。所以这两者之间的转换如下:其中dx和dy表示每一列和每一行分别代表多少mm,点(u,v)为像素坐标系上的点,对应的图像坐标系上的点为(x,y)。
在这里插入图片描述 { u = x d x + u 0 v = y d y + v 0 \begin{cases}u=\frac{x}{dx}+u_0 \\ v=\frac{y}{dy}+v_0\end{cases} {u=dxx+u0v=dyy+v0
[ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ x y 1 ] \begin{bmatrix}u\\v\\1\end{bmatrix}=\begin{bmatrix}\frac{1}{dx}&0&u_0\\0&\frac{1}{dy}&v_0\\0&0&1\end{bmatrix}\begin{bmatrix}x\\y\\1\end{bmatrix} uv1=dx1000dy10u0v01xy1
最终的转换关系
Z c [ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ f x 0 0 0 f y 0 0 0 1 ] ⋅ [ R 3 × 3 t 3 × 1 0 T 1 ] ⋅ [ X w Y w Z w 1 ] Z_c\begin{bmatrix} u\\ v \\1\end{bmatrix}=\begin{bmatrix}\frac{1}{dx}&0&u_0\\0&\frac{1}{dy}&v_0\\0&0&1\end{bmatrix}\begin{bmatrix}f_x&0& 0 \\ 0&f_y&0 \\ 0&0&1\end{bmatrix}\cdot\begin{bmatrix}R_{3\times3}&t_{3\times1}\\0^T&1\end{bmatrix}\cdot\begin{bmatrix} X_w\\ Y_w \\Z_w\\1\end{bmatrix} Zcuv1=dx1000dy10u0v01fx000fy0001[R3×30Tt3×11]XwYwZw1
即世界坐标 ( X w , Y w , Z w ) \begin{pmatrix}X_w,Y_w,Z_w\end{pmatrix} (Xw,Yw,Zw)经旋转加平移变换为相机坐标 ( X c , Y c , Z c ) \begin{pmatrix}X_c,Y_c,Z_c\end{pmatrix} (Xc,Yc,Zc),相机坐标 ( X c , Y c , Z c ) \begin{pmatrix}X_c,Y_c,Z_c\end{pmatrix} (Xc,Yc,Zc)进行平面投影变换为图像坐标 ( x , y ) \begin{pmatrix}x,y\end{pmatrix} (x,y),图像坐标 ( x , y ) \begin{pmatrix}x,y\end{pmatrix} (x,y)最后转换为像素坐标 ( u , v ) \begin{pmatrix}u,v\end{pmatrix} (u,v)
一个三维世界中的坐标点,可以在图像中找到一个对应的像素点。但是反过来,通过图像中的一个点找到它在三维中对应的点就很困难,因为我们并不知道等式左边的 Z c Z_c Zc值。这个 Z c Z_c Zc等于相机坐标系中相机到物体的距离。二维图像中的一个点,对应在三维空间中是一条线,因此如果不知道相机距被测物体距离,是无法从二维图像上的点推导出三维空间中某个点的坐标的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值