关于变换

做图像处理或者数据增强的过程中,经常需要用得各种变换来处理图片。本文详细的说明了线性变换、仿射变换、透视变换的定义、几何意义、学习表达。重点给出透视变换的计算过程,并给出python实现代码。经验证和opencv的结果是一样的。 虽然opencv或者其他的库有现成的函数可供调用,但是我们还是需要明白这些函数输出的意义。比如opencv的getAffineTransform返回一个2*3的矩阵,这个2*3矩阵的意义是什么? 线性变换是仿射变换的特例,仿射变换是透视变换的特例 一、线性变换 1.1线性变换的定义 如果$f: V->W$满足如下两条性质,那么$f$就是线性变换 可加性(additivity):$f(x+y) = f(x)+f(y)$ 齐次性(homogeneity):$f(ax) = af(x)$ 当然也可以把这两个性质合并一下, 对任意的$a$下式总成立: $f(x+ay)=f(x)+af(y)$ 那么思考一下下面两个变换是不是线性变换 (1)$f(x,y) = x+2y$ (2)$f(x,y) = x+1$ 第一式子是线性变换,但是第二个式子是不满足齐次性的。因为$f(ax)=ax+1 ≠ a(x+1)$ 从齐次性可以看出,线性变换一定是过零点的 1.2线性变换的几何意义 满足如下几何性质 变换前是直线的,变换后依然是直线 直线比例保持不变 变换前是原点的,变换后依然是原点 二、仿射变换 2.1 仿射变换的几何意义 仿射变换从几何意义看不需要满足线性变换的第三点,即仿射变换满足如下两点即可 变换前是直线的,变换后依然是直线 直线比例保持不变 三、常见的变换 (Identity)恒等变换 (Translation)平移变换 (Rotation)旋转变换 (Scaling)尺度变换 (Reflection)反射变换 (Shear)错切 示意图如下 图片from 仿射变换及其变换矩阵的理解 在上面所有的变换中只有平移变换不是线性变换(不满足齐次性),其他的都是线性变换 所以仿射变换就是线性变换+平移 四、仿射变换和线性变换的数学表达 $Y = AX+b$ 其中A是一个m*n的矩阵,b是一个n维的向量。 其中 A表示线性变换,b表示平移 。A,b合在一起就可以表示一个仿射变换 上式可以写如下两个形式,用矩阵的方式方便计算 1、 $$Y = [A|b]*\left[\begin{matrix}X\\1 \end{matrix}\right]$$ 2、 $$ \left[\begin{matrix}Y\\1 \end{matrix}\right] = \left[\begin{matrix}A & b \\0 & 1 \end{matrix}\right] * \left[\begin{matrix}X\\1 \end{matrix}\right] $$...

十一月 29, 2021 · 2 分钟 · pan