visionaix/geocalib

GeoCalib (ECCV 2024): Single-image camera calibration. Estimates focal length, FoV, distortion, roll and pitch from one image using a deep net + Levenberg-Marquardt optimizer. Works on both outdoor and indoor scenes.

Public
18 runs

Run time and cost

This model runs on Nvidia T4 GPU hardware. We don't yet have enough runs of this model to provide performance information.

Readme

GeoCalib on Replicate

Single-Image Camera Calibration with Geometric Optimization

Paper: ECCV 2024 | Authors: Veicht, Sarlin, Lindenberger, Pollefeys (ETH Zurich / Microsoft Research) | Code: github.com/cvg/GeoCalib

GeoCalib estimates camera intrinsics (focal length, field of view, lens distortion) and gravity direction (roll and pitch) from a single image — no calibration pattern, no multi-view setup, no EXIF data needed.

It works on both outdoor scenes (streets, buildings, landscapes, aerial views) and indoor environments (rooms, hallways, offices, warehouses).


Default Example

Default input image:

https://cdn.sanity.io/images/k55su7ch/production2/d9e35a73891d43ccb0bc665bf2e0d5d9d6f1ea2b-4200x2363.jpg?w=1920&q=75&auto=format
import replicate

output = replicate.run("visionaix/geocalib", input={
    "image": "https://cdn.sanity.io/images/k55su7ch/production2/d9e35a73891d43ccb0bc665bf2e0d5d9d6f1ea2b-4200x2363.jpg?w=1920&q=75&auto=format",
    "camera_model": "pinhole",
    "return_visualization": True,
})

Default output:

{
  "camera": {
    "image_width": 1920,
    "image_height": 1080,
    "focal_length_x": 897.49,
    "focal_length_y": 897.49,
    "principal_point_x": 960.0,
    "principal_point_y": 540.0,
    "vertical_fov_deg": 62.07,
    "horizontal_fov_deg": 93.86,
    "intrinsic_matrix_K": [
      [897.49, 0.0, 960.0],
      [0.0, 897.49, 540.0],
      [0.0, 0.0, 1.0]
    ]
  },
  "gravity": {
    "roll_deg": 0.322,
    "pitch_deg": -0.528,
    "gravity_vector_3d": [-0.00561, -0.99994, -0.00922]
  },
  "uncertainty": {
    "roll_uncertainty_deg": 0.630,
    "pitch_uncertainty_deg": 0.936,
    "focal_uncertainty_px": 222.37,
    "vfov_uncertainty_deg": 17.74,
    "gravity_uncertainty": 0.0168
  },
  "performance": {
    "inference_time_seconds": 1.39,
    "device": "cuda"
  }
}
Parameter Value Meaning
Focal length 897.5 px Moderate wide-angle lens (~62 deg vertical FoV)
Roll +0.32 deg Camera is nearly perfectly level
Pitch -0.53 deg Slightly tilted upward
Gravity uncertainty 0.017 Very high confidence
Inference time 1.39s On NVIDIA T4 GPU

Indoor vs. Outdoor

GeoCalib is trained on diverse datasets covering both indoor and outdoor environments:

Outdoor: Urban streetscapes, architectural photography, landscapes, aerial/drone imagery

Indoor: Office spaces, hallways and corridors, warehouses/factories, residential rooms

The model extracts gravity cues from any vertical or horizontal structures. Confidence maps automatically downweight textureless regions (sky, uniform walls) and focus on structurally informative areas.


Inputs

Parameter Type Default Description
image File required Input image (JPEG, PNG, WebP)
camera_model Choice "pinhole" pinhole, simple_radial, radial, simple_divisional
use_distorted_weights Boolean false Enable for fisheye/wide-angle
focal_length_prior Float 0.0 Known focal length in pixels (0 = auto)
return_visualization Boolean true Generate diagnostic visualization

Camera Models

Model Use When
pinhole Standard lenses, phone cameras, DSLRs
simple_radial Slight barrel/pincushion distortion
radial Moderate lens distortion
simple_divisional Fisheye and ultra-wide lenses

Output

  • calibration_json — Full calibration data (intrinsics, gravity, uncertainty, performance)
  • visualization — 6-panel diagnostic PNG (input + fields + confidence + summary)

Advanced Usage

Known Focal Length Prior

output = replicate.run("visionaix/geocalib", input={
    "image": "photo.jpg",
    "focal_length_prior": 1500.0,
})

Fisheye Lenses

output = replicate.run("visionaix/geocalib", input={
    "image": "fisheye.jpg",
    "camera_model": "simple_divisional",
    "use_distorted_weights": True,
})

Citation

@inproceedings{veicht2024geocalib,
  title     = {GeoCalib: Single-Image Calibration with Geometric Optimization},
  author    = {Veicht, Alexander and Sarlin, Paul-Edouard and Lindenberger, Philipp and Pollefeys, Marc},
  booktitle = {European Conference on Computer Vision (ECCV)},
  year      = {2024},
}

License

This endpoint wraps GeoCalib. See the original license.

Model created
Model updated