Multiple View Geometry in computer vision 學習記錄03
(我發現在知乎裡還是有人看我寫的東西的,所以我還是好好打一下公式吧)
2.4 A hierarchy of transformations
標題中的關鍵字是“層級”,因此我們會先見識到多種變換,然後再去了解它們之間的層級關係。書中介紹了多種變換,每種變換都以“群(group)”的方式來定義。
:the real general linear group on n dimensions(實數的、線性的、n*n、可逆)
:projective linear group(書中將這是GL(n)的一個“商群”,個人理解就是除以一個實數的縮放因子)
:projective transformations of the plane n =3(我們前面一直討論的H)
Affine group:最後一行是 (0,0,1) 的 PL(3)
Euclidean group:左上角2*2矩陣是正交矩陣的 Affine group
Oriented Euclidean group:左上角2*2矩陣行列式為1的Euclidean group
以上我們由一般到特殊感受了一下變換的層級關係,書中講解的時候則是由特殊到一般進行。書中要我們注意的是:有一些變換並不能構成群!(小白可以百度一下群的定義)
這裡的反例就是透視變換。群要求其上的運算滿足封閉性,而多次透視變換後結果並不能由一次透視變換得到,而是變成了投影變換。這點需要注意。
不變數(Invariants)
這裡書中提了一下一些變換可以從一些“不變數”的角度描述。例如“歐幾里得變換”就是旋轉和平移,而“相似”則是旋轉平移和各向同性縮放。相較之下,歐幾里得變換不會使影象縮放,所以兩點之間的距離是不變的,距離則是歐幾里得變換中的不變數。另外,角度則是這兩種變換中共同的不變數。
2。4。1 Class I: Isometries
Isometry是
平面上的變換,這種變換保持了歐氏距離。這裡這個單詞就意為“等距”,但我覺的這樣直譯不是很好我就還是用這個單詞來表示這樣的變換。Isometry的形式如下:
取值為+1或者-1。①
時,Isometry是“保持方向的(orientation-preserving)”,並且是
歐式變換(平移+旋轉)
。②
時,isometry不再是保持方向的,而是翻轉方向的(反射變換diag(-1,1,1)就是一個例子)。
Isometry十分十分重要的原因是它可以描述剛體的運動,這對SLAM而言是十分關鍵的基礎知識所以我會特別關注。上面的代數表達可以改的簡潔一些:
矩陣裡只有“1”是一個標量。
是2*2的旋轉矩陣,並且是正交的(
) 。
是平移向量(2維),
就是二維的零向量。值得注意的特殊情況是:t是零向量時只有純旋轉,R是單位矩陣時只有純平移。
關於自由度,我覺得大家能看出來這裡其主要作用的只有三個量,因此自由度是3。關於這個自由度可以很直觀地理解:我們在平面上擺弄一個東西(除了翻轉之外)只能決定移動的下一個位置還有旋轉多少度。
還需要提一句,歐式變換也會被成為“位移(displacement)”。
不變數
在Isometry變換之下不變數有三個:兩點間
長度
、兩直線間
角度
、
面積
。這個很直觀也就不多加解釋了。
群與方向
之前說過
取值為1時(R的行列式為1),isometry是保持方向的。保持方向的isometry可以構成群,而翻轉方向的(
為-1)isometry不能構成群。這點區別在之後的相似和仿射變換中也存在。
2。4。2 Class II: Similarity transformations (similarity)
注:這就是ORB-SLAM中的Sim3變換
相似變化我們可以很快理解,因為它只是isometry的小小改進:
相似變換是isometry與isotropic scaling的組合
。簡單來講就是可以放大縮小的isometry變換。這一點點小改變是透過新增一個標量“s”完成的,其矩陣表示如下:
寫成更簡潔的形式:
相似變換的自由度大家應該都能想到是4,因為相較於isometry多加了一個縮放因子。計算這個矩陣和計算isometry一樣只需要兩個點(算上對應的點一共其實是四個點),原因是similarity和isometry自由度都小於等於4,而一個點就能提供兩個等式,所以兩個點就足夠計算出四個引數了。
不變數
同樣我們類比著isometry來學。因為添加了縮放,所以相似變換的不變數會少一點:長度和麵積都不再是不變量了,只有角度不變。這點我覺得大家學過相似三角形肯定都懂(笑
我們可以無恥的強行再找出一點不變數:比如長度和麵積雖然會變,但是它們的比例可以在相似中得到保持。
Metric Structure
由於英語和專業知識水平所限我不是很清楚這個小標題是什麼意思,直譯的話就叫“度量結構”,但我覺得還是記一下英文名好了。書中說“Metric”這個術語會在第十章的重建部分經常提到,所以我們對於這個陌生的概念不用太焦慮。另外,書中說metric structure這個描述意味著這種結構被定義為相似的。我也沒有很明白這短短的一個小節,所以對這部分知識我只能說:有緣再見吧~
2。4。3 Class III: Affine transformations (affinity)
仿射變換在相似的基礎上更近一步:仿射變換是非奇異線性變換+平移。其矩陣表示如下:
寫成塊形式:
其中A是一個2*2的非奇異矩陣。大家應該能看出來仿射變換的自由度是6,因為放眼望去矩陣裡就有六個未知數。為了避免一點誤區得說明一下:這裡不像原來說點和線的齊次座標那樣只是比例起作用實際自由度要減一,這裡不能約!矩陣隨便縮放會導致平移向量改變,那這個變化肯定就變了!所以請搞清楚仿射變換的dof是6。明白這點之後我們也自然知道計算這個矩陣只需要三個點(算上變換後的對應點一共六個)。
以上這種表示並不能幫助我們很好地理解仿射變換。為了理解其核心“A”,我們其實可以做一些分解進而明白小矩陣A其實是“旋轉+各向異性縮放”:
其中R都表示相應角度的旋轉矩陣。D是一個簡單的對角矩陣:
至於這個變化怎麼來的可以參考這本書的附錄,一般情況我覺得這個不需要深究先記下就好了。根據上面這種分解,我們可以做出如下對A的解讀(矩陣一般從右往左看):
①旋轉 φ ;②分別在x,y方向縮放λ1 λ2;③旋轉回來(-φ);④再旋轉θ。
前面說了A就是“旋轉+各向異性縮放”,這裡的“各向異性縮放”就是靠前三步來完成的!還是怕和我一樣的小白犯一些低階錯誤,再說一下我個人對各向異性縮放的理解:
它縮放之前會旋轉(
雖然之後會轉回來但是在轉回來之前進行了xy方向不同比例的縮放,所以會有很大影響
)
它縮放的時候xy方向縮放程度可以不同
這兩個騷操作結合起來就產生了各向異性縮放,導致影象變形,而不像相似變換那樣形狀不變只是整體的放大或者縮小。
不變數
已經解釋過由於各向異性縮放,仿射變換不會像相似那樣能保持形狀不變。個人認為標誌性的直觀解釋就是:一條很長的水平直線可以變成很短的斜著的直線。所以不變數肯定更少了。。。。但是仍然可以強行找出來一些還是不變的東西:
平行線(大家都是xy方向同步縮放的,轉的角度也一樣,平行的線怎麼搞也不會相交)
平行線的長度比例(由於“各向異性”,不同方向的線的長度比保持不了,但平行線的長度比還是不可能變的)
面積比(不同方向的正方形在各向異性的變化下形狀可能不一樣了,但是由於大家xy方向拉伸的比例一樣所以總的面積上的比例是不會變的,實際上大家的面積都縮放了
(就是A的行列式大小))
還有需要說明的是仿射變換和isometry一樣有保持方向和翻轉方向之分,取決於A行列式的正負。
2。4。4 Class IV: Projective transformations
投影變換已經在2。3中定義過了,它是齊次座標下的非奇異線性變換。這裡我們再把它寫成類似的塊形式:
這裡的向量
。其他一些內容我覺得看2。3就夠了。然後要注意一點就是在投影空間中投影是否是方向保持的是不可能區分的,這點會在2。6講。
不變數
仿射中一條線上(或者說平行線間)的長度比是不變的,在投影變換中這一點也不成立了。書中提到的不變數是一條線上長度的交叉比(cross ratio,ratio of ratios),這點會在之後2。5講。
2。4。5 Summary and comparison
前面我們學了isometry、相似、仿射、投影由易到難四個層次的變換。遞進表現為:旋轉+平移——縮放——各向異性縮放——與位置相關的縮放。
這裡我再根據書中講的強調一下後兩個。仿射中的各向異性縮放表現為:縮放與位置無關,之和方向有關。投影中的縮放表現為同時和位置、方向有關。對於平面上兩個正方形,只要它們的姿態(方向)是一致的,那麼仿射變換結果一定相同;但是隻要如果不在同一個位置或者不是同一個方向,那麼兩個正方形的投影變換一定不同。這兩者區別的關鍵在於向量v是否為零,書中透過理想點
幫助我們看清這一點區別:
首先是理想點的仿射變換:
其次是理想點的投影變換:
可以看到,投影變換能把理想點對映到一個有限點,而這時仿射變換做不到的。這一特點使得投影變換可以對“滅點”建模。(和我之前提的素描透視中的滅點是同一個東西,之後遇到再討論)
2。4。6 Decomposition of a projective transformation
很有趣的一點是,投影變換可以被拆解成一些列前面提到的變換,具體如下:
大家計算一下就能得到
,K是上三角矩陣並且行列式歸一為1。注意當v不為0是這樣分解才是有效的,且這種分解在s大於0時唯一。
其實這個分解的順序還能反過來如下:
需要注意的是大家可以把這個結果寫出了,和前一種分解的結果是不一樣的,所以這裡符號一樣但實際值不同。
講這個分解方法的原因是,這樣分解可以在只需要確定部分變換時使用。這部分會在2。7討論。
2。4。7 The number of invariants
這一節簡單總結一下各變換的不變數,這一節有一點“玄”,大家主要看書,我在這裡說一下自己的理解。說到不變數我們自然會想每種變換有多少個不變數。相信大家也有從前面學到這裡也有體會,一個不變數的函式肯定也是不變數。比如歐式變換是最特殊的變換,只有旋轉和平移所以長度是不變數,那麼它肯定能像“更高等級的變換”一樣保持住長度比或者交叉比什麼的,因為後者這些都是長度的函式而已。所以我們討論不變數數量的話應該很嚴格地討論那些最本質、在函式上獨立的不變數。
書中透過一句話就簡潔地引出了一條很本質的結論:
函式獨立的不變數的數量大於等於結構的自由度減去變換的自由度。
我只能說因為水平和精力所限沒有搞懂這句話。不過這句話的思考角度大概就是一個結構提供的已知變數數去除變換需要確定的變數數之後剩下的差不多就是不變數的數。至於為什麼是大於等於的且這個結構怎麼去定義我確實無法回答,書中也沒有論證,不過我斗膽覺得從工程角度來說這個問題應該問題不大所以我們不用太過關心。書中的舉了線段的例子也就套了一下這個結論我就不贅述了,感覺意義不大。
最後就放上各種變換不變的幾何性質總結,注意從上到下是由一般到特殊,隨著變換的dof減小,其不變數是越來越多的。