PnP(Perspective-n-Point)算法 | 用于求解已知n個3D點及其對應2D投影點的相機位姿

什么是PnP算法?

  • PnP 全稱是 Perspective-n-Point,中文叫“n點透視問題”。
  • 它的目標是:
    已知一些空間中已知3D點的位置(世界坐標)和它們對應的2D圖像像素坐標,求解攝像機的姿態(位置和平移)和朝向(旋轉)。

簡單來說,就是通過3D點和它們在照片上的投影點,算出相機“站在哪兒”和“看向哪兒”。

PnP解決的問題

你有一堆現實世界的點(比如3D模型上的標志點),也知道這些點在照片里的像素位置,PnP就是幫你找出“相機相對于這些點的位置和角度”。

PnP算法的原理(簡單版)

  1. 已知條件:

    • n n n 個已知3D點 P i = ( X i , Y i , Z i ) P_i = (X_i, Y_i, Z_i) Pi?=(Xi?,Yi?,Zi?),在世界坐標系里。
    • 它們對應的2D像素點 p i = ( u i , v i ) p_i = (u_i, v_i) pi?=(ui?,vi?),在圖像中。
  2. 目標:

    • 找到相機的旋轉矩陣 R R R 和平移向量 t t t,使得所有3D點經過變換后投影到圖像上的位置,盡可能接近對應的2D點。
  3. 數學關系:

    s [ u i v i 1 ] = K × ( R × P i + t ) s \begin{bmatrix} u_i \\ v_i \\ 1 \end{bmatrix} = K \times \big( R \times P_i + t \big) s ?ui?vi?1? ?=K×(R×Pi?+t)

    其中:

    • K K K 是相機內參矩陣,已知。
    • R , t R, t R,t 是未知(我們要解的)。
    • s s s 是尺度因子(用于齊次坐標)。
  4. 求解過程:

    • 利用多組點的對應關系,建立方程組。
    • 通過最小化投影誤差(圖像點和投影點的距離),用優化算法求出最佳的 R R R t t t

你可以這樣理解:

  • PnP就像“反向投影”:你知道點在現實和照片的位置,求相機的位置和朝向。

額外說明:

  • 如果點的數量較少(最少4個點),算法能工作,但更多點通常能得到更穩定準確的結果。
  • 經典的PnP算法有很多變體,比如EPnP、UPnP、RPnP等,都旨在更快或更魯棒地求解。

在這里插入圖片描述


值得注意的是PnP的前提:對應關系必須先確定

  • **PnP算法本身不負責找到哪些3D點對應哪些2D點,**它的輸入是:

    • 一組3D點(已知位置)
    • 它們在圖像中的對應2D點
  • 所以,在用PnP之前,必須先解決“匹配”問題:
    怎樣找到圖像中哪個像素點對應哪個3D世界點?

對應關系的獲得途徑舉例:

  1. 人工標定/標記:
    在物體或場景上貼標記點,知道標記點的3D坐標,手動或者半自動找到圖像中的對應點。

  2. 特征匹配:
    利用特征點檢測(如SIFT、ORB)在圖像中提取關鍵點,并用描述子匹配它們與3D點(如用激光掃描得到的點云中提取特征點)。

  3. 結構光或投影儀:
    通過主動投影圖案產生已知對應關系。

  4. 深度相機(RGB-D)或激光雷達數據:
    直接獲得3D點和2D圖像對齊。

沒有對應關系,PnP算法就無從下手

所以在做定位、姿態估計、SLAM等任務時,建立穩定準確的“3D點 ? 2D點”對應關系是關鍵的第一步。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83262.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83262.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83262.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

QT-JSON

#include <QJsonDocument>#include <QJsonObject>#include <QJsonArray>#include <QFile>#include <QDebug>void createJsonFile() {// 創建一個JSON對象 鍵值對QJsonObject jsonObj;jsonObj["name"] "John Doe";jsonObj[…

解決各個系統報錯TDengine:no taos in java.library.path問題

windows 系統解決辦法 在本地上安裝一個TD的Windows客戶端&#xff0c;注意安裝的客戶端版本一定要和服務端TD版本完全一致。&#xff08;或者將 C:\TDengine\driver\taos.dll 拷貝到 C:\Windows\System32\ 目錄下&#xff09; 客戶端各個歷史版本下載鏈接&#xff1a;TDengin…

我提出結構學習的思路,意圖用結構學習代替機器學習

我提出結構學習的思路&#xff0c;意圖用結構學習代替機器學習 1.機器學習的本質和缺點 機器學習的規律是設計算法、用數據訓練算法、讓算法學會產生正確的數據回答問題&#xff0c;其缺點在于&#xff0c;需要大規模訓練數據和巨大算力還其次&#xff0c;機器學習不能產生智…

【Hive 運維實戰】一鍵管理 Hive 服務:Metastore 與 HiveServer2 控制腳本開發與實踐

一、引言 在大數據開發中&#xff0c;Hive 作為重要的數據倉庫工具&#xff0c;其核心服務metastore&#xff08;元數據服務&#xff09;和hiveserver2&#xff08;查詢服務&#xff09;的啟停管理是日常運維的基礎操作。手動執行命令啟停服務不僅效率低下&#xff0c;還容易因…

簡歷制作要精而不簡

不得不說&#xff0c;不管是春招&#xff0c;還是秋招&#xff0c;我們在求職時&#xff0c;第一步便是制作一份簡歷。不得不承認&#xff0c;好的簡歷&#xff0c;就像一塊敲門磚&#xff0c;能讓面試官眼前一亮&#xff0c;讓應聘成功的概率增添一分。 對于一個初次求職者來…

深入Java8-日期時間API:TemporalQuery、TemporalQueries類

