第6章:基于SfM的3D重建

章节概览

Structure from Motion (SfM) 是从多张二维图像重建三维场景的核心技术,广泛应用于文化遗产保护、机器人导航、增强现实等领域。本章将深入探讨SfM的数学原理、算法实现以及工程优化,帮助读者掌握从图像序列到稠密3D网格的完整重建流程。学习目标包括:理解多视图几何基础、掌握特征匹配与相机标定技术、实现稠密重建算法、优化大规模场景重建。

6.1 Structure from Motion原理

6.1.1 多视图几何基础

SfM的核心是从二维图像中恢复三维结构和相机运动。考虑一个3D点 $\mathbf{X} = [X, Y, Z, 1]^T$ 在相机 $i$ 中的投影:

$$\mathbf{x}_i = P_i \mathbf{X} = K_i [R_i | \mathbf{t}_i] \mathbf{X}$$ 其中 $P_i$ 是 $3 \times 4$ 的投影矩阵,$K_i$ 是内参矩阵,$[R_i | \mathbf{t}_i]$ 是外参矩阵。

6.1.2 对极几何与基础矩阵

两视图之间的几何关系由基础矩阵 $F$ 描述,满足对极约束: $$\mathbf{x}_2^T F \mathbf{x}_1 = 0$$ 基础矩阵可以分解为: $$F = K_2^{-T} E K_1^{-1}$$ 其中 $E$ 是本质矩阵,编码了相机间的相对位姿: $$E = [\mathbf{t}]_\times R$$

6.1.3 三角化原理

给定两个视图中的对应点 $\mathbf{x}_1, \mathbf{x}_2$ 和投影矩阵 $P_1, P_2$,可以通过求解以下线性方程组重建3D点: $$\begin{bmatrix} \mathbf{x}_1 \times P_1 \\ \mathbf{x}_2 \times P_2 \end{bmatrix} \mathbf{X} = 0$$ 使用SVD分解可得最小二乘解。

6.1.4 增量式重建流程

典型的增量式SfM包含以下步骤:

  1. 初始化:选择基准图像对,计算相对位姿
  2. 三角化:重建初始3D点
  3. PnP定位:加入新图像,估计其位姿
  4. Bundle Adjustment:联合优化所有参数
  5. 迭代扩展:重复步骤3-4直到所有图像处理完毕
     视图1 ←→ 视图2
               
    [特征匹配]
       
    [E矩阵估计]
       
    [三角化]
       
    3D点云
       
    [加入视图3]
       
    [PnP+BA]
       
    扩展点云

6.1.5 全局式vs增量式方法

增量式方法

  • 优点:鲁棒性好,容易处理外点
  • 缺点:误差累积,计算成本高

全局式方法

  • 优点:避免误差累积,理论上更优
  • 缺点:对初始化敏感,优化困难

6.2 特征检测与匹配

6.2.1 经典特征检测器

SIFT (Scale-Invariant Feature Transform): 通过高斯差分金字塔检测关键点,计算梯度方向直方图作为描述子: $$L(x,y,\sigma) = G(x,y,\sigma) * I(x,y)$$ $$D(x,y,\sigma) = L(x,y,k\sigma) - L(x,y,\sigma)$$ ORB (Oriented FAST and Rotated BRIEF): 结合FAST角点检测和BRIEF二进制描述子,计算效率高:

  • FAST检测:比较中心像素与圆周上像素的强度
  • BRIEF描述:二进制串编码局部图像块的比较结果

6.2.2 深度学习特征

SuperPoint: 使用全卷积网络同时预测关键点和描述子:

  • 共享编码器提取特征
  • 关键点检测头:输出热力图
  • 描述子头:输出密集描述子场

D2-Net: 统一检测和描述,使用单个CNN同时完成两个任务: $$\mathbf{d}_{ij} = \frac{\mathbf{F}_{ij}}{|\mathbf{F}_{ij}|_2}$$ 其中 $\mathbf{F}_{ij}$ 是位置 $(i,j)$ 的特征向量。

6.2.3 特征匹配策略

最近邻匹配: $$m_{ij} = \arg\min_{j} |\mathbf{d}_i^1 - \mathbf{d}_j^2|_2$$ Lowe's ratio test: $$\frac{|\mathbf{d}_i - \mathbf{d}_{j_1}|}{|\mathbf{d}_i - \mathbf{d}_{j_2}|} < \tau$$ 其中 $j_1, j_2$ 是最近和次近邻,典型 $\tau = 0.7-0.8$。

