{"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/solving-jigsaw-puzzles-by-the-graph","title":"Solving Jigsaw Puzzles By the Graph Connection Laplacian","arxiv_id":"1811.03188","date":"2018-11-07","proceeding":null,"authors":["Vahan Huroyan","Gilad Lerman","Hau-Tieng Wu"],"abstract":"We propose a novel mathematical framework to address the problem of automatically solving large jigsaw puzzles. This problem assumes a large image, which is cut into equal square pieces that are arbitrarily rotated and shuffled, and asks to recover the original image given the transformed pieces. The main contribution of this work is a method for recovering the rotations of the pieces when both shuffles and rotations are unknown. A major challenge of this procedure is estimating the graph connection Laplacian without the knowledge of shuffles. A careful combination of our proposed method for estimating rotations with any existing method for estimating shuffles results in a practical solution for the jigsaw puzzle problem. Our theory guarantees, in a clean setting, that our basic idea of recovering rotations is robust to some corruption of the connection graph. Numerical experiments demonstrate the competitive accuracy of this solution, its robustness to corruption and, its computational advantage for large puzzles.","url_abs":"https://arxiv.org/abs/1811.03188v5","url_pdf":"https://arxiv.org/pdf/1811.03188v5.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":"solving-jigsaw-puzzles-by-the-graph","repo_url":"https://github.com/vahanhuroyan/PuzzleDemoGCL","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"none","reach":{"status":"ok"}},{"paper_slug":"solving-jigsaw-puzzles-by-the-graph","repo_url":"https://github.com/ctralie/DynamicsSynchronization","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"Apache-2.0"}},{"paper_slug":"solving-jigsaw-puzzles-by-the-graph","repo_url":"https://github.com/ctralie/SquarePuzzles","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":null}],"tasks":[],"methods":[{"method_slug":"jigsaw","method_name":"Jigsaw"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=1811.03188","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"1811.03188"}},"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/vahanhuroyan/PuzzleDemoGCL","reach":{"status":"ok"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/ctralie/SquarePuzzles","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/ctralie/DynamicsSynchronization","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran_honours":1,"ran_fixture":2,"ran_draft_wrong":2,"unverified":16},"by_repo_kind":{"listed":{"samples":21,"ran":5,"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":0,"samples":[{"code_sha256_prefix":"ca057aa1836bad72","entry":"getGreedyPerm","repo":"ctralie/SquarePuzzles","repo_kind":"listed","path":"ConnectionLaplacian.py","file_url":"https://github.com/ctralie/SquarePuzzles/blob/HEAD/ConnectionLaplacian.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"ca057aa1836bad72"}},{"code_sha256_prefix":"ca48c20f116c666b","entry":"getLocalPCA","repo":"ctralie/SquarePuzzles","repo_kind":"listed","path":"ConnectionLaplacian.py","file_url":"https://github.com/ctralie/SquarePuzzles/blob/HEAD/ConnectionLaplacian.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"ca48c20f116c666b"}},{"code_sha256_prefix":"3f44135a8afc470a","entry":"getPatchesColor","repo":"ctralie/SquarePuzzles","repo_kind":"listed","path":"SquarePuzzles.py","file_url":"https://github.com/ctralie/SquarePuzzles/blob/HEAD/SquarePuzzles.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"3f44135a8afc470a"}},{"code_sha256_prefix":"ac1673398d5e7294","entry":"getdists_sqr","repo":"ctralie/SquarePuzzles","repo_kind":"listed","path":"ConnectionLaplacian.py","file_url":"https://github.com/ctralie/SquarePuzzles/blob/HEAD/ConnectionLaplacian.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"ac1673398d5e7294"}},{"code_sha256_prefix":"9131a986a1c16331","entry":"rotateByZMod4","repo":"ctralie/SquarePuzzles","repo_kind":"listed","path":"SquarePuzzles.py","file_url":"https://github.com/ctralie/SquarePuzzles/blob/HEAD/SquarePuzzles.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"9131a986a1c16331"}},{"code_sha256_prefix":"9bceb2931eb03a9d","entry":"getCSM","repo":"ctralie/DynamicsSynchronization","repo_kind":"listed","path":"ICP.py","file_url":"https://github.com/ctralie/DynamicsSynchronization/blob/HEAD/ICP.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"9bceb2931eb03a9d"}},{"code_sha256_prefix":"a933a1e53a9da5fb","entry":"getCentroid","repo":"ctralie/DynamicsSynchronization","repo_kind":"listed","path":"ICP.py","file_url":"https://github.com/ctralie/DynamicsSynchronization/blob/HEAD/ICP.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"a933a1e53a9da5fb"}},{"code_sha256_prefix":"d8c2aa4c496259f6","entry":"getConnectionLaplacian","repo":"ctralie/DynamicsSynchronization","repo_kind":"listed","path":"ConnectionLaplacian.py","file_url":"https://github.com/ctralie/DynamicsSynchronization/blob/HEAD/ConnectionLaplacian.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"d8c2aa4c496259f6"}},{"code_sha256_prefix":"8758057bd0fc549e","entry":"getConnectionLaplacianPC","repo":"ctralie/DynamicsSynchronization","repo_kind":"listed","path":"ConnectionLaplacian.py","file_url":"https://github.com/ctralie/DynamicsSynchronization/blob/HEAD/ConnectionLaplacian.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"8758057bd0fc549e"}},{"code_sha256_prefix":"fe52e95a4381d40f","entry":"getCorrespondences","repo":"ctralie/DynamicsSynchronization","repo_kind":"listed","path":"ICP.py","file_url":"https://github.com/ctralie/DynamicsSynchronization/blob/HEAD/ICP.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"fe52e95a4381d40f"}},{"code_sha256_prefix":"283d613373c6c848","entry":"getDiffusionMap","repo":"ctralie/DynamicsSynchronization","repo_kind":"listed","path":"DiffusionMaps.py","file_url":"https://github.com/ctralie/DynamicsSynchronization/blob/HEAD/DiffusionMaps.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"283d613373c6c848"}},{"code_sha256_prefix":"021837828fab1cc0","entry":"getDiffusionMapSparse","repo":"ctralie/DynamicsSynchronization","repo_kind":"listed","path":"DiffusionMaps.py","file_url":"https://github.com/ctralie/DynamicsSynchronization/blob/HEAD/DiffusionMaps.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"021837828fab1cc0"}},{"code_sha256_prefix":"75926dde9d8d7a42","entry":"getGreedyPerm","repo":"ctralie/DynamicsSynchronization","repo_kind":"listed","path":"LocalPCA.py","file_url":"https://github.com/ctralie/DynamicsSynchronization/blob/HEAD/LocalPCA.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"75926dde9d8d7a42"}},{"code_sha256_prefix":"b68825eb4cb50536","entry":"getLocalPCA","repo":"ctralie/DynamicsSynchronization","repo_kind":"listed","path":"LocalPCA.py","file_url":"https://github.com/ctralie/DynamicsSynchronization/blob/HEAD/LocalPCA.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"b68825eb4cb50536"}},{"code_sha256_prefix":"937022d64d496f32","entry":"getMahalanobisAllThresh","repo":"ctralie/DynamicsSynchronization","repo_kind":"listed","path":"Mahalanobis.py","file_url":"https://github.com/ctralie/DynamicsSynchronization/blob/HEAD/Mahalanobis.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"937022d64d496f32"}},{"code_sha256_prefix":"f0965afd918dd4cc","entry":"getMahalanobisDists","repo":"ctralie/DynamicsSynchronization","repo_kind":"listed","path":"Mahalanobis.py","file_url":"https://github.com/ctralie/DynamicsSynchronization/blob/HEAD/Mahalanobis.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"f0965afd918dd4cc"}},{"code_sha256_prefix":"9bbbf26613cb0712","entry":"getSSM","repo":"ctralie/DynamicsSynchronization","repo_kind":"listed","path":"DiffusionMaps.py","file_url":"https://github.com/ctralie/DynamicsSynchronization/blob/HEAD/DiffusionMaps.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"9bbbf26613cb0712"}},{"code_sha256_prefix":"150b99bfb4173139","entry":"getTorusKnot","repo":"ctralie/DynamicsSynchronization","repo_kind":"listed","path":"ConnectionLaplacian.py","file_url":"https://github.com/ctralie/DynamicsSynchronization/blob/HEAD/ConnectionLaplacian.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"150b99bfb4173139"}},{"code_sha256_prefix":"0f1ed624064e5d28","entry":"getTorusPersistenceScores","repo":"ctralie/DynamicsSynchronization","repo_kind":"listed","path":"Mahalanobis.py","file_url":"https://github.com/ctralie/DynamicsSynchronization/blob/HEAD/Mahalanobis.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"0f1ed624064e5d28"}},{"code_sha256_prefix":"8a37fa9deee4cc12","entry":"getdists_sqr","repo":"ctralie/DynamicsSynchronization","repo_kind":"listed","path":"LocalPCA.py","file_url":"https://github.com/ctralie/DynamicsSynchronization/blob/HEAD/LocalPCA.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"8a37fa9deee4cc12"}},{"code_sha256_prefix":"debcd9f4f89c1742","entry":"readImage","repo":"ctralie/SquarePuzzles","repo_kind":"listed","path":"SquarePuzzles.py","file_url":"https://github.com/ctralie/SquarePuzzles/blob/HEAD/SquarePuzzles.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"debcd9f4f89c1742"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}