{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/point-set-registration-coherent-point-drift","title":"Point-Set Registration: Coherent Point Drift","arxiv_id":"0905.2635","date":"2009-05-15","proceeding":null,"authors":["Andriy Myronenko","Xubo Song"],"abstract":"Point set registration is a key component in many computer vision tasks. The\ngoal of point set registration is to assign correspondences between two sets of\npoints and to recover the transformation that maps one point set to the other.\nMultiple factors, including an unknown non-rigid spatial transformation, large\ndimensionality of point set, noise and outliers, make the point set\nregistration a challenging problem. We introduce a probabilistic method, called\nthe Coherent Point Drift (CPD) algorithm, for both rigid and non-rigid point\nset registration. We consider the alignment of two point sets as a probability\ndensity estimation problem. We fit the GMM centroids (representing the first\npoint set) to the data (the second point set) by maximizing the likelihood. We\nforce the GMM centroids to move coherently as a group to preserve the\ntopological structure of the point sets. In the rigid case, we impose the\ncoherence constraint by re-parametrization of GMM centroid locations with rigid\nparameters and derive a closed form solution of the maximization step of the EM\nalgorithm in arbitrary dimensions. In the non-rigid case, we impose the\ncoherence constraint by regularizing the displacement field and using the\nvariational calculus to derive the optimal transformation. We also introduce a\nfast algorithm that reduces the method computation complexity to linear. We\ntest the CPD algorithm for both rigid and non-rigid transformations in the\npresence of noise, outliers and missing points, where CPD shows accurate\nresults and outperforms current state-of-the-art methods.","url_abs":"http://arxiv.org/abs/0905.2635v1","url_pdf":"http://arxiv.org/pdf/0905.2635v1.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"point-set-registration-coherent-point-drift","repo_url":"https://github.com/BioMechTools/DKCT_Quatitative_Measurement","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"Apache-2.0"}},{"paper_slug":"point-set-registration-coherent-point-drift","repo_url":"https://github.com/BioMechTools/QDKCT","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"Apache-2.0"}},{"paper_slug":"point-set-registration-coherent-point-drift","repo_url":"https://github.com/bing-jian/gmmreg","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":null},{"paper_slug":"point-set-registration-coherent-point-drift","repo_url":"https://github.com/madsendennis/template-registration-with-scala","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok"}},{"paper_slug":"point-set-registration-coherent-point-drift","repo_url":"https://github.com/quistew/Point-Cloud_Processing","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok"}},{"paper_slug":"point-set-registration-coherent-point-drift","repo_url":"https://github.com/siavashk/pycpd","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"point-set-registration-coherent-point-drift","repo_url":"https://github.com/tobiasbernecker/PointSetRegistration","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok"}},{"paper_slug":"point-set-registration-coherent-point-drift","repo_url":"https://github.com/unibas-gravis/gingr","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[{"task_slug":"density-estimation","task_name":"Density Estimation"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=0905.2635","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"0905.2635"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/BioMechTools/QDKCT","reach":{"status":"ok","spdx":"Apache-2.0"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/quistew/Point-Cloud_Processing","reach":{"status":"ok"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/tobiasbernecker/PointSetRegistration","reach":{"status":"ok"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/BioMechTools/DKCT_Quatitative_Measurement","reach":{"status":"ok","spdx":"Apache-2.0"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/unibas-gravis/gingr","reach":{"status":"ok","spdx":"Apache-2.0"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/siavashk/pycpd","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/bing-jian/gmmreg","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/madsendennis/template-registration-with-scala","reach":{"status":"ok"}}],"summary":{"ran_draft_wrong":3,"ran_fixture":1,"unverified":5},"by_repo_kind":{"listed":{"samples":9,"ran":4,"repositories":2}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":4,"samples":[{"code_sha256_prefix":"c6200a94efe2504f","entry":"get_all_depth_files","repo":"bing-jian/gmmreg","repo_kind":"listed","path":"expts/lounge_expts.py","file_url":"https://github.com/bing-jian/gmmreg/blob/HEAD/expts/lounge_expts.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"c6200a94efe2504f"}},{"code_sha256_prefix":"fbb317e15933ad51","entry":"load_dragon_conf","repo":"bing-jian/gmmreg","repo_kind":"listed","path":"expts/dragon_expts.py","file_url":"https://github.com/bing-jian/gmmreg/blob/HEAD/expts/dragon_expts.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"fbb317e15933ad51"}},{"code_sha256_prefix":"3cfb735736ac67dc","entry":"lookup_ground_truth","repo":"bing-jian/gmmreg","repo_kind":"listed","path":"expts/dragon_expts.py","file_url":"https://github.com/bing-jian/gmmreg/blob/HEAD/expts/dragon_expts.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"3cfb735736ac67dc"}},{"code_sha256_prefix":"b681159f7c462b42","entry":"parse_ground_truth","repo":"bing-jian/gmmreg","repo_kind":"listed","path":"expts/lounge_expts.py","file_url":"https://github.com/bing-jian/gmmreg/blob/HEAD/expts/lounge_expts.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"GPL-3.0","inline_ok":false,"mcp_get_code":{"code_sha256":"b681159f7c462b42"}},{"code_sha256_prefix":"4f1931c292e385c7","entry":"gaussian_kernel","repo":"siavashk/pycpd","repo_kind":"listed","path":"pycpd/utility.py","file_url":"https://github.com/siavashk/pycpd/blob/HEAD/pycpd/utility.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"4f1931c292e385c7"}},{"code_sha256_prefix":"0daf328762616aa0","entry":"initialize_sigma2","repo":"siavashk/pycpd","repo_kind":"listed","path":"pycpd/emregistration.py","file_url":"https://github.com/siavashk/pycpd/blob/HEAD/pycpd/emregistration.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"0daf328762616aa0"}},{"code_sha256_prefix":"450b52b2868095cc","entry":"is_positive_semi_definite","repo":"siavashk/pycpd","repo_kind":"listed","path":"pycpd/utility.py","file_url":"https://github.com/siavashk/pycpd/blob/HEAD/pycpd/utility.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"450b52b2868095cc"}},{"code_sha256_prefix":"178f55aff7e2a1f5","entry":"low_rank_eigen","repo":"siavashk/pycpd","repo_kind":"listed","path":"pycpd/utility.py","file_url":"https://github.com/siavashk/pycpd/blob/HEAD/pycpd/utility.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"178f55aff7e2a1f5"}},{"code_sha256_prefix":"6fd86a3e72cbbb60","entry":"lowrankQS","repo":"siavashk/pycpd","repo_kind":"listed","path":"pycpd/emregistration.py","file_url":"https://github.com/siavashk/pycpd/blob/HEAD/pycpd/emregistration.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6fd86a3e72cbbb60"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}