1. 仿射變換
1) 用途
旋轉(zhuǎn) (線性變換)宣肚,平移(向量加).縮放(線性變換)城菊,錯(cuò)切苛谷,反轉(zhuǎn)
2) 方法
仿射變換是一種二維坐標(biāo)到二維坐標(biāo)之間的線性變換赊锚,它保持了二維圖形的“平直性”(直線經(jīng)過(guò)變換之后依然是直線)和“平行性”(二維圖形之間的相對(duì)位置關(guān)系保持不變盗忱,平行線依然是平行線酱床,且直線上點(diǎn)的位置順序不變)。任意的仿射變換都能表示為乘以一個(gè)矩陣(線性變換)趟佃,再加上一個(gè)向量 (平移) 的形式.
以上公式將點(diǎn)(x,y)映射到(x’,y’)扇谣,在OpenCV中通過(guò)指定一個(gè)2x3矩陣實(shí)現(xiàn)此功能(公式中的m矩陣,是線性變換和平移的組合闲昭,m11,m12,m21,m22為線性變化參數(shù)罐寨,m13,m23為平移參數(shù),其最后一行固定為0,0,1汤纸,因此衩茸,將3x3矩陣簡(jiǎn)化為2x3)
3) 舉例
a) 以原點(diǎn)為中心旋轉(zhuǎn),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) 具體應(yīng)用
在OpenCV中楞慈,仿射變換通過(guò)函數(shù)cvWrapAffine(src,dst,mat)實(shí)現(xiàn)幔烛,其中mat是2x3的仿射矩陣,該矩陣可以利用函數(shù)cvGetAffineTransform(srcTri,dstTri,mat)得到囊蓝,其中mat是被該函數(shù)填充的仿射矩陣饿悬,srcTri和dstTri分別是由三個(gè)頂點(diǎn)定義的平行四邊形(由于是平行四邊形,只需要指定三個(gè)頂點(diǎn)即可確定)聚霜,即:給出變換前的ABCD和變換后的A’B’C’D’
2. 透視變換(投影變換)
1) 用途
將2D矩陣圖像變換成3D的空間顯示效果狡恬,全景拼接.
2) 方法
透視變換是將圖片投影到一個(gè)新的視平面,也稱(chēng)作投影映射.它是二維(x,y)到三維(X,Y,Z)蝎宇,再到另一個(gè)二維(x’,y’)空間的映射.相對(duì)于仿射變換弟劲,它提供了更大的靈活性,將一個(gè)四邊形區(qū)域映射到另一個(gè)四邊形區(qū)域(不一定是平行四邊形).它不止是線性變換.但也是通過(guò)矩陣乘法實(shí)現(xiàn)的姥芥,使用的是一個(gè)3x3的矩陣兔乞,矩陣的前兩行與仿射矩陣相同(m11,m12,m13,m21,m22,m23),也實(shí)現(xiàn)了線性變換和平移凉唐,第三行用于實(shí)現(xiàn)透視變換.
以上公式設(shè)變換之前的點(diǎn)是z值為1的點(diǎn)庸追,它三維平面上的值是x,y,1,在二維平面上的投影是x,y台囱,通過(guò)矩陣變換成三維中的點(diǎn)X,Y,Z淡溯,再通過(guò)除以三維中Z軸的值,轉(zhuǎn)換成二維中的點(diǎn)x’,y’.從以上公式可知簿训,仿射變換是透視變換的一種特殊情況.它把二維轉(zhuǎn)到三維咱娶,變換后,再轉(zhuǎn)映射回之前的二維空間(而不是另一個(gè)二維空間).
3) 具體應(yīng)用
在OpenCV中煎楣,透視變換通過(guò)函數(shù)cvWrapPerspective(src,dst,mat)實(shí)現(xiàn), 與仿射變換不同的是豺总,透視矩陣是一個(gè)3x3的矩陣,在計(jì)算矩陣時(shí)择懂,可利用函數(shù)cvGetPerspectiveTransform(srcQuad,dstQuad,mat)喻喳,由于不再是平行四邊形,需要提供四邊形的四個(gè)頂點(diǎn)
3. 區(qū)別
仿射變換后平行四邊形的各邊仍操持平行困曙,透視變換結(jié)果允許是梯形等四邊形表伦,所以仿射變換是透視變換的子集