depth estimation笔记

Dense Prediction

dense prediction 应该是指 pixel-wise prediction,有几种任务都属于这一类,包括:semantic / instance / panoptic segmentation、depth estimation、surface normal estimation,等等。

Background of Camera

凸透镜可以会使光线汇聚,过焦点之后有类似小孔成像的效果,用作相机镜头以成像。光线透过凸透镜后一般会发生折射,但凸透镜中存在一点,使得通过的光线不发生折射,谓之光学中心,简称光心,可以近似将凸透镜中心看作光心的位置[1]。平行光透过凸透镜后会汇集到一点,谓之焦点(focal point)。光心到焦点的距离谓之焦距(focal length),记为 f。过凸透镜两个球面球心的直线谓之主光轴。成像最清晰的位置一般在一倍到两倍焦距之间(所以在焦点后面),参考 [2]。

depth estimation笔记_第1张图片
Fig. 1

4 Coordinate Systems

  • 世界座标系:world coordinate system,参考 [3-6],好像是自己在空间中任意找一点做原点建立空间直角座标系。由 [6] 的评论来看,应该要建成手系(right-handed coordinate system),即右手拇指为 x、食指为 y、中指为 z。座标可用「 w _w w 」标记: ( x w , y w , z w ) (x_w,y_w,z_w) (xw,yw,zw)
  • 相机座标系:[5] 称 camera view coordinate system。也是右手系,光心为原点,z 轴沿光轴指出,x、y 分别平行于图像的两轴(假设图像是矩形),参照下面图 2 的方式指定 x 指右、y 指下。座标可用「 c _c c 」标记: ( x c , y c , z c ) (x_c,y_c,z_c) (xc,yc,zc)
  • 图像座标系:[7] 称之为「图像物理座标系」。此处「图像」是指 3D 景象在相机中小孔成像得到的像,而不是像素形式的电子相。相机中应该有一个平面装置用于成像?类似视网膜,谓之光屏成像平面(image/retinal plane)。此座标轴的原点是光轴与成像平面的交点,谓之 principal point。x、y 轴与相机座标系的 x、y 轴平行且同向,即也是 x 指右、y 指下。座标记为: ( x , y ) (x,y) (x,y)
  • 像素座标系:[5] 称 screen coordinate system,[11] 称图像像素坐标系。前三个座标系单位都是长度单位,而此座标系单位是像素。与相机座标系同在成像平面,只是换了原点位置和单位。原点在图像左上角,横轴称 u 轴,指右;纵轴称 v 轴,指下。座标记为: ( u , v ) (u,v) (u,v)

图示见 [3,5,6]([6] 中有些画成左手系了,需要甄别),几个座标系的转化见 [6-8] 和后文相机成像模型。

NeRF[30] 中用到的 camera 座标是 OpenGL 式的(其代码的 README 有讲):x 还是指右,但 y 指、z 指,也叫视座标(eye coordinates),跟这里写的同,不过还是右手系。而且它只考虑一个视锥(frustum,一个截头锥体,即三维梯形)范围的点,超出范围的点截断不考虑,称为 clip coordinates,然后映射到 NDC(Normalised Device Coordinates)。NDC 是个手系,跟 OpenGL camera 座标的关系是:z 轴反向(即沿光轴指出),而 x、y 轴同向。这部分可以跟 [31] 和 NeRF 的 supplementary material 一起看。

3 Angles

参考 [9-14],以飞机为例,类似相机座标系,以飞机重心为原点,基于飞机自身建立右手系,三条轴介绍见 [9]。

depth estimation笔记_第2张图片
Fig. 2
  • yaw:yaw 轴是立轴(vertical axis),重力方向是正向。沿 yaw 轴旋转的角称 yaw 角 / 偏航角。
  • roll:roll 轴是纵轴(longitudinal axis),正向向机头指出。沿 roll 轴旋转的角称 roll 角 / 翻滚角 / 滚动角。
  • pitch:pitch 轴是横轴(transverse / lateral axis),正向指右。沿 pitch 轴旋转的角称 pitch 角 / 俯仰角。

