基於匹配點集對單應性矩陣進行估計
2020/4/28 FesianXu
前言
在立體視覺中,對單應性矩陣進行估計是一個很重要的任務,我們在之前的博文[1,2,3]中的討論中都或多或少地涉及到了單應性矩陣,我們知道它是在投影變換中保持共線性的一種性質。在本文中,我們將討論如何通過匹配點的關係,對單應性矩陣進行估計。如有謬誤,請聯繫指出,轉載請聯繫作者並註明出處,謝謝。
注:本文參考[7]的內容。
∇ 聯繫方式:
e-mail: [email protected]
QQ: 973926198
github: https://github.com/FesianXu
估計問題
估計(estimation)是什麼?這個詞我們在統計學中經常聽到,估計指的是基於觀測數據的基礎上,對一個模型的參數進行估計,在立體視覺中,一般有以下幾種估計問題:
- 2D 單應性(2D homography): 給定一系列點xi∈P2,並且給定其對應的匹配點xi′∈P2,我們的估計的目標是根據這些對應點,估計出能夠將f:xi→xi′的投影變換。在實際中,xi和xi′通常是兩張不同的圖片上的對應/匹配點(match points),每個圖片都可以看成是投影空間P2。在本路問題中,其實就是根據2D匹配點進行單應性矩陣H∈R3×3的估計。
- 3D到2D的相機投影(3D to 2D camera projection):給定在三維空間中的點Xi,並且給定這些3D點在平面圖像上的對應的2D點xi。在這裏的估計指的就是估計這裏的3D到2D的投影變換f:Xi→xi,這裏的投影通常是由投影相機模型得到的,參考[4]的討論內容。
- 基礎矩陣的計算(Fundamental matrix computation):給定在一張圖像上的一系列點xi和其在另一張圖像上的對應點集xi′,計算根據這些對應關係計算出來的基礎矩陣,我們在[5]中介紹過本徵矩陣和基礎矩陣,我們知道基礎矩陣F是一個對所有的i都滿足xi′TFxi=0的3×3的矩陣。
- 三焦張量計算(Trifocal tensor computation): 給定三張圖片中的對應關係:xi↔xi′↔xi′′ ,計算其三焦張量(Trifocal tensor), 三焦張量對三張圖像的對應點或者對應線進行了關係聯繫。
這些問題都是考慮到了“對應性”(correspondance),或者說是“匹配性”,然後對某種變換進行參數估計,因此這四個問題或多或少有着關聯。在此,我們僅討論第一種問題,其中提出的解法,能對其他三種問題的解決提供思路。
估計單應性矩陣
重申下問題:
我們考慮兩個圖像之間的匹配點集xi↔xi′,我們需要估計出單應性矩陣H,使得對於所有的 i都有xi′=Hxi。
首先我們需要確定至少需要多少對匹配點集才足以確定一個單應性矩陣,我們知道單應性矩陣有9個元素,但是其可以進行尺度歸一化[6],因此2D的單應性矩陣只有8個自由度(同理,3D的單應性矩陣爲15的自由度)。每一對匹配點集提供了兩個自由度的約束(也就是x和y),因此最少需要四對匹配點集才足以確定一個單應性矩陣。
自然地,給定了4對匹配點集(其中不能是三點共線的,我們後續討論),我們可以確定一個單應性矩陣,這個是最小解。然而在實際中,我們通常能得到兩張圖片的很多對匹配點集,如Fig 1.1所示,而通常在這很多的匹配點集中,存在有誤匹配的情況,這些誤匹配稱之爲噪聲(noise),通常我們會採用類似於RANSAC的魯棒估計減少噪聲的干擾(我們將在以後的博文中討論RANSAC魯棒估計)。除了魯棒估計,我們也可以通過設置一個損失函數(cost function),嘗試最小化損失函數,我們能找到一個最佳的單應性矩陣估計。一般來說,有兩大類的損失函數:
- 基於代數損失的(algebraic error),也就是不考慮圖像的幾何上的因素,只考慮代數形式上的損失。
- 基於幾何損失(geometric error)或統計上的圖像距離的(statistical image distance),這種損失函數通常帶有圖像幾何上的意義。
Fig 1.1 在實際中,通常會有很多對的匹配點集,其中會存在有誤匹配的點對,稱之爲噪聲,可以通過例如RANSAC的魯棒估計以減少噪聲干擾。
通常在對同一個平面上的點進行多視角攝像時,如Fig 1.2,圖像中的像素點可以視爲是投影變換的,可以用單應性矩陣對應,在進行弱透視攝像時[9],同樣也可以這樣認爲。
Fig 1.2 在對現實中平面的物體進行成像時(或者弱透視情況下),可以視爲是投影變換,用單應性矩陣進行對應。
DLT算法
我們首先考慮一個簡單的線性算法。在給定了4對2D到2D的匹配點集時xi↔xi′,我們有xi′=Hxi (我們在齊次座標系下進行處理[8])。因爲我們在齊次座標系下,因此嚴格上說xi′和Hxi在尺度(scale)上並不相同,而是有着同樣的方向。因此爲了更加精確,我們可以把這個線性關係表示爲:
xi′×Hxi=0(1.1)
如果我們H的第j行表示爲hjT,那麼我們有:
Hxi=⎝⎜⎛h1Txih2Txih3Txi⎠⎟⎞(1.2)
將xi′=(xi′,yi′,wi′)T,那麼式子(1.1)可以寫成:
xi′×Hxi=⎝⎜⎛yi′h3Txi−wi′h2Txiwi′h1Txi−xi′h3Txixi′h2Txi−yi′h1Txi⎠⎟⎞=0(1.3)
又因爲有hjTxi=xiThj,j=1,⋯,3,所以(1.3)可以寫成:
⎣⎡0Twi′xiTyi′xiT−wi′xiT0Txi′xiTyi′xiTxi′xiT0T⎦⎤⎝⎛h1h2h3⎠⎞=Aih=0,Ai∈R3×9(1.4)
我們發現,對於未知量h而言,其是線性的,而且我們也可以發現這裏的Ai的秩爲2,只有兩個方程式是線性無關的,將Ai的第j行表示爲Aij,我們有:
Ai3=xi′Ai1+yi′Ai2(1.5)
因此,我們可以將(1.4)去掉最後一行,得到
[0Twi′xiT−wi′xiT0Tyi′xiTxi′xiT]⎝⎛h1h2h3⎠⎞=Aih=0(1.6)
此時的Ai∈R2×9
又因爲這個表示是在齊次座標系下的,我們可以讓wi′=1。每一對匹配點都存在着一個如同(1.6)的等式約束,約束了兩個自由度,因此在4對匹配點的情況下,我們的A∈R8×9,當rank(A)=8的時候,就存在非零解(平凡解)的h,這點我們在線性代數中已經學習過了,求出了h我們自然就知道了H。特別的,我們的H是和尺度有關的,任何尺度的H都滿足(1.1)的條件(除了0之外),因此我們通常對其進行一個限制,比如對範數進行歸一化,如∣∣h∣∣=1。
當給出超過4對匹配點的時候,我們處在超定方程(over-determined)的情況,此時可能沒有一個解可以精確地滿足所有點的匹配關係,因此我們設計一個損失函數,讓損失函數最小以達到最佳的估計效果。因爲我們知道Ah=0是整個匹配點集的最優解,因此我們嘗試最小化這個函數:
arghmin∣∣Ah∣∣(1.7)
然而,我們還有個約束:∣∣h∣∣=1,因此整個問題等價於我們最小化:
arghmin=∣∣h∣∣∣∣Ah∣∣(1.8)
(1.8)存在有解析解,其解是ATA的最小的特徵值所對應的單位特徵向量,等價來說是A的奇異值分解中最小奇異值對應的奇異向量,首先我們對給定的A進行奇異值分解,有A=UDVT,我們知道其中的D是一個對角矩陣,每個對角元都是一個奇異值,我們對這些奇異值進行降序排序,根據此更新特徵向量VT的值排序,那麼更新後的VT最後一列就是最小的奇異值對應的奇異向量,也就是我們要的解 h。這個算法被稱之爲DLT,Direct Linear Transformation算法。
其他的損失函數
代數距離
代數距離(algebraic distance),我們在(1.7)中嘗試去最小化的∣∣Ah∣∣,我們把ϵ=Ah稱之爲殘留向量(residual vector),並且定義代數距離爲:
dalg(xi′,Hxi)2=∣∣ϵi∣∣2=∣∣[0Twi′xiT−wi′xiT0Tyi′xiTxi′xiT]h∣∣2(1.8)
我們發現,每一對的匹配點都對應着一個代數距離,這個代數距離沒有任何幾何上或者統計上的意義,只是一個數值而已。具體點,我們有:
dalg(x1,x2)2=a12+a22,其中a=(a1,a2,a3)=x1×x2(1.9)
考慮到所有的匹配點集,我們對其求和有:
i∑dalg(xi′,Hxi)2=i∑∣∣ϵi∣∣2=∣∣Ah∣∣2=∣∣ϵ∣∣2(1.10)
代數距離沒有幾何含義,並且最小化代數距離通常給出的解並不夠好,但是其有個很好的性質就是其是線性的,因此有唯一的一個解,並且計算起來很容易,可以作爲其他更爲複雜的非線性幾何損失的初始化條件。
幾何距離
在討論幾何距離之前,我們要明晰三種不同的概念:
- x表示在圖像上的實際測量座標結果,比如某個像素點的座標位置。因爲存在某些成像上的誤差,可能實際成像和理論應該的成像位置不一致的情況,當然理論的成像位置我們並不知道,我們能測量出的一般只是x。
- x^表示某個模型對該點的估計值。
- xˉ表示實際實體點的理論真實值,這個通常不能被直接測量出來。
在一張圖像上的誤差,遷移誤差:
如果我們假設在第一張圖像上,其測量到的點不存在誤差,也就是說假設第一張圖上有x=xˉ,那麼我們只需要考慮第二張圖像的誤差即可。一般情況下,這種情況當然不現實,這個我們在上文討論過,因爲成像誤差,實際的成像位置和真正理論上的成像位置有所偏移。但是我們這個假設在某些情況下是可以接受的,比如我們現在對相機進行矯正(calibration,也即是計算相機的內參數和外參數[11]),我們會使用一種稱之爲矯正圖樣(calibration pattern)的標定板,如Fig 1.3所示,在這種標定板上交疊着黑白色的方塊,其交疊點清晰,模式明顯,如Fig 1.4所示。因此可以認爲這些交疊的角點的成像位置和理論成像位置一致,因此我們這個假設就有用武之地了。注意,在這個情況中,我們的一個平面是標定板,一個平面是相機的成像平面,我們在試圖尋找標定板角點到相機成像平面的單應性矩陣。
Fig 1.3 可以作爲矯正圖樣的標定板,其必須保證完全的平面,並且圖樣模式清晰明顯,因此每個角點(黑色圖樣和白色圖樣的交疊點)清晰,可以認爲是成像位置和實際位置沒有誤差。
Fig 1.4 標定板的角點模式非常明顯,容易被程序自動識別,並且精度非常高。
考慮到這種假設合理的情況,我們設計出所謂的最小化 遷移誤差(transfer error),公式表示如(1.11)所示
Etransfer=i∑d(xi′,Hxˉi)2(1.11)
注意到其中的d(⋅)是歐幾里德距離。這個公式其實就是在描述如果在知道了單應性矩陣H的情況下,將第一張圖像的像點通過單應性矩陣投影到第二張圖像上後得到投影點Hxˉi,計算實際的成像點xi′與之的歐式距離。
注意,這裏的歐式距離d(x,y)其中是對x,y中的非齊次座標進行計算的,也就是說如果x={x1,x2,x3},y={y1,y2,y3},其中x3,y3是齊次分量,不參與歐式距離計算,因此實際的歐式距離爲:
d(x,y)2=(x1−x2)2+(y1−y2)2(1.12)
總而言之,最後有:
H^=argHminEtransfer(1.13)
對稱遷移誤差:
然而更爲通用且實際的方法,是考慮所謂的對稱遷移,也就是將第一張圖像上的像點投射到第二張圖像,計算誤差E1;相反地,將第二張圖像上的像點投影到第一張圖像,計算誤差E2,相加兩個誤差得到最後的對稱遷移誤差E=E1+E2。公式表達如(1.14)
E=i∑d(xi,H−1xi′)2+d(xi′,Hxi)2(1.14)
最後的優化結果如:
H^=argHminE(1.15)
整個過程的圖示如Fig 1.5所示。
Fig 1.5 對稱遷移誤差的過程,進行兩張圖像之間像點的互相投影,並且計算誤差。
重投影誤差:
我們從式子(1.14)和Fig 1.5中發現,其實我們的投影點和實際點並不是完全匹配的,因爲我們的觀察點都是帶噪聲的,並不是實際理論上的完美的點,因此即便通過單應性矩陣它們也不會完全的重合。我們可以考慮一種這種情況,假設我們通過匹配點集xi↔xi′,我們能推算出其在現實中的實際實體點Xi,然後通過投影,可以得到完美的一個匹配對x^i↔x^i′,其中有x^i′=Hx^i。當然這裏的實體點並不需要顯式地進行估計,我們只需要如式子(1.16)所示地設計誤差函數即可:
E=i∑d(xi,x^i)2+d(xi′,x^i′)2s.t. x^i′=H^x^i,∀i(1.16)
最小化誤差,有:
H^=argHminE(1.17)
因爲這個過程需要重新投影,得到一個新的估計的輔助匹配對,因此稱之爲重投影誤差(reprojection error)。整個過程如圖Fig 1.6所示。對比Fig 1.5和Fig 1.6,我們能發現,我們在重投影過程中,是充分考慮了每張圖的像素點的位置誤差的。
Fig 1.6 重投影誤差
Reference
[1]. https://blog.csdn.net/LoseInVain/article/details/104533575
[2]. https://blog.csdn.net/LoseInVain/article/details/102739778
[3]. https://blog.csdn.net/LoseInVain/article/details/103369203
[4]. https://blog.csdn.net/LoseInVain/article/details/102632940
[5]. https://blog.csdn.net/LoseInVain/article/details/102665911
[6]. https://blog.csdn.net/LoseInVain/article/details/104533575
[7]. Hartley R, Zisserman A. Multiple view geometry in computer vision[M]. Cambridge university press, 2003.
[8]. https://blog.csdn.net/LoseInVain/article/details/102756630
[9]. https://blog.csdn.net/LoseInVain/article/details/102883243
[10]. https://blog.csdn.net/LoseInVain/article/details/102739778
[11]. https://blog.csdn.net/LoseInVain/article/details/102632940