理解全景圖像拼接

1 3D到2D透視投影

? ? 三維空間上點? p 投影到二維空間 q 有兩種方式:1)正交投影,2)透視投影。

? ? 正交投影直接舍去 z 軸信息,該模型僅在遠心鏡頭上是合理的,或者對于物體深度遠小于其到攝像機距離時的近似模型。

? ? 常規鏡頭成像可以使用透視投影建模,如下圖:

? ? ??

? ? 三維空間點 p=(X,Y,Z) 投影到二維空間點 q = (x,y),鏡頭光軸在 Z 軸上,滿足關系?

? ? 真實的物理模型將 X 投影到 x, 但使用?

?可以避免關系式中產生一個負號,因此投影點可寫為?

,?同理,有?

? ? 使用矩陣可表示為?

,變換結果?

?為齊次坐標,

? ? 以上變換舉證前三列可表達相機自身相關性質,被稱為內參,比如?

,其中, f 表示相機焦距,af表示像元橫縱比(一般情形下為 1),

? ? cx,cy 表示 CCD 中心與光軸間平移距離,s 表示了 CCD 法向量與光軸不平行程度。

? ? 在實際應用中,一般會使用簡單模型?

,該模型僅表達了焦距與CCD中心平移。

? ? 如果將以上變換矩陣改寫成滿秩矩陣,那么其逆變換就變得很簡單,使用 4*4 變換矩陣重新構造透視投影如下:

? ? ?

,

? ? 改寫齊次坐標?

,前兩個分量表示圖像上坐標值,第四個分量表示深度信息。

? ? 以上透視投影模型要求三維空間坐標滿足以下條件:

? ? 1)以鏡頭光心(小孔成像中的小孔)為原點;

? ? 2)Z軸垂直與 CCD 平面;

? ? 3)XY軸與 CCD 平面 xy 軸平行;

? ? 但在實際三維坐標系可能是任意建立的,所以在透視投影前需要變換坐標系,使用平移+旋轉模型如下:

? ??

,其中,R 為 3*3 旋轉矩陣,t 為平移向量。

? ? 綜上,任意三維空間上點到二維平面的透視投影可表示為?

2 成對圖像配準

? ? ? ?

? ? 如上圖(a)所示,三維空間上點 p 映射到圖像平面為?

,由于?

?均為滿足矩陣,故其逆矩陣一定存在,有?

? ? 結合?

?可建立?

?與?

?之間的關系為?

? ? 以上關系需要相機記錄成像點深度信息,一般相機無法記錄深度信息,因此,可以使用圖像 (b)建立關系:

? ? 假設所有三維空間上點均在一個空間平面上,即滿足?

? ? 當進行投影變換時,其深度信息為零, 具體可表達為??

? ? 觀察可知,刪除變換矩陣最后一行與最后一列不影響計算結果,因此,可簡化表達式為?

? ? 以上變換有 8 個自由度,將變換矩陣重新改寫為?

? ? 變換矩陣?

?表達了平面場景的映射關系,這正好是 “圖像配準” 一文中使用的模型之一。

3 旋轉全景模型

? ? 在一個固定的世界坐標下,假設相機繞某旋轉點旋轉拍照,兩次(或多次)拍照間相機坐標原點保持不變,但光軸隨旋轉發生改變。

? ? 三維空間中任意固定點在每次拍照中的映射可表達為:

? ? 1)建立相機坐標系(原點與世界坐標系一致,光軸為相機當前光軸);

? ? 2)使用旋轉矩陣 R 將世界坐標系下點旋轉為相機坐標系下點;

? ? 3)使用投影矩陣投影到相機平面;

? ? 因此,三維空間點在兩幅圖像中的映射關系可簡化為?

? ? 假設 K 僅包含相機焦距信息,則?

? ??

,當焦距已知時,此參數僅為旋轉,當焦距未知時,可以是固定焦距或者變化焦距。

? ? 一般情況下,該變化的參數個數為 4,包括 1)固定未知焦距,2)旋轉參數(3個),

? ? 這比8個參數投影變換更加簡化,該模型是用于全景圖像拼接的理想模型。

4 迭代求解

