Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Invariant choices #7

Closed
songanz opened this issue Apr 21, 2022 · 2 comments
Closed

Invariant choices #7

songanz opened this issue Apr 21, 2022 · 2 comments

Comments

@songanz
Copy link

songanz commented Apr 21, 2022

Hi,

Thanks for your great work! I have a question regarding the invariant choices. I am using the python API and cannot find a documentation that list different invariant choices.

Right now I am using this clipper.invariants.EuclideanDistanceParams() as in the tutorial. Is there any other already implemented invariant? I know we can implement ourselves.

@songanz
Copy link
Author

songanz commented Apr 21, 2022

And also, if I don't know the A matrix, how should I use the score_pairwise_consistency() function? Right now I am just generate a random A matrix.

@plusk01
Copy link
Member

plusk01 commented Apr 21, 2022

hi, currently there are only two invariants implemented in this repo: EuclideanDistance and PointNormalDistance. The PointNormalaDistance invariant has four parameters, two for the point distance comparison and two for the normal distance (angle between normal vectors) comparison. This invariant can be used for data association between two point clouds with normals, or for matching planar patches. However, in the planar patch case, this distance isn't truly "invariant" --- e.g., if the patch is extracted with different areas between the two views, the center point of the patch will be different.

I've recently solved this issue by leveraging a manifold representation of planes with a new invariant. This invariant is not implemented here yet.

Another invariant I have used (although not yet implemented here) is a three-way invariant for data association between two point clouds with unknown scales.

If you don't have an initial set of correspondence guesses, you may use an all-to-all hypothesis clipperpy.utils.create_all_to_all() (or simply omit the A parameter from score_pairwise_consistency()). However, in this case you must be wary of how many potential associations will be evaluated. In the all-to-all case, the problem size is n choose 2. CLIPPER is efficient (2000 associations takes 130 ms), but these graph-based methods tend to scale poorly as the number of associations grows. It is best to use some information (descriptors, color, intensity, etc) to create a set of initial guesses; it's okay if many of them are bad, as long as there is some set of good initial associations, CLIPPER can find them.

@plusk01 plusk01 closed this as completed Aug 8, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants