【opencv+python】圖像處理之二、幾何變換(仿射與投影)的原理

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/a352611/article/details/51417779

該系列文章爲 OpenCV+Python Tutorials的學習筆記
代碼託管在Github
轉載請註明: http://blog.csdn.net/a352611/article/details/51417779 [三記的博客]

寫在文章開始之前:
關於幾何變換,常見的資料都沒有把數學原理部分講透徹,基本都是照着課本說,導致我很多地方無法徹底理解.思前想後還是把這一塊分成兩個部分,一部分專門講數學,一部分專門講應用.本文爲數學原理部分。


Geometry Transformation 幾何變換

對圖像的幾何變換本質上是一種線性變換,其數學本質爲
Inew=TIold

即通過變換矩陣T 將原圖上的點的位置Iold 變換到新的位置,從而得到新的圖像Inew

2DTransformation

2D平面變換示意圖(”Computer Vision: Algorithms and Applications”, Richard Szeliski)
- Translation 平移
- Euclidean(rigid, rotation) 旋轉
- Scale 縮放;圖中沒有畫出
- Similarity 相似變換;結合旋轉,平移和縮放
- Affine 仿射變換;想象在similarity的基礎上用兩隻手對圖像進行按壓拉伸
- Projective 投影變換;想象投影儀做的事情,將一個面投影到另外一個面的情況


Homogeneous coordinates 齊次座標

簡單的說法就是對於點P=[x;y]T 我們無從得知這是一個點還是向量,之所以糾結這個概念的原因在於:平移對於向量沒有意義,但對點有意義。我們希望對線性變換有一個統一的描述,結果發現在Homogeneous coordinates齊次座標下我們能夠和諧統一地描述這些。怎麼把一個點轉換到齊次座標下來描述呢?很簡單的一個方法是

直接將點P=[x;y]T 變爲P=[x;y;1]T
而向量P=[x;y]T 變爲P=[x;y;0]T

由於我們的變換矩陣是一個3x3的矩陣,最後一列的意義就是平移,這樣就實現平移對向量無效,也能讓線性變換統一寫爲Pnew=TPoldT 爲變換矩陣,最後還要從齊次座標轉換回我們的歐幾里得座標。
完整的Homogeneous coordinates概念請翻閱”Multiple View Geometry in computer vision”, Richard Hartley and Andrew Zisserman
平行線相交於一點

Scaling,Rotation,Translation 縮放、旋轉、平移

縮放 Scaling

T=[fx00fy]T=fx000fy0001

fx,fy 分別爲x方向和y方向的縮放係數

旋轉 Rotation

T=[cos(θ)sin(θ)sin(θ)cos(θ)]T=cos(θ)sin(θ)0sin(θ)cos(θ)0001

平移 Translation

只有齊次座標系下的表示

T=100010txty1

tx,ty 分別爲x方向和y方向的平移距離

Affine 仿射變換

T=a0a30a1a40a2a51

Perspective 投影變換

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