{"id":23761874,"url":"https://github.com/strawlab/cam-geom","last_synced_at":"2025-04-05T05:08:34.657Z","repository":{"id":40561752,"uuid":"243630344","full_name":"strawlab/cam-geom","owner":"strawlab","description":"📷 📐 Geometric models of cameras for photogrammetry","archived":false,"fork":false,"pushed_at":"2025-03-09T07:57:56.000Z","size":189,"stargazers_count":49,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-29T04:11:21.602Z","etag":null,"topics":["camera-models","computer-vision","geometry","photogrammetry","rust"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/cam-geom","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/strawlab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":"code_of_conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-02-27T22:32:46.000Z","updated_at":"2025-03-27T06:01:06.000Z","dependencies_parsed_at":"2024-12-23T08:25:24.523Z","dependency_job_id":"b65ba6da-59f4-4af5-b6f7-08e5fd44e728","html_url":"https://github.com/strawlab/cam-geom","commit_stats":{"total_commits":81,"total_committers":3,"mean_commits":27.0,"dds":"0.12345679012345678","last_synced_commit":"d31a67b52defcba554462fb4b1055251328f5000"},"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strawlab%2Fcam-geom","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strawlab%2Fcam-geom/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strawlab%2Fcam-geom/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strawlab%2Fcam-geom/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/strawlab","download_url":"https://codeload.github.com/strawlab/cam-geom/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247289428,"owners_count":20914464,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["camera-models","computer-vision","geometry","photogrammetry","rust"],"created_at":"2024-12-31T21:14:36.030Z","updated_at":"2025-04-05T05:08:34.626Z","avatar_url":"https://github.com/strawlab.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Crates.io](https://img.shields.io/crates/v/cam-geom.svg)](https://crates.io/crates/cam-geom)\n[![Documentation](https://docs.rs/cam-geom/badge.svg)](https://docs.rs/cam-geom/)\n[![Crate License](https://img.shields.io/crates/l/cam-geom.svg)](https://crates.io/crates/cam-geom)\n[![Dependency status](https://deps.rs/repo/github/strawlab/cam-geom/status.svg)](https://deps.rs/repo/github/strawlab/cam-geom)\n[![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)\n\n📷 📐 Geometric models of cameras for photogrammetry\n\n![pinhole model\nimage](https://strawlab.org/assets/images/pinhole-model-ladybug.png)\n\n(3D model by\n[Adan](https://sketchfab.com/3d-models/lowpoly-lady-bug-90b59b5185b14c52944573f236eb7175),\n[CC by 4.0](https://creativecommons.org/licenses/by/4.0/))\n\n## About\n\nThe crate implements geometric models of cameras which may be useful for\n[photogrammetry](https://en.wikipedia.org/wiki/Photogrammetry).\n\nThe crate provides a couple camera models, [the pinhole perspective\ncamera](https://en.wikipedia.org/wiki/Pinhole_camera_model) and the\n[orthographic\ncamera](https://en.wikipedia.org/wiki/Orthographic_projection). Adding\nanother camera model entails implementing the\n[`IntrinsicParameters`](trait.IntrinsicParameters.html) trait. See the\n[`opencv_ros_camera`](https://crates.io/crates/opencv-ros-camera) crate\nfor one example.\n\nAlso provided is the function\n[`best_intersection_of_rays()`](fn.best_intersection_of_rays.html) which\ndetermines the best 3D point corresponding to the intersection of multiple\nrays. Thus, this crate is also useful for multiple view geometry.\n\nCharacteristics:\n\n* Extensive use of static typing to ensure no unpleasant runtime surprises\n  with coordinate system, matrix dimensions, and so on.\n* Serialization and deserialization using [`serde`](https://docs.rs/serde).\n  Enable with the `serde-serialize` cargo feature.\n* Linear algebra and types from the [`nalgebra`](https://docs.rs/nalgebra)\n  crate.\n* Possible to create new camera models by implementing the\n  [`IntrinsicParameters`](trait.IntrinsicParameters.html) trait. While the\n  camera models implemented in this crate are linear, there is no\n  requirement that implementations are linear. For example, the\n  [`opencv_ros_camera`](https://crates.io/crates/opencv-ros-camera) crate\n  exhibits [distortion](https://en.wikipedia.org/wiki/Distortion_(optics)).\n* [`ExtrinsicParameters`](struct.ExtrinsicParameters.html) based on the\n  [`nalgebra::Isometry3`](https://docs.rs/nalgebra/latest/nalgebra/geometry/type.Isometry3.html)\n  type to handle the camera pose.\n* No standard library is required (disable the default features to disable\n  use of `std`) and no heap allocations. In other words, this can run on a\n  bare-metal microcontroller with no OS.\n* Extensive documentation and tests.\n* Requires rust version 1.40 or greater.\n\n## Testing\n\n### Unit tests\n\nTo run the basic unit tests:\n\n```text\ncargo test\n```\n\nTo run all unit tests:\n\n```text\ncargo test --features serde-serialize\n```\n\n### Test for `no_std`\n\nSince the `thumbv7em-none-eabihf` target does not have `std` available, we\ncan build for it to check that our crate does not inadvertently pull in\nstd. The unit tests require std, so cannot be run on a `no_std` platform.\nThe following will fail if a std dependency is present:\n\n```text\n# install target with: \"rustup target add thumbv7em-none-eabihf\"\ncargo build --no-default-features --target thumbv7em-none-eabihf\n```\n\n## Code of conduct\n\nAnyone who interacts with this software in any space, including but not limited\nto this GitHub repository, must follow our [code of\nconduct](code_of_conduct.md).\n\n## License\n\nLicensed under either of these:\n\n * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or\n   \u003chttps://www.apache.org/licenses/LICENSE-2.0\u003e)\n * MIT license ([LICENSE-MIT](LICENSE-MIT) or\n   \u003chttps://opensource.org/licenses/MIT\u003e)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstrawlab%2Fcam-geom","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstrawlab%2Fcam-geom","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstrawlab%2Fcam-geom/lists"}