仿射變換及其變換矩陣的理解

博客:blog.shinelee.me | 博客園 | CSDNide

寫在前面

2D圖像常見的座標變換以下圖所示:
Basic set of 2D planar transformations
這篇文章不包含透視變換(projective/perspective transformation),而將重點放在仿射變換(affine transformation),將介紹仿射變換所包含的各類變換,以及變換矩陣該如何理解記憶。idea

仿射變換:平移、旋轉、放縮、剪切、反射

仿射變換包括以下全部變換,以及這些變換任意次序次數的組合
affine transformationsspa

平移(translation)和旋轉(rotation)顧名思義,二者的組合稱之爲歐式變換(Euclidean transformation)或剛體變換(rigid transformation);.net

放縮(scaling)可進一步分爲uniform scalingnon-uniform scaling,前者每一個座標軸放縮係數相同(各向同性),後者不一樣;若是放縮係數爲負,則會疊加上反射(reflection)——reflection能夠當作是特殊的scaling;3d

剛體變換+uniform scaling 稱之爲,類似變換(similarity transformation),即平移+旋轉+各向同性的放縮;orm

剪切變換(shear mapping)將全部點沿某一指定方向成比例地平移,語言描述不如上面圖示直觀。blog

各類變換間的關係以下面的venn圖所示:
transformations venn diagram
經過變換矩陣能夠更清晰地看出這些變換間的關係和區別。ci

變換矩陣形式

沒有平移或者平移量爲0的全部仿射變換能夠用以下變換矩陣描述:get

\[ \left[ \begin{array}{l}{x'} \\ {y'}\end{array}\right]=\left[ \begin{array}{ll}{a} & {b} \\ {c} & {d}\end{array}\right] \left[ \begin{array}{l}{x} \\ {y}\end{array}\right] \]

不一樣變換對應的\(a, b, c, d\)約束不一樣,排除了平移變換的全部仿射變換爲線性變換(linear transformation),其涵蓋的變換如上面的venn圖所示,其特色是原點位置不變屢次線性變換的結果還是線性變換

爲了涵蓋平移,引入齊次座標,在原有2維座標的基礎上,增廣1個維度,以下所示:

\[ \left[ \begin{array}{l}{x^{\prime}} \\ {y^{\prime}} \\ {1}\end{array}\right] =\left[ \begin{array}{lll}{a} & {b} & {c}\\ {d} & {e} & {f} \end{array}\right] \left[ \begin{array}{l}{x} \\ {y} \\ {1}\end{array}\right] \]

因此,仿射變換的變換矩陣統一用 \(\left[ \begin{array}{lll}{a} & {b} & {c}\\ {d} & {e} & {f}\end{array}\right]\)來描述,不一樣基礎變換的\(a,b,c,d,e,f\)約束不一樣,以下所示:

VuEg5n.png
此外,旋轉和平移相乘獲得剛體變換的變換矩陣,以下,有3個自由度(\(\theta, t_x, t_y\)),這裏旋轉方向爲逆時針方向,所以與上圖中的正負號不一樣,
\[ \left[ \begin{array}{ccc}{\cos (\theta)} & {-\sin (\theta)} & {t_{x}} \\ {\sin (\theta)} & {\cos (\theta)} & {t_{y}}\end{array}\right] \left[ \begin{array}{l}{x} \\ {y} \\ {1}\end{array}\right]=\left[ \begin{array}{c}{x^{\prime}} \\ {y^{\prime}} \\ {1}\end{array}\right] \]

再乘上uniform scaling獲得類似變換,有4個自由度(\(s, \theta, t_x, t_y\)),以下:

\[ \left[ \begin{array}{ccc}{s\cos (\theta)} & {-s\sin (\theta)} & {t_{x}} \\ {s\sin (\theta)} & {s\cos (\theta)} & {t_{y}}\end{array}\right] \left[ \begin{array}{l}{x} \\ {y} \\ {1}\end{array}\right]=\left[ \begin{array}{c}{x^{\prime}} \\ {y^{\prime}} \\ {1}\end{array}\right] \]

天然,仿射變換的變換矩陣有6個自由度(\(a,b,c,d,e,f\))。

變換矩陣的理解與記憶

rotate matrix
座標系座標原點基向量決定,座標原點基向量肯定了,座標系也就肯定了。

對於座標系中的位置\((x, y)\),其相對座標原點在\([1, 0]\)方向上的投影爲\(x\),在\([0, 1]\)方向上的投影爲\(y\)——這裏投影的意思是過\((x, y)\)作座標軸的平行線與座標軸的交點到原點的距離,即\((x, y)\)實際爲:

\[\left[ \begin{array}{l}{x} \\ {y}\end{array}\right] = x\left[ \begin{array}{l}{1} \\ {0}\end{array}\right] + y\left[ \begin{array}{l}{0} \\ {1}\end{array}\right] = \left[ \begin{array}{ll}{1} & {0} \\ {0} & {1}\end{array}\right] \left[ \begin{array}{l}{x} \\ {y}\end{array}\right]\]

當座標系變化,座標系中的點也跟着變化,但點相對新座標系\(x'-y'\)座標系)的位置不變仍爲\((x, y)\),以旋轉變換爲例,新座標軸的基向量則變爲\([\cos (\theta), \sin (\theta)]\)\([-\sin (\theta), \cos (\theta)]\),因此點變化到新位置爲:

\[\left[ \begin{array}{l}{x'} \\ {y'}\end{array}\right] = x\left[ \begin{array}{l}{\cos (\theta)} \\ { \sin (\theta)}\end{array}\right] + y\left[ \begin{array}{r}{- \sin (\theta)} \\ { \cos (\theta)}\end{array}\right] = \left[ \begin{array}{lr}{\cos (\theta)} & {-\sin (\theta)} \\ {\sin (\theta)} & {\cos (\theta)}\end{array}\right] \left[ \begin{array}{l}{x} \\ {y}\end{array}\right]\]

新位置和新基向量是相對絕對座標系(\(x-y\)座標系)而言的。其餘變換矩陣同理。

總結一下:

  • 全部變換矩陣只需關注一點:座標系的變化,即基向量和原點的變化
  • 座標系變化到哪裏,座標系中的全部點也跟着作一樣的變化
  • 座標系的變換分爲 基向量的變化 以及 座標原點的變化,在仿射變換矩陣 \(\left[ \begin{array}{lll}{a} & {b} & {c}\\ {d} & {e} & {f} \\ 0 & {0} & {1}\end{array}\right]\)中, \(\left[ \begin{array}{l}{a} \\ {d}\end{array}\right]\)\(\left[ \begin{array}{l}{b} \\ {e}\end{array}\right]\)爲新的基向量,\(\left[ \begin{array}{l}{c} \\ {f}\end{array}\right]\)爲新的座標原點,先變化基向量,再變化座標原點;

這時再對照上面的各類變換矩陣,就很好理解了。

Hierarchy of 2D coordinate transformations

變換矩陣的參數估計

若是給定兩個對應點集,如何估計指定變換矩陣的參數?

一對對應點能夠列兩個線性方程,多個對應點能夠列出線性方程組,爲了求解參數,須要的對應點數至少爲自由度的一半,多個點時構成超定方程組,能夠基於最小二乘或者SVD分解等方法進行求解,這裏再也不展開。

參考

相關文章
相關標籤/搜索