{"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/image-matching-across-wide-baselines-from","title":"Image Matching across Wide Baselines: From Paper to Practice","arxiv_id":"2003.01587","date":"2020-03-03","proceeding":null,"authors":["Yuhe Jin","Dmytro Mishkin","Anastasiia Mishchuk","Jiri Matas","Pascal Fua","Kwang Moo Yi","Eduard Trulls"],"abstract":"We introduce a comprehensive benchmark for local features and robust estimation algorithms, focusing on the downstream task -- the accuracy of the reconstructed camera pose -- as our primary metric. Our pipeline's modular structure allows easy integration, configuration, and combination of different methods and heuristics. This is demonstrated by embedding dozens of popular algorithms and evaluating them, from seminal works to the cutting edge of machine learning research. We show that with proper settings, classical solutions may still outperform the perceived state of the art. Besides establishing the actual state of the art, the conducted experiments reveal unexpected properties of Structure from Motion (SfM) pipelines that can help improve their performance, for both algorithmic and learned methods. Data and code are online https://github.com/vcg-uvic/image-matching-benchmark, providing an easy-to-use and flexible framework for the benchmarking of local features and robust estimation methods, both alongside and against top-performing methods. This work provides a basis for the Image Matching Challenge https://vision.uvic.ca/image-matching-challenge.","url_abs":"https://arxiv.org/abs/2003.01587v5","url_pdf":"https://arxiv.org/pdf/2003.01587v5.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":"image-matching-across-wide-baselines-from","repo_url":"https://github.com/etrulls/slurm-gcp","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"Apache-2.0"}},{"paper_slug":"image-matching-across-wide-baselines-from","repo_url":"https://github.com/vcg-uvic/image-matching-benchmark","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"none","reach":{"status":"ok","spdx":"Apache-2.0"}},{"paper_slug":"image-matching-across-wide-baselines-from","repo_url":"https://github.com/danini/magsac","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"NOASSERTION"}},{"paper_slug":"image-matching-across-wide-baselines-from","repo_url":"https://github.com/ducha-aiki/pydegensac","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"image-matching-across-wide-baselines-from","repo_url":"https://github.com/ducha-aiki/pymagsac","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"NOASSERTION"}}],"tasks":[{"task_slug":"benchmarking","task_name":"Benchmarking"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2003.01587","atlas_url":"https://app.syntology.ai/?focus=2003.01587","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2003.01587"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+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/ducha-aiki/pymagsac","reach":{"status":"ok","spdx":"NOASSERTION"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/danini/magsac","reach":{"status":"ok","spdx":"NOASSERTION"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/vcg-uvic/image-matching-benchmark","reach":{"status":"ok","spdx":"Apache-2.0"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/etrulls/slurm-gcp","reach":{"status":"ok","spdx":"Apache-2.0"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/ducha-aiki/pydegensac","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran":12,"ran_violates":1,"unverified":2},"by_repo_kind":{"official":{"samples":4,"ran":3,"repositories":1},"listed":{"samples":11,"ran":10,"repositories":1}},"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":"b79ff85ee4c2306a","entry":"budgets","repo":"ducha-aiki/pydegensac","repo_kind":"listed","path":"benchmarks/methods.py","file_url":"https://github.com/ducha-aiki/pydegensac/blob/HEAD/benchmarks/methods.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b79ff85ee4c2306a"}},{"code_sha256_prefix":"bf1c8d201369992d","entry":"convert_and_check","repo":"ducha-aiki/pydegensac","repo_kind":"listed","path":"src/pydegensac/utils.py","file_url":"https://github.com/ducha-aiki/pydegensac/blob/HEAD/src/pydegensac/utils.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"bf1c8d201369992d"}},{"code_sha256_prefix":"ebe5a38f176d7af7","entry":"convert_cv2_kpts_to_xyA","repo":"ducha-aiki/pydegensac","repo_kind":"listed","path":"src/pydegensac/utils.py","file_url":"https://github.com/ducha-aiki/pydegensac/blob/HEAD/src/pydegensac/utils.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"ebe5a38f176d7af7"}},{"code_sha256_prefix":"7d57d64d5a3cb9fe","entry":"get_kp_category","repo":"vcg-uvic/image-matching-benchmark","repo_kind":"official","path":"import_features.py","file_url":"https://github.com/vcg-uvic/image-matching-benchmark/blob/HEAD/import_features.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"7d57d64d5a3cb9fe"}},{"code_sha256_prefix":"8a77b04598ecdf4f","entry":"load","repo":"ducha-aiki/pydegensac","repo_kind":"listed","path":"benchmarks/report.py","file_url":"https://github.com/ducha-aiki/pydegensac/blob/HEAD/benchmarks/report.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"8a77b04598ecdf4f"}},{"code_sha256_prefix":"6db98420993ab263","entry":"load","repo":"ducha-aiki/pydegensac","repo_kind":"listed","path":"benchmarks/toolchain/iso_bench.py","file_url":"https://github.com/ducha-aiki/pydegensac/blob/HEAD/benchmarks/toolchain/iso_bench.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6db98420993ab263"}},{"code_sha256_prefix":"a0ff0cb1a8f7b562","entry":"maa","repo":"ducha-aiki/pydegensac","repo_kind":"listed","path":"benchmarks/metrics.py","file_url":"https://github.com/ducha-aiki/pydegensac/blob/HEAD/benchmarks/metrics.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"a0ff0cb1a8f7b562"}},{"code_sha256_prefix":"63638032f75ffeca","entry":"pose_error","repo":"ducha-aiki/pydegensac","repo_kind":"listed","path":"benchmarks/metrics.py","file_url":"https://github.com/ducha-aiki/pydegensac/blob/HEAD/benchmarks/metrics.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"63638032f75ffeca"}},{"code_sha256_prefix":"2eee1222b05a2179","entry":"registry","repo":"ducha-aiki/pydegensac","repo_kind":"listed","path":"benchmarks/methods.py","file_url":"https://github.com/ducha-aiki/pydegensac/blob/HEAD/benchmarks/methods.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"2eee1222b05a2179"}},{"code_sha256_prefix":"b14a094d1b3ffdb2","entry":"reprojection_error","repo":"ducha-aiki/pydegensac","repo_kind":"listed","path":"benchmarks/metrics.py","file_url":"https://github.com/ducha-aiki/pydegensac/blob/HEAD/benchmarks/metrics.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b14a094d1b3ffdb2"}},{"code_sha256_prefix":"7285120b3740d069","entry":"split_keys","repo":"ducha-aiki/pydegensac","repo_kind":"listed","path":"benchmarks/data.py","file_url":"https://github.com/ducha-aiki/pydegensac/blob/HEAD/benchmarks/data.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"7285120b3740d069"}},{"code_sha256_prefix":"248284f69adfeaad","entry":"str2bool","repo":"vcg-uvic/image-matching-benchmark","repo_kind":"official","path":"config.py","file_url":"https://github.com/vcg-uvic/image-matching-benchmark/blob/HEAD/config.py","link_basis":"harvester_set","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"248284f69adfeaad"}},{"code_sha256_prefix":"5f5145996f14730a","entry":"validate_label","repo":"vcg-uvic/image-matching-benchmark","repo_kind":"official","path":"import_features.py","file_url":"https://github.com/vcg-uvic/image-matching-benchmark/blob/HEAD/import_features.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"5f5145996f14730a"}},{"code_sha256_prefix":"88515a5f8e7d443b","entry":"get_desc_category","repo":"vcg-uvic/image-matching-benchmark","repo_kind":"official","path":"import_features.py","file_url":"https://github.com/vcg-uvic/image-matching-benchmark/blob/HEAD/import_features.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":"88515a5f8e7d443b"}},{"code_sha256_prefix":"58137f340d544719","entry":"pair_keys_f","repo":"ducha-aiki/pydegensac","repo_kind":"listed","path":"benchmarks/data.py","file_url":"https://github.com/ducha-aiki/pydegensac/blob/HEAD/benchmarks/data.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":"58137f340d544719"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}