顺各轴正向看去,顺时针转为正角,逆时针转为负角。

Camera Pose

参考 [15,16],位姿(pose)包括位置和姿势。以世界座标系为参考系、用相机座标系代表相机,则:

  • 相机的位置可以用相机座标系原点到世界座标系原点的偏移表示,记为偏移向量 t = ( t x , t y , t z ) \boldsymbol{t}=(t_x,t_y,t_z) t=(tx,ty,tz)

  • 姿势表示相机相对于世界来说,是抬头还是低头、左望还是右望、正视还是歪脖,建模成相对世界座标系的旋转,即绕一个三维向量旋转一个角度,此时的座标变换用罗德里格斯(Rodrigues)旋转公式(见 [17,18])描述: u = ( cos ⁡ θ ) v + ( 1 − cos ⁡ θ ) ( r ⋅ v ) r + ( sin ⁡ θ ) r × v \boldsymbol{u}=(\cos\theta)\boldsymbol{v}+(1-\cos\theta)(\boldsymbol{r}\cdot\boldsymbol{v})\boldsymbol{r}+(\sin\theta)\boldsymbol{r}\times\boldsymbol{v} u=(cosθ)v+(1cosθ)(rv)r+(sinθ)r×v其中 v \boldsymbol{v} v 是原向量, r = ( r x , r y , r z ) \boldsymbol{r}=(r_x,r_y,r_z) r=(rx,ry,rz) 是旋转轴(单位向量), θ \theta θ v \boldsymbol{v} v r \boldsymbol{r} r 时针旋转的角度, u \boldsymbol{u} u 是旋转后的向量。它又可以写成矩阵形式: u = R v = v + ( sin ⁡ θ ) [ r ] × v + ( 1 − cos ⁡ θ ) [ r ] × 2 v \boldsymbol{u}=\boldsymbol{R}\boldsymbol{v}=\boldsymbol{v}+(\sin\theta)[\boldsymbol{r}]_{\times}\boldsymbol{v}+(1-\cos\theta)[\boldsymbol{r}]_{\times}^2\boldsymbol{v} u=Rv=v+(sinθ)[r]×v+(1cosθ)[r]×2v其中 [ r ] × = [ 0 − r z r y r z 0 − r x − r y r x 0 ] [\boldsymbol{r}]_{\times}=\left[\begin{aligned} 0 && -r_z && r_y \\ r_z && 0 && -r_x \\ -r_y && r_x && 0\end{aligned}\right] [r]×= 0rzryrz0rxryrx0 是由 r \boldsymbol{r} r 生成的反对称阵, R = I + ( sin ⁡ θ ) [ r ] × + ( 1 − cos ⁡ θ ) [ r ] × 2 = ( cos ⁡ θ ) I + ( sin ⁡ θ ) [ r ] × + ( 1 − cos ⁡ θ ) r r T \begin{aligned}\boldsymbol{R}&=\boldsymbol{I}+(\sin\theta)[\boldsymbol{r}]_{\times}+(1-\cos\theta)[\boldsymbol{r}]_{\times}^2 \\ &=(\cos\theta)\boldsymbol{I}+(\sin\theta)[\boldsymbol{r}]_{\times}+(1-\cos\theta)\boldsymbol{r}\boldsymbol{r}^T \end{aligned} R=I+(sinθ)[r]×+(1cosθ)[r]×2=(cosθ)I+(sinθ)[r]×+(1cosθ)rrT 是旋转矩阵。由旋转矩阵反推旋转角 θ \theta θ、旋转轴 r \boldsymbol{r} r 见 [18,19]。

Camera Imaging