? ? 給定一對圖像上若干匹配點?

,使用平面投影變換可得?

? ? 兩邊同時乘以分母得?

? ? 進一步整理為?

? ? 使用該線性方程組可以求解變換矩陣?

?的初始估計。

? ? 在初始估計?

?基礎上使用非線性迭代方程為?

,

? ??

? ??

?為變換矩陣?

?的估計,

?為第二次迭代估計,通過最小化第二次估計誤差即求得合理的?

? ? 如果在每次迭代估計中使用上次迭代估計值?

?作為初始估計,即?

?中各個參數值均為零,迭代方程可改寫為

? ??

? ? 注意,以上?

?不再是初始匹配點,而是每次迭代后的計算點!!!

? ? 在旋轉全景模型中,

,當旋轉分量增加?

?后,

? ? 旋轉矩陣為??

,??

?為增量矩陣。

? ??

,當??

?為弧度單位且很小時,

? ??

?表示旋轉軸。

? ? 增量矩陣 D 可改寫為?

? ? D 中變量為旋轉角度?

?,使用線性近似可表達為?

? ? 其中,

?為初始估計參數的變換結果,

?為旋轉一個小的角度?

?后的線性變換結果,

? ? 使用最小二乘法可以求解一個合理的旋轉角度。

? ? 觀察增量矩陣 D,可以發現 D 與 H 存在一種對應關系?

? ? 迭代公式?

?可轉換為:

? ? ?

? ? 整理公式,使其為?

?的線性函數?

? ? 使用最小二乘法可以求解一個合理的旋轉角度。

? ? 以上迭代公式中,

?是一個未知量,但是可以從初始估計?

?中計算得出,具體如下:

? ??

? ?

? ??

,該旋轉矩陣為正交矩陣,

? ? 在旋轉矩陣每一項上乘以一個因子?

?不會改變矩陣正交特性,因此,可將上式改寫為:

? ??

,利用正交特性有:

? ??

,可求解?

? ? 同理,利用第三行與第一行正交可求解?

,當焦距相等時,可估計焦距為

。?

5 全局配準

? ? 由于每對圖像間的配準估計均可能存在誤差,當多幅圖像通過圖像對間配準參數配準時,會形成累積誤差,

? ? 這在全景圖像拼接中可能產生縫隙或者過疊加,所以需要校正圖像對間配準參數,稱作光束平差法(bundle adjustment)。

? ? 在光束平差法之前,通過圖像對間特征點匹配情況可以剔除一些孤立圖像,然后在保留圖像中進行全局配準。

? ? 假設有 n 幀圖像用于形成全景圖像,三維空間中有 m 個特征點在至少兩幀圖像中形成了映射關系,

? ??

?表示第? i 個三維空間點,

?表示第 i 個三維空間點在第 j 幀圖像上形成的投影點,

?表示得 i 個三維空間點在第 j 幀圖像上是否存在投影點。

? ? 利用旋轉全景模型可建立?

?到?

?的映射為?

? ? 最小化?

?即可。

? ? 完成全局配準后,全景圖像仍然可能存在局部錯位,這可能是因為鏡頭鏡像畸變,攝像頭沒有完全繞光軸中心旋轉,場景中微小抖動等因素引起。

? ? 可以通過對整幅全景圖像建立一個類似稠密光流估計圖來抵消局部誤差,方法如下:

? ? 1)已經通過光束平差法重新估計了變換矩陣;

? ? 2)利用?

?計算第 j 幀圖像對應的第 i 個特征點位置;

? ? 3)求所有圖像幀上對應的第 i 個特征點的平均位置?

? ? 4)求第 i 個特征點在第 j 幀圖像上的精確位置?

? ? 5)求第 i 個特征點在第 j 幀圖像上擾動?

;

? ? 6)使用插值構造全景圖像上局部擾動,用于全景拼接時補償局部模糊。

6 圖像合成

? ? 當所有相關圖像都完成注冊后,我們可以利用以上信息產生一張完整的拼接圖像,這個過程大致包括以下內容:

? ? 1)選擇合成表面,當少量圖像拼接時,可以選擇平坦全景圖;當全景圖視野很大時,如果選擇平坦全景圖,

