博客:blog.shinelee.me | 博客園 | CSDN
寫在前面
2D圖像常見的坐標變換如下圖所示:

這篇文章不包含透視變換(projective/perspective transformation),而將重點放在仿射變換(affine transformation),將介紹仿射變換所包含的各種變換,以及變換矩陣該如何理解記憶。
仿射變換:平移、旋轉、放縮、剪切、反射
仿射變換包括如下所有變換,以及這些變換任意次序次數的組合:

平移(translation)和旋轉(rotation)顧名思義,兩者的組合稱之為歐式變換(Euclidean transformation)或剛體變換(rigid transformation);
放縮(scaling)可進一步分為uniform scaling和non-uniform scaling,前者每個坐標軸放縮系數相同(各向同性),后者不同;如果放縮系數為負,則會疊加上反射(reflection)——reflection可以看成是特殊的scaling;
剛體變換+uniform scaling 稱之為,相似變換(similarity transformation),即平移+旋轉+各向同性的放縮;
剪切變換(shear mapping)將所有點沿某一指定方向成比例地平移,語言描述不如上面圖示直觀。
各種變換間的關系如下面的venn圖所示:

通過變換矩陣可以更清晰地看出這些變換間的關系和區別。
變換矩陣形式
沒有平移或者平移量為0的所有仿射變換可以用如下變換矩陣描述:
不同變換對應的\(a, b, c, d\)約束不同,排除了平移變換的所有仿射變換為線性變換(linear transformation),其涵蓋的變換如上面的venn圖所示,其特點是原點位置不變,多次線性變換的結果仍是線性變換。
為了涵蓋平移,引入齊次坐標,在原有2維坐標的基礎上,增廣1個維度,如下所示:
所以,仿射變換的變換矩陣統一用 \(\left[ \begin{array}{lll}{a} & {b} & {c}\\ {d} & {e} & {f} \\ {0} & {0} & {1} \end{array}\right]\) 來描述,不同基礎變換的\(a,b,c,d,e,f\)約束不同,如下所示:

此外,旋轉和平移相乘得到剛體變換的變換矩陣,如下,有3個自由度(\(\theta, t_x, t_y\)),這里旋轉方向為逆時針方向,因此與上圖中的正負號不同,
再乘上uniform scaling得到相似變換,有4個自由度(\(s, \theta, t_x, t_y\)),如下:
自然,仿射變換的變換矩陣有6個自由度(\(a,b,c,d,e,f\))。
變換矩陣的理解與記憶

坐標系由坐標原點和基向量決定,坐標原點和基向量確定了,坐標系也就確定了。
對於坐標系中的位置\((x, y)\),其相對坐標原點在\([1, 0]\)方向上的投影為\(x\),在\([0, 1]\)方向上的投影為\(y\)——這里投影的意思是過\((x, y)\)做坐標軸的平行線與坐標軸的交點到原點的距離,即\((x, y)\)實際為:
當坐標系變化,坐標系中的點也跟着變化,但點相對新坐標系(\(x'-y'\)坐標系)的位置不變仍為\((x, y)\),以旋轉變換為例,新坐標軸的基向量則變為\([\cos (\theta), \sin (\theta)]\)和\([-\sin (\theta), \cos (\theta)]\),所以點變化到新位置為:
新位置和新基向量是相對絕對坐標系(\(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]\)為新的坐標原點,先變化基向量,再變化坐標原點;
這時再對照上面的各種變換矩陣,就很好理解了。

變換矩陣的參數估計
如果給定兩個對應點集,如何估計指定變換矩陣的參數?
一對對應點可以列兩個線性方程,多個對應點可以列出線性方程組,為了求解參數,需要的對應點數至少為自由度的一半,多個點時構成超定方程組,可以基於最小二乘或者SVD分解等方法進行求解,這里不再展開。
