author:Yi Yang & Zhengpu Wang
我们商定表示方法
-
WCS:World Coordinate System
$(X^W,Y^W,Z^W)$ -
CCS:Camera Coordinate System
$(X^C,Y^C,Z^C)$ -
IPCS/FCS:Image Plane Coordinate System or Film Coordinate System$(x,y)$
-
PCS:Pixel Coordinate System
$u,v$
回顾 Lecture3,我们总结得到:
-
WCS $ \leftrightarrow
$CCS$ \leftrightarrow$IPCS ,通过 小孔成像模型 Pinhole camera model $ $ \boldsymbol p^C=\boldsymbol R \boldsymbol p^W +\boldsymbol t
\ \widetilde{\boldsymbol p}^C = \boldsymbol P\widetilde{\boldsymbol p}^W $$ -
$ \boldsymbol P_1 = \left[ \begin{array} {c|c} \boldsymbol R & \boldsymbol t \\hline \boldsymbol 0^T & \boldsymbol 1 \ \end {array} \right]=\left[ \begin{array} {c|c} \boldsymbol 1 & \boldsymbol t \\hline \boldsymbol 0^T & \boldsymbol 1 \ \end {array} \right] \left[ \begin{array} {c|c} \boldsymbol R & \boldsymbol 0 \\hline \boldsymbol 0^T & \boldsymbol 1 \ \end {array} \right] $
- 旋转矩阵是左乘原矩阵,所以先旋转再平移
-
$ \boldsymbol P_2 = \left[ \begin{array} {c|c} \boldsymbol R & \boldsymbol -t \\hline \boldsymbol 0^T & \boldsymbol 1 \\end {array} \right] $
- 同 $ \boldsymbol P_1 $,只是平移方向相反
-
$ \boldsymbol P_3 = \left[ \begin{array} {c|c} \boldsymbol R & \boldsymbol R\boldsymbol t \\hline \boldsymbol 0^T & \boldsymbol 1 \\end {array} \right] = \left[ \begin{array} {c|c} \boldsymbol R & \boldsymbol 0 \\hline \boldsymbol 0^T & \boldsymbol 1 \ \end {array} \right] \left[ \begin{array} {c|c} \boldsymbol 1 & \boldsymbol t \\hline \boldsymbol 0^T & \boldsymbol 1 \\end {array} \right] $
- 先平移再旋转
-
$ \boldsymbol P_4 = \left[ \begin{array} {c|c} \boldsymbol R & -\boldsymbol R\boldsymbol t \\hline \boldsymbol 0^T & \boldsymbol 1 \\end {array}\right] $
- 同 $ \boldsymbol P_3 $ ,只是平移方向相反
-
IPCS$ \leftrightarrow $PCS :内参矩阵 Intrinsic matrix
$u_i=u_o+s_x x_i\text{ and, }v_i=v_o+s_y y_i \$
定睛一看,这就是相机坐标系到像素坐标系的关系。可以写为:
-
齐次坐标坐标或投影坐标是一种在射影几何中使用的坐标系统,就像在欧几里得几何中使用的笛卡尔坐标一样。
-
它们的优点是点的坐标(包括无穷远处的点)可以用有限的坐标来表示。
齐次坐标系:$\widetilde{\boldsymbol p} = [\boldsymbol x,y,1]^T$
- $\boldsymbol H = \left[ \begin{array}{} \cos\theta & -\sin\theta & 0 \ \sin\theta & \cos\theta & 0 \ 0 & 0 & 1 \ \end{array} \right]$,$\boldsymbol p`=\boldsymbol H \boldsymbol p$
旋转,$\boldsymbol H = \left[ \begin{array}{} \cos\theta & -\sin\theta & 0 \ \sin\theta & \cos\theta & 0 \ 0 & 0 & 1 \
\left[ \begin{array}{c|c} \boldsymbol R & \boldsymbol 0 \\hline \boldsymbol 0^T & 1\ \end{array} \right]$,$\boldsymbol p`=\boldsymbol H \boldsymbol p$
- $\boldsymbol H = \left[ \begin{array}{} 1 & 0 & t_x \ 0 & 1 & t_y \ 0 & 0 & 1 \ \end{array} \right]$,$\boldsymbol p`=\boldsymbol H \boldsymbol p$
平移
- $\boldsymbol H = \left[ \begin{array}{} \cos\theta & -\sin\theta & t_x \ \sin\theta & \cos\theta & t_y \ 0 & 0 & 1 \ \end{array} \right]$,$\boldsymbol p`=\boldsymbol H \boldsymbol p$
先旋转,再平移$\boldsymbol H = \left[ \begin{array}{} \cos\theta & -\sin\theta & t_x \ \sin\theta & \cos\theta & t_y \ 0 & 0 & 1 \ \end{array} \right]$$ =\left[ \begin{array}{c|c} \boldsymbol R & \boldsymbol t \\hline \boldsymbol 0^T & 1\
\left[ \begin{array}{c|c}
\boldsymbol I & \boldsymbol t \\hline
\boldsymbol 0^T & 1\
\end{array} \right]
\left[ \begin{array}{c|c}
\boldsymbol R & \boldsymbol 0 \\hline
\boldsymbol 0^T & 1\
\end{array} \right]
- $\boldsymbol H = \left[ \begin{array}{} a & -b & t_x \ b & a & t_y \ 0 & 0 & 1 \ \end{array} \right]$,$\boldsymbol p`=\boldsymbol H \boldsymbol p$
旋转平移+缩放$ \boldsymbol H = \left[ \begin{array}{}
a & -b & t_x \
b & a & t_y \
0 & 0 & 1 \
\end{array} \right]
=\left[ \begin{array}{c|c}
{\color{red}\lambda} \boldsymbol R & \boldsymbol t \\hline
\boldsymbol 0^T & 1\
\end{array} \right]
- $\boldsymbol H = \left[ \begin{array}{} -1 & 0 & 0 \ 0 & 1 & 0 \ 0 & 0 & 1 \ \end{array} \right]$,$\boldsymbol p`=\boldsymbol H \boldsymbol p$
沿Y轴镜像。这个怎么看呢,有个好办法。
我们说过,矩阵代表某种变换。这个矩阵的第一列就是原来坐标系基向量
- $\boldsymbol H = \left[ \begin{array}{} 1-a & 0 & 0 \ 0 & 1+b & 0 \ 0 & 0 & 1 \ \end{array} \right]$,$\boldsymbol p`=\boldsymbol H \boldsymbol p$
拉伸。还是上面的方法,x,y基向量方向没变,大小变了。
- $\boldsymbol H = \left[ \begin{array}{} 1 & s/2 & 0 \ s/2 & 1 & 0 \ 0 & 0 & 1 \ \end{array} \right]$,$\boldsymbol p`=\boldsymbol H \boldsymbol p$
向斜右上方45度挤压(铁丝围成的长方形,沿着对角线往外拉,就这个效果)。同理,原来x=[1,0]水平向右,现在纵向方向又有所改变。
- $\boldsymbol H = \left[ \begin{array}{} 1 & s' & 0 \ 0 & 1 & 0 \ 0 & 0 & 1 \ \end{array} \right]$,$\boldsymbol p'=\boldsymbol H \boldsymbol p$
横向拉伸。
- $\boldsymbol H = \left[ \begin{array}{} a & b & c \ d & e & f \ 0 & 0 & 1 \ \end{array} \right]$,$\boldsymbol p'=\boldsymbol H \boldsymbol p$
《蹂 躏》上面说过的,旋转,平移,拉伸,缩放都用上了。
让我们更好的理解齐次坐标系
-
如何求过两点的线 (2,0) ,(1,3)?
-
有两条线$\begin{cases} 2x-y=3\ x+y=3\ \end{cases}$,试计算两条线的交点。
总结一下,齐次坐标系方法先升维再降维,有一个思维上的转换,带着投影的思路去想容易明白。
-
求过两点的线,可以从光源o点和这两个点分别连起来,就升维到了两条线。求这条线,实际上求这个透视平面(的法向量),这个透视平面和原来平面的交线就是所要求的线。
-
求两条直线的交点,升维后,实际上求这两条直线与透视点o所成的平面的交线,这条交线在原来平面上的投影就是所要求的交点。
这个是最开始学的时候的理解:
儒戈和cs的理论证明,nb!
baidu百科:平行线的视觉相交点。 如当你沿着铁路线去看两条铁轨,沿着公路线去看两边排列整齐的树木时,两条平行的铁轨或两排树木连线交与很远很远的某一点,这点在透视图中叫做消失点。
-
左图,1个消失点
-
右图,2个消失点
由于透镜的固有特性(凸透镜汇聚光线、凹透镜发散光线)导致成像直线会变成曲线。
镜头畸变主要有两类:
-
径向畸变(radial distortion)
-
切向畸变 (tangential distortion)
畸变特性:
-
径向畸变主要由于镜头的几何形状改变了直线的形状。
-
切向畸变主要由于镜头安装的时候没有与图像平面完美平行。
-
实际经验中,图像几何更加关注径向畸变,因此有时候 畸变图像校正 的过程可能会忽略切向畸变。
-
更多的内容可以看R.Fan的书:
cvapp2022_fan.pdf (ruirangerfan.com)
径向畸变主要包括
-
桶形畸变 (barrel distortion)
-
枕形畸变 (pincushion distortion)
-
八字胡畸变 (mustache distortion)
可以看出,径向畸变图像的特点是
-
关于图像中心对称
-
直线不直
畸变 | 特点 | 场景 |
---|---|---|
桶形畸变 | 中心放大了,离光心越远,图像放大率越小。 | 鱼眼镜头,广角/全景图片 |
枕形畸变 | 枕形畸变挤压了图片,(就像压扁的枕头) | 长焦镜头经常会出现枕形畸变,以消除球体效应。 |
八字胡畸变 | 上述两种类型的混合,它开始时是靠近光轴的桶形畸变,然后逐渐向图像边缘枕形畸变。 |
使用以下方法:
where $x_{dist}=\frac{x^C}{z^C}=\frac{u-u_o}{f_x}$and$y_{dist}=\frac{y^C}{z^C}=\frac{v-v_o}{f_y}$可以从畸变的图像中得到($x_{dist}$ ,$ y_{dist} $ 是归一化后的相机坐标系的点),矫正后的点是
$$ \boldsymbol P {undist}=[x{undist},y_{undist}]^T $$
$ r^2=x_{dist}^2+y_{dist}^2 $
类似地,通过
目的:移除镜头畸变对图像的影响。
-
摄像机标定是利用包含标定模式的图像来估计摄像机参数的过程。
-
相机标定包括相机内参矩阵,畸变系数,相机外参矩阵。
-
使用这些相机参数来移除镜头畸变的影响,实现测量平面物体,重构三维图像,或者其它的计算机视觉应用。
R.Fan 的三个提醒:
-
检测corner ,做标定,相机离得近一点,这样看corner point会准确一点。
-
如果这个平面不太平,对精度还是有影响。上能上的最平的板。
-
标定纸打出来以后,设计尺寸和实际尺寸会有误差,建议用尺子量实际尺寸,用实际尺寸计算。
还记得Lecture3最后的故事吗?
Lecture3_Perspective_Transformation
由2.4知相机坐标系到像素坐标系的关系
考虑世界坐标系到相机坐标系的关系
我们可以很容易得出世界坐标系和像素坐标系的关系
变换一下,得到
这里的$\boldsymbol R,\boldsymbol t$是外参,对应旋转和平移的关系,$\boldsymbol K$是内参,对应相机畸变矫正
计算重投影误差 (Re-projection error):
where
然而,当我们介绍镜头畸变参数的时候,最小化的重投影误差
只能通过非线性最优化方法解决,比如Levenberg-Marquardt algorithm算法,其中$\pi ( ·)$是一个计算重投影坐标系$\hat{\boldsymbol p}$的方程。
这里写总结
-
重要内容总结