? ? 則在周邊區域會產生很大扭曲變形,這時一般選擇圓柱面投影或者球面投影;

? ? 2)決定那一幀圖像作為中間參考圖像,由于已經知道每一幀圖像對應的旋轉角度,一般旋轉平均旋轉角度附近的圖像作為中間參考圖像;

? ? 3)將參考圖像平移到合成表面中心,將其他圖像按已知注冊信息映射到合成表面;

? ? 4)在重疊部分通過加權方式去除虛影;

? ? 5)使用拉普拉斯金字塔融合方案融合圖像,必要時進行曝光補償。

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

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

相關文章

Linux基本指令篇 —— whoami指令

whoami 是 Linux 和 Unix 系統中一個簡單但實用的命令,全稱 Who Am I(我是誰)。它的功能是顯示當前登錄用戶的用戶名。以下是關于 whoami 的詳細解析: 目錄 1. 基本用法 2. 命令特點 3. 實際應用場景 場景 1:腳本中…

華為OD機試真題——仿LISP運算(2025B卷:200分)Java/python/JavaScript/C/C++/GO最佳實現

2025 B卷 200分 題型 本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式; 并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析; 本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分…

創建dummy

訪客_dc1fc4 class Solution { public: int minSubArrayLen(int target, vector<int>& nums) { int left0;int right0;int n nums.size(); int sum0;int ans100001; for(right0;right<n;right) { sumnums[right]; //每次更新右端點之后&#xff0c;立即向右移動…

面向惡劣條件的道路交通目標檢測----大創自用(當然你也可以在里面學到很多東西)

全部內容梳理 目標檢測的兩個任務&#xff1a; 預測標簽 邊界框 語義分割 實力分割 一個是類別 一個是實例級別 分類任務把每個圖像當作一張圖片看待 所有解決方法是先生成候選區域 再進行分類 置信度&#xff1a; 包括對類別和邊界框預測的自信程度 輸出分類和IOU分數的…

需求管理工具使用不當,如何優化?

要優化需求管理工具的使用&#xff0c;需從選擇合適工具、規范使用流程、加強用戶培訓、統一數據結構、定期審查與優化使用配置五個方面著手。其中&#xff0c;選擇合適工具是前提。錯誤的工具選擇往往會導致項目溝通效率低、需求追蹤失效甚至造成交付物偏離客戶預期。因此&…

openwrt虛擬機安裝調試

分類 lienol lean immortalwrt 一、獲取固件 &#xff08;1&#xff09;下載地址 1.官網構建下載 OpenWrt Firmware Selector 官網 OpenWrt Firmware Selector 2.第三方構建網站 ImmortalWrt Firmware Selector ImmortalWrt Firmware Selector 3.第三方構建下載 ht…

Apache OFBiz 17.12.01 的遠程命令執行漏洞 -Java 反序列化 + XML-RPC 請求機制

目錄 漏洞原理 &#x1f3af; 一、漏洞背景&#xff08;CVE-2020-9496&#xff09; ?? 二、攻擊原理簡述 &#x1f9f1; 三、完整攻擊流程步驟詳解 &#x1f50e; 1. 信息收集 &#x1f6e0;? 2. 工具準備 &#x1f9ea; 3. 構造初始 payload&#xff1a;下載惡意腳本…

最好用的wordpress外貿主題

產品展示獨立站wordpress主題 橙色的首頁大banner外貿英文wordpress主題&#xff0c;適合用于產品展示型的外貿網站。 https://www.jianzhanpress.com/?p8556 Machine機器wordpress模板 寬屏簡潔實用的wordpress外貿建站模板&#xff0c;適合工業機器生產、加工、制造的外貿…

Q1:Go協程、Channel通道 被close后,讀會帶來什么問題?

在 Go 語言中&#xff0c;Channel&#xff08;通道&#xff09;關閉后讀取的行為是一個常見但需要謹慎處理的問題。以下是詳細的分析和注意事項&#xff1a; 1. 關閉 Channel 后讀取的行為 (1) 讀取已關閉的 Channel 剩余數據仍可讀取&#xff1a; 關閉 Channel 后&#xff0…

【AI Study】第三天,Python基礎 - 同NumPy類似的類庫

學習計劃&#xff1a;AI Study&#xff0c;學習計劃源碼地址&#xff1a;https://github.com/co-n00b/AI-Study.git 2025-05-23 在學習NumPy的過程中&#xff0c;除了了解NumPy之外&#xff0c;我們也對比看看其他類似的類庫都有什么&#xff1f;各自的優缺點是什么&#xff1…

基于aspnet,微信小程序,mysql數據庫,在線微信小程序汽車故障預約系統

詳細視頻:【基于aspnet,微信小程序,mysql數據庫,在線微信小程序汽車故障預約系統。-嗶哩嗶哩】 https://b23.tv/zfqLWPV

人工智能100問?第32問:什么是遷移學習?

目錄 一、通俗解釋 二、專業解析 三、權威參考 遷移學習就是讓AI把在一個任務中學到的本事&#xff0c;拿來加速另一個任務的學習&#xff0c;實現“舉一反三”。 一、通俗解釋 想象你已經學會了打乒乓球&#xff0c;現在去學打網球&#xff0c;是不是會學得更快&#xff…

Linux之概述和安裝vm虛擬機

文章目錄 操作系統概述硬件和軟件操作系統常見操作系統 初識LinuxLinux的誕生Linux內核Linux發行版 虛擬機介紹虛擬機 VMware WorkStation安裝虛擬化軟件VMware WorkStation 安裝查看VM網絡連接設置VM存儲位置 在VMware上安裝Linux(發行版CentOS7)安裝包獲取CentOS7 安裝 Mac系…

兩個mysql的maven依賴要用哪個?

背景 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId> </dependency>和 <dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId> &l…

復雜項目中通過使用全局變量解決問題的思維方式

最近接手了一個公司的老系統的PHP項目&#xff0c;里面的代碼比較混亂&#xff0c;排查解決了一個問題&#xff0c;決定將這個思路記錄下來&#xff0c;希望能幫助更多的人。 其中一部分的代碼信息如下&#xff1a; 備注&#xff1a;為了避免公司的相關數據信息暴露&#xff0…

V9數據庫替換授權

文章目錄 環境文檔用途詳細信息 環境 系統平臺&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;9.0 文檔用途 1、本文檔用于指導V9數據庫替換授權。 2、V9數據庫授權文件為license.dat。 詳細信息 1、上傳新的授權文件到服務器并修改授權文件屬主為…

初識 Flask 框架

目錄 1. Flask 框架概述 1.1 安裝 Flask 1.2 創建你的第一個 Flask 應用 1.3 運行 Flask 應用 2. Flask 路由與視圖函數 2.1 動態路由 2.2 支持多種 HTTP 請求方法 2.3 使用 Jinja2 模版渲染 HTML 2.5 模版繼承與塊 3. Flask 表單處理與用戶輸入 3.1 安裝 Flask-WTF …

《深入剖析:Python自動化測試框架之unittest與pytest》

unittest作為Python標準庫的一部分&#xff0c;猶如一位沉穩可靠的“老工匠”&#xff0c;默默為無數項目提供著堅實的測試基礎。它誕生于Python社區長期的實踐沉淀&#xff0c;擁有一套標準化的測試體系&#xff0c;就像一套精密的儀器&#xff0c;各個部件各司其職。 unitte…

【Python 命名元祖】collections.namedtuple 學習指南

&#x1f4da; collections.namedtuple 學習指南 命名元組&#xff08;namedtuple&#xff09;是 Python collections 模塊中一種增強型元組&#xff0c;支持通過字段名訪問元素&#xff0c;同時保持元組的內存效率和不可變性。 一、基礎用法 1. 定義命名元組 from collectio…

iOS知識復習

block原理 OC block 是個結構體&#xff0c;內部有個一個結構體成員 專門保存 捕捉對象 Swift閉包 是個函數&#xff0c;捕獲了全局上下文的常量或者變量 修改數組存儲的內容&#xff0c;不需要加_block,修改數組對象本身時需要 weak原理 Weak 哈希表 &#xff08;散列表&a…