# 相机与图像

# 相机模型

# 针孔相机模型

针孔相机模型

设现实中的点PP在相机坐标系下的坐标为[X,Y,Z]T[X,Y,Z]^T,呈像的点PP^{\prime}[X,Y,Z]T[X^{\prime},Y^{\prime},Z^{\prime}]^T,并且设物理成像平面到小孔的距离为ff焦距。那么,根据三角形相似关系,有:

Zf=XX=YY \frac{Z}{f} = -\frac{X}{X^{\prime}} = -\frac{Y}{Y^{\prime}}

其中负号表示成的像是倒立的。为了简化模型,可以把成像平面移动到相机前方,和三维空间点放在坐标系的同一侧

Zf=XX=YYX=fXZY=fYZ \frac{Z}{f} = \frac{X}{X^{\prime}} = \frac{Y}{Y^{\prime}} \\ X^{\prime} = f\frac{X}{Z} \\ Y^{\prime} = f\frac{Y}{Z}

简化模型+归一化

物理成像平面固定着一个像素平面ouvo-u-v,在像素平面得到了PP^{\prime}的像素坐标:[u,v]T[u,v]^T

像素在uu轴上缩放了α\alpha倍,在vv轴上缩放了β\beta倍,基于原点平移了[cx,cy]T[c_x,c_y]^T

