Giter Site home page Giter Site logo

pnp's Introduction

Rust Computer Vision

Rust CV is a project to implement computer vision algorithms in Rust.

What is computer vision

Many people are familiar with covolutional neural networks and machine learning in computer vision, but computer vision is much more than that. One of the first things that Rust CV focused on was algorithms in the domain of Multiple-View Geometry (MVG). Today, Rust now has enough MVG algorithms to perform relatively simple camera tracking and odometry tasks. Weakness still exists within image processing and machine learning domains.

Goals

Here are some of the domains of computer vision that Rust CV intends to persue along with examples of the domain (not all algorithms below live within the Rust CV organization, and some of these may exist and are unknown):

To support computer vision tooling, the following will be implemented:

pnp's People

Contributors

vadixidav avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

rostyq

pnp's Issues

Regarding vocabulary

One of the most frustrating things in CV is in my opinion swapping by mistake projection matrices and their inverse. Using a consistent vocabulary I think is thus quite important.

Usually the image formation process is modeled as x = K * T * (X) where T is the transformation due to the movement (rigid body motion of the camera) and K is intrinsics matrix. This matrix T is thus the conversion from world coordinates to camera coordinates. Therefore, in most algorithms, the objective is to find the rotation and translation composing this matrix T = [ R, t ].

Sometimes however we use the vocabulary "camera pose", which are used to describe the rotation and the translation of the camera itself in world coordinates. If we note C (for "camera") this "pose", we can note that C is actually the inverse of that camera projection matrix. C = inv(T).

In the manual test, there is usage of camera "pose" where actually it is not a pose but transformation matrix (the inverse). I just wanted to point it out since I was surprised when reading the line:

let world_points = camera_depth_points.map(|p| pose.inverse() * p);

Status of this crate?

I'm usually not the one to raise issues like this, but this is the only implementation of PnP I found in Rust, and I noticed that 1) this repo has never been published as a crate and 2) it hasn't been updated in a while to latest cv-core.

I wonder why - was a better alternative published elsewhere?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.