Better Cylinder Model Sampling #6342
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I have looked into the cylinder model sampling code and found the following two issues:
p1
&n1
and the line described byp2
&n2
and find the two points on each line where the lines are closest to each other. Then we take the vector from one of these points to the other. The problem is if these two points are very close or if the lines even intersect, we get a vector close to zero (or actually the zero vector). We can just calculaten1.cross (n2)
and get the same direction without any issues if the lines intersect.p1
only. That means we arbitrarily give one point a higher confidence than the other. On average, we get a better radius estimate by using both points for the estimate. If we do that, we also get the nice property that the model estimate is invariant to the order of the sample points (which is a good thing to have in RANSAC).Since it is not obvious that the direction vector is just the cross product, I have written a SymPy script to verify the equivalence of both expressions.