仿射變換原理
仿射變換是一種線性變換,可以包括平移、旋轉、縮放和剪切等操作。其一般公式可以表示為:
$$\mathbf{x’} = A \mathbf{x} + \mathbf{b} ]
其中:
- (\mathbf{x}) 是輸入向量,通常表示一個點在二維或三維空間中的坐標。
- (\mathbf{x’}) 是輸出向量,表示經過仿射變換后的點。
- (A) 是一個矩陣,稱為仿射變換矩陣,它包含了線性變換的部分。
- (\mathbf{b}) 是一個向量,稱為平移向量,它包含了平移的部分。
具體來說,對于二維空間中的點 ((x, y)),仿射變換可以表示為:
( x ′ y ′ ) = ( a b c d ) ( x y ) + ( e f ) \begin{pmatrix} x' \\ y' \end{pmatrix} = \begin{pmatrix} a & b \\ c & d \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} + \begin{pmatrix} e \\ f \end{pmatrix} (x′y′?)=(ac?bd?)(xy?)+(ef?)
其中:
- (a, b, c, d) 是仿射變換矩陣 (A) 的元素。
- (e, f) 是平移向量 (\mathbf{b}) 的元素。
齊次坐標下:
( x ′ y ′ 1 ) = ( a b e c d f 0 0 1 ) ( x y 1 ) \begin{pmatrix} x' \\ y' \\ 1 \end{pmatrix} = \begin{pmatrix} a & b & e \\ c & d & f \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} ?x′y′1? ?= ?ac0?bd0?ef1? ? ?xy1? ?
仿射變換是一種在二維或三維空間中保持點之間相對位置的幾何變換。它包括平移、旋轉、縮放和剪切等基本變換。仿射變換可以用矩陣表示,并且可以通過矩陣乘法進行組合。在計算機圖形學和圖像處理中,仿射變換是常用的技術。
齊次坐標
齊次坐標是一種將二維或三維坐標擴展到更高維度的方法,以便于表示平移變換。在二維空間中,齊次坐標是將 ( x , y ) (x, y) (x,y) 擴展為 ( x , y , 1 ) (x, y, 1) (x,y,1)。這使得平移、旋轉、縮放等變換都可以用矩陣乘法表示,從而簡化了變換的組合和計算。
例如,二維平移的齊次坐標表示為:
[ x ′ y ′ 1 ] = [ 1 0 t x 0 1 t y 0 0 1 ] [ x y 1 ] \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix}=\begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} x \\ y \\ 1 \end{bmatrix} ?x′y′1? ?= ?100?010?tx?ty?1? ? ?xy1? ?
通過使用齊次坐標,我們可以將所有的仿射變換統一表示為矩陣乘法,從而簡化了變換的組合和計算。
基本變換
仿射變換的公式可以通過線性代數的基本原理推導出來。例如,旋轉矩陣的推導基于三角函數和線性組合。
組合所有基本仿射變換(平移、旋轉、縮放和剪切)的總變換可以通過矩陣乘法來實現。為了簡化計算,我們使用齊次坐標。在二維空間中,每個變換都可以表示為一個 3x3 矩陣。組合這些變換時,我們需要按照特定的順序應用這些矩陣。
假設我們有一個點 P ( x , y ) P(x, y) P(x,y),我們想要先對其進行縮放,然后旋轉,接著平移,最后進行剪切。變換的順序很重要,因為它會影響最終結果。
-
縮放矩陣 S S S:
S = [ s x 0 0 0 s y 0 0 0 1 ] S = \begin{bmatrix} s_x & 0 & 0 \\ 0 & s_y & 0 \\ 0 & 0 & 1 \end{bmatrix} S= ?sx?00?0sy?0?001? ? -
旋轉矩陣 R R R:
R = [ cos ? θ ? sin ? θ 0 sin ? θ cos ? θ 0 0 0 1 ] R = \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix} R= ?cosθsinθ0??sinθcosθ0?001? ? -
平移矩陣 T T T:
T = [ 1 0 t x 0 1 t y 0 0 1 ] T = \begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{bmatrix} T= ?100?010?tx?ty?1? ? -
斜切矩陣 H H H: