Assignment 0
比较简单的环境配置,网上资料挺多的,这里推荐一个
链接
Transformation
03-Transformation
这一部分主要讲 2 D 2D 2D变换,通过引入矩阵来表示
剪切(shear)
缩放(scale)
旋转(Rotation,默认以原点为中心,逆时针旋转多少度)
平移(translate)
线性变换
用矩阵乘上输入坐标得到输出坐标的过程就叫做变换(矩阵是从右往左结合的缘故)
其实可以类比初中数学中的一次函数
而且可以发现一个性质:
x
′
x'
x′和
x
x
x的行数一样,推广一下其实代表着变换后得到的东西和之前的东西是一个性质的(比如直线变换后就会得到直线)。
齐次坐标
之前所有的变换都可以用上图的公式来实现,但是不难发现这不是一个线性变换,因为平移本身就不是线性变换而是仿射变换(Affine),而我们为了省事想要把所有变换都变成线性变换,这样处理起来也方便,不用把平移作为单独的case考虑。但是顺序上还是要先处理线性变换,再进行平移操作的处理(我理解是历史缘故)。
为了实现这个想法,就需要引入齐次坐标了。
齐次坐标其实就是引入了一个新变量,为0的话表示向量,为1表示点。
而且这也符合常规逻辑
V e c t o r ( 0 ) + V e c t o r ( 0 ) = V e c t o r ( 0 ) Vector(0) + Vector(0) = Vector(0) Vector(0)+Vector(0)=Vector(0)
P o i n t ( 1 ) + V e c t o r ( 0 ) = P o i n t ( 1 ) Point(1) + Vector(0) = Point(1) Point(1)+Vector(0)=Point(1)
P o i n t ( 1 ) − P o i n t ( 1 ) = V e c t o r ( 0 ) Point(1) - Point(1) = Vector(0) Point(1)−Point(1)=Vector(0)
P o i n t ( 1 ) + P o i n t ( 1 ) = ? ? ? Point(1) + Point(1) = ??? Point(1)+Point(1)=??? (点和点相加本来没有意义,但是可以运算让其变得有意义,eg:中点)
这样的话之前的所有变换矩阵都可以转换成
抽象出来其实就是
Lint:这里有个有意思的地方,旋转矩阵的逆矩阵和转置矩阵一样,也就代表旋转矩阵是正交矩阵
拆解变换
考虑一些复杂情况,不难发现有些图像矩阵的变换是通过上述几种变换的组合形成的,因此这时候就需要把它拆分成几种变化的组合顺序(注意顺序,因为矩阵不满足交换律),而且因为矩阵结合的顺序,因此我们处理变换时也通常是从右往左结合的,或者先把变换矩阵全部结合完成之后再和输入矩阵结合。
三维的话其实就是多了一维,和上面基本一样,这里不多说了。