仿射函数

知识点补漏:

1.仿射函数和线性函数的区别:

简单来说仿射变换就是线性变化加上一个平移。知乎上看到的一个很好的解释:搬---

作者:Cascade
链接:https://www.zhihu.com/question/20666664/answer/15790507
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

以下内容仅涉及图形变换,未考虑更为抽象的概念。
为了方便起见,以下叙述均采用平面直角坐标系。

一个矢量(1,2)可以表示为从原点指向该点的箭头。

你可以对这个矢量进行缩放,比如放大两倍就变成了(2,4)
这个操作可以表示为2 x(1,2)。也就是说放大k倍就是k(x,y)
上面的例子写成矩阵的话就是,这里用到了矩阵乘法。<img src="https://pic2.zhimg.com/b7962fe4cfb1a49a4fda71d2b93657e9_b.jpg" data-rawwidth="98" data-rawheight="51" class="content_image" width="98">这个很简单。你也可以把矩阵中的两个值弄成不一样的。那么如果你对一张图片操作的话,横竖两个方向上的缩放倍数不同图像就变形了。方的变成长方的。 这个很简单。你也可以把矩阵中的两个值弄成不一样的。那么如果你对一张图片操作的话,横竖两个方向上的缩放倍数不同图像就变形了。方的变成长方的。

你也可以对矢量进行旋转。
比如想把向量(1,0)逆时针旋转45度。旋转以后的向量和这个向量会构成一个三角形。旋转以后的是斜边,长度和原来向量长度一样。用勾股定理计算一下。三角形的顶点会变成(√2/2, √2/2)。这个看起来比较麻烦。但是如果你明白矩阵乘法是怎么算的,那很容易理解为什么一个旋转矩阵会是这样的:<img src="https://pic4.zhimg.com/9c70a69a8f0b3dcebc73b3aeccb2a677_b.jpg" data-rawwidth="159" data-rawheight="56" class="content_image" width="159">
有些变换,比如反射。相当于你在第一种情况里面对角线上的两个值有一个是负的。那么对应的就会把这个轴翻转过去。别的都很好理解。

这些变换被称为线性变换。它提供了把一个图像扭成任意形状的方法。

但在二维坐标系内,用2x2的矩阵所不能表示的变换就是平移操作。你在上面所有的操作无非都是给向量的两个分量乘一个系数。没办法再加一个数。想要表达这种计算就得给你的矩阵变成这样:<img src="https://pic4.zhimg.com/6f0b8ce45cb1d2f89083f9e39d8311d7_b.jpg" data-rawwidth="95" data-rawheight="64" class="content_image" width="95">
这样的话你的(x,y)向量就没法乘进去了。你可以在后面添个1,编程(x,y,1)这样的。那么变换以后的结果就是
(xa1+yb1+c1,xa2+yb2+c2,1),去掉最后面的1,前面的就是线性变换加上一个平移变换的结果。

你可能感兴趣的:(机器学习)