相机成像即将三维世界中的景物投影到成像平面,由感光器件转成电子图像。在由前文几个座标系描述的世界观中,成像模型描述三维点从世界座标系中(的座标)变换成像素座标系(的座标)的过程,参考 [20-24]。

rigid transformation

当世界座标系和相机座标系不是同一个座标系时,第一步需要转换视角,将三维点的位置从世界座标系下的表示改为相机座标系下的表示。这一步是刚体变换,只涉及旋转和平移:
( x c y c z c ) = R ( x w y w z w ) + t \left(\begin{aligned} x_c \\ y_c \\ z_c \end{aligned}\right)=\boldsymbol{R}\left(\begin{aligned} x_w \\ y_w \\ z_w \end{aligned}\right)+\boldsymbol{t} xcyczc =R xwywzw +t 这样写是仿射的形式,可以引入齐次座标(homogeneous coordinates)改写成线性变换(即只有矩阵乘法)的形式:
( x c y c z c 1 ) = [ R t 0 T 1 ] ( x w y w z w 1 ) \left(\begin{aligned} x_c \\ y_c \\ z_c \\ 1 \end{aligned}\right)=\left[\begin{aligned} & \boldsymbol{R} & \boldsymbol{t} \\ & \boldsymbol{0}^T & 1 \end{aligned}\right]\left(\begin{aligned} x_w \\ y_w \\ z_w \\ 1 \end{aligned}\right) xcyczc1 =[R0Tt1] xwywzw1 齐次座标的介绍见 [25-27],感觉在这里只是个简化符号的伎俩。

R \boldsymbol{R} R t \boldsymbol{t} t 合称外参(extrinsic parameters),「外」是指不依赖于相机本身的属性(如:相机型号改变,并不影响这一步的座标系变换)。由 [18-20], R \boldsymbol{R} R 可以还原回旋转轴 r \boldsymbol{r} r、旋转角 θ \theta θ,又因为旋转轴只需要方向信息,故可以顺便用旋转轴的模长编码旋转角(从球座标的角度看,就是用两个角度表示旋转轴(的方向)、用极径表示旋转角),于是外参实质只有 6 个变量/自由度。

perspective projection / projective transformation

透视投影是将三维点投影到二维成像平面/光屏。由 [28],理想的成像是一个物点惟一对应一个像点,即由一个物点发出/反射的多条光线中,只有一条(或少数几条)射在光屏上(图示见 [24] Figure 1),一个光圈足够小的小孔相机(pinhole camera)可以实现,但会因为射入光线太少而成像过喑。

凸透镜可以让一个物点发出/反射的多条光线射入而又汇聚到一点,兼顾成像清晰和亮,其图示见 [2,20,24]。但是这里的「清晰」只是对部分物点,由更远、更近的物点发出/反射的光线在透镜后汇聚的位置并不恰好在光屏上。所以只有一定(前后)范围内的物点能成清晰的像,这个范围谓之景深(depth of field)。

