MoGe 输出结果详解:一张照片跑一次,5 类几何信息怎么读、能干什么
【免费下载链接】MoGe[CVPR'25 Oral] MoGe: Unlocking Accurate Monocular Geometry Estimation for Open-Domain Images with Optimal Training Supervision项目地址: https://gitcode.com/GitHub_Trending/mo/MoGe
拍一张普通照片,几秒钟后你能拿到这张图的点云、深度图和法线图——这就是 MoGe 这个单目几何估计模型(CVPR'25 Oral)做的事情:从单张开放域图像里恢复出精确的 3D 几何信息。很多新手第一次跑完moge infer,面对输出目录里那一堆exr、png、glb文件会一脸懵。这篇文章就把 MoGe 的输出结果完整拆开讲:每个文件代表什么、坐标系是什么、落盘成什么格式、以及你能拿它们去干哪些事。
🧺 总览:一次前向传播,你能拿到什么?
MoGe 模型在一次前向传播中并不是只吐出一个结果,而是一组与输入图像等大的「地图」(map),外加相机参数。把清单先摆出来,后面逐个拆:
| 输出 | 形状 | 一句话解释 |
|---|---|---|
| 点图 points | (H, W, 3) | 每个像素对应的 3D 空间坐标 |
| 深度图 depth | (H, W) | 每个像素到相机的距离 |
| 法线图 normal | (H, W, 3) | 每个像素的表面朝向(MoGe-2 的 normal 模型才有) |
| 掩码 mask | (H, W) | 二值标记,哪些像素是有效的 |
| 相机内参 intrinsics | (3, 3) | 归一化的相机内参矩阵 |
图:MoGe 从单张图像到各类几何输出的整体流程(单目几何估计管线概览)
先抓住一个关键概念:所谓「图」,其实是一整张数值矩阵,尺寸和输入照片一模一样。照片里有多少个像素,这些地图里就有多少个对应的数值点。理解了这一点,后面所有输出都好读。
📐 空间与距离:点云和深度图,本质是一回事
点图和深度图看起来是两种东西,但本质是同一份「空间位置」信息的两种表达:
- 深度图只回答一个问题:这个像素离相机多远。它是单通道数值,MoGe-2 下单位就是米,可以直接用来做距离测量。
- 点图把深度再结合相机参数反投影回去,给每个像素算出完整的 (x, y, z) 三维坐标。你可以把它理解成「逐像素的点云」——把有效像素的三维坐标全捞出来,就是一张标准点云。
图:一张普通室内照片——MoGe 的输入只需这种日常开放域图像,无需任何标定
对新手来说,读法很简单:深度图上每个像素就是一个浮点数,数值越大代表越远;点图上每个像素是一组坐标,代表场景中某一点在相机坐标系下的位置。精度方面,MoGe-2 的点图是度量尺度的(metric scale),也就是说 1.0 就是 1 米,而不是像一些纯学习式方法那样只给你一个「差一个未知缩放」的结果,拿来直接量距离是可以的。
🧭 表面方向:法线图告诉你每个点「朝哪」
点图和深度图给的是位置和距离,而法线图给的是朝向:每个像素位置上一个单位法向量 (x, y, z),表示该处表面垂直方向指哪儿。
它来自 MoGe-2 的 normal 版本模型(加载 normal 权重时输出里才会带normal键)。落盘时会做颜色编码存成normal.png,红/绿/蓝通道分别对应法向量的三个分量,这样肉眼看颜色就能判断表面朝向——比如大面积同色说明是一块平整表面,颜色渐变处往往是曲面或边缘。
典型用法:表面重建时给网格提供平滑的法向、光照计算与渲染、以及基于法向的语义分割辅助等。配合 docs/normal.md 可以看到官方的法线效果对比说明。
📏 坐标系与尺度:这一节不读,后面全白干
三个容易踩的坑,集中说清楚:
- OpenCV 坐标系。MoGe 输出的点图和法线图都采用 OpenCV 相机坐标系:X 向右、Y 向下、Z 向前(指向场景)。这和很多 3D 软件里默认的「Y 向上、Z 向后」是反的。如果你把
points.exr里的坐标直接喂进 Blender 之类的工具发现场景倒立、前后颠倒,先来这里找原因。 - GLB/PLY 已自动转坐标。导出
mesh.glb/pointcloud.ply时,脚本会把顶点从 OpenCV 约定转换到 OpenGL 世界系(x 右、y 上、z 向后),贴图 UV 也做了相应调整——所以 3D 文件里拿到的是「正着」的模型,但原始地图文件仍是 OpenCV 坐标系。两条数据链的坐标系不同,混用时别搞串。 - EXR 是 32 位浮点。深度和点图以 EXR 格式保存,每个通道是 float32,动态范围大、无损保存,适合做后续数值处理;PNG 可视化图只适合肉眼看,不要拿它当数据用。
另外记住尺度这件事:MoGe-2 默认就是米制度量尺度,深度 1.5 就是离相机 1.5 米;相机视场角若已知可以通过--fov_x指定,否则模型会自动估计。
💾 文件落盘:--maps、--glb、--ply各产出什么
用命令行跑一次推理(脚本源码在这里):
- 加
--maps,每张图目录下会存一组像素级地图:image.jpg— 输入图副本,方便对照depth.exr— 原始深度图(32 位浮点,数据用)depth_vis.png— 颜色编码的深度可视化,肉眼看用points.exr— 逐像素 3D 坐标(点图)normal.png— 法线可视化(仅 normal 模型有)mask.png— 有效像素二值掩码,白为有效、黑为无效,做点云/网格前先过一遍它能滤掉无效区域fov.json— 估计出的水平/垂直视场角(单位:度)
- 加
--glb,得到mesh.glb:由点图重建的网格模型,原图颜色作为贴图,可直接拖进主流 3D 软件或 Web 查看器。 - 加
--ply,得到pointcloud.ply:纯点云,颜色存在顶点色里,适合做点云配准、扫描式重建流程。
图:街景交通照片这类开放域图像是 MoGe 单目几何估计的典型输入,输出可直接用于 3D 重建
三个开关互不冲突,可以同时加;都不加时脚本会默认全存。每张输入图会按自己的文件名建子目录存放,批量处理一个文件夹也照样工作。
🎯 从输出到应用:这些东西拿来干嘛
- 3D 重建与 AR:
mesh.glb/pointcloud.ply直接进 Blender、Web 3D 场景,单张照片变可交互的立体内容。 - 机器人导航:度量深度的深度图天然适合做障碍物距离判断与避障规划。
- 表面分析:法线图支撑表面平整度检测、光照估计、基于几何的特征提取。
- 下游几何任务的输入:EXR 原始地图精度高、格式通用,可以直接作为其他 3D 工作流的输入数据。
- 全景图扩展:仓库还提供了一个实验性的 360° 全景流程
moge infer_panorama,把等距柱状全景切分成多个视角分别估计再拼回,得到全景深度与点图,感兴趣的可以看 moge/scripts/infer_panorama.py。
想深入用法可以看 moge/scripts/infer.py 的参数说明,评估相关细节见 docs/eval.md,ONNX 部署参考 docs/onnx.md,各种真实输入照片在 example_images/ 里可以随便挑来试。
写在最后
读懂 MoGe 的输出其实就记三件事:像素级地图给你「哪里、多远、朝哪」,EXR 保精度、PNG 供人看,导出文件自动转好坐标系。把这些搞明白了,从一张照片到可用 3D 内容之间,只差一条命令的距离。
【免费下载链接】MoGe[CVPR'25 Oral] MoGe: Unlocking Accurate Monocular Geometry Estimation for Open-Domain Images with Optimal Training Supervision项目地址: https://gitcode.com/GitHub_Trending/mo/MoGe
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考