6.2.4 几何验证

使用RANSAC估计基础矩阵并剔除外点:

输入:匹配点对 {(x₁ᵢ, x₂ᵢ)}

1. 随机采样8个点对
2. 计算基础矩阵F(8点算法)
3. 计算内点:|x₂ᵢᵀFx₁ᵢ| < ε
4. 重复N次,选择内点最多的模型
5. 使用所有内点重新估计F

6.2.5 匹配图构建

构建图 $G = (V, E)$,其中:

  • 节点 $V$:图像
  • 边 $E$:存在足够匹配的图像对

边权重可定义为: $$w_{ij} = \frac{|\text{inliers}_{ij}|}{\min(|f_i|, |f_j|)}$$

6.3 相机标定与Bundle Adjustment

6.3.1 相机内参模型

针孔相机模型的内参矩阵: $$K = \begin{bmatrix} f_x & s & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix}$$ 考虑畸变的完整投影: $$\mathbf{x}_d = \text{distort}(\mathbf{x}_u, k_1, k_2, p_1, p_2, k_3)$$ 径向畸变: $$r^2 = x_u^2 + y_u^2$$ $$x_d = x_u(1 + k_1r^2 + k_2r^4 + k_3r^6)$$ 切向畸变: $$x_d = x_u + 2p_1x_uy_u + p_2(r^2 + 2x_u^2)$$

6.3.2 标定方法

张正友标定法: 使用平面棋盘格,通过单应性矩阵约束求解: $$H = K[r_1 \; r_2 \; \mathbf{t}]$$ 约束条件: $$r_1^T r_2 = 0, \quad |r_1| = |r_2| = 1$$ 自标定: 利用场景约束(如消失点、平行线)或运动约束估计内参。

6.3.3 Bundle Adjustment原理

BA通过最小化重投影误差联合优化所有参数: $$\min_{\{P_i\}, \{X_j\}} \sum_{i,j} \rho(|\mathbf{x}_{ij} - \pi(P_i, X_j)|^2)$$ 其中:

  • $\mathbf{x}_{ij}$:观测的2D点
  • $\pi(P_i, X_j)$:3D点 $X_j$ 在相机 $P_i$ 中的投影
  • $\rho$:鲁棒核函数(如Huber)

6.3.4 稀疏优化技术

利用雅可比矩阵的稀疏结构: $$J = \begin{bmatrix} \frac{\partial r_{11}}{\partial P_1} & 0 & \cdots & \frac{\partial r_{11}}{\partial X_1} & 0 & \cdots \\ 0 & \frac{\partial r_{22}}{\partial P_2} & \cdots & 0 & \frac{\partial r_{22}}{\partial X_2} & \cdots \\ \vdots & \vdots & \ddots & \vdots & \vdots & \ddots \end{bmatrix}$$ Schur补加速求解正规方程: $$\begin{bmatrix} U & W \\ W^T & V \end{bmatrix} \begin{bmatrix} \delta_c \\ \delta_p \end{bmatrix} = \begin{bmatrix} \epsilon_c \\ \epsilon_p \end{bmatrix}$$ 先消去点参数: $$(U - WV^{-1}W^T)\delta_c = \epsilon_c - WV^{-1}\epsilon_p$$

6.3.5 分层优化策略

  1. 局部BA:仅优化最近的N个关键帧
  2. 窗口BA:滑动窗口内的帧和点
  3. 全局BA:所有参数,但降低频率
  4. 位姿图优化:固定点,仅优化相机

6.4 Multi-View Stereo(MVS)

6.4.1 立体匹配基础

对于校正后的立体图像对,视差 $d$ 与深度 $Z$ 的关系: $$Z = \frac{f \cdot b}{d}$$ 其中 $f$ 是焦距,$b$ 是基线长度。

匹配代价函数:

  • SAD:$\sum_{(i,j) \in W} |I_1(i,j) - I_2(i-d,j)|$
  • SSD:$\sum_{(i,j) \in W} (I_1(i,j) - I_2(i-d,j))^2$
  • NCC:归一化互相关

6.4.2 深度图估计

PatchMatch算法

  1. 随机初始化深度和法线
  2. 传播:测试邻域的深度假设
  3. 随机搜索:在当前估计附近采样
  4. 视图选择:选择最佳参考视图

光度一致性度量: $$C(p, d, \mathbf{n}) = \sum_{i \in \mathcal{V}} w_i \cdot \text{NCC}(p, \text{warp}(p, d, \mathbf{n}, i))$$

