π· π Geometric models of cameras for photogrammetry
The crate implements geometric models of cameras which may be useful for photogrammetry.
The crate provides a couple camera models, the pinhole perspective
camera and the
orthographic
camera. Adding
another camera model entails implementing the
IntrinsicParameters trait. See the
opencv_ros_camera crate
for one example.
Also provided is the function
best_intersection_of_rays() 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. Enable with theserde-serializecargo feature. - Linear algebra and types from the
nalgebracrate. - Possible to create new camera models by implementing the
IntrinsicParameterstrait. While the camera models implemented in this crate are linear, there is no requirement that implementations are linear. For example, theopencv_ros_cameracrate exhibits distortion. ExtrinsicParametersbased on thenalgebra::Isometry3type 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.
To run the basic unit tests:
cargo test
To run all unit tests:
cargo test --features serde-serialize
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:
# install target with: "rustup target add thumbv7em-none-eabihf"
cargo build --no-default-features --target thumbv7em-none-eabihf
Anyone who interacts with this software in any space, including but not limited to this GitHub repository, must follow our code of conduct.
Licensed under either of these:
- Apache License, Version 2.0, (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
