仿射變換與透視畸變

在恢復圖像的過程中,可能會需要對透視畸變以及仿射變換進行補償,今天整理了下關於透視畸變和仿射變換的相關概念。
首先講仿射變換,仿射變換一種二維座標到二維座標之間的線性變換,保持二維圖形的“平直性”(譯註: straightness,即變換後直線還是直線不會打彎,圓弧還是圓弧)和“平行性”(譯註:par
allelness,其實是指保持二維圖形間的相對位置關係不變,平行線還是平行線,而直線上點的位置順序不變,另特別注意向量間夾角可能會發生變化。)仿射變換可以通過一系列的原子變換的複合來實現,包括:平移(Translation)、縮放(Scale)、翻轉(Flip)、旋轉(Rotation)和錯切(Shear)。

常用的仿射變換:旋轉、傾斜、平移、縮放,可以用一個3×3的矩陣來表示,其最後一行爲(0, 0, 1)。該變換矩陣將原座標(x, y)變換爲新座標(x', y'),這裏原座標和新座標皆視爲最末一行爲(1)的三維列向量,原列向量左乘變換矩陣得到新的列向量:

平移變換,將每一點移動到(x+tx, y+ty),變換矩陣爲:
[ 1 0 tx ]
[ 0 1 ty ]
[ 0 0 1 ]
(譯註:平移變換是一種“剛體變換”,rigid-body transformation,中學學過的物理,都知道啥叫“剛體”吧,就是不會產生形變的理想物體,平移當然不會改變二維圖形的形狀。同理,下面的“旋轉變換”也是剛體變換,而“縮放”、“錯切”都是會改變圖形形狀的。)
public static AffineTransform getScaleInstance(double sx, double sy)
縮放變換,將每一點的橫座標放大(縮小)至sx倍,縱座標放大(縮小)至sy倍,變換矩陣爲:
[ sx 0 0 ]
[ 0 sy 0 ]
[ 0 0 1 ]
當sx=sy時,稱爲尺度縮放,sx不等於sy時,這就是我們平時所說的拉伸變換。
public static AffineTransform getShearInstance(double shx, double shy)
剪切變換,變換矩陣爲:
[ 1 shx 0 ]
[ shy 1 0 ]
[ 0 0 1 ]
相當於一個橫向剪切與一個縱向剪切的複合
[ 1 0 0 ][ 1 shx 0 ]
[ shy 1 0 ][ 0 1 0 ]
[ 0 0 1 ][ 0 0 1 ]
(譯註:“剪切變換”又稱“錯切變換”,指的是類似於四邊形不穩定性那種性質,街邊小商店那種鐵拉門都見過吧?想象一下上面鐵條構成的菱形拉動的過程,那就是“錯切”的過程。)
旋轉變換1,目標圖形圍繞原點逆時針旋轉theta弧度,變換矩陣爲:
[ cos(theta) -sin(theta) 0 ]
[ sin(theta) cos(theta) 0 ]
[ 0 0 1 ]
public static AffineTransform getRotateInstance(double theta, double x, double y)
旋轉變換2,目標圖形以(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]
這裏是以空間任一點爲圓心旋轉的情況。
以上是關於仿射變換的相關知識,核心是平行性和平直性。
      和仿射變換不同,另一類叫做透視畸變,顯然,其不再具有仿射變換的平行性和平直性,例如廣角鏡頭的那種廣角畸變,邊緣的直線變彎了,就是一種透視畸變,下面具體來講一講。
首先什麼叫透視,衆所周知,我們的眼睛感覺遠近的一種方法就是利用物體的相對大小,大腦會告訴我們物體遠就顯得小,距離越遠,顯得越小,遠處的物體比相同大小的近處物體顯得小。由於這一原因,平行的鐵軌會隨着我們向遠處瞭望而顯得越來越靠近,直至匯聚成一點。
透視還有另外一種表現,即物體越近,透視效果越強烈。比方說,200名士兵排成一縱隊正在行進。如果在距離前面士兵10英尺的地方觀看或拍攝隊伍,那麼前面的士兵就會顯得比最後的士兵高大得多。但是,如果在遠離前面士兵100米的地方觀看或拍攝同一支隊伍,第一個和最後一個士兵之間的大小差異就不會顯得那麼大。
透視的這兩方面特徵同樣適用於所有的鏡頭,即:
1.被攝體越遠,顯得越小;
2.鏡頭離被攝體越遠,被攝體外觀上的大小變化越小。
比如用鏡頭拍狗,狗的鼻子拍的特別大,就是透視畸變的一種典型。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章