![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=1739261024-J8NyPtlidvRw3K8a7kUF1tD2wkSNlDbC-0-4e3ebe70e503f8b89993e1b6de0b4cee)
以矩阵的形式表示为
![](https://epubservercos.yuewen.com/E02557/12023547304528306/epubprivate/OEBPS/Images/Figure-P83_11910.jpg?sign=1739261024-pCHXToyEBLddtDzjuT4dj42grqNZPZPx-0-e9fad889c216e85792c2d87986feccb6)
在式(2.6.2)中,坐标系xOy以图像的中心为原点,以右为x轴正方向,以上为y轴正方向。
设图像的宽带为w,高度为h,容易得到
![](https://epubservercos.yuewen.com/E02557/12023547304528306/epubprivate/OEBPS/Images/Figure-P83_11912.jpg?sign=1739261024-XdkWsr8rXGfG3Z944QgEE6kEmtKAL0hY-0-aca56df263dbdb5a5c135d9402726783)
逆变换为
![](https://epubservercos.yuewen.com/E02557/12023547304528306/epubprivate/OEBPS/Images/Figure-P83_11913.jpg?sign=1739261024-BVkqkE4QpB5WY53zXdeDKkb5lknkdoCg-0-1d91df951b652d295e9eab3591ae26b6)
有了式(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=1739261024-A7qsL07Jo3MS8qGIZMqW3LXLuCUMqbDh-0-472aa5b164f8eb7b5807a5ce81a6861b)
其中,wold、hold、wnew、hnew分别表示原图像的宽、高和新图像的宽、高。式(2.6.5)的逆变换为
![](https://epubservercos.yuewen.com/E02557/12023547304528306/epubprivate/OEBPS/Images/Figure-P83_11918.jpg?sign=1739261024-VqrCZfvey6dLIv6W1aPdI77S6uBLPlIf-0-1f9f65f02fed08d376ffb8ef94f5e618)
这样,对于新图像中的每一点,就可以根据式(2.6.6)求出对应点原图像中的点,并得到它的灰度。如果超出原图像范围,则填成白色。要注意的是,由于有浮点运算,计算出来的点的坐标可能不是整数,需要采用取整处理,即找到最接近的点,这样会带来一些误差(图像可能会出现锯齿)。