6.4.3 深度图滤波

几何一致性检查: $$|d_1(p) - d_2(\text{proj}_{1→2}(p, d_1))| < \tau \cdot d_1(p)$$ 置信度加权融合: $$d_{\text{fused}} = \frac{\sum_i c_i \cdot d_i}{\sum_i c_i}$$

6.4.4 基于学习的MVS

MVSNet架构

  1. 特征提取:2D CNN提取图像特征
  2. 构建代价体:将特征投影到参考视图
  3. 3D正则化:3D CNN处理代价体
  4. 深度回归:soft argmax获得深度

代价体构建: $$\mathcal{C}(d) = \text{Var}(\{\mathbf{F}_i(\text{warp}(p, d))\}_{i=1}^N)$$

6.4.5 大规模场景处理

分块策略

  • 空间划分:octree或规则网格
  • 视图聚类:基于相机位置和朝向
  • 层次化重建:由粗到细

并行化

  • GPU加速深度图计算
  • 多线程深度图融合
  • 分布式处理不同区块

6.5 深度图融合与网格生成

6.5.1 体素融合(TSDF)

Truncated Signed Distance Function表示: $$\text{TSDF}(\mathbf{x}) = \min(\max(\text{SDF}(\mathbf{x}), -\delta), \delta)$$ 增量式融合: $$D_{\text{new}}(\mathbf{x}) = \frac{W(\mathbf{x}) \cdot D(\mathbf{x}) + w_i \cdot d_i(\mathbf{x})}{W(\mathbf{x}) + w_i}$$ $$W_{\text{new}}(\mathbf{x}) = W(\mathbf{x}) + w_i$$

6.5.2 点云融合

深度图转点云: $$\mathbf{X} = K^{-1} \cdot d(u,v) \cdot [u, v, 1]^T$$ 外点剔除

  • 统计滤波:剔除稀疏点
  • 半径滤波:剔除孤立点
  • 法线一致性:剔除法线突变点

6.5.3 Poisson表面重建

将表面重建转化为泊松方程求解: $$\Delta \chi = \nabla \cdot \vec{V}$$ 其中 $\vec{V}$ 是从点云法线构建的向量场,$\chi$ 是指示函数。

离散化后的线性系统: $$L\mathbf{x} = \mathbf{b}$$ 使用多重网格方法加速求解。

6.5.4 Delaunay三角化方法

步骤

  1. 投影点到局部切平面
  2. 2D Delaunay三角化
  3. 反投影到3D空间
  4. 法线一致性调整

Ball Pivoting算法

1. 选择种子三角形
2. 滚动球找到新顶点
3. 扩展三角形边界
4. 重复直到无法扩展

6.5.5 网格后处理

简化: 使用QEM(Quadric Error Metrics): $$Q = \sum_{\mathbf{p} \in \text{planes}} \mathbf{p}\mathbf{p}^T$$ $$\text{error}(\mathbf{v}) = \mathbf{v}^T Q \mathbf{v}$$ 平滑: Laplacian平滑: $$\mathbf{v}_{\text{new}} = \mathbf{v} + \lambda \sum_{i \in \mathcal{N}(v)} w_i(\mathbf{v}_i - \mathbf{v})$$ 孔洞填充

  1. 检测边界环
  2. 三角化或插值填充
  3. 平滑过渡区域

6.6 高级话题

6.6.1 SLAM与实时重建

视觉SLAM系统架构

  • 前端:特征跟踪、位姿估计
  • 后端:BA优化、回环检测
  • 建图:稠密/半稠密重建

实时性优化

  • 关键帧选择策略
  • 局部地图维护
  • 并行化前后端

6.6.2 语义重建

结合语义分割的3D重建: $$E = E_{\text{photo}} + \lambda_{\text{sem}} E_{\text{semantic}} + \lambda_{\text{smooth}} E_{\text{smooth}}$$ 语义一致性: 跨视图的语义标签传播和融合。

6.6.3 动态场景处理

运动分割

  • 光流分析
  • 几何残差检测
  • 深度学习方法

非刚性重建

  • 模板变形
  • 时空Bundle Adjustment
  • Neural场表示

6.6.4 大规模场景优化

分层表示

  • LOD(Level of Detail)
  • 场景图结构
  • 流式加载

分布式处理

  • MapReduce范式
  • 图划分策略
  • 云端协同

本章小结

