Skip to main content

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

Project description

AquaCal

AquaCal ray trace

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.

:construction: Status :construction:

02/17/26: This project is under active and rapid development. The API and internal structure are subject to frequent breaking changes without notice. It is not yet recommended for production use. A stable release is planned by the end of the month. This section will be updated accordingly once that milestone is reached.

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

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.3.2.tar.gz (108.6 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.3.2-py3-none-any.whl (125.9 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for aquacal-1.3.2.tar.gz
Algorithm Hash digest
SHA256 4aa05eb2677e44ced46dbc6df9bddd5318a1d925e7540e64c1bd83ccec98c487
MD5 7b0c76770f3f76b97978ac367d5d5dee
BLAKE2b-256 5fb1095fbc92f3a26ce2ba8e5c466f3b72db313e23706c459e0ae12d80aa0bc7

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on tlancaster6/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.3.2-py3-none-any.whl.

File metadata

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

File hashes

Hashes for aquacal-1.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 dd8ae7631b552ec32126d9379067ac6d6127ea8c034a57a4d9567529e6d601e4
MD5 f43f99d126805e086c29226cc23edd64
BLAKE2b-256 f0f3c38104781f7c1dda4b742f6d534e988d0c45e554b2a87d16cafbd6d65ccf

See more details on using hashes here.

Provenance

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

Publisher: publish.yml on tlancaster6/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