10.5.5 3D 视觉入门【选修】
2D 视觉主要在平面图像里理解内容。 3D 视觉再往前走一步:
不仅要知道图里是什么,还想知道它在空间里离我们多远、朝向如何、结构怎样。
这也是它和普通 CV 最大的不同。
学习目标
- 理解深度、点云和多视角几何的基本直觉
- 理解 3D 视觉为什么比 2D 更难
- 通过可运行示例建立深度估计最小直觉
- 知道 3D 视觉常见应用场景
先建立一张地图
3D 视觉最适合新人的理解方式不是“多了一维”,而是先看问题升级在哪里:
所以这节真正想帮你建立的是:
- 平面理解和空间理解的差别
- 深度、点云、多视角几何分别在解决什么问题
一个更适合新人的总类比
你可以把 2D 和 3D 的差别理解成:
- 2D 像看一张旅游照片
- 3D 像真的站在现场,想知道人离你多远、桌子有多高、车在你左前方还是右前方
也就是说,3D 视觉真正新增的不是“多一列数字”,而是:
- 你开始关心空间关系本身
一、3D 视觉最核心的新问题是什么?
在 2D 图像里,很多时候只关心:
- 类别
- 位置
3D 视觉还会进一步关心:
- 距离
- 体积
- 空间结构
一个类比
2D 更像看地图截图。 3D 更像真的站在场景里,想知道:
- 这个物体离我多远
二、几个最常见的 3D 视觉概念
深度(Depth)
每个点离相机有多远。
点云(Point Cloud)
把场景表示成很多带三维坐标的点。
多视角几何
通过多个视角之间的对应关系,恢复三维结构。
三、先看一个最小深度直觉示例
def estimate_depth(focal_length, baseline, disparity):
if disparity == 0:
return float("inf")
return focal_length * baseline / disparity
focal_length = 800
baseline = 0.12
for disparity in [40, 20, 10]:
depth = estimate_depth(focal_length, baseline, disparity)
print({"disparity": disparity, "depth": round(depth, 4)})
预期输出:
{'disparity': 40, 'depth': 2.4}
{'disparity': 20, 'depth': 4.8}
{'disparity': 10, 'depth': 9.6}
视差越小,估计出来的深度越大。学习完整双目几何之前,先抓住这条直觉就够了。
这个例子最想表达什么?
它抓住了立体视觉最核心的一层直觉:
- 视差越大,通常越近
- 视差越小,通常越远
为什么这很重要?
因为它让“图像里的点”第一次和真实三维空间联系起来。
新人第一次学 3D 视觉,最该先记哪三件事?
-
深度 先理解“离相机多远”。
-
点云 先理解 3D 世界可以表示成很多空间点。
-
视差 先理解多视角为什么能恢复空间距离。
再看一个最小“由深度恢复点”的示例
pixels = [
{"u": 10, "v": 20, "z": 2.0},
{"u": 12, "v": 21, "z": 2.5},
]
def to_point(pixel):
return (pixel["u"] * pixel["z"], pixel["v"] * pixel["z"], pixel["z"])
points = [to_point(pixel) for pixel in pixels]
print(points)
预期输出:
[(20.0, 40.0, 2.0), (30.0, 52.5, 2.5)]
这是一个简化版点云直觉:每个图像点带着深度值,所以你可以把它想象成 3D 空间里的一个点。
这个示例不是严格相机模型,只是帮助新人先建立一个直觉:
- 当你已经知道深度时
- 图像里的点就可以被重新想象成空间里的点
这正是“点云感”最容易入门的地方。

3D 视觉真正新增的是空间关系。读这张图时先看 disparity 如何影响 depth,再看像素点如何带着深度变成 point cloud,最后再理解相机参数和多视角几何为什么重要。
四、3D 视觉为什么更难?
数据更难拿
2D 图片很好收集, 3D 标注和深度数据通常更贵。
几何关系更复杂
你不只是处理外观, 还要处理:
- 相机参数
- 视角变化
- 空间一致性
可视化和调试也更难
二维图像错误很直观, 三维结构错误往往更难肉眼看懂。
五、最常见误区
误区一:3D 视觉只是“多一个维度”
不止。 它带来的是新的几何问题。
误区二:2D 做好了自然就能做 3D
有帮助,但仍然要补空间几何直觉。
误区三:一开始就直接上复杂 3D 网络
更稳妥的方式通常是先把:
- 深度
- 视差
- 点云
这些基础直觉立住。
第一次做 3D 项目时,最稳的默认顺序
更稳的顺序通常是:
- 先选一个单目标的小场景
- 先理解深度和视差
- 先把二维点和三维点的对应关系看懂
- 再进入点云或多视角几何
- 最后再看更复杂的重建或 3D 检测
这样会比一开始就直接读复杂 3D 网络更容易稳住。
这节最正确的学习预期
这一节不是要把你立刻带到复杂三维重建, 而是先让你真正意识到:
- 3D 视觉比 2D 视觉多出的是空间几何问题
- 这会影响数据、建模、评估和调试的难度
小结
这节最重要的是建立一个判断:
3D 视觉的核心价值,是把图像理解从平面提升到空间结构,而这也让它天然比 2D 视觉多出一层几何难度。
这节最该带走什么
- 3D 视觉不是“多一个维度”那么简单
- 深度、视差、点云是最值得先立住的三层直觉
- 先学空间感,再看复杂模型,会更稳很多
如果把它做成项目,最值得展示什么
- 一个小型深度估计或双目示例
- 深度图和原图的对照
- 从图像点到空间点的最小可视化
- 一组“近处 / 远处”判断的错误案例
这样会比只说“我做了 3D 视觉”更有说服力。
练习
- 改一改
disparity,观察深度变化趋势。 - 为什么说 3D 视觉比 2D 视觉更依赖几何直觉?
- 点云为什么是一种很自然的 3D 表示?
- 想一想:哪些应用特别依赖 3D 视觉,而不是只要 2D 检测就够了?