免费创建属于自己的网站,做领域细分行业需要建网站吗,济宁网站排名,设计之家网址文章目录 1. 前置知识1.1. 旋转变换与缩放变换1.2. 相似变换1.3. 仿射变换1.4. 透视变换 2. 单视测量2.1. 无穷远点、无穷远线与无穷远平面2.1.1. 2D 平面2.1.2. 3D 空间 2.2. 影消点和影消线2.2.1. 2D 平面 2.3. 单视重构 3. 总结 课程视频链接#xff1a;
计算机视觉之三维… 文章目录 1. 前置知识1.1. 旋转变换与缩放变换1.2. 相似变换1.3. 仿射变换1.4. 透视变换 2. 单视测量2.1. 无穷远点、无穷远线与无穷远平面2.1.1. 2D 平面2.1.2. 3D 空间 2.2. 影消点和影消线2.2.1. 2D 平面 2.3. 单视重构 3. 总结 课程视频链接
计算机视觉之三维重建深入浅出SfM与SLAM核心算法——3.单视几何。 1. 前置知识
1.1. 旋转变换与缩放变换
我们不加证明地给出 2D 和 3D 空间的旋转变换矩阵其中 2D 空间的旋转矩阵如下图所示 而 3D 空间的旋转矩阵为 R ( 1 0 0 0 cos α − sin α 0 sin α cos α ) ( cos β 0 sin β 0 1 0 − sin β 0 cos β ) ( cos γ − sin γ 0 sin γ cos γ 0 0 0 1 ) \mathbf{R} \begin{pmatrix} 1 0 0 \\ 0 \cos \alpha -\sin \alpha \\ 0 \sin \alpha \cos \alpha \end{pmatrix} \begin{pmatrix} \cos \beta 0 \sin \beta \\ 0 1 0 \\ -\sin \beta 0 \cos \beta \end{pmatrix} \begin{pmatrix} \cos \gamma -\sin \gamma 0 \\ \sin \gamma \cos \gamma 0 \\ 0 0 1 \end{pmatrix} R 1000cosαsinα0−sinαcosα cosβ0−sinβ010sinβ0cosβ cosγsinγ0−sinγcosγ0001 其中 α , β , γ \alpha, \beta, \gamma α,β,γ 分别为绕 X , Y , Z X, Y, Z X,Y,Z 轴逆时针旋转的角度。 2D 和 3D 空间下的缩放变换如下 ( x ′ y ′ 1 ) ( s 0 0 0 s 0 0 0 1 ) ( x y 1 ) \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} \begin{pmatrix} s 0 0 \\ 0 s 0 \\ 0 0 1 \end{pmatrix} \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} x′y′1 s000s0001 xy1 ( x ′ y ′ z ′ 1 ) ( s 0 0 0 0 s 0 0 0 0 s 0 0 0 0 1 ) ( x y z 1 ) \begin{pmatrix} x \\ y \\ z \\ 1 \end{pmatrix} \begin{pmatrix} s 0 0 0 \\ 0 s 0 0 \\ 0 0 s 0 \\ 0 0 0 1 \end{pmatrix} \begin{pmatrix} x \\ y \\ z \\ 1 \end{pmatrix} x′y′z′1 s0000s0000s00001 xyz1
1.2. 相似变换
相似变换是指保持图形相似的变换可由缩放变换与欧式变换合成。相似变换矩阵如下所示 x ′ ( s R t 0 1 ) x H s x x \begin{pmatrix} s \mathbf{R} t \\ 0 1 \end{pmatrix} x \mathbf{H_s} x x′(sR0t1)xHsx其中 t t t 为平移向量 s s s 为缩放因子 R 为旋转矩阵 \mathbf{R} 为旋转矩阵 R为旋转矩阵。 相似变换的特点有
点变换到点线变换到线保持点的共线面性、线的共面性保持直线与直线、直线与平面、平面与平面的平行性不变保持角度不变
相似变换矩阵在 2D 空间和 3D 空间分别有 1 个自由度和 4 个自由度。相似变换示例如下所示
1.3. 仿射变换
以 2D 空间为例我们将相似变换矩阵 H s \mathbf{H_s} Hs 中的 s R s \mathbf{R} sR 一般化为 ( a b c d ) \begin{pmatrix} a b \\ c d \end{pmatrix} (acbd)则可得仿射变换 ( x ′ y ′ 1 ) ( a b x 0 c d y 0 0 0 1 ) ( x y 1 ) ⇒ x ′ ( A t 0 1 ) x H α x \begin{pmatrix} x \\ y \\ 1\end{pmatrix} \begin{pmatrix} a b x_0 \\ c d y_0 \\ 0 0 1 \end{pmatrix} \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} \Rightarrow x \begin{pmatrix} A t \\ 0 1 \end{pmatrix} x H_\alpha x x′y′1 ac0bd0x0y01 xy1 ⇒x′(A0t1)xHαx3D 空间的仿射变换矩阵如下所示 仿射变换的特点有
保持无穷远平面不变无穷远点变换到无穷远点保持直线与直线、直线与平面、平面与平面的平行性不变
仿射变换示例如下
1.4. 透视变换
将仿射变换矩阵底部为 0 的那一行一般化为任意数即可得透视变换。2D 空间的透视变换如下 ( x ′ y ′ 1 ) ( a b x 0 c d y 0 v 1 v 2 1 ) ( x y 1 ) ⇒ x ′ ( A t v T 1 ) x H x \begin{equation} \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} \begin{pmatrix} a b x_0 \\ c d y_0 \\ v_1 v_2 1 \end{pmatrix} \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} \Rightarrow x \begin{pmatrix} \mathbf{A} t \\ v^T 1 \end{pmatrix} \mathbf{x} \mathbf{H} x \end{equation} x′y′1 acv1bdv2x0y01 xy1 ⇒x′(AvTt1)xHx3D 空间的透视变换矩阵如下图所示 透视变换的特点有点变换到点线变换到线保持点的共线面性、线的共面性。 透视变换示例如下
2. 单视测量
完成相机标定后给定一个像素坐标我们并不能唯一确定其所对应的空间点位置。因为沿相机光心与该像素点形成的反向投影射线上的所有点都可能投影到该像素上如下图所示 单图像三维重建是非常困难的但通过引入场景先验约束仍可恢复部分甚至完整的场景结构。下面我们来了解其实现原理与方法。
2.1. 无穷远点、无穷远线与无穷远平面
2.1.1. 2D 平面
在 2D 平面上直线的方程为 a x 1 b x 2 c 0 ax_1 bx_2 c 0 ax1bx2c0。不妨令 l ( a b c ) l \begin{pmatrix} a \\ b \\ c \end{pmatrix} l abc x ( x 1 x 2 1 ) x \begin{pmatrix} x_1 \\ x_2 \\ 1 \end{pmatrix} x x1x21 则直线方程可以表述为 l T x 0 l^Tx 0 lTx0 或者 x T l 0 x^Tl 0 xTl0。 现在我们来证明假设有两条直线 l l l 和 l ′ l l′则两条直线交点为 x l × l ′ x l \times l xl×l′。 证 令 x l × l ′ x l \times l xl×l′则 x ⊥ l x \perp l x⊥l即有 x ⋅ l 0 x \cdot l 0 x⋅l0所以 x ∈ l x \in l x∈l。同理可得 x ∈ l ′ x \in l x∈l′。所以 x x x 为直线 l l l 和 l ′ l l′ 的交点。 证毕。 通过引入齐次坐标后我们可以很容易地表示无穷远点即 x ∞ ( x y 0 ) x_{\infty} \begin{pmatrix} x \\ y \\ 0 \end{pmatrix} x∞ xy0 。 假设存在两条平行线 l ( a b c ) l \begin{pmatrix} a \\ b \\ c \end{pmatrix} l abc 和 l ′ ( a ′ b ′ c ′ ) l \begin{pmatrix} a \\ b \\ c \end{pmatrix} l′ a′b′c′ 且 a b a ′ b ′ \dfrac{a}{b} \dfrac{a}{b} bab′a′现在我们来证明 l l l 和 l ′ l l′ 相交于无穷远点 x ∞ ( b − a 0 ) x_{\infty} \begin{pmatrix} b \\ -a \\ 0 \end{pmatrix} x∞ b−a0 。 证 因为 l T x ∞ ( a b c ) ( b − a 0 ) l^T x_{\infty} (a \quad b \quad c) \begin{pmatrix} b \\ -a \\ 0 \end{pmatrix} lTx∞(abc) b−a0 0所以直线 l l l 穿过无穷远点 x ∞ x_{\infty} x∞。同理可得 l ′ l l′ 也穿过无穷远点 x ∞ x_{\infty} x∞。所以两条直线 l l l 和 l ′ l l′ 相交于无穷远点 x ∞ x_{\infty} x∞。 证毕。 此外我们还可以证明无穷远点集位于称为无穷远线的一条线上如下图所示
2.1.2. 3D 空间
在 3D 空间中已知平面的法向量 n ⃗ ( a b c ) \vec{n} \begin{pmatrix} a \\ b \\ c \end{pmatrix} n abc 和平面上的一点 P 0 ( x 0 y 0 z 0 ) P_0 \begin{pmatrix} x_0 \\ y_0 \\ z_0 \end{pmatrix} P0 x0y0z0 即可确定平面的方程 n ⃗ ⋅ P 0 P → 0 ⇒ a ( x − x 0 ) b ( y − y 0 ) c ( z − z 0 ) 0 ⇒ a x b y c z − ( a x 0 b y 0 c z 0 ) 0 \vec{n} \cdot \overrightarrow{P_0 P} 0 \Rightarrow a(x - x_0) b(y - y_0) c(z - z_0) 0 \Rightarrow ax by cz - (ax_0 by_0 cz_0) 0 n ⋅P0P 0⇒a(x−x0)b(y−y0)c(z−z0)0⇒axbycz−(ax0by0cz0)0令 d − ( a x 0 b y 0 c z 0 ) d -(ax_0 by_0 cz_0) d−(ax0by0cz0) 即有平面方程为 a x b y c z d 0 ax by cz d 0 axbyczd0。 取 Π ( a b c d ) \Pi \begin{pmatrix} a \\ b \\ c \\ d \end{pmatrix} Π abcd x ( x y z 1 ) x \begin{pmatrix} x \\ y \\ z \\ 1 \end{pmatrix} x xyz1 则平面方程为 Π T x 0 \Pi^Tx0 ΠTx0 或者 x T Π 0 x^T\Pi 0 xTΠ0。 类似于 2D 空间的无穷远点在 3D 空间中两条平行线相交于无穷远点 x ∞ ( a b c 0 ) x_{\infty} \begin{pmatrix} a \\ b \\ c \\ 0 \end{pmatrix} x∞ abc0 。
2.2. 影消点和影消线
2.2.1. 2D 平面
2D 平面上无穷远点的变换如下图所示 2D 平面上直线的变换如下图所示 值得注意的是2D 平面上的无穷远线经过透视变换后不再是无穷远线如下图所示 影消点是指三维空间中的无穷远点在图像平面上的投影点如下图所示 影消点的计算方法如下 无穷远直线同一平面内所有平行线的无穷远点构成一条直线。 无穷远平面多个平行平面对应的无穷远线集合构成无穷远平面。 影消线又称消失线或视平线是指三维空间中无穷远平面或特定平面上的无穷远直线在二维图像平面上的投影线如下图所示 假设 3D 空间存在无穷远线 l ∞ l_{\infty} l∞且透视矩阵为 H \mathbf{H} H则 l ∞ l_{\infty} l∞ 投影到图像上为影消线 l ′ l l′ 且 l ′ ( H − 1 ) T l l (\mathbf{H}^{-1})^{T}l l′(H−1)Tl。证明如下 设 x 1 x_1 x1 和 x 2 x_2 x2 为 l ∞ l_{\infty} l∞ 上的两点且这两点分别对应于图像中的 x 1 ′ x_1 x1′ 和 x 2 ′ x_2 x2′且有 { x 1 ′ H x 1 x 2 ′ H x 2 \begin{cases} x_1 Hx_1 \\ x_2 Hx_2 \end{cases} {x1′Hx1x2′Hx2则有 ( x 2 ′ − x 1 ′ ) H ( x 2 − x 1 ) ⇒ l ∞ ′ H l ∞ ⇒ l ′ H − T l ∞ (x_2 - x_1) H(x_2 - x_1) \Rightarrow l_{\infty} \mathbf{H} l_{\infty} \Rightarrow l \mathbf{H}^{-T} l_{\infty} (x2′−x1′)H(x2−x1)⇒l∞′Hl∞⇒l′H−Tl∞。 证毕。 下图中位于中间的直线是影消线它由三维空间中铁轨所在平面的无穷远线经透视投影得到。在三维空间中平行铁轨延伸相交于无穷远点这些点构成该平面的无穷远线该线投影至图像平面即形成影消线。 图像中两条直线的交点如果在影消线上则这两条线是 3D 空间中的平行线。研究已证实识别影消线有助于三维场景的重构。 影消线与平面法向量的关系如下 将前面推导出的数学公式总结如下
2.3. 单视重构
假设空间中存在两组平行线这两组平行线的方向向量为 d 1 → \overrightarrow{d_1} d1 和 d 2 → \overrightarrow{d_2} d2 而 x 2 ∞ x_{2\infty} x2∞ 和 x 1 ∞ x_{1\infty} x1∞ 分为这两组平行线上的无穷远点 x 2 ∞ x_{2\infty} x2∞ 和 x 1 ∞ x_{1\infty} x1∞ 经过透视变换投影到图像平面上的 v 2 v_2 v2 和 v 1 v_1 v1根据影消点可以推出两组平行线的方向向量公式如下 d K − 1 v ∥ K − 1 v ∥ d \dfrac{K^{-1}v}{\|K^{-1}v\|} d∥K−1v∥K−1v ω \omega ω 的性质如图所示 K K T \mathbf{K} \mathbf{K^T} KKT 的展开式如下 K K T ( α − α cot θ c x 0 β sin θ c y 0 0 1 ) ( α 0 0 − α cot θ β sin θ 0 c x c y 1 ) ( α 2 α 2 cot 2 θ c x 2 − α cot θ β sin θ c x c y c x − α cot θ β sin θ c x c y β 2 sin 2 θ c y 2 c y c x c y 1 ) ( α 2 sin 2 θ c x 2 c x c y − α β cos θ sin 2 θ c x c x c y − α β cos θ sin 2 θ c y 2 β 2 sin 2 θ c y c x c y 1 ) \begin{align*} \mathbf{K} \mathbf{K^T} \begin{pmatrix} \alpha -\alpha \cot \theta c_x \\ 0 \dfrac{\beta}{\sin \theta} c_y \\ 0 0 1 \end{pmatrix} \begin{pmatrix} \alpha 0 0 \\ -\alpha \cot \theta \dfrac{\beta}{\sin \theta} 0 \\ c_x c_y 1 \end{pmatrix} \\ \begin{pmatrix} \alpha^2 \alpha^2 \cot^2 \theta c_x^2 -\alpha \cot \theta \dfrac{\beta}{\sin \theta} c_x c_y c_x \\ \\ -\alpha \cot \theta \dfrac{\beta}{\sin \theta} c_x c_y \dfrac{\beta^2}{\sin^2 \theta} c_y^2 c_y \\ \\ c_x c_y 1 \end{pmatrix} \\ \begin{pmatrix} \dfrac{\alpha^2}{\sin^2 \theta} c_x^2 c_x c_y - \dfrac{\alpha \beta \cos \theta}{\sin^2 \theta} c_x \\ \\ c_x c_y - \dfrac{\alpha \beta \cos \theta}{\sin^2 \theta} c_y^2 \dfrac{\beta^2}{\sin^2 \theta} c_y \\ \\ c_x c_y 1 \end{pmatrix} \end{align*} KKT α00−αcotθsinθβ0cxcy1 α−αcotθcx0sinθβcy001 α2α2cot2θcx2−αcotθsinθβcxcycx−αcotθsinθβcxcysin2θβ2cy2cycxcy1 sin2θα2cx2cxcy−sin2θαβcosθcxcxcy−sin2θαβcosθcy2sin2θβ2cycxcy1 则有 ω ( K K T ) − 1 ( 1 α 2 cos θ α β − c y cos θ α β − c x α 2 cos θ α β 1 β 2 − c y β 2 − c x cos θ α β − c y cos θ α β − c x α 2 − c y β 2 − c x cos θ α β 1 c y 2 β 2 2 c x c y cos θ α β c x 2 α 2 ) \omega (\mathbf{K} \mathbf{K^T})^{-1} \left( \begin{matrix} \dfrac{1}{\alpha^{2}} \dfrac{\cos{\theta}}{\alpha \beta} - \dfrac{c_{y} \cos{\theta}}{\alpha \beta} - \dfrac{c_{x}}{\alpha^{2}} \\ \\ \dfrac{\cos{\theta}}{\alpha \beta} \dfrac{1}{\beta^{2}} - \dfrac{c_{y}}{\beta^{2}} - \dfrac{c_{x} \cos{\theta}}{\alpha \beta}\\\\ - \dfrac{c_{y} \cos{\theta}}{\alpha \beta} - \dfrac{c_{x}}{\alpha^{2}} - \dfrac{c_{y}}{\beta^{2}} - \dfrac{c_{x} \cos{\theta}}{\alpha \beta} 1 \dfrac{c_{y}^{2}}{\beta^{2}} \dfrac{2 c_{x} c_{y} \cos{\theta}}{\alpha \beta} \dfrac{c_{x}^{2}}{\alpha^{2}}\end{matrix}\right) ω(KKT)−1 α21αβcosθ−αβcycosθ−α2cxαβcosθβ21−β2cy−αβcxcosθ−αβcycosθ−α2cx−β2cy−αβcxcosθ1β2cy2αβ2cxcycosθα2cx2 上述 ( K K T ) − 1 {(\mathbf{K}\mathbf{K^T})}^{-1} (KKT)−1 是使用下面代码计算得到的
from sympy import symbols, sin, cos, Matrix, simplify
from sympy.printing.latex import print_latexalpha, beta, theta, c_x, c_y symbols(alpha beta theta c_x c_y)
A Matrix([[alpha**2/sin(theta)**2 c_x**2, c_x*c_y - alpha*beta*cos(theta)/sin(theta)**2, c_x],[c_x*c_y - alpha*beta*cos(theta)/sin(theta)**2, c_y**2 beta**2/sin(theta)**2, c_y],[c_x, c_y, 1]
])
A_inv A.inv()simplified_A_inv simplify(A_inv)
print_latex(simplified_A_inv)显然 ω \omega ω 为对称阵。 当 ω 2 0 \omega_2 0 ω20 时有 cos θ α β 0 \dfrac{\cos\theta}{\alpha\beta} 0 αβcosθ0所以 θ π 2 \theta \dfrac{\pi}{2} θ2π所以为零倾斜。 当 ω 1 ω 3 \omega_1 \omega_3 ω1ω3 时有 1 α 2 1 β 2 ⇒ α β \dfrac{1}{\alpha^2} \dfrac{1}{\beta^2} \Rightarrow \alpha \beta α21β21⇒αβ所以 ω 2 0 \omega_2 0 ω20 且 ω 1 ω 3 \omega_1 \omega_3 ω1ω3 可以推出方形像素。
单视图标定的方法如下图所示 求解相机内参矩阵 K \mathbf{K} K 后通过场景平面在图像中的影消线 l h l_h lh 计算其法向量 n K l h n \mathbf{K} l_h nKlh。随后还需结合几何约束优化、深度信息推断及隐式表面重建算法恢复场景的三维结构如下图所示 单视图三维重建无法完全恢复真实场景的绝对尺度与细节如下图所示 单视图重构的缺点如下
3. 总结