1. 程式人生 > >SLAM筆記(四)運動恢復結構的幾何數學(本徵矩陣、單應矩陣、基礎矩陣)

SLAM筆記(四)運動恢復結構的幾何數學(本徵矩陣、單應矩陣、基礎矩陣)

1. 間接法進行運動恢復的前提假設

對於結構與運動或視覺三維重建中,通常假設已經通過特徵匹配等方法獲取了匹配好的點對。
先求出匹配點對再獲取結構和運動資訊的方法稱作間接法。
間接法最重要的三個假設是:
1.擁有一系列兩幀之間的匹配點對。但同時假設匹配關係不一定精確:

  • 匹配點不一定精確,即對於匹配點對 (An,An+1)(A_n,A_{n+1})An+1A_{n+1}可能並非AnA_n的真實匹配 點,而是在它周圍;
  • 匹配關係不一定正確。

2.場景是靜態的,即環境中不存在運動的物體
3.知道相機內參數且內參數恆定不變

此處的匹配點,可以是2D-2D

(單目相機初始化時),2D-3D配對點(單目相機執行過程中,已經算出了3D的地圖點,又來了2D的圖形),或是3D-3D的匹配點(使用雙目相機、RGBD相機或其他感測器,可以直接過間接獲取匹配好的三維點對)。本文討論的主要是是基於2D-2D的配對點。

2.極線約束,本徵矩陣

這裡寫圖片描述

2.1 極線約束:

物理世界上的一個三維點P投影到兩個成像面(實際上像面也常常處理成z=1的地方)上,點P與兩個像面的光心形成一個對極平面,l1,l2l_1,l_2分別為對極平面與像平面相交的極線。
極線約束是指對第一個成像面上的點p1,它在第二個平面上的對應點p2總存在於對應的極線l2l_2上。
x

x表示像平面座標的話,KK為內參數矩陣,P為相機座標系三維點;如果已知內參數KK,則可以去掉KK的影響,即令x=K1px = K^{-1}p,得到
λ1x1=Pλ2x2=RP+T\lambda_1x_1 = P,\lambda_2x_2 = RP+T
即:
λ2x2=λ1Rx1+T\lambda_2 x_2 = \lambda_1Rx_1+T(2-1)
此處的x1,x2x_1,x_2可以看做是z=1z=1平面上的點。

2.1.1 極線約束(Epipolar constraint,essential constraint,bilinear constraint):

對於兩幀之間的歸一化座標x1,x2x_1,x_2
x2TT^Rx1=021x_2^T\hat TRx_1 = 0,(2-1)
其推導過程如下:
1。由於λx=X\lambda x = X(相機座標系下世界座標),則可得:
這裡寫圖片描述
R,T分別為旋轉和平移矩陣。
2.左右分別左乘T^\hat T,即得到
這裡寫圖片描述
3.左乘x2x_2,除掉λ\lambda影響:(將此縮放因子放入E中,此縮放因子在4部分會介紹),將上式左右兩邊投影到x2x_2上,即左乘上x2Tx_2^T,左側即為0(因為T×x2x2x20T\times x_2垂直於x_2,因此左乘x_2即為0),得極線約束:
x2TT^Rx1=0x_2^T\hat T Rx_1 = 0
注:
上述2,3過程中,T^x2\hat T,x_2都是不可逆的,因此這兩個投影都是不可逆投影(與下文的可逆投影–單應性不同);某種意義上這兩個過程將強約束轉化成弱約束了,但獲得的好處是將二維點直接聯絡起來,不用考慮三維點。

2.1.2 極線約束的幾何意義

這裡寫圖片描述
x1,x2x_1,x_2分別為從光心發出的向量。由於T為光心之間連線的向量,三個向量共面,所以該triple product為0。
對於式$ x_2^TEx_1=0,如果令l=Ex_1$
(Ex1Ex_1結果為{a,b,c},對應於右側像平面座標上的直線ax+bx+c=0),則存在:x2Tl=0x_2^Tl=0,即x2x_2存在於右側極線l上

2.1.3 本徵矩陣

令本徵矩陣(Essential Matrix):E=T^RE = \hat TR,則:
x2TEx1=0x_2^TEx_1 = 0(2-2)
E組成的空間稱為本徵空間:
這裡寫圖片描述

本徵矩陣定義:
一個非零矩陣當且僅當(充要條件)svd 分解中Σ\Sigma
diag{a,a,0},a>0diag \{a,a,0 \},a>0
時,這個矩陣是本徵矩陣。

