correspondence_set does not match with a set of known correspondences
- Dominant language
- C++
- Stars
- 14k
- Forks
- 2.6k
- Avg merge
- 5d 18h
- Merged PRs (30d)
- 6
Description
### Checklist
- [X] I have searched for [similar issues](https://github.com/isl-org/Open3D/issues).
- [X] For Python issues, I have tested with the [latest development wheel](http://www.open3d.org/docs/latest/getting_started.html#development-version-pip).
- [X] I have checked the [release documentation](http://www.open3d.org/docs/release/) and the [latest documentation](http://www.open3d.org/docs/latest/) (for `master` branch).
### Describe the issue
I'm having a huge amount of difficulty implementing the Open3D function `registration_fgr_based_on_correspondence(moving,fixed,corres)`
I'm attempting a minimal registration approach by defining 2 point clouds with 3 points each. The correspondences are known between the two point clouds, so a Vector2iVector is defined using the list `[[0,0],[1,1],[2,2]]`, however for some reason, the correspondence between point 0 and point 2 is almost always either mis-associated with point 1, or not detected at all. I'm very confused as to why the registration pipeline doesn't allow for pre-defined "known" correspondences in this schema.
### Steps to reproduce the bug
```python
# units are meters, though this shouldn't matter
import open3d as o3d
import numpy as np
targets = np.array([[0.036,0.02,0.11], [0.036, 0.056, 0.087], [0.07,0.07,0.083]])
# using the points below, I get the expected results
#captured = np.array([[0.055569818552963605, -0.10185767162701978, -0.0846015092487883], [0.030809743024791572, -0.07459815150178217, -0.06553935971569191], [0.048148938620682945, -0.05887278343132876, -0.03678743840983336]])
# the last point is off by 0.003m, which is enough to reproduce the bug
captured = np.array([[0.055569818552963605, -0.10185767162701978, -0.0846015092487883], [0.030809743024791572, -0.07459815150178217, -0.06553935971569191], [0.048148938620682945, -0.05887278343132876, -0.03678743840983336]])
tcloud = o3d.geometry.PointCloud(o3d.utility.Vector3dVector(targets))
ccloud = o3d.geometry.PointCloud(o3d.utility.Vector3dVector(captured))
corres = o3d.utility.Vector2iVector([[0,0],[1,1],[2,2]])
result = o3d.pipelines.registration.registration_fgr_based_on_correspondence(ccloud, tcloud, corres)
print(np.array(result.transformation))
print(np.array(result.correspondence_set))
```
### Error message
_No response_
### Expected behavior
`print(np.array(result.correspondence_set))` should always return of the correspondences that are predefined in the variable `corres`, or at the very least, allow for a predefined set of correspondences to be hard-coded to minimize the error.
### Open3D, Python and System information
```markdown
Python 3.8, Ubuntu 18.04, tested in isolation
```
### Additional information
_No response_
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.