isl-org / isl-org/Open3D

Registration_ransac_based_on_correspondence retrieves wrong translation vector

Open
#3,387 0 comments 0 reactions 1 assignee Claimed by @reyanshsolis View on GitHub
registration
Dominant language
C++
Stars
14k
Forks
2.6k
Avg merge
5d 18h
Merged PRs (30d)
6

Description

Hi,
I am having issues with this method : open3d.pipelines.registration.registration_ransac_based_on_correspondence

What I am trying to do is to filter wrong correspondences, that I have obtained between two point cloud using a deep learning feature descriptor.
I know that the 2 point cloud are close one to the other, so the transformation matrix should be close too identity.

The ransac pipeline is able to filter wrong correspondences but the transformation matrix seems to be inconsistent for its last column. Scaling and rotation are good, close to identity but the algorithm retrieves a huge translation vector, which is changing a lot depending on the ransac_n parameter.

This behavior is obtained when running those lines :

correspondences_a = data["Correspondences a"]

kpts_xyz = correspondences_a[:,4:7]
target_xyz = correspondences_a[:,7:10]

kpts_pcd = o3d.geometry.PointCloud()
target_pcd = o3d.geometry.PointCloud()

kpts_pcd.points = o3d.utility.Vector3dVector(kpts_xyz)
target_pcd.points = o3d.utility.Vector3dVector(target_xyz)

corres_list = np.ones((kpts_xyz.shape[0],2))*np.arange(kpts_xyz.shape[0]).reshape(-1,1)

results = o3d.pipelines.registration.registration_ransac_based_on_correspondence(
source = kpts_pcd,
target = target_pcd,
corres = o3d.utility.Vector2iVector(corres_list),
max_correspondence_distance = .5,
estimation_method = o3d.pipelines.registration.TransformationEstimationPointToPoint(),
ransac_n=5,
checkers =
[],
criteria = o3d.pipelines.registration.RANSACConvergenceCriteria(100000, 0.999))

On the data attached :
[data.zip](https://github.com/intel-isl/Open3D/files/6425977/data.zip)

When extracting the correspondences table, column 4:6 are the coordinate of the keypoints and columns 7:9 are the coordinate of the correspondence in the target point cloud (column 2 is the norm between the two points)

**Environment (please complete the following information):**

- Ubuntu 20.04,
- Python 3.6)
- Open3D version: 0.12
- Installed via conda

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.