本章系统介绍了基于SfM的3D重建技术,涵盖了从多视图几何理论到工程实现的完整流程。核心要点包括:

关键概念回顾

  1. 多视图几何:基础矩阵 $F$ 编码两视图关系,本质矩阵 $E$ 描述相对位姿,通过三角化恢复3D结构
  2. 特征工程:从SIFT/ORB等手工特征到SuperPoint等学习特征,特征匹配和几何验证是关键
  3. Bundle Adjustment:通过最小化重投影误差 $\sum_{i,j} |\mathbf{x}_{ij} - \pi(P_i, X_j)|^2$ 联合优化
  4. MVS稠密重建:从稀疏点云到稠密深度图,PatchMatch和学习方法各有优势
  5. 网格生成:TSDF融合、Poisson重建等方法将点云/深度图转换为连续曲面

关键公式汇总

  • 投影方程:$\mathbf{x} = K[R|\mathbf{t}]\mathbf{X}$
  • 对极约束:$\mathbf{x}_2^T F \mathbf{x}_1 = 0$
  • 深度-视差关系:$Z = \frac{f \cdot b}{d}$
  • TSDF更新:$D_{new} = \frac{W \cdot D + w_i \cdot d_i}{W + w_i}$
  • Poisson方程:$\Delta \chi = \nabla \cdot \vec{V}$

实践要点

  • 增量式SfM适合小规模场景,全局方法适合大规模但需要好的初始化
  • 特征匹配质量直接影响重建精度,几何验证不可缺少
  • BA优化需要平衡精度和效率,使用稀疏优化和分层策略
  • MVS需要权衡精度和完整性,多尺度处理提高鲁棒性
  • 网格生成方法选择依赖于输入数据质量和应用需求

练习题

基础题

练习6.1:给定两个相机的内参矩阵 $K_1 = K_2 = \begin{bmatrix} 500 & 0 & 320 \\ 0 & 500 & 240 \\ 0 & 0 & 1 \end{bmatrix}$,相对旋转 $R$ 为绕Y轴旋转30度,平移 $\mathbf{t} = [1, 0, 0]^T$,计算本质矩阵 $E$ 和基础矩阵 $F$。

Hint:先计算旋转矩阵,然后使用 $E = [\mathbf{t}]_\times R$ 和 $F = K_2^{-T} E K_1^{-1}$。

答案

旋转矩阵:$R = \begin{bmatrix} \cos 30° & 0 & \sin 30° \\ 0 & 1 & 0 \\ -\sin 30° & 0 & \cos 30° \end{bmatrix} = \begin{bmatrix} 0.866 & 0 & 0.5 \\ 0 & 1 & 0 \\ -0.5 & 0 & 0.866 \end{bmatrix}$

反对称矩阵:$[\mathbf{t}]_\times = \begin{bmatrix} 0 & 0 & 0 \\ 0 & 0 & -1 \\ 0 & 1 & 0 \end{bmatrix}$

本质矩阵:$E = [\mathbf{t}]_\times R = \begin{bmatrix} 0 & 0 & 0 \\ 0.5 & 0 & 0.866 \\ 0 & -1 & 0 \end{bmatrix}$

由于 $K_1 = K_2$,基础矩阵:$F = K^{-T} E K^{-1} = \begin{bmatrix} 0 & 0 & 0 \\ 2×10^{-6} & 0 & 3.46×10^{-6} \\ 0 & -4×10^{-6} & -0.00173 \end{bmatrix}$

练习6.2:实现8点算法估计基础矩阵。给定8组对应点,构建线性方程组 $A\mathbf{f} = 0$,其中 $\mathbf{f}$ 是 $F$ 的向量化形式。描述如何施加秩2约束。

Hint:使用SVD求解,然后对 $F$ 进行SVD分解并将最小奇异值置零。

答案

构建矩阵 $A$,每行为:$[x_1x_2, y_1x_2, x_2, x_1y_2, y_1y_2, y_2, x_1, y_1, 1]$

  1. SVD分解:$A = U\Sigma V^T$,取 $V$ 的最后一列作为 $\mathbf{f}$
  2. 重塑为 $3×3$ 矩阵 $F$
  3. 施加秩2约束:$F = U'\Sigma' V'^T$,设 $\Sigma'_{33} = 0$
  4. 重构:$F = U'\text{diag}(\sigma_1, \sigma_2, 0)V'^T$

