【多視角立體視覺系列】 幾何變換的層次——投影變換,仿射變換,度量變換和歐幾里德變換
20200226 FesianXu
前言
幾何變換非常常見,在計算機視覺和圖形學上更是如此,而這裏指的幾何一般是由點,線,面等幾何元素組成的1,2維或3維圖形。幾何變換能夠實現不同空間幾何元素的對應,在很多領域中有着非常多的應用,立體視覺便是其中一個。本文嘗試對四種不同類型的幾何變換進行辨析,這些幾何變換是一系列計算機視覺處理和相機成像的基礎,因此有必要進行掌握。如有謬誤,請聯繫指出,轉載請註明出處 。
∇ \nabla ∇ 聯繫方式:
e-mail : [email protected]
QQ : 973926198
github: https://github.com/FesianXu
你不可不知的幾何元素
研究一個幾何問題,一般可以通過兩種方式進行,第一種是進行“純粹”的幾何研究,也就是說這種研究應該是和所謂座標系一點關係都沒有的,在不使用任何代數方法的情況下,用幾何公理推出其他定理,也就是傳統的歐幾里德幾何;第二種,我們其實也是很熟悉的,就是解析幾何,由笛卡爾提出並流行,在這種方法中,我們用代數元素,比如向量去表示幾何的點,線,面,用點乘,叉乘去表示元素的一系列操作,從而可以用代數方法進行幾何關係的推理。由於現在計算機本質上是對數值進行計算,因此通過解析幾何的方法,也就是代數法更容易設計計算機可以解決的算法,因此本文首先要對幾何元素進行代數表示。
正如我們在前言所說的,幾何元素無非就是點線面,我們在[3]中其實已經初步探討過爲什麼要引進齊次座標這個概念,然而,這裏希望重新進行解釋,因此我們將從線的代數表示開始說起。
直線
我們由中學的知識,知道線在二維空間可以表示爲:
a x + b y + c = 0 (1.1)
\begin{aligned}
ax+by+c = 0
\end{aligned}
\tag{1.1}
a x + b y + c = 0 ( 1 . 1 )
這個線完全由l 1 = ( a , b , c ) T l_1 = (a,b,c)^\mathrm{T} l 1 = ( a , b , c ) T 的組合給決定了,因此可以用l 1 l_1 l 1 這個向量表示這個直線,我們又注意到對於該線來說,式子(1.2)同樣成立:
( k a ) x + ( k b ) y + ( k c ) = 0 (1.2)
(ka)x+(kb)y+(kc) = 0
\tag{1.2}
( k a ) x + ( k b ) y + ( k c ) = 0 ( 1 . 2 )
而顯然,l 2 = k ( a , b , c ) T l_2 = k(a,b,c)^\mathrm{T} l 2 = k ( a , b , c ) T 和l 1 l_1 l 1 表示的是同一個直線,於是我們知道,對於這條直線,其表示有無窮多種,此尺度大小也就是k k k 只要不爲0都是等價的。 特別的,如果k = 1 c k = \dfrac{1}{c} k = c 1 那麼我們的原先的c c c 就變爲了1,於是該直線變成了l 1 = ( a , b , 1 ) T l_1 = (a,b,1)^\mathrm{T} l 1 = ( a , b , 1 ) T ,其實只需要兩個變量就可以決定一個2D直線了。
需要注意的是,本文用到的每個幾何元素都是以列向量的形式表示的,也就是說l 1 = ( a , b , c ) T l_1 = (a,b,c)^\mathrm{T} l 1 = ( a , b , c ) T 是一個列向量,而其轉置( a , b , c ) (a,b,c) ( a , b , c ) 纔是行向量。
點
怎麼表示一個在線上的點呢?既然點在線上,那麼自然地,滿足式子(1.1),如果把這個式子寫成向量乘法的形式,我們有:
( x , y , 1 ) ( a , b , c ) T = ( x , y , 1 ) l = 0 (1.3)
(x,y,1)(a,b,c)^{\mathrm{T}} = (x,y,1)l = 0
\tag{1.3}
( x , y , 1 ) ( a , b , c ) T = ( x , y , 1 ) l = 0 ( 1 . 3 )
說明點p = ( x , y , 1 ) T p = (x,y,1)^\mathrm{T} p = ( x , y , 1 ) T 在該線上。爲什麼一個二維的點,會需要在尾巴上多一個1去表示呢?顯然,這個是我們之前提到的齊次座標系[3],但是爲什麼要這個座標系,我們雖然之前也提到過,但是本文後面還會繼續解釋的。
面
面,一般是存在於三維幾何中的概念,其可以表達爲:
a x + b y + c z + d = 0 ( x , y , z , 1 ) ( a , b , c , d ) T = 0 ( x , y , z , 1 ) P = 0 (1.4)
\begin{aligned}
ax+by+cz+d &= 0 \\
(x,y,z,1)(a,b,c,d)^{\mathrm{T}} &= 0 \\
(x,y,z,1)P &= 0
\end{aligned}
\tag{1.4}
a x + b y + c z + d ( x , y , z , 1 ) ( a , b , c , d ) T ( x , y , z , 1 ) P = 0 = 0 = 0 ( 1 . 4 )
也就是說,面可以用P = ( a , b , c , d ) T P = (a,b,c,d)^\mathrm{T} P = ( a , b , c , d ) T 表示,而在面上的點,同樣的是在齊次座標下表示的,爲p = ( x , y , z , 1 ) T p = (x,y,z,1)^\mathrm{T} p = ( x , y , z , 1 ) T 。
我們發現到,無論是點線面,都可以通過一個向量進行表示。
線的相交
考慮在二維情況下,我們要如何表示兩個線的交點呢?假如給定兩個直線l 1 = ( a , b , c ) T l_1 = (a,b,c)^\mathrm{T} l 1 = ( a , b , c ) T , l 2 = ( a ′ , b ′ , c ′ ) T l_2 = (a^{\prime}, b^{\prime}, c^{\prime})^\mathrm{T} l 2 = ( a ′ , b ′ , c ′ ) T ,定義出向量x = l 1 × l 2 x = l_1 \times l_2 x = l 1 × l 2 ,其中的× \times × 表示的是叉乘。由向量叉乘的幾何意義我們知道,其得到的是正交於兩個向量的向量,顯然,這兩個向量中的任意一個向量正交於l l l ,也就是有l 1 ⋅ ( l 1 × l 2 ) = 0 , l 2 ⋅ ( l 1 × l 2 ) = 0 l_1 \cdot (l_1 \times l_2) = 0, l_2 \cdot (l_1 \times l_2) = 0 l 1 ⋅ ( l 1 × l 2 ) = 0 , l 2 ⋅ ( l 1 × l 2 ) = 0 也就是l 1 T x = l 2 T x = 0 l_1^{\mathrm{T}}x=l_2^{\mathrm{T}}x=0 l 1 T x = l 2 T x = 0 ,也就是說向量x x x 同時通過了這兩條線,顯然,他就是交點。
Fig 1.1 向量的叉乘,其結果向量的方向正交於其中的任意一個向量。
於是我們知道,兩個線的交點就是兩個線表示的向量的叉乘:
x = l 1 × l 2 = [ l 1 ] × l 2 (1.5)
x = l_1 \times l_2 = [l_1]_{\times} l_2
\tag{1.5}
x = l 1 × l 2 = [ l 1 ] × l 2 ( 1 . 5 )
其中的l 1 = ( a , b , c ) l_1 = (a,b,c) l 1 = ( a , b , c ) ,而[ l 1 ] × [l_1]_{\times} [ l 1 ] × 是一個矩陣,爲:
[ l 1 ] × = [ 0 − c b c 0 − a − b a 0 ] (1.6)
[l_1]_{\times} =
\left[
\begin{matrix}
0 & -c & b \\
c & 0 & -a \\
-b & a & 0
\end{matrix}
\right]
\tag{1.6}
[ l 1 ] × = ⎣ ⎡ 0 c − b − c 0 a b − a 0 ⎦ ⎤ ( 1 . 6 )
圓錐線和二次曲錐面
圓錐線和二次曲錐面在計算機視覺的幾何變換中特別常見,鑑於其篇幅較長,我獨立成一篇博文,見[4]。當然,你也可以先不管這個幾何元素,直到我們後面提到了IAC, Image of Absolute Conic的時候在回過頭複習它。
說在前面——理想點和無限遠處的線和麪
我們在[3]中曾經討論過理想點(Ideal point)這個概念,簡單來說就是平行線交於無窮遠處,這個定義可能不夠直觀,我們藉助解析幾何,用代數的形式,在齊次座標的幫助下去定義它。考慮到兩個平行線l 1 : a x + b y + c 1 = 0 , l 2 : a x + b y + c 2 = 0 l_1: ax+by+c_1 = 0, l_2:ax+by+c_2=0 l 1 : a x + b y + c 1 = 0 , l 2 : a x + b y + c 2 = 0 ,那麼可以表示爲l 1 = ( a , b , c 1 ) T , l 2 = ( a , b , c 2 ) T l_1 = (a,b,c_1)^{\mathrm{T}}, l_2 = (a,b,c_2)^{\mathrm{T}} l 1 = ( a , b , c 1 ) T , l 2 = ( a , b , c 2 ) T ,那麼由我們上面討論的,我們知道兩個平行線的交點,即便它們是平行線,也可以用叉乘去描述,如l 1 × l 2 = ( c 2 − c 1 ) ( b , − a , 0 ) T l_1 \times l_2 = (c_2-c_1)(b,-a,0)^{\mathrm{T}} l 1 × l 2 = ( c 2 − c 1 ) ( b , − a , 0 ) T ,忽略這個尺度因子( c 2 − c 1 ) (c_2-c_1) ( c 2 − c 1 ) ,我們發現其交點是( b , − a , 0 ) T (b,-a,0)^{\mathrm{T}} ( b , − a , 0 ) T 。如果把這個齊次座標轉變爲非齊次座標,我們有( b / 0 , − a / 0 ) T (b/0, -a/0)^{\mathrm{T}} ( b / 0 , − a / 0 ) T ,這個顯然是無法計算的,這也意味着平行線的交點都在無窮遠處的點上,爲了在歐幾里德空間中表示這種無窮遠處的點,非齊次座標系是無能爲力的,我們只能引入齊次座標系,也就是在歐幾里德空間座標的基礎上,在最後一維再加上一個維度。
Fig 2.1 即便是平行線也會在無限遠處相交,這個相交點稱之爲理想點。
爲了考慮平行線的相交的情況,對於二維平面,我們在無限遠處假設出了無限遠的線(line at infinity) ,表示爲I ∞ \mathbf{I}_{\infty} I ∞ 。對於三維空間來說,我們在無限遠處假設出了無限遠的平面(plane at infinity) ,表示爲Π ∞ \Pi_{\infty} Π ∞ 。我們嘗試用代數的方式表示這兩個元素,我們知道無限遠處的點可以表示爲p ∞ = ( 1 , 1 , 0 ) T \mathbf{p}_{\infty} = (1,1,0)^{\mathrm{T}} p ∞ = ( 1 , 1 , 0 ) T (三維情況下要多加一個維度),而無限遠處的點應該在無限遠處的平面或者線上,那麼有
I ∞ T p ∞ = 0 , 二 維 情 況 Π ∞ T p ∞ = 0 , 三 維 情 況 (2.1)
\mathbf{I}_{\infty}^{\mathrm{T}} \mathbf{p}_{\infty} = 0 , 二維情況 \\
\mathbf{\Pi}_{\infty}^{\mathrm{T}} \mathbf{p}_{\infty} = 0 , 三維情況
\tag{2.1}
I ∞ T p ∞ = 0 , 二 維 情 況 Π ∞ T p ∞ = 0 , 三 維 情 況 ( 2 . 1 )
這樣就不難得到,這兩個元素的一種表達方式爲
I ∞ = ( 0 , 0 , 1 ) T Π ∞ = ( 0 , 0 , 0 , 1 ) T (2.2)
\mathbf{I}_{\infty} = (0,0,1)^{\mathrm{T}} \\
\mathbf{\Pi}_{\infty} = (0,0,0,1)^{\mathrm{T}}
\tag{2.2}
I ∞ = ( 0 , 0 , 1 ) T Π ∞ = ( 0 , 0 , 0 , 1 ) T ( 2 . 2 )
事實上,根據齊次座標的性質,我們容易知道這兩個元素的任意表達方式都是等價的。
走得更進一步——討論幾何變換
在之前的章節中,我們用代數的方式定義了很多幾何元素,這些幾何元素都是在幾何變換中的基本變換單元,在本章節,我們將正式起航,討論在空間中幾何變換。我們首先要考慮的是最爲熟悉的歐幾里德空間,我們日常生活一般可以建模爲歐幾里德空間,可以定義出一個原點,然後兩個或者三個互爲正交的座標軸,然後客體,也就是我們要研究的物體主體就在這個歐式空間中移動,旋轉等,我們會發現,這裏如果把客體看成是一個剛體,也就是自身不發生形變的物體,那麼客體在歐式空間的旋轉,平移等,都是所謂的歐幾里德變換(Euclidean transformations) 。當然這章暫時只是概念上的辨析,就先不拿出變換公式搞暈各位讀者吧。
好的我們繼續,注意到,雖然歐幾里德空間座標系一般都有一個原點,有相應的座標軸,但是這個原點並沒有什麼特別的地方,座標軸的方向也沒有任何特別的地方,都是我們研究人員爲了方便自己設定的,事實上,這個原點和座標軸我們可以任意的指定,任何一個在有限空間 內的,可以用代數表達的原點和座標軸方向我們都可以指定,只要滿足約束條件:
在有限的空間內的,也就是每個原點的分量值都是實數;
座標軸互相正交
歐幾里德空間裏面的點都是 同質(homogeneous 的,意味着每個在歐式空間的點都是等價的,因此你在平移原點座標,旋轉座標軸的同時,其實也是在進行着一系列的歐式變換。顯然了,歐式變換並不能改變客體的實際長度,畢竟是看作剛體而研究的,同時也改變不了客體的線與線之間的角度,當然,平行線更是不會被改變了,原來相對平行的線,經過歐式變換後仍然還是相對平行的,如Fig 3.1所示。這個當然不是理所當然的,幾何變換很多是不保留這些幾何元素的,如果大家學過繪畫或者攝影,就會發現所謂的透視原理就是典型的一種,不過這個暫且作爲後話吧。
Fig 3.1 歐式變換之一的旋轉,我們發現,原來是直角的,變換後還是直角,原先平行的直線,轉換後還是直角。
我們對歐幾里德變換有了初步的認識,那麼歐幾里德變換是不是在研究工作中就足夠使用了呢?很遺憾,顯然不是的,比如計算機圖形學中那麼多需要對圖形進行放大,縮小的操作在歐幾里德變換中顯然是失效的。因此我們還需要定義一種變換,能使得放大,縮小能夠操作起來有理論依據。
這個其實並不困難,我們只需要在保持原點位置,座標軸的指向方向不變的情況下,將每個座標軸都“拉伸”或者“縮小”相同的倍數就行了,注意,是每個座標軸都是相同的倍數。如果結合起歐幾里德變換,那麼我們就會發現我們可以旋轉,平移,放大縮小我們的研究客體了,我們將其稱之爲相似性變換(similarity transformations)或者 度量變換(metric transformations) 。注意到,相似性變換包括了歐幾里德變換,即是 G { 歐 幾 裏 德 變 換 } ⊆ G { 相 似 性 變 換 } G\{歐幾里德變換\} \subseteq G\{相似性變換\} G { 歐 幾 裏 德 變 換 } ⊆ G { 相 似 性 變 換 } 。
然而,有了放大縮小,我們似乎還是還缺少了一些變換工具,去描述客體在某個特定方向的單獨的拉伸或者縮小,而這在某些特殊情況下的成像中是必須的工具(見[5,6]中的仿射相機部分知識點)。於是我們引入了仿射變換(affine transformation) ,在仿射變換中,每個軸不再是像相似性變換中一樣都是放縮同樣的倍數了,而是可能放縮不同的尺度。注意到,仿射變換包括了相似性變換和歐幾里德變換,即是 G { 歐 幾 裏 德 變 換 } ⊆ G { 相 似 性 變 換 } ⊆ G { 仿 射 變 換 } G\{歐幾里德變換\} \subseteq G\{相似性變換\} \subseteq G\{仿射變換\} G { 歐 幾 裏 德 變 換 } ⊆ G { 相 似 性 變 換 } ⊆ G { 仿 射 變 換 } 。
這樣足夠了嗎?我們成像出來的物體,在引入了仿射變換之後,也就是如果我們用仿射相機去拍攝一個正方體,會形成如Fig 3.2所示的效果的平面圖形(當然,忽視虛線部分)。我們會發現,如果光從這個平面圖形,我們完全沒法推斷出這個客體在三維立體空間的深度信息,客體因爲在空間中各個部分距離相機中心的距離或多或少有所不同,正如我們在[7]中的“透視投影的若干性質”中曾經討論過的,這種因爲客體深度不同本應該 導致投影縮放(foreshortening)在內的投影變形,而這種變形 表現出來就是遠小近大 ,在客體某些線條就算本身尺度上是一樣的,在投影的平面上都可能會產生一定的比例關係。 這種變形有時候正是我們想要的,對於我們人類從平面圖形中理解客體在立體工具的深度是不可或缺的存在。因此,如果光用仿射相機,那麼形成出來的二維圖像就完全失去了推斷出客體深度的信息 。(如果你的素描老師看到你畫的圖如Fig 3.2所示,大概會直接掛科吧,RIP)。
Fig 3.2 在仿射相機角度下的立方體,是沒有任何立體感的,因爲其線條長度的比例不能體現因爲客體不同部件距離相機的距離不同而導致的投影變形,這種變形對於我們人類在平面上認識客體的深度信息,卻是非常關鍵的。
我們該怎麼辦?相機的初衷是在平面上對客體,對大自然進行復刻,那麼自然想要保存更多的原始信息,丟失了深度信息可完全不划算,因此我們還需要引入一個變換形式,我們稱之爲投影變換(projective transformations) ,注意到,投影變換包括了仿射變換,相似性變換,歐幾里德變換 ,也就是
G { 歐 幾 裏 德 變 換 } ⊆ G { 相 似 性 變 換 } ⊆ G { 仿 射 變 換 } ⊆ G { 投 影 變 換 }
G\{歐幾里德變換\} \subseteq G\{相似性變換\} \subseteq G\{仿射變換\} \subseteq G\{投影變換\}
G { 歐 幾 裏 德 變 換 } ⊆ G { 相 似 性 變 換 } ⊆ G { 仿 射 變 換 } ⊆ G { 投 影 變 換 }
因此投影變換是一個非常大的種類,其中可以解決我們剛纔提到的,在二維平面上體現三維客體的深度信息的成像方法,稱之爲透視法(perspective) ,學素描和攝影的讀者應該對這個術語很熟悉吧。透視法的原則就是遠處的物體看起來小,近處的物體看起來大,所謂的“遠小近大”,在透視法中,平行線是會在無窮遠處相交的,這個相交點可以稱之爲消失點(vanish point) ,聯想到我們曾經定義的理想點的概念,我們知道消失點便是理想點。透視法呈現的圖像如Fig 3.3所示:
Fig 3.3 通過透視法繪畫得到的場景,可以通過計算線條之間的相對比例從而恢復出相對景深的大小,當然絕對景深光從比例還是不夠的,例如你不可能知道這個椅子的絕對尺寸是多少,但是你可以推算出每個椅子之間的具體尺寸比例。
從Fig 3.3中,我們可以通過計算線條比例,從而對場景客體的相對景深進行一定程度上的重建,當然這個重建不是完美的,我們需要很多後續討論的工具才能更好地進行重建。但是,起碼通過投影變換中的透視法,我們能夠在二維圖像上保存更多的三維客體的信息了。
這裏我要插個嘴,到底什麼叫做投影(projectivity)呢?我們最爲直觀的印象就是太陽光照着不可透光的房子,形成的倒影,如Fig 3.4所示。這個直觀感覺是正確的,確實我們也是這樣定義的:
投影性(projectivity)是一種映射h h h ,其可以從投影幾何空間P 2 \mathbb{P}^{2} P 2 (當然也可以是三維的,見下一章節的介紹)映射回這個投影幾何空間,使得當且僅當h ( x 1 ) , h ( x 2 ) , h ( x 3 ) h(\mathbf{x_1}),h(\mathbf{x_2}),h(\mathbf{x_3}) h ( x 1 ) , h ( x 2 ) , h ( x 3 ) 三點共線時,x 1 , x 2 , x 3 \mathbf{x_1},\mathbf{x_2},\mathbf{x_3} x 1 , x 2 , x 3 也是共線的。
因此投影線也稱之爲單應性(homography)[8]或者共線性(colineation),顯然共線性這個名稱更爲形象生動。投影性其實表示的是在投影前後,直線還是直線,該共線的點還是共線的,就那麼簡單,完事兒。不過多說一句,這種共線性可以用矩陣形式表達,如在二維空間中(用的是齊次座標系):
h ( x ) = H x , H ∈ R 3 × 3 (3.1)
h(\mathbf{x}) = \mathcal{H} \mathbf{x}, \mathcal{H} \in \mathbb{R}^{3 \times 3}
\tag{3.1}
h ( x ) = H x , H ∈ R 3 × 3 ( 3 . 1 )
Fig 3.4 投影,我們的直觀印象就是太陽光在不可透光客體上的形成的影子。
這就是我們暫時的所有變換了:歐幾里德變換,相似性變換,仿射變換和投影變換。當然,在本章節只是從感性的角度去理解這些變換的概念,我們接下來纔是正式地步入深入理解這些變換背後的數學含義的章節,讓我們繼續吧。
投影幾何空間和齊次座標系更配哦~
是的你沒看錯,這一章又會和齊次座標系扯上關係了,不過我們還是從歐幾里德幾何空間說起吧。還記得我們的歐幾里德空間嗎,在這個空間裏面的變換不管你怎麼變換,無限遠處的點永遠都在無限遠處,而有限的點永遠都不可能跑到無限遠處對吧,這個是顯而易見的。這個性質同樣在相似幾何空間,仿射幾何空間成立,有限遠的就是有限遠的,無限遠的就是無限遠的,各自爲政,誰也不干擾誰。因此在這些空間去描述變換,實際上並不需要齊次座標系,只需要非齊次座標系就足夠了,因爲我們根本就不需要去描述理想點。
但是,我們還有個投影幾何空間,而在這個空間裏面,幾何變換是很“任性”的,變換前後平行性是得不到保證的,爲什麼呢?因爲正是沒辦法保證平行性,我們才能提供視覺上的深度信息,這個正是我們想要的。平行性得不到保證,意味着變換前是平行的線,我們知道其交點在理想點處,變化後就可能不再平行了,那麼其交點就變成了在有限遠處的一個點了,反過來也是成立的。這個在非齊次座標系下根本沒辦法解決,畢竟非齊次座標連理想點和理想線,理想面都沒辦法描述,又怎麼能描述其變換過程呢?因此我們正式引入齊次座標系,在投影幾何空間中,我們必須使用齊次座標系描述變換過程,爲了四個種類變換的公式表達的形式上的統一,我們對於這四種幾何空間的變換,一致性地採用齊次座標系。
那麼假設歐幾里德空間用R 2 , R 3 \mathbb{R}^{2},\mathbb{R}^3 R 2 , R 3 表示,爲了體現投影幾何空間的特殊性,我們乾脆給他一個表示吧,就表示爲P 2 , P 3 \mathbb{P}^2, \mathbb{P}^3 P 2 , P 3 ,順便我們也給仿射空間一個表示A 2 , A 3 \mathbb{A}^{2}, \mathbb{A}^3 A 2 , A 3 。(別傷心啦,你其實不是順便的,後面我們還用得上呢,嘿嘿)。
數學形式的四大類型幾何變換
在用數學形式描述四大類型的幾何變換之前,我們要先探討下,到底什麼叫“幾何變換”?幾何變換不應該只是幾個公式咻咻咻地套進去,然後從一堆數字到另一堆數字的過程,幾何變換的過程中,我們要留意的是,到底什麼幾何元素一直沒有改變,而什麼幾何元素可能會改變的。這種變換前後的不變性,對於研究幾何變換來說是很重要的,變換的不變性在計算機視覺中也會提供很重要的點子,是一個不可忽視的要點。不管怎麼說,我們接下來要留意幾何變換的不變性了。注意,接下來的討論都在三維空間的例子中討論,涉及到二維空間時將會特別提醒。
投影變換
因爲投影變換的範圍是最廣的,其數學形式是最爲通用的,於是我們就先從投影變換開始討論吧。正如式子(3.1)所展示的,我們可以通過線性矩陣變換來描述投影變換,如:
T P = [ p 11 p 12 p 13 p 14 p 21 p 22 p 23 p 24 p 31 p 22 p 33 p 34 p 41 p 22 p 43 p 44 ] ∈ R 4 × 4 [ X ′ Y ′ Z ′ 1 ] = T P [ X Y Z 1 ] (5.1)
\begin{aligned}
\mathbf{T}_{P} &=
\left[
\begin{matrix}
p_{11} & p_{12} & p_{13} & p_{14} \\
p_{21} & p_{22} & p_{23} & p_{24} \\
p_{31} & p_{22} & p_{33} & p_{34} \\
p_{41} & p_{22} & p_{43} & p_{44}
\end{matrix}
\right] \in \mathbb{R}^{4 \times 4} \\
\left[
\begin{matrix}
X^{\prime} \\
Y^{\prime} \\
Z^{\prime} \\
1
\end{matrix}
\right] &= \mathbf{T}_P
\left[
\begin{matrix}
X \\
Y \\
Z \\
1
\end{matrix}
\right]
\end{aligned}
\tag{5.1}
T P ⎣ ⎢ ⎢ ⎡ X ′ Y ′ Z ′ 1 ⎦ ⎥ ⎥ ⎤ = ⎣ ⎢ ⎢ ⎡ p 1 1 p 2 1 p 3 1 p 4 1 p 1 2 p 2 2 p 2 2 p 2 2 p 1 3 p 2 3 p 3 3 p 4 3 p 1 4 p 2 4 p 3 4 p 4 4 ⎦ ⎥ ⎥ ⎤ ∈ R 4 × 4 = T P ⎣ ⎢ ⎢ ⎡ X Y Z 1 ⎦ ⎥ ⎥ ⎤ ( 5 . 1 )
注意到T P \mathbf{T}_P T P 其實自由度是15,雖然他有16個元素,具體原因見[4]中的關於自由度的說明。在投影變換中,只有共線性,切線性和交叉比(cross-ratio)是不變的。共線性我們之前說過了,切線性指的是,在變換前某個直線是某個曲線的切線,那麼變換後這個性質同樣保留。投影變換不保留平行性,也不保留無限遠處的理想點的位置,因此變換前後,無限可能變成有限,反之亦然。
至於交叉比,我們這樣理解,假設客體上有四個點共線,分別是M 1 , M 2 , M 3 , M 4 M_1, M_2, M_3, M_4 M 1 , M 2 , M 3 , M 4 ,那麼在選定了參考點之後,其他的共線的點可以被如下式子統一表示:
M i = M + λ i M ′ (5.2)
M_i = M+\lambda_iM^{\prime}
\tag{5.2}
M i = M + λ i M ′ ( 5 . 2 )
那麼交叉比表示爲:
{ M 1 , M 2 : M 3 , M 4 } = λ 1 − λ 3 λ 1 − λ 4 : λ 2 − λ 3 λ 2 − λ 4 (5.3)
\{M_1, M_2:M_3,M_4\} = \dfrac{\lambda_1-\lambda_3}{\lambda_1-\lambda_4}:\dfrac{\lambda_2-\lambda_3}{\lambda_2-\lambda_4}
\tag{5.3}
{ M 1 , M 2 : M 3 , M 4 } = λ 1 − λ 4 λ 1 − λ 3 : λ 2 − λ 4 λ 2 − λ 3 ( 5 . 3 )
這個交叉比的具體比例和參考點的選定無關,並且其在投影變換下保持不變。這個性質爲我們通過平面的幾何體線條比例去計算客體的相對深度信息提供了依據。
如圖Fig 5.1所示,這個是一個特殊的投影變換——透視法後的一個正方體的二維透視圖。我們發現平行線相交於理想點V z , V y , V x V_z, V_y, V_x V z , V y , V x 。
Fig 5.1 透視法下的正方體二維圖形。
具體的一些消失點的計算,可以參考我以前的博客[9],這裏不贅述。
仿射變換
仿射變換的數學形式如(5.4)(5.5)所示,可以發現是對投影變換進行了一些元素上的約束後產生的,一般常見的仿射變換子類型包括旋轉(rotation),尺度放縮(scale),平移(translation),切變(shear),具體的公式和約束條件見以前的博文[3]。注意到仿射變換前後的不變性繼承了投影變換的不變性,也即是共線性,交叉比和切線性。
T A = [ a 11 a 12 a 13 a 14 a 21 a 22 a 23 a 24 a 31 a 22 a 33 a 34 0 0 0 1 ] ∈ R 4 × 4 [ X ′ Y ′ Z ′ 1 ] = T A [ X Y Z 1 ] (5.4)
\begin{aligned}
\mathbf{T}_{A} &=
\left[
\begin{matrix}
a_{11} & a_{12} & a_{13} & a_{14} \\
a_{21} & a_{22} & a_{23} & a_{24} \\
a_{31} & a_{22} & a_{33} & a_{34} \\
0 & 0 & 0 & 1
\end{matrix}
\right] \in \mathbb{R}^{4 \times 4} \\
\left[
\begin{matrix}
X^{\prime} \\
Y^{\prime} \\
Z^{\prime} \\
1
\end{matrix}
\right] &= \mathbf{T}_A
\left[
\begin{matrix}
X \\
Y \\
Z \\
1
\end{matrix}
\right]
\end{aligned}
\tag{5.4}
T A ⎣ ⎢ ⎢ ⎡ X ′ Y ′ Z ′ 1 ⎦ ⎥ ⎥ ⎤ = ⎣ ⎢ ⎢ ⎡ a 1 1 a 2 1 a 3 1 0 a 1 2 a 2 2 a 2 2 0 a 1 3 a 2 3 a 3 3 0 a 1 4 a 2 4 a 3 4 1 ⎦ ⎥ ⎥ ⎤ ∈ R 4 × 4 = T A ⎣ ⎢ ⎢ ⎡ X Y Z 1 ⎦ ⎥ ⎥ ⎤ ( 5 . 4 )
其T A \mathbf{T}_A T A 的約束是:
det ( [ a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 22 a 33 ] ) ≠ 0 (5.5)
\det(
\left[
\begin{matrix}
a_{11} & a_{12} & a_{13}\\
a_{21} & a_{22} & a_{23}\\
a_{31} & a_{22} & a_{33}
\end{matrix}
\right]
) \neq 0
\tag{5.5}
det ( ⎣ ⎡ a 1 1 a 2 1 a 3 1 a 1 2 a 2 2 a 2 2 a 1 3 a 2 3 a 3 3 ⎦ ⎤ ) = 0 ( 5 . 5 )
容易發現的是,仿射變換的自由度是12,並且容易可以驗證仿射變換不會移動無限遠處的理想面Π ∞ \Pi_{\infty} Π ∞ ,可以簡單證明下:
在仿射變換後,理想面變成
Π ∞ ′ = T A − T Π ∞ (5.6)
\Pi_{\infty}^{\prime} = \mathbf{T}_A^{-\mathrm{T}} \Pi_{\infty}
\tag{5.6}
Π ∞ ′ = T A − T Π ∞ ( 5 . 6 )
我們從(2.2)知道了對於理想面的表達爲Π ∞ = ( 0 , 0 , 0 , 1 ) T \Pi_{\infty} = (0,0,0,1)^{\mathrm{T}} Π ∞ = ( 0 , 0 , 0 , 1 ) T 。於是容易驗證Π ∞ ′ = ( 0 , 0 , 0 , 1 ) T \Pi_{\infty}^{\prime} = (0,0,0,1)^{\mathrm{T}} Π ∞ ′ = ( 0 , 0 , 0 , 1 ) T 因此未曾改變理想面。然而,在理想面上的理想點的位置即便沒有從無限遠處變成有限遠處,在仿射變換下也可能在理想面上發生偏移,也就是說仿射變換不保留理想面上點的位置。這一點可以簡單證明下,假設理想面上有一個圓錐線[4] x T C x = 0 \mathbf{x}^{\mathrm{T}} \mathbf{C} \mathbf{x} = 0 x T C x = 0 其中C = I 3 × 3 \mathbf{C} = \mathbf{I}_{3 \times 3} C = I 3 × 3 單位矩陣,假設仿射變換後有點的位置偏移x ′ = T A x \mathbf{x}^{\prime} = \mathbf{T}_A\mathbf{x} x ′ = T A x ,那麼我們可以知道,變換後的C ′ = T A T C T A = T A T T A \mathbf{C}^{\prime} = \mathbf{T}_A^{\mathrm{T}} \mathbf{C} \mathbf{T}_A = \mathbf{T}_A^{\mathrm{T}} \mathbf{T}_A C ′ = T A T C T A = T A T T A
Fig 5.2 在理想面上有一個圓錐線,仿射變換前後圓錐線軌跡可能會改變。
注意到在沒有其他約束的情況下,此圓錐線軌跡已經變了。其實這一點也很容易理解,我們對仿射幾何空間的座標軸進行拉伸收縮,每一個軸進行的幅度是不同的,因此在理想面上的圓錐線自然會發生拉伸形變,比如說,可能會從圓形變成橢圓形。(事實上,圓錐曲線在投影變換下等價,這點也容易證明,暫且忽略)。
至於仿射變換的平行性不變性,這點非常容易證明,就留個讀者證明吧。
Fig 5.3 這裏闡述了描述一個正方體,在投影幾何空間和仿射幾何空間中的表示方式。
相似性變換
正如我們之前所說的,相似性變換是在歐幾里德空間的每個座標軸都拉伸收縮相同的幅度產生的,那麼自然地,理想面上的圓錐曲線形狀是不會改變的,至於這個圓錐曲線變得“多大多小”,這種尺度小大的是不影響不變性的。相似性變換的公式如:
T M = [ σ r 11 σ r 12 σ r 13 t X σ r 21 σ r 22 σ r 23 t Y σ r 31 σ r 22 σ r 33 t Z 0 0 0 1 ] ∈ R 4 × 4 [ X ′ Y ′ Z ′ 1 ] = T M [ X Y Z 1 ] (5.7)
\begin{aligned}\mathbf{T}_{M} &= \left[\begin{matrix}\sigma r_{11} & \sigma r_{12} & \sigma r_{13} & t_X \\\sigma r_{21} & \sigma r_{22} & \sigma r_{23} & t_Y \\\sigma r_{31} & \sigma r_{22} & \sigma r_{33} & t_Z \\0 & 0 & 0 & 1 \end{matrix}\right] \in \mathbb{R}^{4 \times 4} \\\left[\begin{matrix}X^{\prime} \\Y^{\prime} \\Z^{\prime} \\1\end{matrix}\right] &= \mathbf{T}_M\left[\begin{matrix}X \\Y \\Z \\1\end{matrix}\right]\end{aligned}\tag{5.7}
T M ⎣ ⎢ ⎢ ⎡ X ′ Y ′ Z ′ 1 ⎦ ⎥ ⎥ ⎤ = ⎣ ⎢ ⎢ ⎡ σ r 1 1 σ r 2 1 σ r 3 1 0 σ r 1 2 σ r 2 2 σ r 2 2 0 σ r 1 3 σ r 2 3 σ r 3 3 0 t X t Y t Z 1 ⎦ ⎥ ⎥ ⎤ ∈ R 4 × 4 = T M ⎣ ⎢ ⎢ ⎡ X Y Z 1 ⎦ ⎥ ⎥ ⎤ ( 5 . 7 )
其中,注意到T M \mathbf{T}_{M} T M 存在一些約束:
R M = [ r 11 r 12 r 13 r 21 r 22 r 23 r 31 r 32 r 33 ] R M T R M = R M R M T = I 3 × 3 det ( R M ) = 1 (5.8)
\begin{aligned}
\mathbf{R}_{M} &=
\left[
\begin{matrix}
r_{11} & r_{12} & r_{13} \\
r_{21} & r_{22} & r_{23} \\
r_{31} & r_{32} & r_{33}
\end{matrix}
\right] \\
\mathbf{R}_M^{\mathrm{T}} \mathbf{R}_{M} &= \mathbf{R}_{M} \mathbf{R}_M^{\mathrm{T}} = \mathbf{I}_{3 \times 3} \\
\det(\mathbf{R}_M) &= 1
\end{aligned}
\tag{5.8}
R M R M T R M det ( R M ) = ⎣ ⎡ r 1 1 r 2 1 r 3 1 r 1 2 r 2 2 r 3 2 r 1 3 r 2 3 r 3 3 ⎦ ⎤ = R M R M T = I 3 × 3 = 1 ( 5 . 8 )
也就是說T M \mathbf{T}_M T M 的子矩陣R M \mathbf{R}_M R M 是一個正交矩陣,並且其行列式值爲1(可以視爲進行過歸一化)。事實上,這裏的R M \mathbf{R}_M R M 可以視爲是旋轉矩陣,而t M = ( t X , t Y , t Z ) T \mathbf{t}_M = (t_X, t_Y, t_Z)^{\mathrm{T}} t M = ( t X , t Y , t Z ) T 可以視爲是將變換前的原點座標挪到該處,是一個平移偏置向量。而σ \sigma σ 表示的正是對整個客體的放縮尺寸大小。於是我們發現,整個T M \mathbf{T}_M T M 的自由度爲7,其中3個是朝向相關的自由度,3個是平移相關的,而1個是尺度大小相關的。
考慮到相似性變換前後的不變性,除了繼承了仿射變換的不變性之外,還添加了兩個重要的新的不變性:**相對距離不變 **和 角度不變 。相對距離不變指的是變換前後每個線條的比例是一定的,線條之間的距離的比例也是不變的;角度不變就很好理解了,變換前後,線條之間的夾角不變。
對比仿射變換,相似性變換的理想面的圓錐線有個非常重要的性質,其變換前後形狀不變。我們可以嘗試對此進行證明。正如Fig 5.2所示,我們假設理想面Π ∞ \Pi_{\infty} Π ∞ 上的二次曲錐面爲Ω \Omega Ω , 但是二次曲錐面是一個立體圖形,不容易可視化,我們經常用其對偶二次曲錐面爲Ω ∗ \Omega^{*} Ω ∗ 表示,其表現爲一系列的平面。理想面上的二次曲錐面稱之爲絕對二次曲錐面(Absolute Quadric) 。
二次曲錐面是在三維情況下的,在平面上的情況,二次曲錐面就變成了圓錐線ω ∞ \omega_{\infty} ω ∞ ,其對偶形式爲一系列的直線,表示爲ω ∞ ∗ \omega_{\infty}^* ω ∞ ∗ 。我們將理想面上的圓錐線稱之爲絕對圓錐線(Image of Absolute Conic, IAC) 。
Fig 5.4 理想面上的絕對圓錐線和其對偶形式
我們暫且只考慮三維情況下的Ω \Omega Ω ,其最簡單的形式就是一個球:
Ω : X 2 + Y 2 + Z 2 = 0 (5.9)
\Omega : X^2+Y^2+Z^2 = 0
\tag{5.9}
Ω : X 2 + Y 2 + Z 2 = 0 ( 5 . 9 )
其矩陣形式爲:
Ω = [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 ] (5.10)
\Omega =
\left[
\begin{matrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 0 \\
\end{matrix}
\right]
\tag{5.10}
Ω = ⎣ ⎢ ⎢ ⎡ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 ⎦ ⎥ ⎥ ⎤ ( 5 . 1 0 )
二次曲錐面的方程是x T Ω x = 0 \mathbf{x}^{\mathrm{T}} \mathbf{\Omega} \mathbf{x} = 0 x T Ω x = 0 ,經過相似性變換後,x ′ = T M T x \mathbf{x}^{\prime} = \mathbf{T}_M^{\mathrm{T}} \mathbf{x} x ′ = T M T x 。於是變換後,新的二次曲錐面可以表示爲:
( T M T x ) T Ω T M T x = 0 (5.11)
(\mathbf{T}_M^{\mathrm{T}} \mathbf{x})^{\mathrm{T}} \mathbf{\Omega} \mathbf{T}_M^{\mathrm{T}} \mathbf{x} = 0
\tag{5.11}
( T M T x ) T Ω T M T x = 0 ( 5 . 1 1 )
Ω ′ = T M Ω T M T (5.12)
\mathbf{\Omega}^{\prime} = \mathbf{T}_{M} \mathbf{\Omega} \mathbf{T}_M^{\mathrm{T}}
\tag{5.12}
Ω ′ = T M Ω T M T ( 5 . 1 2 )
爲了方便,我們將用分塊矩陣的方式計算這個矩陣:
[ σ R t M 0 3 T 1 ] [ I 3 × 3 0 3 0 3 T 0 ] [ σ R t M 0 3 T 1 ] T (5.13)
\left[
\begin{matrix}
\sigma \mathbf{R} & \mathbf{t}_M \\
0_3^{\mathrm{T}} & 1
\end{matrix}
\right]
\left[
\begin{matrix}
\mathbf{I}_{3 \times 3} & 0_3 \\
0_3^{\mathrm{T}} & 0
\end{matrix}
\right]
\left[
\begin{matrix}
\sigma \mathbf{R} & \mathbf{t}_M \\
0_3^{\mathrm{T}} & 1
\end{matrix}
\right]^{\mathrm{T}}
\tag{5.13}
[ σ R 0 3 T t M 1 ] [ I 3 × 3 0 3 T 0 3 0 ] [ σ R 0 3 T t M 1 ] T ( 5 . 1 3 )
於是有:
Ω ′ = σ 2 R I 3 × 3 R T = σ 2 I 3 × 3 (5.14)
\mathbf{\Omega}^{\prime} = \sigma^2 \mathbf{R} \mathbf{I}_{3 \times 3} \mathbf{R}^{\mathrm{T}} = \sigma^2 \mathbf{I}_{3 \times 3}\tag{5.14}
Ω ′ = σ 2 R I 3 × 3 R T = σ 2 I 3 × 3 ( 5 . 1 4 )
因爲σ \sigma σ 是尺度因子,因此對形狀沒有影響,我們發現變換前後絕對圓錐線的形狀不變。
Fig 5.5 左圖是仿射變換,右圖是相似性變換的結果。
歐幾里德變換
歐幾里德變換在相似性變換的基礎上,只是把尺度因子σ = 1 \sigma = 1 σ = 1 設置爲了1, 其他不變,因此在繼承了相似性變換的所有不變性特性的基礎上,又增加了絕對長度不變性 。我們有:
T E = [ r 11 r 12 r 13 t X r 21 r 22 r 23 t Y r 31 r 22 r 33 t Z 0 0 0 1 ] ∈ R 4 × 4 [ X ′ Y ′ Z ′ 1 ] = T E [ X Y Z 1 ] (5.15)
\begin{aligned}\mathbf{T}_{E} &= \left[\begin{matrix}r_{11} & r_{12} & r_{13} & t_X \\r_{21} & r_{22} & r_{23} & t_Y \\r_{31} & r_{22} & r_{33} & t_Z \\0 & 0 & 0 & 1 \end{matrix}\right] \in \mathbb{R}^{4 \times 4} \\\left[\begin{matrix}X^{\prime} \\Y^{\prime} \\Z^{\prime} \\1\end{matrix}\right] &= \mathbf{T}_E\left[\begin{matrix}X \\Y \\Z \\1\end{matrix}\right]\end{aligned}\tag{5.15}
T E ⎣ ⎢ ⎢ ⎡ X ′ Y ′ Z ′ 1 ⎦ ⎥ ⎥ ⎤ = ⎣ ⎢ ⎢ ⎡ r 1 1 r 2 1 r 3 1 0 r 1 2 r 2 2 r 2 2 0 r 1 3 r 2 3 r 3 3 0 t X t Y t Z 1 ⎦ ⎥ ⎥ ⎤ ∈ R 4 × 4 = T E ⎣ ⎢ ⎢ ⎡ X Y Z 1 ⎦ ⎥ ⎥ ⎤ ( 5 . 1 5 )
因此其自由度就只剩下了3個方向自由度,3個平移自由度。
總結
洋洋灑灑地寫了一大堆,現在總結下這四大變換的自由度和不變性:
投影變換,自由度15,不變性:交叉比,共線性,切線性 。
仿射變換,自由度12,不變性:交叉比,共線性,切線性, 軸方向的相對距離不變,平行不變,理想面不變 。
相似性變換,自由度7,不變性:交叉比,共線性,切線性, 軸方向的相對距離不變,平行不變,理想面不變, 相對距離不變,角度不變,絕對圓錐線不變 。
歐幾里德變換,自由度6,不變性:交叉比,共線性,切線性, 軸方向的相對距離不變,平行不變,理想面不變,相對距離不變,角度不變,絕對圓錐線不變,絕對距離不變 。
PS: 本文引出絕對圓錐線的概念,是爲了以後的立體視覺中的恢復重建任務和相機參數標定等任務進行鋪墊。
Reference
[1]. Hartley R, Zisserman A. Multiple View Geometry in Computer Vision[J]. Kybernetes, 2008, 30(9/10):1865 - 1872.
[2]. https://www.cs.unc.edu/~marc/tutorial/node3.html
[3]. https://blog.csdn.net/LoseInVain/article/details/102756630
[4]. https://blog.csdn.net/LoseInVain/article/details/104515839
[5]. https://blog.csdn.net/LoseInVain/article/details/102869987
[6]. https://blog.csdn.net/LoseInVain/article/details/102883243
[7]. https://blog.csdn.net/LoseInVain/article/details/102698703
[8]. https://blog.csdn.net/LoseInVain/article/details/102739778
[9]. https://blog.csdn.net/LoseInVain/article/details/102756630