1. 程式人生 > 其它 >OpenCV-Python系列之對極幾何理論

OpenCV-Python系列之對極幾何理論

在我們使用針孔相機時,我們會丟失大量重要的資訊,比如說影象的深度,或者說影象上的點和攝像機的距離,因這是一個從 3D 到 2D 的轉換。因此一 個重要的問題就產生了,使用這樣的攝像機我們能否計算除深度資訊呢?答案 就是使用多個相機。我們的眼睛就是這樣工作的,使用兩個攝像機(兩個眼睛), 這被稱為立體視覺。

在進入深度影象之前,我們要先掌握一些多視角幾何的基本概念。在本節中我們要處理對極幾何。下圖為使用兩臺攝像機同時對一個一個場景進行拍攝的示意圖。

如果只是用一臺攝像機我們不可能知道 3D 空間中的 X 點到影象平面的距離,因為 OX 連線上的每個點投影到影象平面上的點都是相同的。但是如果我 們也考慮上右側影象的話,直線 OX 上的點將投影到右側影象上的不同位置。 所以根據這兩幅影象,我們就可以使用三角測量計算出 3D 空間中的點到攝像 機的距離(深度)。這就是整個思路。

直線 OX 上的不同點投射到右側影象上形成的線 l′ 被稱為與 x 點對應的極線。也就是說,我們可以在右側影象中沿著這條極線找到 x 點。它可能在這條 直線上某個位置(這意味著對兩幅影象間匹配特徵的二維搜尋就轉變成了沿著極線的一維搜尋。這不僅節省了大量的計算,還允許我們排除許多導致虛假匹配的點)。這被稱為對極約束。與此相同,所有的點在其他影象中都有與之對應 的極線。平面 XOO' 被稱為對極平面。

O 和 O' 是攝像機的中心。從上面的示意圖可以看出,右側攝像機的中心O' 投影到左側影象平面的 e 點,這個點就被稱為極點。極點就是攝像機中心連 線與影象平面的交點。因此點 e' 是左側攝像機的極點。有些情況下,我們可能 不會在影象中找到極點,它們可能落在了影象之外(這說明這兩個攝像機不能拍攝到彼此)。

所有的極線都要經過極點。所以為了找到極點的位置,我們可以先找到多條極線,這些極線的交點就是極點。 本節我們的重點就是找到極線和極點。為了找到它們,我們還需要兩個元素,本徵矩陣(E)和基礎矩陣(F)。本徵矩陣包含了物理空間中兩個攝像機 相關的旋轉和平移資訊。如下圖所示:

基礎矩陣 F 除了包含 E 的資訊外還包含了兩個攝像機的內參數。由於 F 包含了這些內參數,因此它可以它在畫素座標系將兩臺攝像機關聯起來。(如果 使用是校正之後的影象並通過除以焦距進行了歸一化,F=E)。簡單來說,基 礎矩陣 F 將一副影象中的點對映到另一幅影象中的線(極線)上。這是通過匹 配兩幅影象上的點來實現的。要計算基礎矩陣至少需要 8 個點(使用 8 點算 法)。點越多越好,可以使用 RANSAC 演算法得到更加穩定的結果(該演算法我們在之前已經講過)。

本次教程我們簡述其部分原理,將在下次進行實戰。

天道酬勤 循序漸進 技壓群雄