Image Formation⚓︎
约 6120 个字 预计阅读时间 31 分钟
Primitives and Transformations⚓︎
几何图元(geometric primitives) 是用于描述 3D 形状的基本构建块 (basic building blocks),下面将介绍其中的点(points)、线(lines) 和面(planes),以及一些最基本的变换(transformations)。
2D Primitives⚓︎
Points⚓︎
- 非齐次坐标(inhomogeneous coordinates) 形式:\(\mathbf{x} = \begin{pmatrix}x \\ y\end{pmatrix} \in \mathbb{R}^2\)
- 齐次坐标(homogeneous coordinates) 形式:\(\tilde{\mathbf{x}} = \begin{pmatrix}\tilde{x} \\ \tilde{y} \\ \tilde{w}\end{pmatrix} \in \mathbb{P}^2\),其中 \(\mathbb{P}^2 = \mathbb{R}^3 \backslash \{(0, 0, 0)\}\) 为投影空间(projective space)
注:仅比例不同的齐次向量被认为是相等的,并且它们形成了一个等价类 => 齐次坐标由比例定义
-
非齐次坐标 \(\mathbf{x}\) -> 齐次坐标 \(\tilde{\mathbf{x}}\) $$ \tilde{\mathbf{x}} = \begin{pmatrix}\tilde{x} \ \tilde{y} \ \tilde{w}\end{pmatrix} = \begin{pmatrix}x \ y \ 1\end{pmatrix} = \begin{pmatrix}\mathbf{x} \ 1\end{pmatrix} = \bar{\mathbf{x}} $$
其中 \(\bar{\mathbf{x}}\) 为增广向量(augmented vector)。
-
齐次坐标 -> 非齐次坐标 $$ \bar{\mathbf{x}} = \begin{pmatrix}\mathbf{x} \ 1\end{pmatrix} = \begin{pmatrix}x \ y \ 1\end{pmatrix} = \dfrac{1}{\tilde{w}} \tilde{\mathbf{x}} = \dfrac{1}{\tilde{w}} \begin{pmatrix}\tilde{x} \ \tilde{y} \ \tilde{w}\end{pmatrix} = \begin{pmatrix}\tilde{x} / \tilde{w}\ \tilde{y} / \tilde{w}\ 1\end{pmatrix} $$
最后一个元素 \(\tilde{w} = 0\) 的齐次坐标被称为理想点(ideal points) 或无穷远点(points at infinity)。这样的点不能被表示成非齐次坐标的形式。
二维齐次坐标和非齐次坐标的几何关系:
Lines⚓︎
2D 直线可用齐次坐标表示:\(\tilde{\mathbf{l}} = (a, b, c)^T\) $$ {\bar{\mathbf{x}} | \tilde{\mathbf{l}}^T \bar{\mathbf{x}} = 0} \quad \Leftrightarrow \quad {x, y | ax + by + c = 0} $$
我们可以归一化(normalize) \(\tilde{\mathbf{l}}\),使得 \(\tilde{\mathbf{l}} = (n_x, n_y, -d)^T = (\mathbf{n}, -d)^T\),其中 \(\|\mathbf{n}\|_2 = 1\),其中 \(\mathbf{n}\) 是和直线垂直的法向量,\(d\) 是到原点的距离。
一个例外是无穷远直线(line at infinity) \(\tilde{\mathbf{l}}_\infty = (0, 0, 1)^T\),它经过了所有的理想点。
叉积(cross product) 被表示为斜对称矩阵 (skew-symmetric matrix) 与向量的乘积。 $$ \mathbf{a} \times \mathbf{b} = [\mathbf{a}]_\times \mathbf{b} = \begin{bmatrix}0 & -a_3 & a_2 \a_3 & 0 & -a_1 \ -a_2 & a_1 & 0\end{bmatrix} \begin{pmatrix}b_1 \ b_2 \ b_3\end{pmatrix} = \begin{pmatrix}a_2b_3 - a_3b_2 \ a_3b_1 - a_1b_3 \ a_1b_2 - a_2b_1\end{pmatrix} $$
注:之后我们就约定用方括号表示矩阵,圆括号表示向量。
二维直线的算术运算:
- 齐次坐标下,两条直线的交(intersection) 为:\(\tilde{\mathbf{x}} = \tilde{\mathbf{l}}_1 \times \tilde{\mathbf{l}}_2\)
- 同样地,连接两点的直线可以简写为:\(\tilde{\mathbf{l}} = \tilde{\mathbf{x}}_1 \times \tilde{\mathbf{x}}_2\)
更复杂的代数对象可以使用多项式齐次方程(polynomial homogeneous equations) 来表示。例如,圆锥曲线()(作为平面与三维圆锥的交线)可以用二次方程来表示: $$ {\bar{\mathbf{x}} | \bar{\mathbf{x}}^T \mathbf{Q} \bar{\mathbf{x}} = 0} $$
这对于多视图几何以及相机校准 (camera calibration) 很有帮助。
3D Primitives⚓︎
Points⚓︎
- 非齐次坐标(inhomogeneous coordinates) 形式:\(\mathbf{x} = \begin{pmatrix}x \\ y \\ z\end{pmatrix} \in \mathbb{R}^3\)
- 齐次坐标(homogeneous coordinates) 形式:\(\tilde{\mathbf{x}} = \begin{pmatrix}\tilde{x} \\ \tilde{y} \\ \tilde{z} \\ \tilde{w}\end{pmatrix} \in \mathbb{P}^3\),其中投影空间 \(\mathbb{P}^3 = \mathbb{R}^4 \backslash \{(0, 0, 0, 0)\}\)
Planes⚓︎
3D 平面可用齐次坐标表示:\(\tilde{\mathbf{m}} = (a, b, c, d)^T\) $$ {\bar{\mathbf{x}} | \tilde{\mathbf{m}}^T \bar{\mathbf{x}} = 0} \quad \Leftrightarrow \quad {x, y, z | ax + by + cz + d = 0} $$
再次归一化(normalize) \(\tilde{\mathbf{m}}\),使得 \(\tilde{\mathbf{l}} = (n_x, n_y, n_z, -d)^T = (\mathbf{n}, -d)^T\),其中 \(\|\mathbf{n}\|_2 = 1\),其中 \(\mathbf{n}\) 是和平面垂直的法向量,\(d\) 是到原点的距离。
一个例外是无穷远平面(plane at infinity) \(\tilde{\mathbf{l}}_\infty = (0, 0, 0, 1)^T\),它经过了所有的理想点。
Lines⚓︎
3D 直线的表示不如 2D 直线或 3D 平面优雅。一种可能的表示方法是,将线上的点表示为该线上的两个点 \(p\) 和 \(q\) 的线性组合: $$ {\mathbf{x} | \mathbf{x} = (1 - \lambda) \mathbf{p} + \lambda \mathbf{q} \wedge \lambda \in \mathbb{R}} $$
然而,这种表示法使用了 6 个参数来描述 4 个自由度(degree of freedom, DoF)(可以自由变化的数据个数
Quadrics⚓︎
二维圆锥曲线的三维类比是二次曲面(quadric surface)。 $$ {\bar{\mathbf{x}} | \bar{\mathbf{x}}^T \mathbf{Q} \bar{\mathbf{x}} = 0} $$
这同样在多视图几何研究中非常有用,并且可作为有用的建模基元 (modeling primitives)(比如球体、椭球体、圆柱体等
超二次曲面(superquadrics)(二次曲面的泛化)用于形状抽象和压缩:
Transformations⚓︎
2D Transformations⚓︎
-
平移(translation):对输入的 2D 平移,2 DoF $$ \mathbf{x}' = \mathbf{x} + \mathbf{t} \quad \Leftrightarrow \quad \bar{\mathbf{x}}' = \begin{bmatrix}\mathbf{I} & \mathbf{t} \ \mathbf{0}^T & 1\end{bmatrix} \bar{\mathbf{x}} $$
- 使用齐次表示法可以链接 / 逆转变换
- 增广向量 \(\bar{\mathbf{x}}\) 能始终被替换为一般的齐次形式 \(\tilde{\mathbf{x}}\)
-
欧几里得(Euclidean) 变换:2D 平移 + 2D 旋转,3 DoF $$ \mathbf{x}' = \mathbf{Rx} + \mathbf{t} \quad \Leftrightarrow \quad \bar{\mathbf{x}}' = \begin{bmatrix}\mathbf{R} & \mathbf{t} \ \mathbf{0}^T & 1\end{bmatrix} \bar{\mathbf{x}} $$
- \(\mathbf{R} \in SO(2)\) 是一个正交归一旋转矩阵,满足 \(\mathbf{RR}^T = \mathbf{I}, \det(\mathbf{R}) = 1\)
- 欧几里得变换保留了欧几里得距离
-
相似(similarity) 变换:2D 平移 + 可缩放的 2D 旋转,4 DoF $$ \mathbf{x}' = s\mathbf{Rx} + \mathbf{t} \quad \Leftrightarrow \quad \bar{\mathbf{x}}' = \begin{bmatrix}s\mathbf{R} & \mathbf{t} \ \mathbf{0}^T & 1\end{bmatrix} \bar{\mathbf{x}} $$
- \(\mathbf{R} \in SO(2)\) 是一个旋转矩阵,\(s\) 是一个任意的缩放因子
- 相似变换保留了线之间的夹角关系
-
仿射(affine) 变换:2D 线性变换,6 DoF $$ \mathbf{x}' = \mathbf{Ax} + \mathbf{t} \quad \Leftrightarrow \quad \bar{\mathbf{x}}' = \begin{bmatrix}\mathbf{A} & \mathbf{t} \ \mathbf{0}^T & 1\end{bmatrix} \bar{\mathbf{x}} $$
- \(\mathbf{A} \in \mathbb{R}^{2 \times 2}\) 是一个任意的 \(2 \times 2\) 的矩阵
- 平行线在仿射变换下保持平行
-
投影(projective) 变换:单应性(homography)(一种从一个平面到另一个平面的可逆投影变换
) ,8 DoF $$ \tilde{\mathbf{x}}' = \tilde{\mathbf{H}} \tilde{\mathbf{x}} \quad \left(\bar{\mathbf{x}} = \dfrac{1}{\tilde{x}} \tilde{\mathbf{x}}\right) $$- \(\tilde{\mathbf{H}} \in \mathbb{R}^{3 \times 3}\) 是一个任意的齐次 \(3 \times 3\) 的矩阵(按比例指定)
- 投影变换保留了直线
在协变向量 (co-vector) 上的 2D 变换:考虑任意的 2D 透视变换 \(\tilde{\mathbf{x}}' = \tilde{\mathbf{H}} \tilde{\mathbf{x}}\),变换后的 2D 直线方程由 \(\tilde{\mathbf{I}'}^T \tilde{\mathbf{x}}' = \tilde{\mathbf{I}'}^T \tilde{\mathbf{H}} \tilde{\mathbf{x}} = (\tilde{\mathbf{H}}^T \tilde{\mathbf{I}'}) \tilde{\mathbf{x}} = \tilde{\mathbf{I}}^T \tilde{\mathbf{x}} = 0\),因此得到 $$ \tilde{\mathbf{I}'} = \tilde{\mathbf{H}}^{-T} \tilde{\mathbf{I}} $$
因此,投影变换对一个 2D 直线或 3D 法向量等共向量的作用可以表示为矩阵转置的逆。
3D Transformations⚓︎
将 2D 变换扩展至 3D 上“
- 3D 变换的定义类比 2D 变换
- 3×4 的矩阵通过添加第四行 \(\begin{bmatrix}\mathbf{0}^T & 1\end{bmatrix}\) 来扩展,以实现齐次变换
- 变换保持相似性(平行关系、直线)不变
Direct Linear Transform for Homography Estimation⚓︎
从一组二维对应关系中估计单应性矩阵的方法为:
- 令 \(\mathcal{X} = \{\tilde{\mathbf{x}}_i, \tilde{\mathbf{x}}_i'\}_{i=1}^N\) 表示一个包含 N 个 2D-to-2D 的关于 \(\tilde{\mathbf{x}}' = \tilde{\mathbf{H}} \tilde{\mathbf{x}}\) 对应关系的集合
- 由于对应向量是齐次的,它们方向相同但大小不同,因此上述方程可表示为 \(\tilde{\mathbf{x}}' \times \tilde{\mathbf{H}} \tilde{\mathbf{x}} = \mathbf{0}\)
-
使用 \(\tilde{\mathbf{h}}_k^T\) 表示 \(\tilde{\mathbf{H}}\) 的第 \(k\) 行,这可以被重写为关于 \(\tilde{\mathbf{h}}\) 的线性方程: $$ \begin{gathered}\underbrace{\begin{bmatrix}\mathbf{0}T&-\tilde{w}_i}\tilde{\mathbf{x}iT&\tilde{y}_i_i}\tilde{\mathbf{x}T\\tilde{w}_i_i}\tilde{\mathbf{x}T&\mathbf{0}T&-\tilde{x}_i{\prime}\tilde{\mathbf{x}}_iT\-\tilde{y}_i{\prime}\tilde{\mathbf{x}}_iT&\tilde{x}_i{\prime}\tilde{\mathbf{x}}_iT&\mathbf{0}^T\end{bmatrix}}i}\underbrace{\begin{bmatrix}\tilde{\mathbf{h}}_1\\tilde{\mathbf{h}}_2\\tilde{\mathbf{h}}_3\end{bmatrix}} $$}}}=\mathbf{0}\end{gathered
最后一行与前三行线性相关,可以删除。
-
每个点对应产生两个方程。将所有方程堆叠成一个 \(2N \times 9\) 维的矩阵 \(A\),从而形成以下约束的最小二乘问题(constrained least squares problem) $$ \begin{aligned}\tilde{\mathbf{h}}{}&=\underset{\tilde{\mathbf{h}}}{\operatorname\right|_2}}}\left|\mathbf{A}\tilde{\mathbf{h}2+\lambda(\left|\tilde{\mathbf{h}}\right|_22-1)\&=\underset{\tilde{\mathbf{h}}}{\operatorname{\operatorname}}}\tilde{\mathbf{h}T\mathbf{A}T\mathbf{A}\tilde{\mathbf{h}}+\lambda(\tilde{\mathbf{h}}T\tilde{\mathbf{h}}-1)\end{aligned} $$
其中固定 \(\|\tilde{\mathbf{h}}\|_2 = 1\),因为 \(\tilde{\mathbf{H}}\) 是齐次的(即仅通过比例定义)且我们不关心平凡解 \(\tilde{\mathbf{h}} = 0\)。上述优化问题的解是 \(\mathbf{A}\) 的最小奇异值对应的奇异向量(singular vector)(即分解 \(\mathbf{A} = \mathbf{UDV}^T\) 时 \(\mathbf{V}\) 的最后一列
) 。
上述算法就叫做直接线性变换(direct linear transformation)。
Camera and Lens⚓︎
Pinhole Camera⚓︎
让我们来动手设计一个相机。一种简单(但愚蠢)的想法是直接把一片薄膜 (film) 放在物体前面——结果显然是不行的,因为没有形成物体上一点和薄膜上一点的一一映射。
于是我们在物体和薄膜之间加一块挡板,以阻挡大多数的光线,由此得到了一台简陋的针孔相机(pinhole camera)。中间的开口被称为光圈(aperture)。
注:针孔相机的基本原理可追溯至墨子和亚里士多德的年代。
人们发现,光圈越小,成像就越清晰。但我们不会让光圈无止尽地小下去,这是因为:
- 光圈越小,通过的光也就越少,成像就会变得很暗
- 衍射(diffraction) 效应:当光圈尺寸和光的波长相当甚至更小时,通过光圈后会偏离直线传播路径并发生弯曲扩散,自然难以形成清晰的像
Lens⚓︎
透镜(lens) 有着和针孔相同的投影原理,但是它能让更多的光进来,并让这些光汇聚起来。
高斯成像公式:\(\dfrac{1}{i} + \dfrac{1}{o} = \dfrac{1}{f}\),其中 \(i, o, f\) 分别为像距、物距和焦距(focal length)。
当 \(o = \infty\) 时(对于下图,物体是太阳,离透镜很远很远,可看作无穷远
透镜可用于图像放大(image magnification),放大系数为 \(m = \dfrac{h_i}{h_o}\)
相机通过改变焦距来放大图像:
实际上焦距的调整就是对视场(field of view, FOV) 的改变:焦距越长,视角更窄;焦距越短,视角越宽。
除焦距外,FOV 还取决于传感器的大小。
在相机中,光圈是指镜头的受光区域,一般用镜头直径区分。可通过增减光圈大小来控制图像亮度。
一种更方便的表示光圈的方法是使用一个关于焦距的分数,即 \(D = \dfrac{f}{N}\),其中 \(N\) 为焦比(F-number)。比如对于 50mm 的焦距,当光圈完全打开时,焦比为 1.8(此时光圈直径为 27.8mm
镜头失焦(lens defocus) 问题:
-
假设物体位于黄色虚线处时,物体的光线进入透镜后正好在底片处汇聚成一点,因此成像很清晰
-
但如果稍微改变物体的位置,比如靠近些,那么对应的像就会远离镜头(同时也远离底片
) ,来自物体的光在底片处就会形成一片光斑(模糊圈(blue circle) 或弥散圈(circle of confusion)) ,如图中加粗的橙色实线部分所示
可利用相似三角形解出光斑直径 \(b\):\(\dfrac{b}{D} = \dfrac{|i' - i|}{i'} \Rightarrow b = \dfrac{D}{i'}|i' - i|, b \propto D \propto \dfrac{1}{N}\)
当物体位置不动时,要想对好焦,可以从以下几方面考虑:
- 只移动底片(右上)
- 只移动镜头位置(左下)
- 两者也可同时移动(右下)
景深(depth of field, DoF):一种物体距离范围,在范围内(即模糊度 b 小于像素尺寸的范围)的图像能够对好焦。
原理图如下:
- \(c = \dfrac{f^2(o - o_1)}{No_1(o - f)} = \dfrac{f^2(o_2 - o)}{No_2(o - f)}\)
- DoF = \(o_2 - o_1 = \dfrac{2of^2cN(o - f)}{f^4 - c^2N^2(o - f)^2}\)
- 减小光圈直径(增大焦比)会增加 DoF
色差 (chromatic aberration)
- 玻璃的折射率(index of refraction) 随波长的变化而略有不同
- 因此,简单透镜存在色差问题,这是指不同颜色的光倾向于在略微不同的距离上聚焦(模糊,颜色偏移)
- 为了减少色差和其他类型的像差,大多数摄影镜头都是由不同玻璃元件(具有不同涂层)组成的复合镜头
暗角 (vignetting)
暗角是亮度向图像边缘衰减的趋势,它由两种效果组成:自然暗角和机械暗角。
- 自然暗角(natural vignetting):物体表面和镜头光圈的缩短
- 机械暗角(mechanical vignetting):光束的阴影部分从未达到图像
暗角可以进行校准(即撤销
Geometric Image Formation⚓︎
相机模型描述了三维世界和二维图像之间的几何关系。
两类投影模型:
- 正射投影(orthographic projection)
- 透视投影(perspective projection)
Orthographic Projection⚓︎
3D 点 \(\mathbf{x}_c \in \mathbb{R}^3\) 到像素坐标 \(\mathbf{x}_s \in \mathbb{R}^2\) 的正射投影(orthographic projection):
- 相机和图像坐标系的 x, y 轴是共享的
- 光线与相机坐标系 z 坐标平行
- 在投影过程中,z 坐标被舍弃,x 和 y 坐标保持不变
- 注:为清晰起见,此处未显示 y 坐标,但其行为和上图的 x 坐标类似
正射投影仅将 3D 点在相机坐标 \(\mathbf{x}_c\) 中的 z 分量丢弃,以获得图像平面(即屏幕)上的对应 2D 点 \(\mathbf{x}_s\)。 $$ \mathbf{x}_s=\begin{bmatrix}1&0&0\0&1&0\end{bmatrix}\mathbf{x}_c\quad\Leftrightarrow\quad\mathbf{\bar{x}}_s=\begin{bmatrix}1&0&0&0\0&1&0&0\0&0&0&1\end{bmatrix}\mathbf{\bar{x}}_c $$
- 对于远心镜头 (telecentric lenses) 而言,正射投影是精确的;而对于长焦镜头 (telephoto lenses) 来说,它是一种近似
- 经过投影后,无法恢复 3D 点到图像的距离
实际上,世界坐标(可能以米为单位测量尺寸)必须进行缩放以适应图像传感器(以像素为单位测量
- 备注:\(s\) 的单位为 px/m 或 px/mm,用于将公制 3D 点转换为像素
- 在正交投影下,结构和运动可以通过因子分解方法(比如通过奇异值分解)同时估计
Perspective Projection⚓︎
3D 点 \(\mathbf{x}_c \in \mathbb{R}^3\) 到像素坐标 \(\mathbf{x}_s \in \mathbb{R}^2\) 的透视投影(perspective projection):
- 光线穿过相机中心、像素 \(\mathbf{x}_s\) 和点 \(\mathbf{x}_c\)
- 约定:主轴 (principal axis)(垂直于图像平面)与 z 轴对齐
- 注:为清晰起见,此处未显示 y 坐标,但其行为类似
在透视投影中,相机坐标系中的三维点通过除以 z 分量,并乘以焦距来映射到图像平面。
在使用齐次坐标时,透视投影是线性的。投影后无法从图像中恢复三维点的距离。
注:f 的单位为像素(px
) 。
为确保像素坐标为正值,通常会增加一个主点偏移量(principal point offset) \(\mathbf{c}\),这会将图像坐标系移动到图像平面的角落。
完整的透视投影模型如下:
- 投影矩阵中左半边的 3x3 的子矩阵叫做校准矩阵(carlibration matrix) \(\textcolor{red}{\mathbf{K}}\)
- \(\textcolor{red}{\mathbf{K}}\) 的参数叫做相机内参(camera intrinsics)(与外部位姿 (external pose) 相对)
- \(f_x, f_y\) 是独立,以允许不同的像素宽高比
- 由于传感器的安装并没有垂直于光轴,因此有偏斜 (skew) \(s\)
- 实际上我们通常设 \(f_x = f_y, s = 0\),但模型 \(\mathbf{c} = (c_x, c_y)^T\)
Chaining Transformations⚓︎
设 \(\mathbf{K}\) 为校准矩阵(内参)和 \([\mathbf{R}|\mathbf{t}]\) 为相机姿态(外参
注:3x4 的投影矩阵 \(\mathbf{P}\) 可被预先计算出来。
Full Rank Representation⚓︎
有时用满秩的 4x4 投影矩阵表示可能更好: $$ \tilde{\mathbf{x}}_s=\begin{bmatrix}\mathbf{K}&\mathbf{0}\\mathbf{0}T&1\end{bmatrix}\begin{bmatrix}\mathbf{R}&\mathbf{t}\\mathbf{0}T&1\end{bmatrix}\bar{\mathbf{x}}_w=\tilde{\mathbf{P}}\bar{\mathbf{x}}_w $$
现在齐次向量 \(\tilde{\mathbf{x}}_s\) 是一个 4D 向量且必须相对于其第三个元素进行归一化,以获得非齐次的图像像素: $$ \bar{\mathbf{x}}_s=\tilde{\mathbf{x}}_s/z_s=(x_s/z_s,y_s/z_s,1,1/z_s)^T $$
请注意,非齐次的 4D 向量的第 4 个分量是逆深度(inverse depth)。如果已知逆深度,可以通过计算 \(\tilde{\mathbf{x}}_w=\tilde{\mathbf{P}}^{-1}\bar{\mathbf{x}}_s\) 并随后对 \(\tilde{\mathbf{x}}_w\) 的第四项进行归一化,从其像素坐标中恢复出三维点。
Distortion⚓︎
线性投影假设(直线保持为“直线”)在实践中因相机镜头特性引入的扭曲而被违背。其中径向和切向扭曲(radial and tangential distortion) 效应都可以相对容易地建模:
- 图像可以被去扭曲(undistorted),使得透视投影模型适用
- 对于广角镜头 (wide-angle lenses)(例如鱼眼镜头
) ,必须使用更复杂的扭曲模型
投影可能会很 tricky,或者说会产生一些有意思的错觉,比如:
一个投影可能对应无数种不同的物体形状,这便是 "tricky" 的来源。
透视投影对成像的影响:
-
保留了直线“直”的性质
-
但是长度和角度关系却被丢失了
-
长度
-
角度
-
其中因为角度问题,两条在物理世界平行的线会在图像中汇聚于一点(即消失点(vanishing point)
性质:
- 任意两条平行线之间都有一个共同的消失点 v
- 从相机中点 C 通过 v 的射线与直线平行
- v 告诉我们直线的方向
- v 可能在图像所在帧外面,甚至无穷远处
由于平面上任意两条平行线定义了一个消失点,这些消失点的并集就会形成一条消失线(vanishing line)。
需要注意的是,不同的平面会产生不同的消失线,因此消失线包含了平面朝向的信息。
Photometric Image Formation⚓︎
Photometric Image Formation -- 光度成像。
前面探讨的都是单束光线在空间中的传播,现在就从像素强度和色彩的角度来看图像是如何形成的。光线由一个或多个光源发出(emit),并在场景中物体(或介质)的表面反射(reflect) 或折射(refract)(一次或多次
渲染方程 (rendering equation) 的介绍见《计算机图形学》“光线追踪”一节的笔记,这里仅列出方程和示意图: $$ L_{\mathrm{out}}(\mathbf{p},\mathbf{v},\lambda)=L_{\mathrm{emit}}(\mathbf{p},\mathbf{v},\lambda)+\int_\Omega\mathrm{BRDF}(\mathbf{p},\mathbf{s},\mathbf{v},\lambda)\cdot L_{\mathrm{in}}(\mathbf{p},\mathbf{s},\lambda)\cdot(-\mathbf{n}^T\mathbf{s})d\mathbf{s} $$
- 典型的 BRDF 包括漫反射(diffuse) 和镜面反射(specular) 两部分
- 漫反射(= 恒定)分量将光线均匀地向所有方向散射
- 这导致着色,即相对于表面法线的强度平滑变化
- 镜面反射分量强烈依赖于出射光的方向
菲涅耳效应(Fresnel effect):从表面反射的光量取决于观察角度。
全局光照(global illumination):
- 模拟一次光线反弹不足以渲染复杂的场景
- 物理世界中,光源可以被遮挡物所遮挡,并且光线可以多次反射
- 全局光照也考虑了间接光照
Shading⚓︎
见《计算机图形学》“着色”一节的笔记。
Color Sensing in Camera⚓︎
图像感知管道(image sensing pipeline) 分为三个阶段:
- 相机镜头 / 机身中的物理光传输
- 传感器芯片上的光子测量和转换
- 图像信号处理(image signal processing, ISP) 和图像压缩
快门(shutter):
- 焦平面快门(focal plane shutter) 位于图像传感器 / 胶片正前方
- 多数数码相机采用机械与电子快门相结合的方式
- 快门速度(曝光时间)控制到达传感器的光量
- 它决定图像是否过曝、欠曝、模糊或出现噪点
卷帘快门效应(rolling shutter effect):
更多内容见这篇帖子。
传感器:
- CCD 通过将电荷从像素间传递并在输出节点转换为电压来工作
- CMOS 图像传感器在每个像素内部将电荷转换为电压,并且现在已经成为标准
- 更大尺寸的芯片(全画幅等于 35 毫米)具有更高的感光度 -> 噪声更小
滤色镜阵列(color filter array)
- 为测量颜色,像素被排列成色彩阵列,例如:拜耳 (Bayer) RGB 模式
- 每个像素缺失的颜色通过邻近像素进行插值(去马赛克)
-
每个像素根据其光谱灵敏度 (spectral sensitivity) \(S\),对光频谱 (light spectrum) \(L\) 进行积分: $$ R=\int L(\lambda)S_R(\lambda)d\lambda $$
-
光谱响应曲线由相机制造商提供
色彩空间(color space):
-
RGB
-
HSV
图像压缩
- 通常,亮度 (luminance) 的压缩保真度高于色度 (chrominance)
- 常采用基于(8×8 像素)块状的离散余弦或小波变换
- *离散余弦变换 **(discrete cosine transform, DCT) 是对自然图像主成分分析 (PCA) 的一种近似
- 系数被量化为整数,可通过哈夫曼编码存储
- 近年来,人们开发出基于深度网络的压缩算法
Python 中的图像:
- 用矩阵表示一个图像
- 假设有一个 NxM 的图像叫做
im
im(0, 0, 0)
:左上角的像素在 R 通道的值im(y-1, x-1, b-1)
:向下 y 个像素,向右 x 个像素的像素在第 b 个通道上的值im(N-1, M-1, 2)
:右下角的像素在 B 通道的值
评论区