· 5 min read
项目:COLMAP Sparse Viewer,在 VS Code 里直接查看稀疏重建
跑完一次 COLMAP 重建之后,第一件事总是想看一眼:点云是不是散的?相机有没有注册全?轨迹是不是飘了?常规做法是打开 COLMAP 自带的 GUI,File > Import model 再一层层点进 sparse/0。在远程服务器上则更麻烦,要么把模型拷回本地,要么配 X 转发。
COLMAP Sparse Viewer 把这一步缩短为一次双击。它是一个 VS Code 扩展,在编辑器内用 Three.js 渲染 COLMAP 的稀疏模型,因此在本地、WSL、Remote SSH、Dev Container 乃至 GitHub Codespaces 里都能用,模型文件在哪里,就在哪里看。
安装与打开
从 VS Code Marketplace 搜索「COLMAP Sparse Viewer」安装,或者从 GitHub Releases 下载 .vsix 后执行:
code --install-extension colmap-sparse-viewer-<version>.vsix
打开模型有三种方式:
- 在资源管理器里双击
cameras.bin、images.bin或points3D.bin中的任意一个。 - 右键一个文件夹,选择 COLMAP: Visualize Sparse Model。文件夹可以是
sparse/0,也可以是它的上级目录,扩展会向下搜索最多 3 层自动找到模型。 - 在命令面板运行 COLMAP: Visualize Sparse Model 并选择目录。
.bin 和 .txt 两种格式都支持。仓库的 v0.1.6 release 附带了两份示例模型:sparse_garden.zip 同时包含二进制和文本两种格式;sparse_store.zip 由较新版本的 COLMAP 写出,还带有 rigs.bin 和 frames.bin。
下面的视频演示了完整流程:
功能
点云。默认按三维点的真实 RGB 着色,也可以切换到按重投影误差或按高度着色。两个过滤器:最大重投影误差、最小 track 长度,用来快速剔除噪点,看清主体结构。
相机视锥。每个已注册图像都画一个视锥,大小、线宽、颜色可调。与大多数查看器不同,这里的视锥不是统一的四棱锥,而是用每个相机模型真实的反投影函数(含畸变)算出来的:
- 针孔类模型(PINHOLE、RADIAL、OPENCV 等)得到经典的矩形视锥。
- 鱼眼模型得到弯曲边界的视锥,视场超过 180° 时依然正确。
- 等距柱状(EQUIRECTANGULAR)全景相机画成一个线框球。
COLMAP 定义的 18 种相机模型(ID 0 到 17,包括 division、fisheye、EUCM 和 equirectangular 扩展)全部支持。新旧版本 COLMAP 写出的参数个数不一样,例如 RAD_TAN_THIN_PRISM_FISHEYE 现在是 16 个参数而旧版是 14 个,EQUIRECTANGULAR 现在是 2 个而旧版是 3 个,扩展都能识别。
轨迹。可选按图像名排序画出相机轨迹折线,看一眼就知道序列有没有断。
检查单张图像。点击任意视锥,会显示图像名、相机模型、带名称的完整内参和相机位置。还可以选择画出该图像观测到的所有三维点的射线,或者把这些点高亮出来,判断某张图为什么注册失败时很有用。
播放。按图像 ID 顺序逐个切换相机视角,相当于沿着拍摄顺序走一遍。双击点云可以把轨道旋转的中心设到那个位置。
| 操作 | 效果 |
|---|---|
| 左键拖动 | 旋转 |
| 右键拖动 | 平移 |
| 滚轮 | 缩放 |
| 点击视锥 | 查看图像信息 |
| 双击点云 | 设置旋转中心 |
实现
扩展分为两部分:
src/extension.ts注册命令、右键菜单和自定义编辑器(cameras.bin、images.bin、points3D.bin的 custom editor),并负责在文件系统里定位模型目录、读取文件;src/colmap/parser.ts解析 COLMAP 的二进制与文本格式。webview/main.ts是 Three.js 渲染层:点云用Points一次性上传 GPU,视锥与轨迹用LineSegments,交互用 OrbitControls。
开发
git clone https://github.com/Vincentqyw/vscode-colmap-viewer.git
cd vscode-colmap-viewer
npm install
npm run build # 打包扩展与 webview
npm run package # 生成 .vsix
MIT 许可。如果你在用 COLMAP 又常年泡在 VS Code 里,欢迎试用并反馈。