提起线性代数,老师似乎只会告诉我们矩阵的应用范围很广,很重要。但是
一学期学下来,大家似乎也只会做题并不知道矩阵是如何运用的。一开始的我也是很疑惑,所学的知识似乎和实际的运用丝毫挂不上边。比如,以前听人说图像矩阵可以旋转。但是如何旋转,怎么旋转一直都不了解。虽然上网百度网上只是给出了图像旋转的公式,但却没有给出具体的解释。经过一番钻研还是了解了图像旋转的全过程,这里分享给大家,希望对大家有所帮助。
图像旋转的步骤
首先,大家要先了解图像旋转的步骤有哪些,只有知道自己每一步在做什么才不致于迷茫:
我们先读取一张图片,想象将图片放入一个坐标系中,图片的左上角与坐标原点重合,这时候的图片矩阵的索引与坐标系中的坐标(x,y)相吻合。再接着以图片对应的每一个(x,y)坐标进行一定角度的旋转得到(x1,y1),这时候的坐标x1,y1有的可能为负值,这样的负值在矩阵的索引中是不科学的。所以我们需要将负值变为正值,这相当于平移到正值的象限,平移后的坐标为(x2,y2)。最后将原图像矩阵根据索引(x,y)得到像素值,并将其赋值给相对应的矩阵索引(x2,y2)。这样就完成了。
图文并茂才能更好的理解,下面看图:
实现难点
下面我们就来说旋转矩阵是怎么来的以及它是什么样子的。
假设一个点为(x,y),旋转角度为 θ \theta θ。在直角坐标系中难以表示旋转,我们以极坐标系来表示: x 2 + y 2 = r 2 x = r cos α y = r sin α x^2+y^2 = r^2\qquad x = r\cos\alpha \qquad y = r\sin\alpha x2+y2=r2x=rcosαy=rsinα
则旋转后的坐标为: x = r cos ( α − θ ) y = r sin ( α − θ ) x = r\cos(\alpha-\theta) \qquad y = r\sin(\alpha-\theta) x=rcos(α−θ)y=rsin(α−θ)
化简后为: x 1 = x cos θ + y sin θ y 1 = y cos θ − x sin θ x1 = x\cos\theta+y\sin\theta \qquad y1 = y\cos\theta-x\sin\theta x1=xcosθ+ysinθy1=ycosθ−xsinθ
根据化简后的公式可得出矩阵计算公式:
[ x y ] ∗ [ cos θ − sin θ sin θ cos θ ] = [ x 1 y 1 ] \begin{bmatrix}x & y\\ \end{bmatrix}*\begin{bmatrix}\cos\theta&-\sin\theta\\ \sin\theta&\cos\theta\\ \end{bmatrix}=\begin{bmatrix}x1 & y1\\ \end{bmatrix} [