仿射变换
一个仿射变换可以通过旋转、缩放、平移等元素组合而成,其中旋转和缩放可以表示为一个变换矩阵,平移可以表示为另一个变换矩阵,因此可以通过旋转矩阵和平移矩阵得到仿射矩阵。
具体地,假设给定一个二维平面上的仿射变换,它包括一个旋转矩阵 \(R\) 和一个平移矩阵 \(T\),则可以通过以下方式得到仿射矩阵 \(A\):
其中 \(R_{11}\) 和 \(R_{12}\) 分别表示 \(R\) 矩阵第一行的前两个元素,\(R_{21}\) 和 \(R_{22}\) 分别表示 \(R\) 矩阵第二行的前两个元素,\(T_x\) 表示 \(T\) 矩阵第一行的第三个元素,\(T_y\) 表示 \(T\) 矩阵第二行的第三个元素。
通过这样的方式,可以将旋转和平移两个变换合成为一个仿射变换,从而方便地对平面上的点进行变换操作。
两个仿射矩阵融合可以通过相乘得到一个新的仿射矩阵。具体方法如下:
假设有两个仿射矩阵\(M_1\)和\(M_2\),它们的表示形式分别为:
其中\(A_1\)和\(A_2\)是\(2 \times 2\)的矩阵,\(t_1\)和\(t_2\)是\(2 \times 1\)的向量。
将它们相乘得到一个新的仿射矩阵\(M=M_1M_2\),具体计算方法如下:
这里使用了矩阵相乘的分配律和结合律进行计算。
得到新的仿射矩阵\(M\)后,就可以用它来对点或向量进行仿射变换了。
@brief Inverts an affine transformation.
The function computes an inverse affine transformation represented by \f\(2 \times 3\f\) matrix M:
\f[\begin{bmatrix} a_{11} & a_{12} & b_1 \ a_{21} & a_{22} & b_2 \end{bmatrix}\f]
The result is also a \f\(2 \times 3\f\) matrix of the same type as M.
@param M Original affine transformation.
@param iM Output reverse affine transformation.
\f[patch(x, y) = src(x + \texttt{center.x} - ( \texttt{dst.cols} -1)0.5, y + \texttt{center.y} - ( \texttt{dst.rows} -1)0.5)\f]
本文来自博客园,作者:InsiApple,转载请注明原文链接:https://www.cnblogs.com/InsiApple/p/17197679.html