為什麼特徵空間需要這樣定義?
1.為什麼秩為2?由於rank(RR) = 3;rank(T×T_{\times})=2,所以E為2。
2.為什麼特徵值相等?Since in the reconstruction, E is only defined up to a scalar

此時可由E求得R和T:
這裡寫圖片描述
因此視覺SFM(structure of motion)問題中恢復分兩步走:

  • Recover the Essential Matrix frome the epipolar constraints
  • Extract the R,T if we know the Essential Matrix:E=Uσ\sigmaV
    從一系列極線約束中恢復的矩陣E一般是不滿足本徵矩陣的條件的;怎麼辦,再將E投影到本徵空間即可,具體做法是稱為八點法。

###3.運動資訊重建(旋轉和平移資訊)

####3.1 八點法(Eight-Point Algorithm)
#####3.1.1從點對中求解出矩陣E
先將矩陣E寫作棧的形式:
這裡寫圖片描述
同時,假設點的齊次向量x1,x2x_1,x_2表示成如下形式:
這裡寫圖片描述
這裡寫圖片描述
則極線約束可換成兩個向量乘積的形式:
x2TEx1=aTES23x_2^TEx_1 = a^TE^S,(2-3)
對於n個點對:上式為:
χES=0,withχ=(a1,a2,a3,...,an)T(24)\chi E^S = 0,with \chi = (a^1,a^2,a^3,...,a^n)^T,(2-4)
因此求解E變成求解方程(2-3),即χ\chi的零空間E。為了得到唯一解(除了平凡解E=0),χ\chi的秩應該是8。至少需要8個點對,即χ\chi的列數為8,rank(χ\chi)才可能為8。當然,假如點對中某些點相互之間是線性相關,比如3個或以上的點在同一直線上,或者4個或以上點在同一平面上,則秩並非點對個數,此時需要8個以上的點才可能滿足要求。
由於無法知道E的正負(方向),因此結合每個E有兩個可能的(R,T)組合,最終可能有四個可能的(R,T)
#####3.1.2將矩陣E投影到本徵空間中
由於用線性方法求解的EE往往不滿足上部分2所要求的兩個非零特徵值相等的要求,因此需要將E做一些變換,也即將E投影到特徵空間上,具體做法是:
對於
E=Udiag{λ1,λ2,λ3}VTE = Udiag\{\lambda_1,\lambda_2,\lambda_3\}V^T
投影到特徵空間後為:
Ep=Udiag{σ,σ,0}VT,withσ=λ1+λ2)/2E_p = Udiag\{ \sigma,\sigma,0\}V^T,with\ \ \sigma = (\lambda_1+\lambda_2)/2

在三維重建中一般將EpE_p投影到歸一化的特徵空間上:即Ep=Udiag{σ,σ,0}VTE_p = Udiag\{ \sigma,\sigma,0\}V^T除以σ\sigma,得到歸一化的結果Ep=Udiag{1,1,0}VTE_p = Udiag\{ 1,1,0\}V^T

相關推薦

SLAM筆記運動恢復結構幾何數學(矩陣矩陣基礎矩陣)

1. 間接法進行運動恢復的前提假設 對於結構與運動或視覺三維重建中,通常假設已經通過特徵匹配等方法獲取了匹配好的點對。 先求出匹配點對再獲取結構和運動資訊的方法稱作間接法。 間接法最重要的三個假設是: 1.擁有一系列兩幀之間的匹配點對。但同時假設匹配關係不一定精

Redis學習筆記——數據結構之List