练习6.3:推导RANSAC估计基础矩阵时,给定容错率 $\epsilon$ 和置信度 $p$,需要的最小迭代次数 $N$。

Hint:使用概率公式 $1 - p = (1 - (1-\epsilon)^8)^N$。

答案

设内点比例为 $w = 1 - \epsilon$,每次采样8个点都是内点的概率为 $w^8$。

N次迭代都失败的概率:$(1 - w^8)^N$

要求成功概率至少为 $p$:$1 - (1 - w^8)^N \geq p$

解得:$N \geq \frac{\log(1-p)}{\log(1-w^8)}$

例如,$\epsilon = 0.5$,$p = 0.99$: $N \geq \frac{\log 0.01}{\log(1-0.5^8)} = \frac{-4.605}{-0.00391} ≈ 1177$

练习6.4:描述Schur补在Bundle Adjustment中的作用,解释为什么可以大幅提升计算效率。

Hint:考虑雅可比矩阵的稀疏结构和变量数量差异。

答案

Schur补利用了BA问题的特殊结构:

  1. 相机参数数量远少于3D点数量(如10个相机vs 10000个点)
  2. 雅可比矩阵呈块稀疏结构

正规方程:$\begin{bmatrix} U & W \\ W^T & V \end{bmatrix} \begin{bmatrix} \delta_c \\ \delta_p \end{bmatrix} = \begin{bmatrix} \epsilon_c \\ \epsilon_p \end{bmatrix}$

其中 $U$ 是相机部分(小),$V$ 是点部分(大但对角块)。

Schur补先消去点:$(U - WV^{-1}W^T)\delta_c = \epsilon_c - WV^{-1}\epsilon_p$

优势:

  • $V^{-1}$ 容易计算(块对角)
  • 缩减系统规模从 $(6m+3n)$ 到 $6m$
  • 计算复杂度从 $O((m+n)^3)$ 降到 $O(m^3 + mn^2)$

挑战题

练习6.5:设计一个自适应的关键帧选择策略,考虑以下因素:基线长度、共视特征数量、跟踪质量。给出评分函数和阈值设定方法。

Hint:考虑多个因素的加权组合,使用归一化处理不同量纲。

答案

评分函数: $$S = w_1 \cdot S_{baseline} + w_2 \cdot S_{covisibility} + w_3 \cdot S_{tracking}$$ 其中:

  1. 基线分数:$S_{baseline} = \min(1, \frac{|\mathbf{t}|}{B_{target}})$,$B_{target}$ 是目标基线
  2. 共视分数:$S_{covisibility} = \max(0, 1 - \frac{N_{matches}}{N_{desired}})$
  3. 跟踪质量:$S_{tracking} = \frac{\sigma_{reproj}}{threshold}$

自适应阈值:

  • 场景深度大:增加基线权重
  • 纹理丰富:减少共视要求
  • 快速运动:降低跟踪阈值

关键帧条件:$S > T_{adaptive}$ 或 时间/帧数超过最大间隔

练习6.6:比较PatchMatch和传统块匹配在MVS中的优劣,设计一个混合策略结合两者优点。

Hint:考虑不同场景特性和计算资源。

答案

比较分析:

PatchMatch优势:

  • 处理倾斜表面(估计法线)
  • 亚像素精度
  • 遮挡处理好

块匹配优势:

  • 简单高效
  • GPU并行友好
  • 弱纹理区域稳定

混合策略:

  1. 场景分析: - 计算图像梯度统计 - 检测主要平面(RANSAC)

  2. 自适应选择: - 高纹理区域:块匹配+亚像素优化 - 倾斜表面:PatchMatch - 弱纹理:平面约束的块匹配

  3. 多尺度融合: - 粗尺度:快速块匹配 - 细尺度:PatchMatch优化

  4. 置信度引导: - 低置信区域触发PatchMatch - 高置信区域保持块匹配结果

练习6.7:推导并实现一个鲁棒的深度图融合算法,处理:1) 噪声深度值,2) 遮挡边界,3) 动态物体。给出置信度计算和滤波策略。

Hint:结合几何一致性、光度一致性和时间一致性。

答案

