
3.3 图像的几何变换
几何变换是图像的一种基本变换,它通常包括图像的平移、镜像变换、转置、缩放和旋转等。
3.3.1 图像的平移
图像平移就是将图像中所有点都按照指定的平移量水平或垂直移动。图3-17是没有平移过的原始图像和水平、垂直都平移100像素后的图像。

图3-17 原始图像和向右下平移后的图像
设(x0,y0)为原图像上的一点,图像水平平移量为tx,垂直平移量为ty,则平移后点(x0,y0)坐标将变为(x1,y1),如图3-18所示。

图3-18 图像平移示意图
这样平移后的图像上的每一点都可以在原图像中找到对应的点。对于不在原图中的点,可以直接将它的像素值统一设置为0 或者255(对于灰度图就是黑色或白色)。同样,若有点不在原图中,也就说明原图中有点被移出显示区域。如果不想丢失被移出的部分图像,可以将新生成的图像宽度扩大|tx|,高度扩大|ty|。
3.3.2 图像的镜像变换
图像的镜像(mirror)变换分为两种:一种是水平镜像,另一种是垂直镜像。图像的水平镜像操作是将图像左半部分和右半部分以图像垂直中轴线为中心镜像进行对换,图像的垂直操作是将图像上半部分和下半部分以图像水平中轴线为中心镜像进行对换。
设图像高度为lHeight,宽度为lWidth,原图中(x0,y0)经过水平镜像后坐标变为(lWidth-x0,y0)。如图3-19所示。

图3-19 图像的水平镜像
同样,(x0,y0)经过垂直镜像后坐标将变为(x0,lHeight-y0),按照上面的变换,可以非常简单地实现图像的水平和垂直镜像操作。如图3-20所示。

图3-20 图像的垂直镜像
3.3.3 图像的转置
图像的转置(transpose)操作是将图像像素的x坐标和y坐标互换。该操作将改变图像的大小,使图像的高度和宽度互换。
图像转置和下面将介绍的图像旋转是不同的,仅通过图像旋转是不可能实现图像转置的。旋转操作必须结合镜像操作才能实现图像的转置,即首先水平镜像,然后逆时针旋转90°。如图3-21所示。

图3-21 图像的转置
3.3.4 图像的缩放与旋转
上面介绍的几种图像几何变换都是1∶1的变换,本节介绍的图像变换将涉及图像的缩放和旋转操作。图像的缩小操作过程就是如何在现有的信息里挑选所需要的有用信息。而在图像的放大操作中,则需要对尺寸放大后所多出来的空格填入适当的像素值,这是信息的估计问题,所以较图像的缩小要难些。这些操作产生的图像中的像素可能在原图中找不到相应的像素点,这样就必须进行近似处理。一般的方法是直接赋值为和它最相近的像素值,也可以通过一些插值算法来计算。例如,图3-22所示是未放大的图像,图3-23所示是两种方法放大后的图像,其中,左图是按最近邻方法放大,右图是按插值法放大。

图3-22 未放大的图像

图3-23 两种方法放大两边后的图像
一般地,按比例将原图放大k倍,如果按照最近邻法则需要将一个像素值添加在新图像的k×k子块中。显然,如果放大倍数太大,按照这种方法处理会出现马赛克效应。当图像的长宽不同时,图像将在长和宽的方向按不同比例放大,会产生图像的几何畸变。为了提高变换后的图像质量,常常采用线性插值法。
下面介绍一种相对复杂的几何变换:图像的旋转。一般图像的旋转是以图像的中心为原点,旋转一定的角度。旋转后,图像的大小一般会改变。和图像平移一样,既可以把转出显示区域的图像截去,也可以扩大图像范围以显示所有的图像。如图3-24~图3-26所示。

图3-24 旋转前的图像

图3-25 旋转角度θ后的图像(放大)

图3-26 旋转角度θ后的图像(旋转出部分被截)