siavashk / pycpd

Pure Numpy Implementation of the Coherent Point Drift Algorithm
MIT License
513 stars 115 forks source link

Attempting to perform 3D deformable registration #29

Closed stevenagl12 closed 5 years ago

stevenagl12 commented 5 years ago

I have tried running your code using a trimesh import of a 3D mesh object. However, the code breaks saying that this only works on 2D numpy arrays? How do you perform 3D registrations if it's only able to work with 2D arrays?

siavashk commented 5 years ago

The code doesn't "break", rather it raises a ValueError. This is deliberate because the original coherent point drift paper uses 2D matrices as containers for point clouds. See page 2, Section 3:

Throughout the paper we use the following notations: ... X{NxD} ... the first point set (data points) Y{MxD} ... the second point set (GMM centroids)

This basically means that each row in the 2D array corresponds to one point in the point cloud. The first, second and third columns contain the positions of points along the x, y and z axes respectively.

I have already provided multiple 3D registration examples. See this section of the README. You can try them by running python examples/fish_{Transform}_3D.py from the project root, where Transform is either rigid, affine or deformable.

stevenagl12 commented 5 years ago

How do you come up with the GMM centroids for your 3d model for X then?

On Thu, Aug 15, 2019, 00:32 Siavash Khallaghi notifications@github.com wrote:

The code doesn't "break", rather it raises a ValueError. This is deliberate because the original coherent point drift paper https://arxiv.org/pdf/0905.2635.pdf uses 2D matrices as a containers for point clouds. See page 2, Section 3:

Throughout the paper we use the following notations: ... X{NxD} ... the first point set (data points) Y{MxD} ... the second point set (GMM centroids)

This basically means that each row in the 2D array corresponds to one point in the point cloud. The first, second and third columns contain the positions of points along the x, y and z axes respectively.

I have already provided a 3D registration example. See this section https://github.com/siavashk/pycpd#usage of the README. You can try it by running python examples/fish_{Transform}_3D.py from the project root.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/siavashk/pycpd/issues/29?email_source=notifications&email_token=AHHKCLJHINRT4BTHD63RL3LQETL5VA5CNFSM4ILZH6I2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD4KZX4Q#issuecomment-521509874, or mute the thread https://github.com/notifications/unsubscribe-auth/AHHKCLLULB5HXBN3M477O4LQETL5VANCNFSM4ILZH6IQ .

siavashk commented 5 years ago

The GMM centroids are the same as the moving (or source) point cloud.