Scene Flow
了解场景流如何估计连续帧间的 3D 运动、它与光流和深度估计有何不同,以及它如何支持自动驾驶、机器人技术和 YOLO26 视觉工作流。
场景流是动态场景随时间变化的三维运动场。它描述可见点在不同帧之间如何在真实世界的三维空间中移动,包括横向、垂直方向以及朝向或远离摄像机的运动。在计算机视觉中,场景流能帮助系统理解图像中不仅有哪些内容在移动,还能了解周围几何结构实际发生了怎样的变化。
场景流如何表示三维运动#
场景流估计会为每个观测到的场景点分配一个三维位移向量或速度向量。例如,行人横穿马路并逐渐靠近摄像机时,对应的向量会同时描述其横向运动以及与摄像机之间不断缩短的距离。
这与光流不同,光流表示二维图像平面上的表观像素运动。正如卡内基梅隆大学场景流项目所解释的那样,光流可以理解为三维场景流在摄像机图像上的投影。因此,两个点可能具有相似的图像运动,但在深度方向上的运动却不同。
稠密场景流会估计大多数可见点的运动,而稀疏场景流只覆盖选定的特征、跟踪点或 LiDAR 回波。稠密输出能提供更丰富的几何细节,但需要更多计算资源,并且要求帧间对应关系可靠。
场景流与相关视觉概念的比较#
场景流将空间结构与时间运动结合起来,处于多个相关任务的交汇处:
- **使用 OpenCV 进行光流估计:**估计像素在水平方向和垂直方向上的位移。它无法单独判断物体是否沿深度方向移动,或表观运动是否由摄像机运动造成。
- **深度估计:**确定表面与摄像机之间的距离,通常针对单帧图像。场景流还会描述这些三维位置如何随时间变化。
- **立体视觉:**利用同步摄像机拍摄的对应像素来恢复深度。OpenCV 立体深度工作流介绍了视图间的视差如何支持三维重建。
- **目标跟踪:**在不同帧之间保持目标身份,通常会使用边界框或掩码。场景流则估计点或像素级别的运动,还能表示同一可变形物体内部的不同运动。
- **点云运动:**LiDAR 和 RGB-D 系统可以直接估计三维点集之间的场景流。Open3D 点云指南介绍了许多此类处理流程所使用的几何表示。
场景流还取决于摄像机几何信息。准确的 OpenCV 摄像机标定有助于区分实际场景运动与摄像机旋转、平移或镜头畸变造成的变化。
实际应用#
-
**自动驾驶:**感知系统可以估计附近车辆是否正在变道、快速接近或随车流移动。与单纯的二维运动信息不同,场景流包含沿深度轴的运动,因此有助于进行碰撞时间推理。场景流可以补充汽车计算机视觉解决方案中的检测、跟踪和深度组件。KITTI 场景流基准展示了如何在包含摄像机运动和独立运动物体的道路场景中进行评估,而 NHTSA 自动驾驶车辆安全指南则为以安全为重点的感知系统提供了更广泛的背景信息。
-
**机器人:**移动机器人可以利用场景流区分静止的货架和移动的工作人员,估计障碍物的三维轨迹,并在碰撞发生前更新行进路线。在机器人视觉解决方案中,这些信息可以与摄像机、深度传感器和 LiDAR 的数据结合使用。ROS 传感器消息文档定义了机器人组件之间交换图像、摄像机信息和点云的常用接口。
估计难点与数据#
场景流可以根据立体视频、RGB-D 摄像机、LiDAR 序列,或利用学习到的深度和运动线索的单目视频推导得出。立体传感器和主动深度传感器能提供更可靠的几何测量,而单目系统必须推断尺度,并根据视觉上下文消除歧义。
常见的失败情况包括遮挡、运动模糊、反光表面、无纹理区域、细长结构、光照变化以及帧间快速运动。摄像机运动会带来额外挑战,因为系统必须将自运动与独立运动的物体区分开来。错误可能导致三维轨迹不准确,使下游导航或碰撞预测系统误判速度和距离。
训练数据可能包括 RGB 帧、深度或视差、光流、分割结果和摄像机参数。弗赖堡场景流数据集展示了这些互补标注如何共同描述几何结构和运动。
实用工作流#
Ultralytics YOLO26 可以通过其文档中介绍的单目深度估计任务,为场景流处理流程提供深度信息。下面的示例会为单帧生成稠密深度图:
from ultralytics import YOLO
# 估计场景逐像素的三维结构。
model = YOLO("yolo26n-depth.pt")
results = model("https://ultralytics.com/images/bus.jpg")
result = results[0]
result.save(filename="depth_result.jpg")
print(result.depth.data.shape)这个 YOLO26 工作流本身不会计算场景流。它提供逐像素深度,完整的处理流程可以将其与连续帧、时间对应关系和经过标定的摄像机位姿结合起来,从而估计三维位移。在实践中,团队应先分别验证每个组件,再评估完整的运动场,尤其要关注遮挡区域和深度边界附近的表现。