ltr dex pan 返回 red 操作 數據結構 alt 區間 一、介紹   Redis列表(List)是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(left)或者尾部(right),一個列表最多可以包含232-1個元素(4294967295,每

javascript資料結構與演算法筆記:迴圈佇列

javascript資料結構與演算法筆記(四):迴圈佇列 一:簡介 二:ES6版Queue類 一:簡介 迴圈佇列是指佇列頭元素的移除會追加到佇列的尾部。我們此次拿一個例子來實現迴圈佇列,例子名就是模擬民間遊戲擊鼓傳花即

資料結構學習筆記 圖之鄰接表實現深度優先遍歷

一下是使用鄰接表儲存表示,實現圖的深度優先遍歷的示例。 用於遍歷的有向圖如下: #include<iostream> #define MaxVertexNum 6 using namespace std; //抽象資料型別 typedef c

C++筆記結構體和共用體

#include<iostream> #include<string> using namespace std; //定義結構,可以同時儲存多種不同型別的資料。 struct person { string name;

【Redis筆記】 Redis資料結構

經過前面的介紹,我們學習了Redis中string字串、hash雜湊這兩種資料結構的常用命令。這篇文章將介紹Redis中的list – 列表的相關操作。 如果你還不知道string和hash是什麼(插播一條“小廣告”),可以先看看我的前兩篇文章:

演算法筆記 演算法的邏輯結構和物理結構

邏輯      邏輯一詞在定義的時候有狹義和廣義之分。      狹義的邏輯可以理解為思維邏輯,再大一點就是研究思維活動規律的學科,即邏輯學。      廣義的概念不僅僅指思維方面,還指事物客觀規律、從形式上又分為形式邏輯和辯證邏輯等等,說的更具體一些

Cocos2d-x學習筆記 布景層的加入移除

dcl from position 顏色 顯示地圖 idt col 分享 學習 布景層類也就是CCLayer類,每一個遊戲場景中都能夠有非常多層,每一層負責各自的任務。顯示地圖、顯示人物等。同一時候層還是一個容器,能夠放入文本、圖片和菜單。構成遊戲中一個個UI。這次

機器學習筆記機器學習可行性分析

資料 表示 image 隨機 訓練樣本 -s mage 例如 lin 從大量數據中抽取出一些樣本,例如,從大量彈珠中隨機抽取出一些樣本,總的樣本中橘色彈珠的比例為,抽取出的樣本中橘色彈珠的比例為,這兩個比例的值相差很大的幾率很小,數學公式表示為: 用抽取到的樣本作為訓練

Python_sklearn機器學習庫學習筆記decision_tree決策樹

min n) 空間 strong output epo from 標簽 ict # 決策樹 import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.

Logstash筆記 ----output插件

output . logstash (一),標準輸出 和之前 inputs/stdin 插件一樣,outputs/stdout 插件也是最基礎和簡單的輸出插件。同樣在這裏簡單介紹一下,作為輸出插件的一個共性了解配置事例:output { stdout { codec =&g

Linux基本命令筆記

命令 筆記 linux vi tar 使用tar歸檔工具和vi文本編輯器gzip命令、bzip2命令用途:制作壓縮文件、解開壓縮文件常用命令選項-9:表示高壓縮比,多在創建壓縮包時用-d:用於解開已經壓縮過的文件gunzip 等於 gzip –d tar命令用途:制作歸檔文

Python學習筆記 列表生成式_生成器

rec triangle 小寫 ont 無限 end clas 普通 執行過程 筆記摘抄來自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431

Unity3D之Mecanim動畫系統學習筆記:Animation State

大致 面板 輸入 jpg any 動畫播放 速度 nsf 顯示 動畫的設置 我們先看看Animation Clip的一些設置: Loop time:動畫是否循環播放。 下面出現了3個大致一樣的選項: Root Transform Rotation:表示為播放動畫

Andrew Ng機器學習課程筆記之神經網絡

sca 優化 介紹 www 之間 output 現在 利用 href Andrew Ng機器學習課程筆記(四)之神經網絡 版權聲明:本文為博主原創文章,轉載請指明轉載地址 http://www.cnblogs.com/fydeblog/p/7365730.html 前言

STL 筆記 叠代器 iterator

mutable ssi trac 方法 iter ++ pos and 全部 stl 中叠代器能夠理解為面向對象版本號的廣義指針,提供了對容器中的對象的訪問方法,能夠遍歷容器全部元素。也能夠訪問隨意元素。stl 叠代器有下面五種: Input iterator

.net core 2.0學習筆記:遷移.net framework 工程到.net core

編譯 its evel hashtable ref 學習筆記 inline null 創建 在遷移.net core的過程中,第一步就是要把.net framework 工程的目標框架改為.net core2.0,但是官網卻沒有提供轉換工具,需要我們自己動手完成了

SpringMVC筆記攔截器

servlet 執行 ued div throws nbsp ole spring 事務 一、攔截器:Spring MVC也可以使用攔截器對請求進行攔截處理,用戶可以自定義攔截器來實現特定的功能,自定義的攔截器必 須實現HandlerInterceptor接口 二、

ES6學習筆記—— async 函數

ons fst cte code span pre getname 普通 聲明 await 是 async wait 的簡寫, 是 generator 函數的語法糖。 async 函數的特點: async 聲明一個方法是異步的,await 則等待這個異步方法執行的完

Spring Boot實戰筆記-- Spring常用配置事件Application Event

ans can string code text extends autowired dem plc 一、事件(Application Event)   Spring的事件為Bean和Bean之間的消息通信提供了支持。當一個Bean處理完一個任務之後,希望另一個Bean知道