cvg/GeoCalib
GeoCalib: Learning Single-image Calibration with Geometric Optimization (ECCV 2024)
GeoCalib – 单图像相机标定
功能
GeoCalib 可仅从一张 RGB 图像估计相机的内参(焦距、可选镜头畸变)以及重力方向(即世界向上矢量)。 它将预测初始猜测的深度学习主干与几何优化步骤相结合,以优化参数满足投影约束。
重要性
准确的内参和已知的重力方向对于 3D 重建、AR/VR、机器人技术和自主导航等许多下游任务至关重要。 传统上需要标定图案或多张图像;GeoCalib 消除了这一要求,使仅拍摄单帧的手持设备、无人机或机器人能够进行即时标定。
主要组件
geocalibPython 软件包 – 轻量级推理库(Python ≥ 3.9,可选 CUDA)。 提供GeoCalib类,包含load_image和calibrate方法。- 相机模型 – 支持四种模型:
pinhole(仅焦距)simple_radial(一个畸变系数k1)radial(两个系数k1、k2)simple_divisional(鱼眼式单系数)
- 部分/多图像支持 – 您可以提供已知内参或重力作为先验,标定共享相同内参的批次,或标定刚性安装的相机组。
- 训练与评估框架 – 基于
siclib库构建。 包括在新 OpenPano 数据集(≈ 2.8 k 全景 → ~37 k 裁剪视图)上训练以及在多个基准(LaMAR、MegaDepth、TartanAir、Stanford2D3D)上评估的脚本。
如何试用
# 安装软件包(可编辑模式)
git clone https://github.com/cvg/GeoCalib.git && cd GeoCalib
pip install -e .
# 简单推理
python - <<'PY'
import torch
from geocalib import GeoCalib
model = GeoCalib().to('cuda' if torch.cuda.is_available() else 'cpu')
img = model.load_image('my_picture.jpg').to(model.device)
out = model.calibrate(img)
print('camera intrinsics:', out['camera'])
print('gravity direction:', out['gravity'])
PY
自述文件中还提供了可运行的 Colab 笔记本和 Gradio 网页演示链接。
训练数据 – OpenPano
- 结合了 HDRMAPS、PolyHaven 和 Laval 室内 HDR 数据集的 HDR 全景图。
- 经过色调映射和可选畸变模拟后,流程会创建约 37 k 个训练裁剪图,以及验证和测试分割。
- 脚本(
siclib.datasets.create_dataset_from_pano)处理下载、色调映射和数据集生成。
性能(Area‑Under‑Curve,1°/5°/10° 误差阈值)在四个公开基准上 – GeoCalib 始终优于先前的 DeepCalib、ParamNet 和 UVP 等方法,尤其是在横滚和俯仰角估计方面。
典型用例
- 机器人/无人机 – 无需标定板即可在机载端标定新相机。
- AR/VR – 快速获取手持手机或头戴式显示器的内参。
- 运动恢复结构流程 – 当仅单个视图可用时为束调整提供良好的初始猜测。
后续方向
- 通过
camera_model参数尝试不同的相机模型。 - 提供先验(已知焦距、已知重力)以提高受限场景中的鲁棒性。
- 扩展
Camera类以添加自定义畸变模型。 - 使用提供的评估脚本在您自己的数据集上进行基准测试。
以上信息均直接取自仓库的 README。
相关
- 项目
- 项目
- 项目
- 项目
- 项目