仿射相關理論


1. 仿射變換的應用

1. 在用PS時,大家一定用過旋轉、水平剪切和垂直剪切的操作。
2. spm在fmri圖像數據預處理時,normalize歸一化這一步時,需要將帶配准圖像與來自standard space的模板圖像進行配准,配准除了涉及旋轉、平移這些剛體變換之外,還包括放縮、錯切。這就構成了a full affine transformation全仿射變換。
3. 做計算機圖形學的朋友都知道,盡管描述一個三維對象只需要三維向量,但所有的計算機圖形學變換矩陣都是4 x 4的。說其原因,很多書上都寫着“為了使用中方便”,這在我看來簡直就是企圖蒙混過關。真正的原因,是因為在計算機圖形學里應用的圖形變換,實際上是在仿射空間而不是向量空間中進行的。 

2. 仿射變換的定義  

  仿射變換是二維平面中一種重要的變換,在圖像圖形領域有廣泛的應用。許多人對“仿射”沒有一個感官的認識,我覺得很有必要先來說一下“仿射”。

所謂的“仿射變換”就是一種簡單的變換,它的變化包括旋轉、平移、伸縮,原來的直線仿射變換后還是直線,原來的平行線經過仿射變換之后還是平行線,這就是仿射。保持二維圖形的“平直線”和“平行性”,其可以通過一系列的原子變換的復合來實現,包括

平移(Translation)
縮放(Scale)
翻轉(Flip)
旋轉(Rotation)
剪切(Shear)

仿射變換的矩陣的平移(Translation)+旋轉(Rotation)操作是其次坐標形式的變換矩陣

這個矩陣包含的變換有旋轉和平移,其實是兩個矩陣的混合體,許多文章都對這個做了很詳細的描述。仿射變換的數學公式里,是如何做到坐標點位置的平移呢?清楚這個才是弄明白仿射變換的關鍵。

利用此圖可以完成仿射變換公式的推導,推導如下:

2.1 旋轉操作的矩陣實現

一個點P在原始坐標系下的坐標是(Xsp,Ysp)。然后要完成旋轉操作,旋轉操作是基於原點的,如何得到旋轉之后的點的坐標,這里用到一個技巧,坐標系中某個點的旋轉可以等價地去旋轉坐標軸,所以有了上圖中以(Xs0,Ys0)為中心的虛線與屏幕水平垂直的坐標系。在這個坐標系中確定P的坐標,和在藍色坐標系中確定旋轉之后P的坐標是等價的。基於這個結論,我們可以通過簡單的立體幾何知識確定P在新坐標系中的坐標。P在新坐標系中的X坐標和Y坐標分別是

經典的仿射變換的模型呼之欲出了。整理上面兩個式子得:

這就是仿射變換模型中旋轉部分的原理,還有一步,就是平移。

2.2 平移的實現

旋轉變換之后,我們確定了P點在新坐標系中的位置,然后在這個位置的基礎上加上其在X軸和Y軸的偏移即可

仿射變換的矩陣橫空出世。當然上圖中對這個變換的處理更巧妙,它還是利用了不移動點移動坐標系的策略,將坐標系向相反方向移動了相應的距離。於是有了上圖這個經典仿射變換模型的圖示展現。

上圖中我們可以看到,整個在對P點進行仿射變換的過程中,P點的位置並沒有移動,我們是通過不斷的坐標系的調整來間接達到P點移動的效果,這充分說明了一件事:

 運動都是相對的。

 

3. 幾種典型的仿射變換API

3.1.public static AffineTransform getTranslateInstance(double tx, double ty)

平移變換,將每一點移動到(x+tx, y+ty),變換矩陣為:

(譯注:平移變換是一種“剛體變換”,rigid-body transformation,中學學過的物理,都知道啥叫“剛體”吧,就是不會產生形變的理想物體,平移當然不會改變二維圖形的形狀。同理,下面的“旋轉變換”也是剛體變換,而“縮放”、“錯切”都是會改變圖形形狀的。) 

3.2.public static AffineTransform getScaleInstance(double sx, double sy)

縮放變換,將每一點的橫坐標放大(縮小)至sx倍,縱坐標放大(縮小)至sy倍,變換矩陣為:

3.3.public static AffineTransform getShearInstance(double shx, double shy)

剪切變換,變換矩陣為:

相當於一個橫向剪切與一個縱向剪切的復合

(譯注:“剪切變換”又稱“錯切變換”,指的是類似於四邊形不穩定性那種性質,街邊小商店那種鐵拉門都見過吧?想象一下上面鐵條構成的菱形拉動的過程,那就是“錯切”的過程。) 

3.4.public static AffineTransform getRotateInstance(double theta)

旋轉變換,目標圖形圍繞原點順時針旋轉theta弧度,變換矩陣為:

3.5.public static AffineTransform getRotateInstance(double theta, double x, double y)

旋轉變換,目標圖形以(x, y)為軸心順時針旋轉theta弧度,變換矩陣為:

[   cos(theta)    -sin(theta)    x-x*cos+y*sin]

[   sin(theta)     cos(theta)    y-x*sin-y*cos ]

[       0              0          1            ]

相當於兩次平移變換與一次原點旋轉變換的復合:

[1  0  -x][cos(theta)  -sin(theta)  0][1  0  x]

[0  1  -y][sin(theta)   cos(theta)  0][0  1  y]

[0  0  1 ][   0           0        1 ][0  0  1]

4. 仿射變換效果圖    

順時針旋轉30度:
空間域圖像處理——仿射變換

水平剪切:
空間域圖像處理——仿射變換

垂直剪切:
空間域圖像處理——仿射變換


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM