You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
as the author pointed out:
Note: This function does not attempt to determine which pairs of points from either cloud correspond. Instead, it infers them from the order of the arrays. (It assumes that the i'th point from X corresponds to the i'th point from x.)
This assumption does not hold for generic point cloud registration such as atom point clouds of crystals.
If you want to do superpose3d for un-ordered points, you'd better try open3d, which I have spent a lot of effort to make it work.
import open3d as o3d
import numpy as np
source = o3d.geometry.PointCloud()
target = o3d.geometry.PointCloud()
This is awesome, usccolumbia! I'll post a link to it on the front page.
jewettaij
changed the title
Warning: severe limitation of superpose3D
How to superimpose unordered point clouds of arbitrary size using open3d
Aug 11, 2024
as the author pointed out:
Note: This function does not attempt to determine which pairs of points from either cloud correspond. Instead, it infers them from the order of the arrays. (It assumes that the i'th point from X corresponds to the i'th point from x.)
This assumption does not hold for generic point cloud registration such as atom point clouds of crystals.
If you want to do superpose3d for un-ordered points, you'd better try open3d, which I have spent a lot of effort to make it work.
import open3d as o3d
import numpy as np
source = o3d.geometry.PointCloud()
target = o3d.geometry.PointCloud()
np.random.seed(0)
pointset = np.random.rand(10, 3)
source.points = o3d.utility.Vector3dVector(pointset) # Random points
Generate target point cloud
target.points = o3d.utility.Vector3dVector(pointset) # Random points
target.transform([[1, 0, 0, 0.5],
[0, 1, 0., 0.0],
[0, 0.2, 1, 0],
[0, 0, 0, 1]])
Apply ICP registration
threshold = 5
trans_init = np.identity(4) # Initial transformation matrix
reg_p2p = o3d.pipelines.registration.registration_icp(
source, target, threshold, trans_init,
o3d.pipelines.registration.TransformationEstimationPointToPoint(),
o3d.pipelines.registration.ICPConvergenceCriteria(max_iteration=1000))
print("Transformation matrix:")
print(reg_p2p.transformation)
print("Matching points:")
print(np.asarray(reg_p2p.correspondence_set))
print(f"% of match:{reg_p2p.fitness*100}%")
print(reg_p2p.inlier_rmse)
The text was updated successfully, but these errors were encountered: