graph TD subgraph 双目相机系统 A["左相机<br/>Camera_L"] B["右相机<br/>Camera_R"] end subgraph 图像获取 C["左图像<br/>Image_L"] D["右图像<br/>Image_R"] end subgraph 立体匹配 E["视差计算<br/>Disparity Map"] end subgraph 深度重建 F["深度图<br/>Depth Map"] end A --> C B --> D C --> E D --> E E --> F classDef cameraNode fill:#42a5f5,stroke:#1565c0,color:white,stroke-width:2px,font-weight:bold,font-size:14px,border-radius:8px classDef imageNode fill:#66bb6a,stroke:#2e7d32,color:white,stroke-width:2px,font-weight:bold,font-size:14px,border-radius:8px classDef disparityNode fill:#ffb74d,stroke:#e65100,color:white,stroke-width:2px,font-weight:bold,font-size:14px,border-radius:8px classDef depthNode fill:#ef5350,stroke:#c62828,color:white,stroke-width:2px,font-weight:bold,font-size:14px,border-radius:8px classDef cameraSubgraph fill:#e3f2fd,stroke:#1565c0,stroke-width:2px,color:#0d47a1,font-weight:bold classDef imageSubgraph fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#1b5e20,font-weight:bold classDef disparitySubgraph fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#bf360c,font-weight:bold classDef depthSubgraph fill:#ffebee,stroke:#c62828,stroke-width:2px,color:#b71c1c,font-weight:bold class A,B cameraNode class C,D imageNode class E disparityNode class F depthNode class 双目相机系统 cameraSubgraph class 图像获取 imageSubgraph class 立体匹配 disparitySubgraph class 深度重建 depthSubgraph linkStyle 0,1 stroke:#1565c0,stroke-width:2px linkStyle 2,3 stroke:#2e7d32,stroke-width:2px linkStyle 4 stroke:#e65100,stroke-width:2px
graph TD
subgraph 双目相机系统
A["左相机<br/>Camera_L"]
B["右相机<br/>Camera_R"]
end
subgraph 图像获取
C["左图像<br/>Image_L"]
D["右图像<br/>Image_R"]
end
subgraph 立体匹配
E["视差计算<br/>Disparity Map"]
end
subgraph 深度重建
F["深度图<br/>Depth Map"]
end
A --> C
B --> D
C --> E
D --> E
E --> F
classDef cameraNode fill:#42a5f5,stroke:#1565c0,color:white,stroke-width:2px,font-weight:bold,font-size:14px,border-radius:8px
classDef imageNode fill:#66bb6a,stroke:#2e7d32,color:white,stroke-width:2px,font-weight:bold,font-size:14px,border-radius:8px
classDef disparityNode fill:#ffb74d,stroke:#e65100,color:white,stroke-width:2px,font-weight:bold,font-size:14px,border-radius:8px
classDef depthNode fill:#ef5350,stroke:#c62828,color:white,stroke-width:2px,font-weight:bold,font-size:14px,border-radius:8px
classDef cameraSubgraph fill:#e3f2fd,stroke:#1565c0,stroke-width:2px,color:#0d47a1,font-weight:bold
classDef imageSubgraph fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#1b5e20,font-weight:bold
classDef disparitySubgraph fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#bf360c,font-weight:bold
classDef depthSubgraph fill:#ffebee,stroke:#c62828,stroke-width:2px,color:#b71c1c,font-weight:bold
class A,B cameraNode
class C,D imageNode
class E disparityNode
class F depthNode
class 双目相机系统 cameraSubgraph
class 图像获取 imageSubgraph
class 立体匹配 disparitySubgraph
class 深度重建 depthSubgraph
linkStyle 0,1 stroke:#1565c0,stroke-width:2px
linkStyle 2,3 stroke:#2e7d32,stroke-width:2px
linkStyle 4 stroke:#e65100,stroke-width:2px
graph LR subgraph 左图像 A["参考点<br/>(x, y)"] end subgraph 右图像 B["匹配点<br/>(x-d, y)"] C["非匹配点"] end A -->|"匹配搜索"| B A -.->|"错误匹配"| C subgraph 匹配约束 D["极线约束"] E["唯一性约束"] F["顺序一致性约束"] G["视差平滑约束"] end D --> A E --> A F --> A G --> A classDef leftNode fill:#42a5f5,stroke:#1565c0,color:white,stroke-width:2px,font-weight:bold,font-size:14px,border-radius:8px classDef rightNode fill:#66bb6a,stroke:#2e7d32,color:white,stroke-width:2px,font-weight:bold,font-size:14px,border-radius:8px classDef wrongNode fill:#ef5350,stroke:#c62828,color:white,stroke-width:2px,font-weight:bold,font-size:14px,border-radius:8px classDef constraintNode fill:#ba68c8,stroke:#7b1fa2,color:white,stroke-width:2px,font-weight:bold,font-size:14px,border-radius:8px classDef leftSubgraph fill:#e3f2fd,stroke:#1565c0,stroke-width:2px,color:#0d47a1,font-weight:bold classDef rightSubgraph fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#1b5e20,font-weight:bold classDef constraintSubgraph fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px,color:#4a148c,font-weight:bold class A leftNode class B rightNode class C wrongNode class D,E,F,G constraintNode class 左图像 leftSubgraph class 右图像 rightSubgraph class 匹配约束 constraintSubgraph linkStyle 0 stroke:#4caf50,stroke-width:2px linkStyle 1 stroke:#f44336,stroke-width:2px,stroke-dasharray:5 5 linkStyle 2,3,4,5 stroke:#9c27b0,stroke-width:1.5px
graph LR
subgraph 左图像
A["参考点<br/>(x, y)"]
end
subgraph 右图像
B["匹配点<br/>(x-d, y)"]
C["非匹配点"]
end
A -->|"匹配搜索"| B
A -.->|"错误匹配"| C
subgraph 匹配约束
D["极线约束"]
E["唯一性约束"]
F["顺序一致性约束"]
G["视差平滑约束"]
end
D --> A
E --> A
F --> A
G --> A
classDef leftNode fill:#42a5f5,stroke:#1565c0,color:white,stroke-width:2px,font-weight:bold,font-size:14px,border-radius:8px
classDef rightNode fill:#66bb6a,stroke:#2e7d32,color:white,stroke-width:2px,font-weight:bold,font-size:14px,border-radius:8px
classDef wrongNode fill:#ef5350,stroke:#c62828,color:white,stroke-width:2px,font-weight:bold,font-size:14px,border-radius:8px
classDef constraintNode fill:#ba68c8,stroke:#7b1fa2,color:white,stroke-width:2px,font-weight:bold,font-size:14px,border-radius:8px
classDef leftSubgraph fill:#e3f2fd,stroke:#1565c0,stroke-width:2px,color:#0d47a1,font-weight:bold
classDef rightSubgraph fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#1b5e20,font-weight:bold
classDef constraintSubgraph fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px,color:#4a148c,font-weight:bold
class A leftNode
class B rightNode
class C wrongNode
class D,E,F,G constraintNode
class 左图像 leftSubgraph
class 右图像 rightSubgraph
class 匹配约束 constraintSubgraph
linkStyle 0 stroke:#4caf50,stroke-width:2px
linkStyle 1 stroke:#f44336,stroke-width:2px,stroke-dasharray:5 5
linkStyle 2,3,4,5 stroke:#9c27b0,stroke-width:1.5px
flowchart TD A["输入立体图像对"] --> B["图像预处理<br/>灰度转换、滤波"] B --> C["特征提取<br/>梯度、Census变换等"] C --> D["代价计算<br/>SAD/SSD/Census等"] D --> E["代价聚合<br/>窗口聚合/路径聚合"] E --> F["视差优化<br/>赢家通吃/动态规划"] F --> G["视差细化<br/>亚像素插值、滤波"] G --> H["深度转换<br/>Z = f·b/d"] subgraph 预处理阶段 A B end subgraph 匹配代价阶段 C D end subgraph 优化阶段 E F G end subgraph 后处理阶段 H end classDef prepNode fill:#42a5f5,stroke:#1565c0,color:white,stroke-width:2px,font-weight:bold,border-radius:8px classDef costNode fill:#ffb74d,stroke:#e65100,color:white,stroke-width:2px,font-weight:bold,border-radius:8px classDef optNode fill:#66bb6a,stroke:#2e7d32,color:white,stroke-width:2px,font-weight:bold,border-radius:8px classDef postNode fill:#ef5350,stroke:#c62828,color:white,stroke-width:2px,font-weight:bold,border-radius:8px classDef prepSubgraph fill:#e3f2fd,stroke:#1565c0,stroke-width:2px,color:#0d47a1,font-weight:bold classDef costSubgraph fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#bf360c,font-weight:bold classDef optSubgraph fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#1b5e20,font-weight:bold classDef postSubgraph fill:#ffebee,stroke:#c62828,stroke-width:2px,color:#b71c1c,font-weight:bold class A,B prepNode class C,D costNode class E,F,G optNode class H postNode class 预处理阶段 prepSubgraph class 匹配代价阶段 costSubgraph class 优化阶段 optSubgraph class 后处理阶段 postSubgraph linkStyle 0,1,2,3,4,5,6 stroke-width:2px
flowchart TD
A["输入立体图像对"] --> B["图像预处理<br/>灰度转换、滤波"]
B --> C["特征提取<br/>梯度、Census变换等"]
C --> D["代价计算<br/>SAD/SSD/Census等"]
D --> E["代价聚合<br/>窗口聚合/路径聚合"]
E --> F["视差优化<br/>赢家通吃/动态规划"]
F --> G["视差细化<br/>亚像素插值、滤波"]
G --> H["深度转换<br/>Z = f·b/d"]
subgraph 预处理阶段
A
B
end
subgraph 匹配代价阶段
C
D
end
subgraph 优化阶段
E
F
G
end
subgraph 后处理阶段
H
end
classDef prepNode fill:#42a5f5,stroke:#1565c0,color:white,stroke-width:2px,font-weight:bold,border-radius:8px
classDef costNode fill:#ffb74d,stroke:#e65100,color:white,stroke-width:2px,font-weight:bold,border-radius:8px
classDef optNode fill:#66bb6a,stroke:#2e7d32,color:white,stroke-width:2px,font-weight:bold,border-radius:8px
classDef postNode fill:#ef5350,stroke:#c62828,color:white,stroke-width:2px,font-weight:bold,border-radius:8px
classDef prepSubgraph fill:#e3f2fd,stroke:#1565c0,stroke-width:2px,color:#0d47a1,font-weight:bold
classDef costSubgraph fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#bf360c,font-weight:bold
classDef optSubgraph fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#1b5e20,font-weight:bold
classDef postSubgraph fill:#ffebee,stroke:#c62828,stroke-width:2px,color:#b71c1c,font-weight:bold
class A,B prepNode
class C,D costNode
class E,F,G optNode
class H postNode
class 预处理阶段 prepSubgraph
class 匹配代价阶段 costSubgraph
class 优化阶段 optSubgraph
class 后处理阶段 postSubgraph
linkStyle 0,1,2,3,4,5,6 stroke-width:2px
graph TD subgraph 传统方法 A["块匹配(BM)<br/>速度: 快<br/>精度: 低<br/>内存: 低"] B["半全局匹配(SGBM)<br/>速度: 中<br/>精度: 中<br/>内存: 低"] C["全局匹配(GC/BP)<br/>速度: 慢<br/>精度: 高<br/>内存: 中"] end subgraph 深度学习方法 D["PSMNet<br/>速度: 慢<br/>精度: 很高<br/>内存: 高"] E["GANet<br/>速度: 很慢<br/>精度: 最高<br/>内存: 很高"] F["单目深度估计<br/>速度: 中<br/>精度: 中<br/>内存: 中"] end subgraph 性能指标 G["KITTI 3px错误率"] H["Middlebury平均误差"] I["ETH3D完整性"] end A --> G B --> G C --> G D --> G E --> G F --> G G --> J["传统: 5-15%<br/>深度学习: 2-5%"] H --> K["传统: 1-3px<br/>深度学习: 0.5-1px"] I --> L["传统: 70-90%<br/>深度学习: 90-98%"] classDef tradNode fill:#64b5f6,stroke:#1565c0,color:white,stroke-width:2px,font-weight:bold,font-size:13px,border-radius:8px classDef dlNode fill:#ba68c8,stroke:#7b1fa2,color:white,stroke-width:2px,font-weight:bold,font-size:13px,border-radius:8px classDef metricNode fill:#66bb6a,stroke:#2e7d32,color:white,stroke-width:2px,font-weight:bold,font-size:13px,border-radius:8px classDef resultNode fill:#ffb74d,stroke:#e65100,color:white,stroke-width:2px,font-weight:bold,font-size:13px,border-radius:8px classDef tradSubgraph fill:#e3f2fd,stroke:#1565c0,stroke-width:2px,color:#0d47a1,font-weight:bold classDef dlSubgraph fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px,color:#4a148c,font-weight:bold classDef metricSubgraph fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#1b5e20,font-weight:bold class A,B,C tradNode class D,E,F dlNode class G,H,I metricNode class J,K,L resultNode class 传统方法 tradSubgraph class 深度学习方法 dlSubgraph class 性能指标 metricSubgraph linkStyle 0,1,2,3,4,5 stroke:#1565c0,stroke-width:1.5px linkStyle 6,7,8 stroke:#4caf50,stroke-width:1.5px
graph TD
subgraph 传统方法
A["块匹配(BM)<br/>速度: 快<br/>精度: 低<br/>内存: 低"]
B["半全局匹配(SGBM)<br/>速度: 中<br/>精度: 中<br/>内存: 低"]
C["全局匹配(GC/BP)<br/>速度: 慢<br/>精度: 高<br/>内存: 中"]
end
subgraph 深度学习方法
D["PSMNet<br/>速度: 慢<br/>精度: 很高<br/>内存: 高"]
E["GANet<br/>速度: 很慢<br/>精度: 最高<br/>内存: 很高"]
F["单目深度估计<br/>速度: 中<br/>精度: 中<br/>内存: 中"]
end
subgraph 性能指标
G["KITTI 3px错误率"]
H["Middlebury平均误差"]
I["ETH3D完整性"]
end
A --> G
B --> G
C --> G
D --> G
E --> G
F --> G
G --> J["传统: 5-15%<br/>深度学习: 2-5%"]
H --> K["传统: 1-3px<br/>深度学习: 0.5-1px"]
I --> L["传统: 70-90%<br/>深度学习: 90-98%"]
classDef tradNode fill:#64b5f6,stroke:#1565c0,color:white,stroke-width:2px,font-weight:bold,font-size:13px,border-radius:8px
classDef dlNode fill:#ba68c8,stroke:#7b1fa2,color:white,stroke-width:2px,font-weight:bold,font-size:13px,border-radius:8px
classDef metricNode fill:#66bb6a,stroke:#2e7d32,color:white,stroke-width:2px,font-weight:bold,font-size:13px,border-radius:8px
classDef resultNode fill:#ffb74d,stroke:#e65100,color:white,stroke-width:2px,font-weight:bold,font-size:13px,border-radius:8px
classDef tradSubgraph fill:#e3f2fd,stroke:#1565c0,stroke-width:2px,color:#0d47a1,font-weight:bold
classDef dlSubgraph fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px,color:#4a148c,font-weight:bold
classDef metricSubgraph fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#1b5e20,font-weight:bold
class A,B,C tradNode
class D,E,F dlNode
class G,H,I metricNode
class J,K,L resultNode
class 传统方法 tradSubgraph
class 深度学习方法 dlSubgraph
class 性能指标 metricSubgraph
linkStyle 0,1,2,3,4,5 stroke:#1565c0,stroke-width:1.5px
linkStyle 6,7,8 stroke:#4caf50,stroke-width:1.5px
图11.9:传统方法与深度学习方法的性能对比
场景适应性分析:
Code
graph TD subgraph 场景特征 A["纹理丰富<br/>结构清晰"] B["弱纹理区域<br/>重复模式"] C["反光表面<br/>透明物体"] D["遮挡区域<br/>边界不连续"] end subgraph 传统方法表现 E["SGBM<br/>准确度: 高<br/>鲁棒性: 中"] F["BM<br/>准确度: 中<br/>鲁棒性: 低"] G["GC<br/>准确度: 高<br/>鲁棒性: 中"] end subgraph 深度学习方法表现 H["PSMNet<br/>准确度: 很高<br/>鲁棒性: 高"] I["GANet<br/>准确度: 最高<br/>鲁棒性: 很高"] J["单目深度<br/>准确度: 中<br/>鲁棒性: 高"] end A --> E A --> H B --> G B --> I C --> F C --> J D --> G D --> I classDef sceneNode fill:#4db6ac,stroke:#00796b,color:white,stroke-width:2px,font-weight:bold,font-size:13px,border-radius:8px classDef tradNode fill:#64b5f6,stroke:#1565c0,color:white,stroke-width:2px,font-weight:bold,font-size:13px,border-radius:8px classDef dlNode fill:#ba68c8,stroke:#7b1fa2,color:white,stroke-width:2px,font-weight:bold,font-size:13px,border-radius:8px classDef sceneSubgraph fill:#e0f2f1,stroke:#00796b,stroke-width:2px,color:#004d40,font-weight:bold classDef tradSubgraph fill:#e3f2fd,stroke:#1565c0,stroke-width:2px,color:#0d47a1,font-weight:bold classDef dlSubgraph fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px,color:#4a148c,font-weight:bold class A,B,C,D sceneNode class E,F,G tradNode class H,I,J dlNode class 场景特征 sceneSubgraph class 传统方法表现 tradSubgraph class 深度学习方法表现 dlSubgraph linkStyle 0,1,2,3,4,5,6,7 stroke-width:1.5px
graph TD
subgraph 场景特征
A["纹理丰富<br/>结构清晰"]
B["弱纹理区域<br/>重复模式"]
C["反光表面<br/>透明物体"]
D["遮挡区域<br/>边界不连续"]
end
subgraph 传统方法表现
E["SGBM<br/>准确度: 高<br/>鲁棒性: 中"]
F["BM<br/>准确度: 中<br/>鲁棒性: 低"]
G["GC<br/>准确度: 高<br/>鲁棒性: 中"]
end
subgraph 深度学习方法表现
H["PSMNet<br/>准确度: 很高<br/>鲁棒性: 高"]
I["GANet<br/>准确度: 最高<br/>鲁棒性: 很高"]
J["单目深度<br/>准确度: 中<br/>鲁棒性: 高"]
end
A --> E
A --> H
B --> G
B --> I
C --> F
C --> J
D --> G
D --> I
classDef sceneNode fill:#4db6ac,stroke:#00796b,color:white,stroke-width:2px,font-weight:bold,font-size:13px,border-radius:8px
classDef tradNode fill:#64b5f6,stroke:#1565c0,color:white,stroke-width:2px,font-weight:bold,font-size:13px,border-radius:8px
classDef dlNode fill:#ba68c8,stroke:#7b1fa2,color:white,stroke-width:2px,font-weight:bold,font-size:13px,border-radius:8px
classDef sceneSubgraph fill:#e0f2f1,stroke:#00796b,stroke-width:2px,color:#004d40,font-weight:bold
classDef tradSubgraph fill:#e3f2fd,stroke:#1565c0,stroke-width:2px,color:#0d47a1,font-weight:bold
classDef dlSubgraph fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px,color:#4a148c,font-weight:bold
class A,B,C,D sceneNode
class E,F,G tradNode
class H,I,J dlNode
class 场景特征 sceneSubgraph
class 传统方法表现 tradSubgraph
class 深度学习方法表现 dlSubgraph
linkStyle 0,1,2,3,4,5,6,7 stroke-width:1.5px
图11.10:不同方法在各类场景中的适应性分析
深度学习方法的进展:
Code
graph LR subgraph 网络架构演进 A["2D CNN<br/>(DispNet, 2016)"] B["3D CNN<br/>(PSMNet, 2018)"] C["GNN<br/>(GwcNet, 2019)"] D["Transformer<br/>(STTR, 2021)"] end subgraph 关键技术创新 E["代价体积构建"] F["多尺度特征融合"] G["注意力机制"] H["自监督学习"] end A --> B B --> C C --> D A --> E B --> F C --> G D --> H classDef archNode fill:#ef5350,stroke:#c62828,color:white,stroke-width:2px,font-weight:bold,font-size:13px,border-radius:8px classDef techNode fill:#66bb6a,stroke:#2e7d32,color:white,stroke-width:2px,font-weight:bold,font-size:13px,border-radius:8px classDef archSubgraph fill:#ffebee,stroke:#c62828,stroke-width:2px,color:#b71c1c,font-weight:bold classDef techSubgraph fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#1b5e20,font-weight:bold class A,B,C,D archNode class E,F,G,H techNode class 网络架构演进 archSubgraph class 关键技术创新 techSubgraph linkStyle 0,1,2 stroke:#f44336,stroke-width:1.5px linkStyle 3,4,5,6 stroke:#4caf50,stroke-width:1.5px
graph LR
subgraph 网络架构演进
A["2D CNN<br/>(DispNet, 2016)"]
B["3D CNN<br/>(PSMNet, 2018)"]
C["GNN<br/>(GwcNet, 2019)"]
D["Transformer<br/>(STTR, 2021)"]
end
subgraph 关键技术创新
E["代价体积构建"]
F["多尺度特征融合"]
G["注意力机制"]
H["自监督学习"]
end
A --> B
B --> C
C --> D
A --> E
B --> F
C --> G
D --> H
classDef archNode fill:#ef5350,stroke:#c62828,color:white,stroke-width:2px,font-weight:bold,font-size:13px,border-radius:8px
classDef techNode fill:#66bb6a,stroke:#2e7d32,color:white,stroke-width:2px,font-weight:bold,font-size:13px,border-radius:8px
classDef archSubgraph fill:#ffebee,stroke:#c62828,stroke-width:2px,color:#b71c1c,font-weight:bold
classDef techSubgraph fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#1b5e20,font-weight:bold
class A,B,C,D archNode
class E,F,G,H techNode
class 网络架构演进 archSubgraph
class 关键技术创新 techSubgraph
linkStyle 0,1,2 stroke:#f44336,stroke-width:1.5px
linkStyle 3,4,5,6 stroke:#4caf50,stroke-width:1.5px