{"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/convex-relaxation-for-robust-vanishing-point","title":"Convex Relaxation for Robust Vanishing Point Estimation in Manhattan World","arxiv_id":"2505.04788","date":"2025-05-07","proceeding":"CVPR 2025 1","authors":["Bangyan Liao","Zhenjun Zhao","Haoang Li","Yi Zhou","Yingping Zeng","Hao Li","Peidong Liu"],"abstract":"Determining the vanishing points (VPs) in a Manhattan world, as a fundamental task in many 3D vision applications, consists of jointly inferring the line-VP association and locating each VP. Existing methods are, however, either sub-optimal solvers or pursuing global optimality at a significant cost of computing time. In contrast to prior works, we introduce convex relaxation techniques to solve this task for the first time. Specifically, we employ a \"soft\" association scheme, realized via a truncated multi-selection error, that allows for joint estimation of VPs' locations and line-VP associations. This approach leads to a primal problem that can be reformulated into a quadratically constrained quadratic programming (QCQP) problem, which is then relaxed into a convex semidefinite programming (SDP) problem. To solve this SDP problem efficiently, we present a globally optimal outlier-robust iterative solver (called GlobustVP), which independently searches for one VP and its associated lines in each iteration, treating other lines as outliers. After each independent update of all VPs, the mutual orthogonality between the three VPs in a Manhattan world is reinforced via local refinement. Extensive experiments on both synthetic and real-world data demonstrate that GlobustVP achieves a favorable balance between efficiency, robustness, and global optimality compared to previous works. The code is publicly available at https://github.com/WU-CVGL/GlobustVP.","url_abs":"https://arxiv.org/abs/2505.04788v2","url_pdf":"https://arxiv.org/pdf/2505.04788v2.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":"convex-relaxation-for-robust-vanishing-point","repo_url":"https://github.com/wu-cvgl/globustvp","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2505.04788","atlas_url":"https://app.syntology.ai/?focus=2505.04788","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2505.04788"}},"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/wu-cvgl/globustvp","reach":{"status":"ok","spdx":"Apache-2.0"}},{"provenance":"deterministic:regex_extraction","url":"https://github.com/wu-cvgl/GlobustVP","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran_fixture":5,"ran_draft_wrong":2,"unverified":1},"by_repo_kind":{"official":{"samples":8,"ran":7,"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":"b24291e6ccc6ee58","entry":"_angle_mask","repo":"wu-cvgl/GlobustVP","repo_kind":"official","path":"globustvp/solver/core.py","file_url":"https://github.com/wu-cvgl/GlobustVP/blob/HEAD/globustvp/solver/core.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"b24291e6ccc6ee58"}},{"code_sha256_prefix":"a706ddb884330838","entry":"axang2rotm","repo":"wu-cvgl/GlobustVP","repo_kind":"official","path":"globustvp/solver/core.py","file_url":"https://github.com/wu-cvgl/GlobustVP/blob/HEAD/globustvp/solver/core.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"a706ddb884330838"}},{"code_sha256_prefix":"d19c01e06b847df1","entry":"check_eig","repo":"wu-cvgl/GlobustVP","repo_kind":"official","path":"globustvp/solver/core.py","file_url":"https://github.com/wu-cvgl/GlobustVP/blob/HEAD/globustvp/solver/core.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"d19c01e06b847df1"}},{"code_sha256_prefix":"93d104a4436b2939","entry":"find_peak_intervals","repo":"wu-cvgl/GlobustVP","repo_kind":"official","path":"globustvp/solver/core.py","file_url":"https://github.com/wu-cvgl/GlobustVP/blob/HEAD/globustvp/solver/core.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"93d104a4436b2939"}},{"code_sha256_prefix":"64b9d7566e32ff62","entry":"generate_bin","repo":"wu-cvgl/GlobustVP","repo_kind":"official","path":"globustvp/solver/core.py","file_url":"https://github.com/wu-cvgl/GlobustVP/blob/HEAD/globustvp/solver/core.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"64b9d7566e32ff62"}},{"code_sha256_prefix":"3515e1d103c201d6","entry":"recover_vp","repo":"wu-cvgl/GlobustVP","repo_kind":"official","path":"globustvp/solver/core.py","file_url":"https://github.com/wu-cvgl/GlobustVP/blob/HEAD/globustvp/solver/core.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"3515e1d103c201d6"}},{"code_sha256_prefix":"92e8a9b485cf8825","entry":"solve_sdp","repo":"wu-cvgl/GlobustVP","repo_kind":"official","path":"globustvp/solver/core.py","file_url":"https://github.com/wu-cvgl/GlobustVP/blob/HEAD/globustvp/solver/core.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"92e8a9b485cf8825"}},{"code_sha256_prefix":"0986fb2294673172","entry":"globustvp","repo":"wu-cvgl/GlobustVP","repo_kind":"official","path":"globustvp/solver/core.py","file_url":"https://github.com/wu-cvgl/GlobustVP/blob/HEAD/globustvp/solver/core.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":"0986fb2294673172"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}