SLAM重點摘要3 相機畸變模型與內外參矩陣

2021-09-26 05:07:59 字數 2033 閱讀 4911

針孔模型:相似三角形模型

z/f = x/x』 = y/y』

這裡我們將成像平面固定在相機焦點處,在外界物體距離相機較遠比如十倍焦距以上的,根據理想狀態下相機模型:

1/u + 1/v = 1/f

相距將在f很近的位置,因此將膠片放置在f處具有科學道理。

以透鏡的光心為原點,以光軸所在直線為x軸,以膠片的網格方向為xy軸方向,我們可以建立相機座標系;與此同時,以的左上角為頂點,網格方向為xy方向,可以和相機形成乙個沒有旋轉,只有平移和縮放的變換矩陣,平移取決於兩個原點之間的距離,縮放依賴於相片畫素大小和單位m的筆直,一般情況下,無論是世界座標系還是相機座標系,我們都設單位向量為模長為1m的向量,這樣的話極大方便我們的運算。

推導過程略去

內參矩陣為:

k = [ fx 0 cx; 0 fx cy; 0 0 1 ]

其中 fx = af, fy = bf, a,b分別為兩座標係之間的量度比值,f為焦距,當透鏡確定的時候,f一般無法改變了。cx, cy為兩個原點之間的平移。所以內參矩陣是在相機造好的時候就確定了,無法更改。

pxy = k p/z , p/z = k-1 pxy

由於相片上的點只有兩個自由度x,y,所以其無法通過內參矩陣確定三維空間中的原物點的xyz,只能確定在z = 1的歸一化平面上的乙個點,但該點與光心o連線上的所有點都有可能,所以單目相機無法確定物體的深度。

所以就有了雙目相機,rgb-d相機,用於準確確定物體的三維位置。

畸變:分為徑向畸變(桶形畸變 + 枕形畸變)+ 切向畸變

徑向畸變是由於透鏡的形狀不夠標準,用高次多項式來矯正

x』 = x(1+k1r^2 + k2r^4 + k3r^6)

y』 = y(1+k1r^2 + k2r^4 + k3r^6)

切向畸變是由於成像平面位置擺放不與透鏡焦平面平行,使用兩個引數來進行矯正

x』 = x + 2p1xy + p2(r^2 + 2x^2)

y』 = y + 2p2xy + p1(r^2 + 2y^2)

視覺slam 中一般使用普通的攝像頭,所以這些較為簡單的模型已經足夠。

雙目視覺:

z = fb/d = f(d + plpr)/d

d 為視差,即同乙個點在左右兩個相機成像系統下,所成的像的座標差異。 plpr為兩個相機光心之間的距離,f為焦距,即成像平面與光心間距。所以雙目相機要求左右兩個相機平行,並且其成像平面相同才可以,否則無法進行相似形運算。當然,視差d的計算比較困難,因為我們難以精確地知道左右兩幅圖之間點的對應關係,這就還是回到了我們的老問題:求匹配點上了,匹配點的不準確,會導致深度求解的不准,而且這裡f和plpr是固定的,對於單個點,只有一組d,z,難以變成乙個優化問題,因為任意兩組點之間的視差都是不一樣的。

由於視差最小為乙個畫素,所以當d = 1時,我們得到雙目相機可以觀測的最大深度,此時相機間的距離越大,我們得到的觀測範圍就越大。

rgb-d相機模型:通過二維相機獲取彩色資訊,然後深度相機獲取z,從而依據內外參矩陣,得到xyz的精確取值,從而可以構造出一系列六通道點雲,每個點都帶有xyzrgb六個資訊。

rgb-d相機主要有兩類:

紅外結構光原理,結構光的形變(日光干擾)

脈衝時間差原理,計算距離(投射材質物體)

處理方法: opencv

外參矩陣:

相機座標系與世界座標系之間的轉換矩陣(在第一章節裡面有詳細講解),以及在相機運動的過程中,兩個相機之間會有乙個變換矩陣,通過此,我們就能依據將多張對應的點雲放置到乙個三維座標系下,也能因此實現點雲的拼接。如果單純拼接的話,rgb如何融合是個問題,不太有意義,而點雲就是表示存在的點,直接疊加就好了,可以形成三維場景。(雖然也可以將不同張**融合在一起,先計算每一張**的三維點雲,然後將三維點雲成像變換到乙個相機的畫素座標系去,或者點雲也不需要,先將其投影到歸一化平面,然後將其投影回二維,也能實現簡單的場景融合)

處理方法:point cloud library(pcl)

SLAM重點摘要2 李群與李代數

把求解相機位姿的問題,構建成乙個優化問題,求解最優的r,t,使得誤差最小化。因為旋轉和變換矩陣帶有約束,使得優化變得困難 解空間受到約束 通過李群 李代數之間的轉換關係,從而將其轉換成無約束的優化問題。求最優解,可以連續求導 推導過程較為麻煩,我們直接會使用結論即可 在t0 0附近,假設初始旋轉矩陣...

《Effective C 》重點摘要(一)

這個星期不再發布關於資料結構的部落格,想把半個月來看的書做一些總結,整理整理,第一本就是 effective c 第一次看這本書是一年多前,準備考研複試的時候,隨後陸陸續續,這個月再來看算是第三遍了吧,之前沒有看過 深度探索c 物件模型 所以有的地方看得不是很透徹 現在有的地方也看得不透,但是比以前...

《Effective C 》重點摘要(四)

讓介面容易被正確使用,不易被誤用。乙個介面由返回型別 介面名稱 和引數列表組成,為了讓介面容易被正確的使用,需要小心設計返回型別,最好是簡單 直接 自然。介面名稱選擇很重要,做到簡單 達意 無歧義。引數列表形參型別需要身份小心,如果能防範非法輸入,盡力為之,形參名也盡可能做到同介面名稱一樣的標準。另...