仿射变换可以表示平移,旋转以及缩放,通常使用
2
×
3
2\times 3
2×3 矩阵来表示仿射变换,在opencv中,其本质是两幅图片之间的转换关系,而这种关系,只需要获得仿射前后对应的三点即可以用逆矩阵求出:
A
=
[
a
00
a
01
a
10
a
11
]
2
×
2
B
=
[
b
00
b
10
]
2
×
1
A = \begin{bmatrix} a_{00} & a_{01} \\ a_{10} & a_{11} \end{bmatrix}_{2 \times 2} B = \begin{bmatrix} b_{00} \\ b_{10} \end{bmatrix}_{2 \times 1}
A=[a00a10a01a11]2×2B=[b00b10]2×1
M
=
[
A
B
]
=
[
a
00
a
01
b
00
a
10
a
11
b
10
]
2
×
3
M = \begin{bmatrix} A & B \end{bmatrix} = \begin{bmatrix} a_{00} & a_{01} & b_{00} \\ a_{10} & a_{11} & b_{10} \end{bmatrix}_{2 \times 3}
M=[AB]=[a00a10a01a11b00b10]2×3
考虑到我们要使用矩阵 A 和 B 对二维向量
X
=
[
x
y
]
X = \begin{bmatrix}x \\ y\end{bmatrix}
X=[xy] 做变换, 所以也能表示为下列形式:
T
=
A
⋅
[
x
y
]
+
B
T = A \cdot \begin{bmatrix}x \\ y\end{bmatrix} + B
T=A⋅[xy]+Bor
T
=
M
⋅
[
x
,
y
,
1
]
T
T = M \cdot [x, y, 1]^{T}
T=M⋅[x,y,1]T
T
=
[
a
00
x
+
a
01
y
+
b
00
a
10
x
+
a
11
y
+
b
10
]
T = \begin{bmatrix} a_{00}x + a_{01}y + b_{00} \\ a_{10}x + a_{11}y + b_{10} \end{bmatrix}
T=[a00x+a01y+b00a10x+a11y+b10]
reference:仿射变换