Closed daniel-unyi-42 closed 1 year ago
Hi guys. Do you have working version of this I could try?
I downloaded this got it compiling and used the wolf1 and wolf2 ply files from the python examples folder.
However, the result doesn't converge and the output mesh has positions at 10^151.
Are you able to offer any advice?
Hi,
we are working on an alternative implementation. While the method is working, the interface may still change. You can find the code here: https://github.com/CGAL/cgal/pull/8329
Dániel Unyi GSoC 2023 Submission
Project summary:
The package Non-rigid Iterative Closest Point (N-ICP) implements an algorithm which finds a sequence of transformations that aligns a source surface to a target surface. The algorithm currently minimizes four energy terms: point-to-point matching, point-to-plane matching, global rigidity, and local rigidity, which are all quadratic and therefore can be minimized by solving a system of linear equations. For further reference, see paper 1 and paper 2. The implementation uses the Eigen library extensively; it solves the system with the LeastSquaresGradient solver. We optimized the code to run as quick as possible. The source surface is required to be a mesh, whereas the target surface can be a point set with normals. Moreover, the user can specify an std::map which contains ground-truth correspondences.
Commit log:
CGAL/cgal-public-dev@7fba8e04a9d (HEAD -> gsoc2023-nonrigid_icp-danielunyi, origin/gsoc2023-nonrigid_icp-danielunyi) arap modifications after discussion CGAL/cgal-public-dev@e4d5903600c Cleaning up CGAL/cgal-public-dev@5cebe76ec12 Nonrigid ICP least squares version - Point-to-plane matching, incorporating arap rotations CGAL/cgal-public-dev@64ffea3c468 Nonrigid ICP least squares version - minor fixes CGAL/cgal-public-dev@07ba046b9d2 Nonrigid ICP least squares version CGAL/cgal-public-dev@98ebe293445 Incorporate ARAP (full rotation matrices) CGAL/cgal-public-dev@bcf5c2f603f as-rigid-as-possible original paper - python version CGAL/cgal-public-dev@706bdf3eba5 Drawing correspondences CGAL/cgal-public-dev@c3f56b4bf27 Large weights on corresponding points CGAL/cgal-public-dev@22e220b0b48 OpenGR support CGAL/cgal-public-dev@46da4f862de User can pass point-to-point correspondences as constraints to the registration function CGAL/cgal-public-dev@9dfdc5c6290 A is set from triplets (slightly faster than the previous version) CGAL/cgal-public-dev@79a1f586058 Reading in Tosca meshes; user can specify number of threads CGAL/cgal-public-dev@415fbac64a4 Faster solving with Eigen's analyzePattern CGAL/cgal-public-dev@2424a1ee91c Target doesn't have to be mesh, point set is sufficient CGAL/cgal-public-dev@d7648ca20a7 As-rigid-as-possible registration, other minor modifications CGAL/cgal-public-dev@5bcc2c98927 Mesh Laplacian calculation CGAL/cgal-public-dev@18deddfbe48 Point-to-plane error + checking error convergence in rigid registration CGAL/cgal-public-dev@1828f4afbff Registration with Eigen example - the rigid part CGAL/cgal-public-dev@e7adb5ee294 ICP minimization calculations CGAL/cgal-public-dev@3f513a6fd0b Using vectorized operations for arap registration CGAL/cgal-public-dev@78bd2c8ca13 As-rigid-as possible registration in Python CGAL/cgal-public-dev@5f24ae9d236 Clarify python versions CGAL/cgal-public-dev@954bc8b1d1f Rigid registration in Python: point-to-point & point-plane CGAL/cgal-public-dev@201afecdcc6 Rigid registration with matching energy and rigid energy CGAL/cgal-public-dev@5be11a69a9a Point to plane ICP example using Eigen's Jacobi SVD