二維透視投影變換

2021-07-13 22:53:06 字數 3208 閱讀 9023

如下圖,位於xy平面的單位正方形投影到任意平面p上後,變成了不規則的四邊形abcd,我們能根據正方形的四個頂點投影前後的座標,計算出平面xy上任意點 (x,y) 投影到平面p 上之後的座標 (x', y') 嗎?

我們注意到正方形的四個邊投影到平面p之後,分別變為線段ab,bc,cd,da,也就是說投影前位於一條直線上的點,投影後仍然位於一條直線上,對於直線來說,這種變換是線性的;但投影前平行的兩條直線,投影後不再平行,對於平面而言,這種變換不是線性的。不過,雖然這種變換不能表示成線性變換,但可以表示成兩個線性變換相除,於是就有了齊次座標,

齊次座標的好處是,可以把投影變換轉化成線性變換,從而使用矩陣運算來對問題求解。

使用齊次座標,可以有以下變換

寫成方程式表達:

x' = ax + by + cw

y' = dx + ey + fw

w'= gx + hy + iw

其中 (x,y,w) 是變換前的座標,(x',y',w')是變換後的座標,(a b c ...)是變換矩陣

根據上面的討論,我們已知四邊形四個頂點變換前後的二維座標,每個點可以寫出三個方程式,總共有12個方程式,而變換矩陣共有9個未知數,再加上變換之後的座標w也是未知數,總共有13個未知數,於是這個方程組有無限多組解,但是在投影平面上,每個點的齊次座標本身就可以有無數個表達,我們只要把w規則化為1,就可以求出x, y

根據仿射變換理論,係數c,f表示變換前後的原點位移(平移變換),為了簡化計算,我們假定c,f都等於0(即變換前後原點沒有位移),並且把係數i 調整成1,於是有

其中 p是比例因子

寫成方程式

px' = ax + by                     (1)

py' = dx + ey                     (2)

p   = gx + hy + 1               (3)

用式3消去式1和式2中的p,就得到2個方程式

ax + by - gxx' - hyx' = x'      (4)

dx + ey - gxy' - hyy' = y'       (5 )

我們假定由點(0,0)(1,0)(0,1)(1,1)四個點組成的單位正方形區域對映到目標平面後的座標分別是 (0,0) (x1',y1') (x2', y2') (x3', y3'),  原點(0,0)對映到 (0,0)不在計算之列,把其它三個點分別代入式(4),式(5),一共得到六個方程式

a - gx1'  =  x1'                               (6)

b - hx2'  =  x2'                               (7)

a + b - gx3' - hx3' = x3'               (8)

d - gy1'  =  y1'                               (9)

e - hy2'  =  y2'                               (10)

d + e - gy3' - hy3' = y3'              (11)

把式(6)(7)(10)(11)變換,得到

a = x1』 + gx1』                            (12)

b = x2』 + hx2'                            (13)

d = y1』 + gy1』                           (14)

e = y2』 + hy2'                            (15)

然後代入式(8)(11),得到

x1' + gx1' + x2' + hx2' - gx3' - hx3' = x3'

y1' + gx1' + y2' + hy2' - gy3' - hy3' = y3'

整理後為

g(x3' - x1') + h(x3' - x2') = x1' - (x3' - x2')

g(y3' - y1') + h(y3' - y2') = y1' - (y3' - y2')

令 dx31 = x3' - x1'

dx32 = x3' - y2'

dy31 = y3' - y1'

dy32 = y3' - y2'

從以下 開始,為書寫方便,去掉了x,y後面的撇號

dx31g + dx32h = x1 - dx32

dy31g + dy32h = y1 - dy32

求解此方程

係數矩陣 m =

dx31 dx32

dy31 dy32

det(m) = dx31dy32 - dy31dx32

逆矩陣m-1 = 1 / det(m)*

dy32  -dx32

-dy31 dx31

於是g * det(m) = dy32 * (x1 - dx32) - dx32 * (y1 - dy32)  

= x1 * dy32  - dx32 * dy32 - y1 * dx32 + dx32 * dy32 

= x1 * dy32 - y1 * dx32

h * det(m) = -dy31 * (x1 - dx32)  + dx31 * (y1 - dy32)

注意到x1 - dx32 = x2 - dx31, y1 - dy32 = x2 - dy31, 於是

h * det(m)   = -dy31 *(x2 - dx31) + dx31 *(y2 - dy31)

= -x2*dy31 + dy31*dx31 + y2*dx31 - dx31*dy31

= y2*dx31 - x2 * dy31

把 g,h 分別代入(12)(13)(14)(15)

就可以求出a,b,c,d

a =  x1 * (1 + g)

b = x2 * (1 + h)

d = y1 * (1 + g)

e = y2 * ( 1 + h)

這樣就求出了變換矩陣的全部係數。

深入研究透視投影變換

深入研究透視投影變換 3d世界變換主要有世界變換 觀察變化 投影變換。世界變換做的事情是把座標從模型空間變換到世界空間,而觀察變換是把座標從世界空間變換到觀察空間。3d世界裡,所有的物體 包括相機等 都可以認為是3d模型,他們開始建立的時候都是處於自身座標系內,渲染的時候,我們需要把這些模型從模型空...

投影變換 透視投影和正交投影

2.3 投影變換 3.2.3.1 基本概念 在計算機圖形軟體中所採用笛卡爾 cartesian 直角三維座標系統,按照 z軸方向的不同有兩種形式 1 右手系統 當用右手握住 z軸時,大姆指指向 z軸的正方向 圖 3.20 a 其餘四個手指從x軸到 y軸形成乙個弧。2 左手系統 當用左手握住 z軸時,...

正交投影變換與透視投影

相機投影模型 三維計算機圖形學的基本問題之一就是三維觀察問題 即如何把三維場景投影到要顯示的二維影象。大多數經典的解決投影變換方法有兩種 正交投影變換和透視投影變化。正交投影變換用乙個長方體來取景,並把場景投影到這個長方體的前面。這個投影不會有透視收縮效果 遠些的物體在影象平面上要小一些 因為它保證...