{u=αX+cxv=βY+cylet:fx=αffy=βfthen{u=fxXZ+cxv=fyYZ+cy \begin{align*} &\begin{cases} u = \alpha X^{\prime} + c_x \\ v = \beta Y^{\prime} + c_y \end{cases} \\\\ &let: \\ &f_x = \alpha f \\ &f_y = \beta f \\\\ &then:\\ &\begin{cases} u = f_x \frac{X}{Z} + c_x \\ v = f_y \frac{Y}{Z} + c_y \\ \end{cases} \end{align*}

矩阵形式

(uv1)=1Z(fx0cx0fycy001)(XYZ)1ZKP \begin{pmatrix} u \\ v \\ 1 \end{pmatrix} = \frac{1}{Z}\begin{pmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} X \\ Y \\ Z \end{pmatrix} \triangleq \frac{1}{Z}\bold{KP}

K\bold{K}称为相机的内参数矩阵(Camera Intrinsics)
通常认为,相机的内参在出厂之后是固定的,不会在使用过程中发生变化。有的相机生产厂商会告诉你相机的内参,而有时需要你自己确定相机的内参,也就是所谓的标定

A matrix relating a camera's internal properties to an ideal pinhole-camera model.(developer.apple.com) (opens new window)

P\bold{P}的相机坐标应该是他的世界坐标Pw\bold{P}_w根据相机的当前位姿,变换到相机坐标系下的结果。相机的位姿由它的旋转矩阵R\bold{R}和平移向量t\bold{t}来描述

ZPuv=Z[uv1]=K(RPw+t)=KTPw Z\bold{P}_{uv} = Z\begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \bold{K}(\bold{RP}_w + \bold{t}) = \bold{KTP}_w

相机的位姿R,t\bold{R},\bold{t}又称为相机的外参数(Camera Extrinsics)

齐次坐标乘上非零常数后表达同样的含义,即[u,v,1]T[u,v,1]^T等价[Zu,Zv,Z]T[Zu,Zv,Z]^T,所以可以简单的把ZZ去掉

Puv=KTPw \bold{P}_{uv} = \bold{KTP}_w

上式中隐含了一次齐次坐标到非齐次坐标的转换

把世界坐标系下的齐次坐标变换到相机坐标系下,即TPw\bold{TP}_wTPw\bold{TP}_w是仍是齐次坐标,为了使它和K\bold{K}相乘,需要取它的前三维组成向量,因为其最后一维为11,即:Pc~=[XYZ]=(TPw)(1:3)\tilde {P_c} = \begin{bmatrix} X \\ Y \\ Z \end{bmatrix} = (\bold{TP}_w)_{(1:3)}

针对三维向量,按照齐次坐标的方式,把最后一维进行归一化处理,得到PP在相机归一化平面上的投影:Pc=[X/ZY/Z1]\bold{P}_c = \begin{bmatrix}X/Z\\Y/Z\\1\end{bmatrix}

这时Pc\bold{P}_c可以看成一个二维的齐次坐标,称为归一化坐标。它位于相机前方 z=1z = 1处的平面上。该平面称为归一化平面

# 畸变

  • 由透镜形状引起的畸变称之为径向畸变
    两种径向畸变
  • 在相机的组装过程中由于不能使得透镜和成像面严格平行也会引入切向畸变
    切向畸变来源示意图

把平面上的点[x,y]T[x,y]^T写成极坐标的形式[r,θ]T[r,\theta]^Trr表示点距离原点的距离, θ\theta表示和水平轴的夹角。
径向畸变可以看成坐标点沿着长度方向发生了变化δr\delta r,也就是其距离原点的长度发生了变化
切向畸变可以看成坐标点沿着切线方向发生了变化,也就是水平夹角发生了变化δθ\delta \theta

# 矫正

矫正镜像畸变

x,yx,y是未纠正的点的坐标

xcorrected=x(1+k1r2+k2r4+k3r6)ycorrected=y(1+k1r2+k2r4+k3r6) x_{corrected} = x(1+k_1r^2 + k_2r^4+k_3r^6) \\ y_{corrected} = y(1+k_1r^2 + k_2r^4+k_3r^6) \\

矫正切向畸变

xcorrected=x+2p1xy+p2(r2+2x2)ycorrected=y+p1(r2+2y2)+2p2xy x_{corrected} = x + 2p_1xy + p_2(r^2+2x^2) \\ y_{corrected} = y + p_1(r^2 + 2y^2) + 2p_2xy

联合切向畸变和径向畸变,对于相机坐标系中的一点P(X,Y,Z)P(X,Y,Z),我们能够通过五个畸变系数找到这个点在像素平面上的正确位置

1.三维空间的点投影到归一化图像平面,假设归一化坐标为[x,y]T[x,y]^T
2.对归一化平面上的点进行径向畸变和切向畸变矫正

{xcorrected=x(1+k1r2+k2r4+k3r6)+2p1xy+p2(r2+2x2)ycorrected=y(1+k1r2+k2r4+k3r6)+p1(r2+2y2)+2p2xy \begin{cases} x_{corrected} = x(1+k_1r^2 + k_2r^4+k_3r^6) + 2p_1xy + p_2(r^2+2x^2)\\ y_{corrected} = y(1+k_1r^2 + k_2r^4+k_3r^6) + p_1(r^2 + 2y^2) + 2p_2xy\\ \end{cases}

3.纠正后的点通过内参矩阵投影到像素平面,得到该点在图像上的正确的位置

{u=fxxcorrected+cxv=fyycorrected+cy \begin{cases} u = f_xx_{corrected } + c_x \\ v = f_yy_{corrected } + c_y \end{cases}

# 双目相机模型

双目相机一般由左眼和右眼两个水平放置的相机组成。当然也可以做成上下两个目, 但我们见到的主流双目都是做成左右的。在左右双目的相机中,我们可以把两个相机都看作针孔相机。它们是水平放置的,意味两个相机的光圈中心都位于 xx 轴上。它们的距离称为双目相机的基线(Baseline, 记作 bb),是双目的重要参数

双目相机的成像模型

根据三角形PPLPRP-P_L-P_RPOLORP-O_L-O_R的相似关系(高之比等于底边之比), 有:

zfz=buL+uRb \frac{z-f}{z} = \frac{b-u_L+u_R}{b}

整理得到:

z=fbd,d=uLuR z = \frac{fb}{d}, d = u_L - u_R

dd为左右图的横坐标之差,称为视差(Disparity)。根据视差,我们可以估计一个像素离相机的距离。视差与距离成反比,视差越大,距离越近。
同时,由于视差最小为一个像素,于是双目的深度存在一个理论上的最大值,由 fbfb 确定

虽然由视差计算深度的公式很简单,但视差dd本身的计算却比较困难,因为需要确切知道左眼图像某个像素出现在右眼图像的哪个位置(即对应关系),这件事也属于“人类觉得很容易而计算机觉得困难”的事务。当我们想计算每个像素的深度时,其计算量与精度都将成为问题,而且只有在图像纹理变化丰富的地方才能计算视差。

# RGB-D 相机模型

RGB-D 能够主动测量每个像素的深度,按原理可分为两大类

  • 红外结构光(Structured Light)
    向探测目标发射一束光线,相机根据返回的结构光图案,计算物体离自身的距离
    容易受到日光或者其他传感器发射的红外光干扰,因此不能在室外使用,同时使用多个时也会相互干扰。对
    于透射材质的物体,因为接受不到反射光,所以无法测量这些点的位置
  • 飞行时间法(Time-of-flight,ToF)
    向探测目标发射脉冲光,然后根据发送到返回之间的光束飞行时间,确定物体离自身
    的距离

pcd file format (opens new window)