鲁棒融合框架:

  1. 置信度计算: $$C(p) = C_{geom} \cdot C_{photo} \cdot C_{temporal}$$ 几何置信度: $$C_{geom} = \exp(-\frac{(\nabla d)^2}{2\sigma_{grad}^2}) \cdot \frac{N_{consistent}}{N_{total}}$$ 光度置信度: $$C_{photo} = \exp(-\frac{E_{photo}}{2\sigma_{photo}^2})$$ 时间置信度: $$C_{temporal} = \exp(-\frac{|d_t - d_{t-1}|}{2\sigma_{temp}^2})$$

  2. 遮挡检测: - 前后一致性检查 - 深度不连续检测:$|\nabla d| > \tau_{disc}$ - 自由空间违背检测

  3. 动态物体滤波: - 运动掩码:光流vs几何流 - 深度变化异常:$|d_t - d_{predicted}| > \tau_{motion}$ - 多帧一致性投票

  4. 加权融合: $$d_{fused} = \frac{\sum_i C_i \cdot \exp(-\frac{(d_i - d_{median})^2}{2\sigma^2}) \cdot d_i}{\sum_i C_i \cdot \exp(-\frac{(d_i - d_{median})^2}{2\sigma^2})}$$

练习6.8:设计一个面向大规模场景(城市级别)的分布式SfM系统架构。讨论数据划分、通信协议、全局一致性保证等关键问题。

Hint:考虑地理划分、重叠区域处理、分层优化。

答案

系统架构设计:

  1. 数据划分策略: - 空间划分:KD-tree或Octree - 图划分:最小割保证连通性 - 重叠缓冲区:15-20%重叠

  2. 三层架构: - 局部节点:处理子区域SfM - 区域节点:融合相邻子区域 - 全局节点:全局优化和一致性

  3. 通信协议

LocalNode -> RegionNode:

  - 局部地图(关键帧+地标点)
  - 边界约束
  - 置信度图

RegionNode -> GlobalNode:

  - 区域概要(位姿图)
  - 共享地标点
  - 对齐变换
  1. 全局一致性: - 相似变换传播 - 分布式Bundle Adjustment - 回环检测与闭合

  2. 容错机制: - 检查点保存 - 增量式更新 - 冗余计算

  3. 优化策略: - 异步消息传递 - 延迟全局优化 - 自适应LOD

常见陷阱与错误

特征匹配陷阱

  1. 重复纹理:导致大量错误匹配 - 解决:几何验证、互匹配检查

  2. 尺度变化过大:特征检测失败 - 解决:多尺度特征、学习特征

  3. 光照变化:描述子不稳定 - 解决:归一化、光照不变特征

Bundle Adjustment陷阱

  1. 局部最优:初始值差导致收敛到错误解 - 解决:良好初始化、鲁棒核函数

  2. 数值不稳定:参数尺度差异大 - 解决:参数归一化、预条件

  3. 过拟合:过多参数拟合噪声 - 解决:正则化、固定部分参数

MVS常见错误

  1. 弱纹理区域:深度估计失败 - 解决:平面假设、语义先验

  2. 反光表面:违背朗伯假设 - 解决:鲁棒光度度量、多视图投票

  3. 薄结构丢失:分辨率不足 - 解决:超分辨率、保守阈值

网格生成问题

  1. 孔洞和缺失:遮挡或匹配失败 - 解决:孔洞填充、完整性优先

  2. 噪声和离群点:深度图误差累积 - 解决:统计滤波、中值滤波

  3. 过度平滑:细节丢失 - 解决:自适应平滑、特征保持

最佳实践检查清单

数据采集

  • [ ] 图像重叠度 > 60%
  • [ ] 避免纯旋转运动
  • [ ] 覆盖多个视角
  • [ ] 保持稳定曝光
  • [ ] 高分辨率原始图像

特征工程

  • [ ] 选择合适特征类型
  • [ ] 设置合理匹配阈值
  • [ ] 实施几何验证
  • [ ] 处理图像畸变
  • [ ] 优化特征分布

重建流程

  • [ ] 验证相机标定
  • [ ] 选择良好初始对
  • [ ] 定期Bundle Adjustment
  • [ ] 监控重投影误差
  • [ ] 检查重建完整性

深度估计

  • [ ] 多尺度处理
  • [ ] 几何一致性检查
  • [ ] 置信度阈值筛选
  • [ ] 视图选择优化
  • [ ] 边界特殊处理

网格质量

  • [ ] 检查流形性质
  • [ ] 验证法线一致性
  • [ ] 控制三角形质量
  • [ ] 适当简化级别
  • [ ] 纹理映射对齐

性能优化

  • [ ] GPU加速关键步骤
  • [ ] 并行化独立任务
  • [ ] 使用空间索引
  • [ ] 实施增量式处理
  • [ ] 内存使用监控