JDK版本&#xff1a;11 TemporalQuery FunctionalInterface public interface TemporalQuery<R> {R queryFrom(TemporalAccessor temporal); } emporalQuery是Java 8中用于時間查詢的一個函數式接口&#xff0c;它允許用戶對日期和時間進行查詢。TemporalQuery接口中定…

Spring Boot + MyBatis 實現的簡單用戶管理項目的完整目錄結構示例

&#x1f4c1; 示例項目結構&#xff08;基于 Maven&#xff09; user-management/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/example/usermanagement/ │ │ │ ├── controller/ │ │ │ │ └── UserC…

嵌入式RTC工作原理及應用場景

20ppm 是衡量 RTC&#xff08;實時時鐘&#xff09;精度的關鍵指標&#xff0c;表示 每百萬秒&#xff08;約11.57天&#xff09;的最大時間誤差范圍。以下是通俗易懂的解釋&#xff1a; 1. ppm 的含義 ppm Parts Per Million&#xff08;百萬分之一&#xff09; 1 ppm 1/1,…

[Godot][游戲開發] 如何在 Godot 中配置 Android 環境(適配新版 Android Studio)

在使用 Godot 進行 Android 項目的開發與導出時&#xff0c;配置 Android 環境是一項必要步驟。隨著 Android Studio 的更新&#xff08;特別是自 Arctic Fox 版本起&#xff09;&#xff0c;安裝方式發生了變化&#xff0c;默認不再引導用戶手動配置 SDK/JDK/NDK&#xff0c;而…

量子語言模型——where to go

1?? 在大語言模型&#xff08;LLM&#xff09;高度發達的今天&#xff0c;還研究這些小模型&#xff08;如n-gram、RNN、量子語言模型&#xff09;是否有意義&#xff1f; ? 有意義&#xff0c;但意義已經轉變了——不再是用于「直接生產 SOTA 應用」&#xff0c;而是&…

機電的焊接技術

焊接技術:高溫或高壓條件下,使用焊接材料(焊條或焊絲)將兩塊或兩塊以上的母材(待焊接的工件)連接 成一個整體的操作方法&#xff61; 2.3.1 焊接設備和焊接材料的分類及選用 1.焊接設備&#xff08;對應焊接方法&#xff09; 2.焊接材料&#xff08;焊條、焊絲、焊劑、焊接氣…

深入解析Vue.js:構建現代Web應用的高效之道

一、Vue.js 的核心設計理念 Vue.js 以漸進式框架為定位,強調輕量靈活與易上手性,允許開發者根據項目需求逐步引入核心功能或擴展模塊。其核心設計遵循以下原則: 響應式數據綁定:通過數據劫持(Object.defineProperty/Proxy)和發布 - 訂閱模式,實現視圖與數據的自動同步,…

信貸特征分析可視化函數(外置指標面板完整版)

XY的基礎處理 target_column[SeriousDlqin2yrs] feature_columns[RevolvingUtilizationOfUnsecuredLines, age,NumberOfTime30-59DaysPastDueNotWorse, DebtRatio, MonthlyIncome,NumberOfOpenCreditLinesAndLoans, NumberOfTimes90DaysLate,NumberRealEstateLoansOrLines, Nu…

ESP32-idf學習(三)esp32C3連接iot

一、前言 上一篇用藍牙作為通信方式&#xff0c;雖然勉強完成了控制&#xff0c;但結果顯然不是那么符合我們的預期&#xff0c;既然用藍牙還需要研究一段時間&#xff0c;那我們就先整一些現成的&#xff0c;不需要研究的&#xff01;iot云平臺&#xff01;這里當然也是通過w…

Axure RP11安裝、激活、漢化

一:注冊碼 Axure RP11.0.0.4122在2025-5-29日親測有效: 49bb9513c40444b9bcc3ce49a7a022f9

高光譜成像相機:基于高光譜成像技術的玉米種子純度檢測研究

種子純度是衡量種子質量的核心指標之一&#xff0c;直接影響農作物產量與品質。傳統檢測方法&#xff08;如形態學觀察、生化分析&#xff09;存在耗時長、破壞樣本、依賴人工等缺陷。近年來&#xff0c;高光譜成像技術因其融合光譜與圖像信息的優勢&#xff0c;成為無損檢測領…

Excel 中的TEXTJOIN用法(基礎版),將Excel 多個單元格內容按條件合并到一個單元格

1.新建一張數據透視表 選擇你需要的維度所在的列 2.點擊確定生成&#xff0c;勾選右邊的維度 3.選中單元格&#xff0c;通過 ShiftF3 查看函數參數 第一個參數&#xff1a;分隔符&#xff0c;用來分隔合并的文本&#xff0c;不需要分隔用"" 第二個參數&#xff1a;…

2025.05.28【Choropleth】群體進化學專用圖:區域數據可視化

Load geospatial data Start by loading your geospatial data in R, and build a basic plot. Data from the package The cartography comes with a set of geospatial data included. Learn how to use it to build a choropleth map. 文章目錄 Load geospatial dataData …

QT-Creator安裝教程(windows)

目錄 1,下載 1.1 鏡像源下載 1.2 運行下載的exe文件 1.2.1 QT5 版本安裝 1.2.2 QT6 版本安裝 1.2.3 如何在安裝完成之后,繼續添加擴展包 1,下載 1.1 鏡像源下載 地址:Index of /qtproject/

Deepin 23.10安裝Docker

個人博客地址&#xff1a;Deepin 23.10安裝Docker | 一張假鈔的真實世界 Deepin 是基于 Debian 的國產 Linux 發行版&#xff0c;安裝 Docker Desktop 可能會遇到兼容性問題&#xff0c;因為 Docker Desktop 官方主要支持 Ubuntu/Debian/Red Hat/Fedora/Arch 等主流發行版&…