(高斯)成像公式[29]给出透镜成像的比例关系,而由 [2] 的规律,理想成像位置在焦点后方。当:

  • 假装焦距和像距相等(物距充分大,成像公式中物距倒数那项充分小,可以忽略
  • 假装所有物点都理想成像,即发出的光线在透镜后恰好在光屏上汇聚
  • (暂时)假装没有变形(distortion)(参考 [20,23,24],一种常见变形是径向变形(radial distortion),其又可细分为枕型(pincushion)和桶型(barrel)

时,可以用小孔成像的模型近似透视投影的过程,参考 [20-24]。此时成的像是掉转的(即实像的 x’、y’ 正向与相机座标系的 x c x_c xc y c y_c yc 正向相反),为了方便,这一步变换一般基于实像关于光心点对称所得像进行描述,这个像就是正的(x、y 正向与 x c x_c xc y c y_c yc 正向相同),跟人看到的一样。由相似三角形(图示见 [21,22]),有: z c z = x c x = y c y \frac{z_c}{z}=\frac{x_c}{x}=\frac{y_c}{y} zzc=xxc=yyc 此处 z 指像距,在小孔相机中 z = f,在透镜相机中其实 z = f + Δ z=f+\Delta z=f+Δ,但这里忽略 Δ \Delta Δ。于是: ( x y ) = ( x c z c f y c z c f ) \left(\begin{aligned}x \\ y\end{aligned}\right) = \left(\begin{aligned}\frac{x_c}{z_c}f \\ \frac{y_c}{z_c}f\end{aligned}\right) (xy)= zcxcfzcycf 齐次座标下写成: z c ( x y 1 ) = [ f 0 0 0 0 f 0 0 0 0 1 0 ] ( x c y c z c 1 ) z_c\left(\begin{aligned}x \\ y \\ 1\end{aligned}\right) = \left[\begin{aligned}f && 0 && 0 && 0 \\ 0 && f && 0 && 0 \\ 0 && 0 && 1 && 0\end{aligned}\right] \left(\begin{aligned}x_c \\ y_c \\ z_c \\ 1\end{aligned}\right) zc xy1 = f000f0001000 xcyczc1

digitalisation

(虚像的)图像座标系与像素座标系有两点不同:

  • 原点:图像座标系原点在成像平面中心(与光轴的交点),记为 ( c x , c y ) (c_x, c_y) (cx,cy);像素座标系的在左上角;
  • 单位:图像座标系的长度单位是厘米等物理长度单位,像素座标系的单位是像素。

所以从图像座标系到像素座标系的转变包括平移和缩放: ( u v ) = ( k ⋅ x + c x l ⋅ y + c y ) = ( k f x c z c + c x l f y c z c + c y ) \left(\begin{aligned}u \\ v\end{aligned}\right) = \left(\begin{aligned}k\cdot x + c_x \\ l\cdot y + c_y\end{aligned}\right) = \left(\begin{aligned}kf\frac{x_c}{z_c} + c_x \\ lf\frac{y_c}{z_c} + c_y\end{aligned}\right) (uv)=(kx+cxly+cy)= kfzcxc+cxlfzcyc+cy 其中 c x c_x cx c y c_y cy 是图像座标系原点相对于像素座标系原点的偏移,单位是厘米这种的;k、l 是两个方向上的分辨率,单位相应地是 p i x e l / c m pixel/cm pixel/cm。齐次座标下写成 : ( u v 1 ) = ( k f x c z c + c x l f y c z c + c y 1 ) = ( k f x c + c x ⋅ z c l f y c + c y ⋅ z c z c ) = [ k f 0 c x 0 0 l f c y 0 0 0 1 0 ] ( x c y c z c 1 ) \left(\begin{aligned}u \\ v \\ 1\end{aligned}\right) = \left(\begin{aligned}kf\frac{x_c}{z_c} + c_x \\ lf\frac{y_c}{z_c} + c_y \\ 1\end{aligned}\right) = \left(\begin{aligned}kfx_c + c_x\cdot z_c \\ lfy_c + c_y\cdot z_c \\ z_c\end{aligned}\right) = \left[\begin{aligned}kf && 0 && c_x && 0 \\ 0 && lf && c_y && 0 \\ 0 && 0&& 1 && 0\end{aligned}\right] \left(\begin{aligned}x_c \\ y_c \\ z_c \\ 1\end{aligned}\right) uv1 = kfzcxc+cxlfzcyc+cy1 = kfxc+cxzclfyc+cyzczc = kf000lf0cxcy1000 xcyczc1

camera matrix

将上式改写成: ( u v 1 ) = [ k f 0 c x 0 l f c y 0 0 1 ] ⏟ K ′ [ I 0 ] ( x c y c z c 1 ) \left(\begin{aligned}u \\ v \\ 1\end{aligned}\right) = \underbrace{\left[\begin{aligned}kf && 0 && c_x \\ 0 && lf && c_y \\ 0 && 0 && 1 \end{aligned}\right]}_{\boldsymbol{K}'} [\boldsymbol{I}\quad0] \left(\begin{aligned}x_c \\ y_c \\ z_c \\ 1\end{aligned}\right) uv1 =K kf000lf0cxcy1 [I0] xcyczc1 其中 K ′ \boldsymbol{K}' K 谓之相机矩阵(camera matrix),此时没有考虑扭曲(skewness)。扭曲指相机座标系的 x c x_c xc y c y_c yc 两轴不是严格的直角,记两轴所夹角度为 ϕ \phi ϕ,参考 [20,23,24],考虑扭曲校正之后的相机矩阵为: K = [ k f − k f cot ⁡ ϕ c x 0 l f csc ⁡ ϕ c y 0 0 1 ] \boldsymbol{K} = \left[\begin{aligned}kf && -kf\cot\phi && c_x \\ 0 && lf\csc\phi && c_y \\ 0 && 0 && 1 \end{aligned}\right] K= kf00kfcotϕlfcscϕ0cxcy1 有 5 个自由度,即 α = k f \alpha=kf α=kf β = l f \beta=lf β=lf ϕ \phi ϕ c x c_x cx c y c_y cy,合称内参(intrinsic parameters)。

TODO

立体/双目视觉(stereo vision)、对极几何(epipolar geometry)

  • 多视角立体视觉简介(仅限初学者)
  • 对极几何及单应矩阵
  • 双目视觉(stereo vision)
  • StereoVision–立体视觉(1)

References

  1. 光心
  2. 凸透镜成像规律
  3. 世界坐标系,相机坐标系,图像坐标系,像素坐标系
  4. 世界坐标系
  5. Cameras
  6. 计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换
  7. (四十)通俗易懂理解——相机坐标转换
  8. 世界坐标系,相机坐标系,图像坐标系,像素坐标系的转换
  9. Aircraft principal axes
  10. Pitch, yaw, and roll
  11. Roll, Pitch, and Yaw
  12. 无人机的偏航角,滚动角,俯仰角解释
  13. 坐标系和yaw, pitch, roll等基础概念
  14. 简单理解3D系统中pitch/yaw/roll 的基本概念
  15. 当我们说相机的位姿的时候,我们在说什么?
  16. 什么是相机的位姿 ?
  17. 罗德里格斯旋转公式(Rodrigues’ rotation formula)推导
  18. 三维空间下的 Rodrigues 旋转公式
  19. 图像处理——罗德里格斯公式反推旋转角度和旋转向量
  20. 相机的那些事儿 (二)成像模型
  21. SLAM入门之视觉里程计(2):相机模型(内参数,外参数)
  22. 相机成像的几何描述
  23. Camera Models and Imaging
  24. CS231A Course Notes 1: Camera Models
  25. Homogeneous Coordinates(译文:关于齐次坐标的理解(经典))
  26. 从零开始一起学习SLAM | 为什么要用齐次坐标?
  27. 齐次坐标的理解
  28. 凸透镜成像和小孔成像的原理分别是什么?有哪些区别和联系?
  29. 成像公式
  30. (ECCV 2020) NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis - ecva, supplementary, code, pytorch 复现
  31. OpenGL Projection Matrix
  32. 视差Disparity与深度图
  33. 立体匹配入门指南(8):视差图、深度图、点云
  34. 三维激光点云到二维图像的投影
  35. 深度图与3D点云互转
  36. 处理点云数据(四):点云到图像平面的投影
  37. 基于深度学习的单目深度估计综述
  38. 单目深度估计
  39. 单目视觉深度估计测距的前生今世
  40. 单目深度估计综述: Monocular Depth Estimation survey
  41. NeRF代码解读-相机参数与坐标系变换

你可能感兴趣的:(机器学习,depth,camera,3D,vision,dense)