本文轉自徐飛翔的“幾何變換——關于透視變換和仿射變換以及齊次坐標系的討論 ”
版權聲明:本文為博主原創(chuàng)文章,遵循CC 4.0 BY-SA版權協(xié)議,轉載請附上原文出處鏈接和本聲明
齊次坐標系的引入投影變換的背景我們對于投影變換(projective transformation) 其實是一點的不陌生的,假設我們在看一張照片時,我們經常會發(fā)現(xiàn)本來應該是平行的線條,卻變得不平行了,如Fig 1.1所示。更一般地說,在投影變換中,大部分的幾何屬性,比如長度,角度,比例,平行性等,都可能不能保留了,但是有一點我們是可以確保的,那就是 直線在變換前后始終還是直線。
Fig 1.1 本來應該是平行的馬路,在相機成像的時候,則變成了“不平行”,匯聚于無限遠處的消失點(vanishing point)。
Fig 1.2 現(xiàn)代的繪畫作品很多采用了透視的方法增強了立體感,這是在仿照人類視覺的特點。我們考慮到在歐式幾何(Euclidean Geometry)中,其實有一些概念是有些“麻煩之處”的,比如說到平行這個概念,我們知道在歐幾里德空間中,兩個直線都會交于一點,當然除了平行線之外,這讓平行線處于在一個很特殊的地位。如果我們熟悉編程我們就不難發(fā)現(xiàn),當有個編程對象處于特殊地位時,我們就不得不單獨考慮他,使得整個程序變得不能通用(general)起來,這個是個糟糕的事情。
當然,我們也可以?;^,說在歐幾里德空間里,平行線相交于無限遠的點處,這當然沒問題。但是,“無限遠”這種概念其實是為了方便定義出來的,實際上并不存在。不管怎么樣,我們把平行線相交于的無限遠的點,稱之為 理想點(Ideal point)。
通過添加了這個理想點,我們把歐幾里德空間(Euclidean Space)轉變成了投影空間(Projective Space),很簡單吧,但是我們后面將會發(fā)現(xiàn),我們的很多投影變換都只能在投影空間中進行,在沒有定義出理想點的歐式空間,我們根本對這些變換無能為力??偠灾?, 在投影空間中,所有的線最終都能夠相交了。因為所有的理想點都有著相同的距離,所以在二維的投影空間中,所有的平行線其實都是交于由所有理想點組成的“理想直線”上的。同樣的,在三維投影空間中,所有的平行面都交于一個“理想平面”。我們如果用符號表示二維的歐式空間,那么用
表示二維的投影空間。
坐標表達我們都知道一個在二維平面上的點可以用一組有序的二元對表示,如( x , y ) 。我們在此引入 齊次坐標(homogeneous coordinate) 的表達,我們將同樣的二維點( x , y ) 表示成(x,y,1),并且,其等價于。 我們發(fā)現(xiàn),基本上所有的齊次坐標表達( x , y , c ) (x,y,c)(x,y,c),都可以找到相對應的非齊次坐標表達方式
,除了一個最為特殊的點( x , y , 0 ) 。這個點如果硬要用非齊次的方式去表示,那么只能表示為
,我們發(fā)現(xiàn),這個方式其實就是在齊次坐標系里面定義出了理想點這個概念,并且的,這個處于無限遠處的理想點和普通點有著一致的表達方式,意味著可以用和普通點一樣的處理方式去處理理想點這個概念了。
這個正是投影空間的精髓之處,在投影空間中,我們用齊次坐標去表示點,把空間中的點所有都看成是等價的,這樣就不存在普通點與理想點的區(qū)別了,而且在這個空間中,所有的直線都會相交,因此也不存在平行性這個概念了。筆者在這里舉個在投影空間處理點的變換的例子,假如現(xiàn)在在投影空間中定義了一個變換,我們首先用齊次坐標表示這個空間中的元素先,其是一個( n + 1 ) 維的向量,然后,我們定義這個變換,這個變換應該是一個矩陣,我們稱之為單應性矩陣(homography),
,因此這個變換結果最后為:
通過這種方法,我們會發(fā)現(xiàn)我們同時可以考慮在歐式空間中的平行線和非平行線。這對處理投影變換非常的方便,因為投影變換是不保留平行性這個幾何屬性的,因此在變換的過程中,可能需要將平行線變換成非平行的。
仿射變換和透視變換投影變換可以細分為 仿射變換(affine transform) 和 透視變換(perspective transform),以及 廣義的投影變換(general projective transform)。我們分別介紹下。PS:注意,我們這里的點是二維點,也就是,因此,單應性矩陣是
。如果延展到三維空間的點變換,那么點就是三維點,為
,單應性矩陣
。
仿射變換仿射變換(affine transform)在變換前后,保留了元素的平行性,也就是說,在變換前是平行線的,在變換后同樣也是平行線。仿射變換可以表示為一組線性變換,如(2.1),同時,在齊次表達下,仿射變換通??梢杂靡粋€的矩陣表達(二維情況下),如(2.2)。
通過對這六個元素的某些約束,比如令某些為0,為1等,我們將仿射變換又分成了以下若干種。
尺度放縮(scale)
尺度放縮(scale)的變換矩陣如:
平移(translate)
平移(translate)的變換矩陣如:
切變(shear)
切變(shear)的變換矩陣如:
旋轉(rotate)
旋轉(rotate)的變換矩陣如:
可組合性
注意到仿射變換其是可以組合的,比如一個變換可以是先平移,后旋轉,最后放縮,那么其變換矩陣為:
其本質是矩陣乘法的不可交換性。
透視變換
透視變換(perspective transform)在變換前后不再保留所有元素的平行性了,但是變換前后,直線還是保持是直線,使用這種變換能提供3D的視覺效果。
我們同樣用齊次坐標去表示這個變換,其變換矩陣的形式如:
觀察變換過程(3.2),我們發(fā)現(xiàn)本來在仿射變換中為1的w ww不再是1了。
將其表示為非齊次的形式,我們有:
我們發(fā)現(xiàn)其是一個非線性變換,因此,透視變換其是一個非線性變換,處于無限遠處的點可能會被移到有限處,處于有限點也可能會被移到無限點處,正是因為如此,平行性才不能被保留了。
我們這里舉個例子,假設有個透視變換矩陣:
我們于是有轉換過程:
我們有:
我們發(fā)現(xiàn)這個極限點正是其消失點的坐標。
廣義投影變換
我們要注意到,透視變換其本質是廣義的投影變換中的一種特殊情況,廣義透視變換的變換矩陣如:
同樣的,其也是一種非線性變換。在二維情況下我們有:
Reference
[1]. Hartley R, Zisserman A. Multiple View Geometry in Computer Vision[J]. Kybernetes, 2008, 30(9/10):1865 - 1872.