0 前言
現在的人臉圖像識别流程中有一個步驟叫人臉對齊,現在的一般方法是采用人臉上的關鍵點坐标,進行相似變換來實作人臉校正。多次在人臉識别的論文中看到 similarity transform,由于線上代和矩陣分析的課上一直劃水。對相似變換也是一知半解,今天決定不惜一下相關的知識。大部分的内容都是參考網上大神的,這裡隻是做個整理。下面的闡述主要以二維坐标為例,多元空間的左邊點,可以通過增加變換矩陣的次元得知。
1 變換矩陣
假如二維空間中存在點(x,y),我們想通過将x移動a,y移動b,得到新的坐标點(x’,y’),那麼變換的公式可以寫為:
x ′ = x + a y ′ = y + b x'= x + a \\ y'=y + b x′=x+ay′=y+b
上市可以寫成矩陣的形式:
[ x ′ y ′ 1 ] = [ 1 0 a 0 1 b 0 0 1 ] [ x y 1 ] \left[ \begin{matrix} x' \\ y' \\ 1 \end{matrix} \right] = \left[ \begin{matrix} 1 & 0 & a \\ 0 & 1 & b \\ 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} x \\ y \\ 1 \end{matrix} \right] ⎣⎡x′y′1⎦⎤=⎣⎡100010ab1⎦⎤⎣⎡xy1⎦⎤
上式中等号後面的矩陣即為變換矩陣。為了使用矩陣表示平移變換,需要将坐标的次元增加一維,因為二維的矩陣沒有辦法表示平移變換,這叫做齊次坐标。
齊次坐标: 使用N+1維坐标來表示N維坐标,例如在2D笛卡爾坐标系中加上額外變量w來形成2D齊次坐标系(x,y)⇒(x,y,w) 。齊次坐标具有規模不變性,同一點可以被無數個齊次坐标表達.(x,y,1)⇒(ax,ay,a) 齊次坐标轉化為笛卡爾坐标可以通過同除最後一項得到。
在計算機圖形學中,為了統一将平移、旋轉、縮放等用矩陣表示,需要引入齊次坐标。(假設使用2x2的矩陣,是沒有辦法描述平移操作的,隻有引入3x3矩陣形式,才能統一描述二維中的平移、旋轉、縮放操作。同理必須使用4x4的矩陣才能統一描述三維的變換。
同樣的我們可以使用矩陣來表示,縮放變換,旋轉變換,相似變換,仿射變換和投影變換。
2 剛性變換
剛性變換: 隻有物體的位置(平移變換)和朝向(旋轉變換)發生改變,而形狀不變,得到的變換稱為剛性變換。剛性變換是最一般的變換。
2.1 平移變換
平移變換我們在上面已經提到過
2.2 旋轉變換
旋轉變換的變換矩陣,不像平移變換那麼容易得到,我們這裡介紹一下,旋轉變換的變換矩陣是怎麼求出來的。
2.2.1 繞原點的二維旋轉
首先要明确旋轉在二維中是繞着某一個點進行旋轉,三維中是繞着某一個軸進行旋轉。二維旋轉中最簡單的場景是繞着坐标原點進行的旋轉,如下圖所示:
2.2.3 繞任意點的二維旋轉
繞原點的旋轉是二維旋轉最基本的情況,當我們需要進行繞任意點旋轉時,我們可以把這種情況轉換到繞原點的旋轉,思路如下:
- 首先将旋轉點移動到原點處
- 執行如2所描述的繞原點的旋轉
- 再将旋轉點移回到原來的位置 對于二維平移,如下圖所示,P點經過x和y方向的平移到P’點,可以得到:
2.3 等距變換
等距變換相當于是平移變換和旋轉變換的複合,用R表示變換矩陣,即為 :
左上角2×2矩陣為旋轉部分,tx和ty為平移因子,它有三個自由度,即旋轉,x方向平移,y方向平移。等距變換前後長度,面積,線段之間的夾角都不變。
3 相似變換
在介紹相似變換之前先介紹兩個簡單的變換,縮放變換和切向變換。
3.1 縮放變換
3.2 切向變換
3.3 相似變換
相似變換相當于是等距變換和均勻縮放的一個複合,用S表示變換矩陣,即為
左上角2×2矩陣為旋轉部分,tx和ty為平移因子,它有4個自由度,即旋轉,x方向平移,y方向平移和縮放因子s。相似變換前後長度比,夾角,虛圓點I,J保持不變。相似變換其實與相似三角形之間是有類似的。
4 仿射變換
仿射變換和相似變換近似,不同之處在于相似變換具有單一旋轉因子和單一縮放因子,仿射變換具有兩個旋轉因子和兩個縮放因子,是以具有6個自由度。不具有保角性和保持距離比的性質,但是原圖平行線變換後仍然是平行線。仿射變換主要包括平移變換、旋轉變換、縮放變換(也叫尺度變換)、傾斜變換(也叫錯切變換、剪切變換、偏移變換)、翻轉變換,有六個自由度。
仿射變換的表示如下:
仿射變換的特點如下:
仿射變換保持二維圖形的“平直性”和“平行性”,但是角度會改變。
“平直性”:變換後直線還是直線、圓弧還是圓弧。
“平行性”:平行線還是平行線,直線上點的位置順序不變。
它有6個自由度,即旋轉4個,也就是前述大矩形的4個元素都可以同時改變,x方向平移,y方向平移。它能保持平行性,不能保持垂直性,Image中各部分變換前後面積比保持不變,共線線段或者平行線段的長度比保持不變,矢量的線性組合不變。
5 投影變換
在這裡需要明晰一下的是,透視變換(Perspective Transformation)也稱作投影變換(Projective Transformation)、射影變換。
射影變換:是最一般的線性變換。有8個自由度。射影變換保持重合關系和交比不變。但不會保持平行性。即它會使得仿射變換産生非線性效應。
射影變換組成了一個群,這個群被稱為射影變換群,n×n可逆實矩陣稱為一般線性群GL(n),當把相差非零純量因子的矩陣都視為等同時,便得到射影映射群,記為PL(n)。在平面,射影變換為PL(3)。
仿射變換和射影變換的差別:
其中當上面矩陣的最後一行為(0,0,1)時的變換就為仿射變換,在仿射的前提下,當左上角2×2矩陣正交時為歐式變換,左上角矩陣行列式為1時為定向歐式變換。是以射影變換包含仿射變換,而仿射變換包含歐式變換。
至此我們得到了射影變換和仿射變換的關系。
6 解析變換矩陣
變換矩陣可以分為如下幾個部分:
其中大矩形中的4個元素組成的整體表示線性變換,比如scaling(尺度),shearing(剪切)和ratotion(旋轉);橢圓部分表示平移的參數,一個确定在x方向上的平移一個确定在y方向上的平移;小矩形部分用于産生透視變換。從這裡是以可以了解成仿射等是透視變換的特殊形式。其實不管是仿射變換是透視變換的特殊形式,其他所有的變換都是透視變換的變換矩陣取特殊值的特殊形式。
最後再補充一些名詞上的解釋:
projective transformation(投影變換) = homography(單應性變換) = collineation( 直射變換).
參考部落格:
- 旋轉變換(一)旋轉矩陣
- 圖像幾何變換之仿射變換
- 何為仿射變換(Affine Transformation)
- 【Computer Vision】圖像單應性變換/投影/仿射/透視
- 仿射變換和射影變換、等距變換、相似變換