-
Notifications
You must be signed in to change notification settings - Fork 549
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
Can I use getDistsQuantile(1.0) to get the final distance? #125
Comments
In your question, you say:
From what I understand from the wiki entry, it's the maximum distance of the set of closest points. If you define the distance metric as being the Squared Euclidean distance, than yes, Few notes:
|
Thanks for the confirmation, and the reference! My clouds are of the same object (or should be, hence the need for a test) - our scenario is matching a reference to an object on a tabletop. It sounds like it's worth trying |
…ls matches.getDistsQuantile(1.0)) * make this value accessible from the icp object * initialise to -1 (i.e. invalid before ICP is called) * see norlab-ulaval#125
…al#125 * give this experimental branch a semver-compliant version string
I've implemented this as outlined below. In my ICP "scoring" filter I have tried to maximise the number of points considered in the Euclidean distance calculation, and make the result non-deterministic by performing a brute force comparison. However, the results for the same reading-reference pair are quite variable. Is there anything else I can do in the ICP filter to: a) consider all possible points (*) for the Euclidean distance calculation (*) The reference cloud has 7000-20000 points, the reading cloud has 250-600 points. In ICP.cpp (pseudocode)
From outside (pseudocode):
Identity filter ("identity.yaml" above). Single iteration of this filter should return the squared euclidean distance between the closest points in the two clouds.
(I have also tried knn = 2147483647 and epsilon = inf) |
I'm not sure what do you mean by quite variable. I added an example of how I would do it in icp_advance_api.cpp. See the section
Output:
One mistake that I could see in your config file is that you use
|
@kwill: How is that going? Can I close this issue? |
@pomerlef Thanks for the feedback. Because of my data structures we ended up implementing Haussdorf in our C# layer instead. But your tips on filters were very useful, and I'll reference your example as a "future work" suggestion. |
I am looking for a way to measure how "well" a registration attempt fits. My supervisor mentioned the Hausdorff distance, a sum of the squared distances between closest points, which sounds an awful lot like ICP! :)
Before I reimplement the wheel, am I correct that calling icp(data, ref) then calling getDistsQuantile(1.0) after calling icp(data, ref) will give me the same (or a very similar) results?
My reading is that every ICP object contains a Matches object and, after registration, the Matches object contains all the closest-point pairings and their respective distances, and getDistsQuantile(1.0) will return the summed distance for every pair. Is this correct?
The text was updated successfully, but these errors were encountered: