旋转有一个绕着什么转的问题。通常的做法是以图像的中心为圆心旋转,将图像上的所有像素都旋转一个相同的角度。图像的旋转变换是图像的位置变换,但旋转后图像的大小一般会改变。和平移变换一样,既可以把转出显示区域的图像截去,也可以扩大显示区域以显示完整的图像,如下图所示。
我们先讨论不裁剪转出部分,扩大显示区域的情况。在下图所示的平面坐标系中,A0逆时针旋转θ变成A1,r是该点到原点的距离,则旋转前:
旋转后A1的坐标为
写成矩阵的形式为:
其逆变换矩阵如下:
上面公式是旋转变换的基本公式,坐标系是以图像的中心为原点,向右为x轴正方向,向上为y轴正方向。上述旋转是绕坐标原点进行的,如果是绕指定点(a,b)旋转,那么应该先将坐标系平移至改点,再旋转,然后平移至新的坐标原点。
下面推导坐标系平移的变换公式。坐标系Ⅰ是图像的坐标系,坐标系Ⅱ是旋转坐标系,坐标系Ⅱ的原点在坐标系中为(a,b),如下图所示。
两种坐标系之间的转换为:
逆变换为:
有了上面的公式,就可以很方便的推导图像旋转变换的表达式。假设图像未旋转时候旋转中心的坐标是(a,b),旋转后中心点的坐标为(c,d)(在新的坐标系下,以旋转后图像的左上角为原点),则可以把变换分为3步:
第一步,将坐标系Ⅰ变成Ⅱ;
第二步,旋转θ(逆时针为正,顺时针为负);
第三步,将坐标系Ⅱ变换回Ⅰ。这样就得到了总的变换矩阵。
设原图像某像素点的坐标为(x0,y0),旋转后在目标图像的坐标为(x1,y1),则旋转变换的矩阵表达式为&