Skip to main content

Refractive multi-camera calibration for underwater arrays with Snell's law modeling

Project description

AquaCal

Build Coverage PyPI Python License DOI

Refractive multi-camera calibration for underwater arrays. AquaCal calibrates cameras in air viewing through a flat water surface, using Snell's law to achieve accurate 3D reconstruction in refractive environments.

Features

  • Snell's law refractive projection — Accurate ray-tracing through air-water interfaces
  • Multi-camera pose graph — BFS-based extrinsic initialization for camera arrays
  • Joint bundle adjustment — Simultaneous optimization of extrinsics, interface distances, and board poses
  • Sparse Jacobian optimization — Scalable to 10+ cameras with column grouping
  • ChArUco board detection — Robust corner detection for calibration targets
  • Validation diagnostics — Holdout reprojection, 3D triangulation checks, and per-camera error breakdowns
  • Active re-calibration (beta)refine_calibration() updates an existing calibration from point correspondences collected in the field; not yet fully tested

Installation

pip install aquacal

Quick Start

  1. Install AquaCal:

    pip install aquacal
    
  2. Generate a configuration file from your calibration videos:

    aquacal init --intrinsic-dir videos/intrinsic/ --extrinsic-dir videos/extrinsic/
    
  3. Run calibration:

    aquacal calibrate config.yaml
    

Results are saved to output/calibration.json with camera intrinsics, extrinsics, interface distances, and diagnostics.

Documentation

Full documentation is available at aquacal.readthedocs.io:

Citation

If you use AquaCal in your research, please cite:

@software{aquacal,
  title = {AquaCal: Refractive Multi-Camera Calibration},
  author = {Lancaster, Tucker},
  year = {2026},
  url = {https://github.com/tlancaster6/AquaCal},
  version = {1.2.0},
  doi = {10.5281/zenodo.18644658}
}

See CITATION.cff for full citation metadata.

Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

License

MIT License. See LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aquacal-1.7.0.tar.gz (118.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aquacal-1.7.0-py3-none-any.whl (138.1 kB view details)

Uploaded Python 3

File details

Details for the file aquacal-1.7.0.tar.gz.

File metadata

  • Download URL: aquacal-1.7.0.tar.gz
  • Upload date:
  • Size: 118.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for aquacal-1.7.0.tar.gz
Algorithm Hash digest
SHA256 cef827037fd56c2f113b4acb61956f666c0b355a072bafff72503e657a68ca7d
MD5 69509d96a8c6bf3154fb5371d8e06c81
BLAKE2b-256 7e9022276b14b49af655963637f218a49182c190bafa1dc5fda0c4833b2fdd9e

See more details on using hashes here.

Provenance

The following attestation bundles were made for aquacal-1.7.0.tar.gz:

Publisher: publish.yml on McGrathLab/AquaCal

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aquacal-1.7.0-py3-none-any.whl.

File metadata

  • Download URL: aquacal-1.7.0-py3-none-any.whl
  • Upload date:
  • Size: 138.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for aquacal-1.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e1d64ea6fcda0fa2b7d0e2b85e53f0807641639b045639655f51d2ea37b9a2c2
MD5 4e985032c2400a85535b375e1dac9e66
BLAKE2b-256 0a45d526d8d81d50c0f9c9852bc1c800ef17b6263b10728b0a6676dfdc5a8eb4

See more details on using hashes here.

Provenance

The following attestation bundles were made for aquacal-1.7.0-py3-none-any.whl:

Publisher: publish.yml on McGrathLab/AquaCal

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page