- MATLAB计算机视觉实战
- 赵小川 何灏 唐弘毅
- 621字
- 2021-03-30 17:55:25
2.6 图像的旋转变换
提到旋转,首先要解决“绕着什么转”的问题。通常的做法是:以图像的中心为圆心旋转,将图像上所有的像素都旋转一个相同的角度。图像的旋转变换是图像的位置变换,但旋转后,图像的大小一般会改变。和图像平移变换一样,在图像旋转变换中,可以把转出显示区域的图像截去,旋转后也可以扩大图像范围以显示所有的图像。
采用不裁掉转出、部分旋转后图像放大的做法,首先需要给出变换矩阵。在坐标系中,将一个点顺时针旋转a度,r为该点到原点的距离,b为r与x轴之间的夹角。在旋转过程中,r保持不变。
设旋转前(x0,y0)的坐标分别为x0=rcosb,y0=rsinb。当旋转a角度后,坐标(x1,y1)的值分别为
以矩阵的形式表示为
在式(2.6.2)中,坐标系xOy以图像的中心为原点,以右为x轴正方向,以上为y轴正方向。
设图像的宽带为w,高度为h,容易得到
逆变换为
有了式(2.6.1)~式(2.6.4),可以将旋转变换分成3个步骤来完成。
(1)将坐标系x′O′y′变成xOy。
(2)将该点顺时针旋转a角。
(3)将坐标系xOy变回x′O′y′,这样,就得到了如下的变换矩阵(是上面3个矩阵的级联)。
其中,wold、hold、wnew、hnew分别表示原图像的宽、高和新图像的宽、高。式(2.6.5)的逆变换为
这样,对于新图像中的每一点,就可以根据式(2.6.6)求出对应点原图像中的点,并得到它的灰度。如果超出原图像范围,则填成白色。要注意的是,由于有浮点运算,计算出来的点的坐标可能不是整数,需要采用取整处理,即找到最接近的点,这样会带来一些误差(图像可能会出现锯齿)。