OpenCV仿射變換與透視變換區別

2021-10-06 21:29:17 字數 1780 閱讀 9309

**:

1) 用途

旋轉 (線性變換),平移 (向量加).縮放(線性變換),錯切,反轉

2) 方法

仿射變換是一種二維座標到二維座標之間的線性變換,它保持了二維圖形的「平直性」(直線經過變換之後依然是直線)和「平行性」(二維圖形之間的相對位置關係保持不變,平行線依然是平行線,且直線上點的位置順序不變)。任意的仿射變換都能表示為乘以乙個矩陣(線性變換),再加上乙個向量 (平移) 的形式.

以上公式將點(x,y)對映到(x』,y』),在opencv中通過指定乙個2x3矩陣實現此功能(公式中的m矩陣,是線性變換和平移的組合,m11,m12,m21,m22為線性變化引數,m13,m23為平移引數,其最後一行固定為0,0,1,因此,將3x3矩陣簡化為2x3)

3) 舉例

a) 以原點為中心旋轉,2x3矩陣為:

[ cos(theta), -sin(theta), 0 ],

[ sin(theta), cos(theta), 0 ]

則 x』 = x * cos(theta) - sin(theta) * y

y』 = x * sin(theta) + cos(theta) * y

b) 平移,2x3矩陣為

[1,0,tx],

[0,1,ty]

則 x』 = x * 1 + y * 0 + tx = x + tx

y』 = x * 0 + y * 1 + ty = y + ty

4) 具體應用

在opencv中,仿射變換通過函式cvwrapaffine(src,dst,mat)實現,其中mat是2x3的仿射矩陣,該矩陣可以利用函式cvgetaffinetransform(srctri,dsttri,mat)得到,其中mat是被該函式填充的仿射矩陣,srctri和dsttri分別是由三個頂點定義的平行四邊形(由於是平行四邊形,只需要指定三個頂點即可確定),即:給出變換前的abcd和變換後的a』b』c』d』

1) 用途

將2d矩陣影象變換成3d的空間顯示效果,全景拼接.

2) 方法

透視變換是將投影到乙個新的視平面,也稱作投影對映.它是二維(x,y)到三維(x,y,z),再到另乙個二維(x』,y』)空間的對映.

相對於仿射變換,它提供了更大的靈活性,將乙個四邊形區域對映到另乙個四邊形區域(不一定是平行四邊形).它不止是線性變換.但也是通過矩陣乘法實現的,使用的是乙個3x3的矩陣,矩陣的前兩行與仿射矩陣相同(m11,m12,m13,m21,m22,m23),也實現了線性變換和平移,第三行用於實現透視變換.

以上公式設變換之前的點是z值為1的點,它三維平面上的值是x,y,1,在二維平面上的投影是x,y,通過矩陣變換成三維中的點x,y,z,再通過除以三維中z軸的值,轉換成二維中的點x』,y』.

從以上公式可知,仿射變換是透視變換的一種特殊情況.它把二維轉到三維,變換後,再轉對映回之前的二維空間(而不是另乙個二維空間).

仿射變換後平行四邊形的各邊仍操持平行,透視變換結果允許是梯形等四邊形,所以仿射變換是透視變換的子集

例項:

1. 仿射變換

2. 透視變換

opencv仿射變換與透視變換

基本上就是learning opencv一書第4章,練習7的答案了。先來個自己寫的透視變換 這個程式的執行效果,是比較容易分析的,就是變換一張的四個角的位置後,引起影象的相應變化,而每個角就是二維平面的乙個點具有x和y屬性,4個點的x,y間接儲存到df1到df8變數中。注意cvcloneimage函...

仿射變換與透視變換

仿射變換與透視變換是機器視覺中繞不開的幾何知識之一.我以前在做相機標定的時候研究了一下,現在寫出來,免得以後忘記.1.透視變化 透視變換與透視投影密切相關.我們先來理解一下什麼是透視投影,所謂透視投影,通俗地講就是 遠小近大 前段時間,一張在網上流行.如果你明白了透視原理,就不會出現 道理我都懂,可...

仿射變換與透視變換

旋轉 線性變換 平移 向量加 縮放 線性變換 錯切,反轉 仿射變換是一種二維座標到二維座標之間的線性變換,它保持了二維圖形的 平直性 直線經過變換之後依然是直線 和 平行性 二維圖形之間的相對位置關係保持不變,平行線依然是平行線,且直線上點的位置順序不變 任意的仿射變換都能表示為乘以乙個矩陣 線性變...