Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/strawlab/cam-geom
📷 📐 Geometric models of cameras for photogrammetry
https://github.com/strawlab/cam-geom
camera-models computer-vision geometry photogrammetry rust
Last synced: 3 days ago
JSON representation
📷 📐 Geometric models of cameras for photogrammetry
- Host: GitHub
- URL: https://github.com/strawlab/cam-geom
- Owner: strawlab
- License: apache-2.0
- Created: 2020-02-27T22:32:46.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2025-01-01T12:20:57.000Z (about 1 month ago)
- Last Synced: 2025-01-29T04:13:09.507Z (10 days ago)
- Topics: camera-models, computer-vision, geometry, photogrammetry, rust
- Language: Rust
- Homepage: https://crates.io/crates/cam-geom
- Size: 146 KB
- Stars: 46
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
- Code of conduct: code_of_conduct.md
Awesome Lists containing this project
README
[![Crates.io](https://img.shields.io/crates/v/cam-geom.svg)](https://crates.io/crates/cam-geom)
[![Documentation](https://docs.rs/cam-geom/badge.svg)](https://docs.rs/cam-geom/)
[![Crate License](https://img.shields.io/crates/l/cam-geom.svg)](https://crates.io/crates/cam-geom)
[![Dependency status](https://deps.rs/repo/github/strawlab/cam-geom/status.svg)](https://deps.rs/repo/github/strawlab/cam-geom)
[![build](https://github.com/strawlab/cam-geom/actions/workflows/rust.yml/badge.svg?branch=main)](https://github.com/strawlab/cam-geom/actions?query=branch%3Amain)📷 📐 Geometric models of cameras for photogrammetry
![pinhole model
image](https://strawlab.org/assets/images/pinhole-model-ladybug.png)(3D model by
[Adan](https://sketchfab.com/3d-models/lowpoly-lady-bug-90b59b5185b14c52944573f236eb7175),
[CC by 4.0](https://creativecommons.org/licenses/by/4.0/))## About
The crate implements geometric models of cameras which may be useful for
[photogrammetry](https://en.wikipedia.org/wiki/Photogrammetry).The crate provides a couple camera models, [the pinhole perspective
camera](https://en.wikipedia.org/wiki/Pinhole_camera_model) and the
[orthographic
camera](https://en.wikipedia.org/wiki/Orthographic_projection). Adding
another camera model entails implementing the
[`IntrinsicParameters`](trait.IntrinsicParameters.html) trait. See the
[`opencv_ros_camera`](https://crates.io/crates/opencv-ros-camera) crate
for one example.Also provided is the function
[`best_intersection_of_rays()`](fn.best_intersection_of_rays.html) which
determines the best 3D point corresponding to the intersection of multiple
rays. Thus, this crate is also useful for multiple view geometry.Characteristics:
* Extensive use of static typing to ensure no unpleasant runtime surprises
with coordinate system, matrix dimensions, and so on.
* Serialization and deserialization using [`serde`](https://docs.rs/serde).
Enable with the `serde-serialize` cargo feature.
* Linear algebra and types from the [`nalgebra`](https://docs.rs/nalgebra)
crate.
* Possible to create new camera models by implementing the
[`IntrinsicParameters`](trait.IntrinsicParameters.html) trait. While the
camera models implemented in this crate are linear, there is no
requirement that implementations are linear. For example, the
[`opencv_ros_camera`](https://crates.io/crates/opencv-ros-camera) crate
exhibits [distortion](https://en.wikipedia.org/wiki/Distortion_(optics)).
* [`ExtrinsicParameters`](struct.ExtrinsicParameters.html) based on the
[`nalgebra::Isometry3`](https://docs.rs/nalgebra/latest/nalgebra/geometry/type.Isometry3.html)
type to handle the camera pose.
* No standard library is required (disable the default features to disable
use of `std`) and no heap allocations. In other words, this can run on a
bare-metal microcontroller with no OS.
* Extensive documentation and tests.
* Requires rust version 1.40 or greater.## Testing
### Unit tests
To run the basic unit tests:
```text
cargo test
```To run all unit tests:
```text
cargo test --features serde-serialize
```### Test for `no_std`
Since the `thumbv7em-none-eabihf` target does not have `std` available, we
can build for it to check that our crate does not inadvertently pull in
std. The unit tests require std, so cannot be run on a `no_std` platform.
The following will fail if a std dependency is present:```text
# install target with: "rustup target add thumbv7em-none-eabihf"
cargo build --no-default-features --target thumbv7em-none-eabihf
```## Code of conduct
Anyone who interacts with this software in any space, including but not limited
to this GitHub repository, must follow our [code of
conduct](code_of_conduct.md).## License
Licensed under either of these:
* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
https://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT](LICENSE-MIT) or
https://opensource.org/licenses/MIT)