![MATLAB计算机视觉实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/900/23400900/b_23400900.jpg)
上QQ阅读APP看书,第一时间看更新
2.6 图像的旋转变换
提到旋转,首先要解决“绕着什么转”的问题。通常的做法是:以图像的中心为圆心旋转,将图像上所有的像素都旋转一个相同的角度。图像的旋转变换是图像的位置变换,但旋转后,图像的大小一般会改变。和图像平移变换一样,在图像旋转变换中,可以把转出显示区域的图像截去,旋转后也可以扩大图像范围以显示所有的图像。
采用不裁掉转出、部分旋转后图像放大的做法,首先需要给出变换矩阵。在坐标系中,将一个点顺时针旋转a度,r为该点到原点的距离,b为r与x轴之间的夹角。在旋转过程中,r保持不变。
设旋转前(x0,y0)的坐标分别为x0=rcosb,y0=rsinb。当旋转a角度后,坐标(x1,y1)的值分别为
![](https://epubservercos.yuewen.com/E02557/12023547304528306/epubprivate/OEBPS/Images/Figure-P83_11909.jpg?sign=1738831104-oE9zTLzTmn8UnBUgPYhjjbwImJKXIq0t-0-74843e212f0d0adf779ebd7b5f20cb42)
以矩阵的形式表示为
![](https://epubservercos.yuewen.com/E02557/12023547304528306/epubprivate/OEBPS/Images/Figure-P83_11910.jpg?sign=1738831104-ZMrLNscPvBFaGZffg8bYtcHWsnZ2WzXN-0-c58ce5717f671e2a1d99ad008a63e118)
在式(2.6.2)中,坐标系xOy以图像的中心为原点,以右为x轴正方向,以上为y轴正方向。
设图像的宽带为w,高度为h,容易得到
![](https://epubservercos.yuewen.com/E02557/12023547304528306/epubprivate/OEBPS/Images/Figure-P83_11912.jpg?sign=1738831104-HkOAjlt08jtgxghNqzBnnbLlJeGC54EO-0-5aea8acc8b67de4bf7a9fa61e01b978a)
逆变换为
![](https://epubservercos.yuewen.com/E02557/12023547304528306/epubprivate/OEBPS/Images/Figure-P83_11913.jpg?sign=1738831104-j5VawndrJ24YkIm9gDQRT326ZzaJTUgy-0-c13b52fcb95fe7b42f674b8b0e5c3782)
有了式(2.6.1)~式(2.6.4),可以将旋转变换分成3个步骤来完成。
(1)将坐标系x′O′y′变成xOy。
(2)将该点顺时针旋转a角。
(3)将坐标系xOy变回x′O′y′,这样,就得到了如下的变换矩阵(是上面3个矩阵的级联)。
![](https://epubservercos.yuewen.com/E02557/12023547304528306/epubprivate/OEBPS/Images/Figure-P83_11916.jpg?sign=1738831104-jFUNKPbAmXf3dpGPcDQPY4AyMO7PYpTf-0-73487e2b9774656f4d0b4655c23c792c)
其中,wold、hold、wnew、hnew分别表示原图像的宽、高和新图像的宽、高。式(2.6.5)的逆变换为
![](https://epubservercos.yuewen.com/E02557/12023547304528306/epubprivate/OEBPS/Images/Figure-P83_11918.jpg?sign=1738831104-O5XyZRBXK0ATffcPLWyKeqrCcXxbuN6k-0-6213c5c051140a47653907892bdd7032)
这样,对于新图像中的每一点,就可以根据式(2.6.6)求出对应点原图像中的点,并得到它的灰度。如果超出原图像范围,则填成白色。要注意的是,由于有浮点运算,计算出来的点的坐标可能不是整数,需要采用取整处理,即找到最接近的点,这样会带来一些误差(图像可能会出现锯齿)。