第5章图像变换 图像变换是指按一定的规则,从一幅图像加工成另一幅图像的处理过程。仅通过对 图像的像素位置进行图像形状改变的变换,称为图像的几何变换,4节中介绍的几何 如4. 畸变的空间变换即为几何变换。另一种常用的变换是利用数学变换把图像从空域变换 到其他域(如频域)进行分析和处理,称为图像的正交变换。例如,常用正交函数或正交 矩阵表示图像而对原图像所作的二维线性可逆变换。一般称原始图像为空间域图像,变 换后的图像为转换域图像,转换域图像可反变换为空间域图像。 常见的几何变换有平移变换、旋转变换、比例变换和对称变换等。这些几何变换应 用极为广泛,从航空航天、卫星云图到游戏场景制作等都有涉及。例如,从卫星上获得的 图像,由于摄像装置被安装在卫星的遥感器或飞机的测试平台上,其位置和姿态不断地 变化,拍摄的图像存在平移、旋转、缩放等变形,因此需要进行一系列几何变换才能得到 和真实接近的图像,我们经常在天气预报中见到的卫星云图就是利用几何变换处理过的 图像。例如,游戏场景制作中的倒影,如图5-1所示,就是利用对称变换中的垂直对称来 实现的。图5-2所示为左右对称的图片,对这类图片进行分析处理时,就可以先处理一半 图像,然后利用对称性质生成另一半图像,这样可以大大节省处理时间。 图5-1 垂直对称的图像(倒影) 图5-3所示的图像中有很多面包树,如果利用程序或软件来制作一幅这样的数字图 像,那么在建模的时候,可以先建立一棵标准的面包树,然后根据需要进行综合变换,生 成需要的场景。从图5-3中可以看到,如果以标号为1的树作为标准,要生成标号为2的 树就需要进行放大的变换;要生成标号为3的树就需要进行多种变换,例如,树干要变 细,高度要变高,还要进行错切和旋转等变换。利用图像的几何变换可以把简单的个体 组合成具有复杂视觉效果的图像。 图5-2 水平对称的图像 图5-3 综合变换图像示例 在图像处理中,正交变换被广泛应用于图像特征抽取、增强、压缩和图像编码等处理 中,一般常用的变换有傅里叶变换、余弦变换、沃尔什变换和小波变换等。 5.图像的几何变换 1 图像的几何变换,就是按照需要使图像在大小、形状和位置等方面产生变换。为了 能够用统一的矩阵线性变换形式来表示和实现这些常见的图像几何变换,需要引入一种 新的坐标,即齐次坐标。把二维图像中的点坐标(x,y)表示成齐次坐标(Hx ,Hy , H ), 当 H =1时,(y,就称为点(y) x,1) x,的规范化齐次坐标。 规范化齐次坐标的前两个数是相应二维点的坐标,仅在原坐标中增加了 H =1的附 加坐标。 由点的齐次坐标(Hx ,Hy , H )求点的规范化齐次坐标(x,1), 可按式(5-1) y,进行: x= Hx y= Hy (5-1) HH 1 21 齐次坐标的几何意义相当于点(x,y)落在三维空间H =1的平面上,如图5-4所示, 如果将XOY 平面内的三角形abc 的各顶点表示成齐次坐标(xi,yi,1)(i=1,2,3)的形 式,则这些齐次坐标就变成H =1平面内的三角形a1b1c1 的各顶点坐标了。 图5-4 齐次坐标的几何意义 利用齐次坐标实现二维图像几何变换的基本变换过程如下。 (1)将2×n 阶的二维点集矩阵 x0i y0i é . êê ù . úú 2×n 表示成齐次坐标 x0i y0i 1 é . êêêê ù . úúúú 3×n 。 (2)乘以相应的变换矩阵即可完成。 设变换矩阵T 为 T = a b p c d q I m s é . êêêê ù . úúúú (5-2) 则图像几何变换用公式表示为 Hx'1 Hx'2 … Hx'n Hy'1 Hy'2 … Hy'n H H … H é . êêêê ù . úúúú 3×n =T × x1 x2 … xn y1 y2 … yn 1 1 … 1 é . êêêê ù . úúúú 3×n (5-3) 图像上各点的新齐次坐标规范化后的点集矩阵为 x'1 x'2… x'n y'1y'2 … y'n 1 1 … 1 é . êêêê ù . úúúú 3×n 引入齐次坐标后,表示二维图像几何变换的3×3矩阵的功能就完善了,可以用它完 成二维图像的各种几何变换。下面讨论3×3变换矩阵中各元素在变换中的功能。几何 变换3×3矩阵的一般形式为 T = a b p c d q I m s é . êêêê ù . úúúú (5-4) 3×3的变换矩阵T 可以分成4个子矩阵。其中,a b c d é . êê ù . úú 2×2 这一子矩阵可以使图像 实现恒等、比例、对称(或镜像)、错切和旋转变换;[pq]T 这一列矩阵可以使图像实现平 移变换;[Im]这一行矩阵可以使图像实现透视变换,但当I=0、 m =0时它无透视作用; [这一元素可以使图像实现全比例变换。 s] 5.1.1 灰度插值 在数字图像中,灰度值仅在整数位置坐标(x,y)处被定义,但是在图像的几何变换 中,当输入图像的位置坐标(y) 输出图像的位置坐标可能为非整数,反过来 x,为整数时, 也是如此。例如缩放和旋转,输出图像上的像素点坐标有可能对应原图像上多个像素点 之间的位置,此时就需要通过灰度值插值处理计算出该输出点的灰度值。灰度值插值处 理可采用如下两种方法。 第一种方法是把几何变换想象成将输入图像的灰度值一次一像素地转移到输出图 像中。如果一个输入像素被映射到4个输出像素之间的位置,则其灰度值就依据插值算 法在4个输出像素之间进行分配。这种灰度值插值处理方法称为像素移交(pixelcaryover)或向前映射法,如图5-5(a)所示。 图5-5 灰度值插值处理 (a)像素移交;(b)像素填充 另一种更有效的灰度级插值处理方法是像素填充(pixelfiling),又称向后映射法。 输出图像灰度值一次一像素地映射到原始(输入)图像中,以便确定原始图像灰度值。如 果一个输出像素被映射到4个输入像素之间,则原始图像灰度值由灰度值插值决定,如 图5-5(b)所示。向后空间变换是向前变换的逆变换。在像素填充法中,变换后(输出)图 像的像素通常被映射到原始(输入)图像中的非整数位置,即位于4个输入像素之间。因 此,为了确定与输入图像相对应位置的灰度值,必须进行插值运算。常用的图像插值算 法有最近邻插值、双线性插值和三次卷积插值。 1.最近邻插值 最简单的插值方法是零阶插值,又称最近邻插值或最近邻域法,即选择离像素所映 射位置最近的输入像素的灰度值为插值结果。若几何变换后输出图像上坐标为(x,的 y) 1 23 像素点在原图像上的对应值坐标为(u,v),则最近邻插值公式为 g(x,y)=f(x,y) x =[u +0.5] y =[v +0.5] ì . í .. .. (5-5) 其中,g(x,y)为输出图像像素点(x,y)的灰度值,f(x,y)为输入图像像素点(x,y)的灰 度值,[…]表示求整。 与其他两种插值算法相比,最近邻插值算法具有简单快速的特点,但是放大后的图 像有很严重的马赛克和边缘锯齿现象。 2.双线性插值 双线性插值又称一阶插值,和最近邻插值相比可产生更好的效果,如边缘锯齿和马 赛克现象得到缓解,但是运算速度比最近邻插值要慢。图5-6中有Q12、Q22、Q11、Q214 个点,要插值的点为P 点,此时需要使用双线性插值。首先在x 轴方向上,对R1 和R2 两个点进行插值,然后根据R1 和R2 的灰度值对P 点进行插值,这就是所谓的双线性 插值。 图5-6 双线性插值示例 在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在 x、y 两个方向分别进行一次线性插值。 假如想得到未知函数f 在点P(x,y)的值,并且已知函数f 在Q11=(x1,y1)、Q12= (x1,y2)、Q21=(x2,y1)及Q22=(x2,y2)4个点的值。 首先在x 方向进行线性插值,得到 f(R1)≈ x2 -x x2 -x1 f(Q11)+ x -x1 x2 -x1 f(Q21), 其中R1 =(x,y1) f(R2)≈ x2 -x x2 -x1 f(Q12)+ x -x1 x2 -x1 f(Q22), 其中R2 =(x,y2) ü t y .. . .. (5-6) 然后在y 方向进行线性插值,得到 f(P)≈ y2 -y y2 -y1 f(R1)+ y -y1 y2 -y1 f(R2) (5-7) 这样就得到所要的结果f(x,y): f(x,f(Q11) x2-x)(-y)+ y)≈(-x1)(-y1)(y2 x2y2 f(Q21) (-x1)(-y1)(x-x1)(-y) + x2y2y2 f(Q12) -x)((-x1)(-y1)(x2y-y1) + x2y2 f(Q22) -x1)((8) (-x1)(-y1)( x y-y1) 5 x2y2 如果选择一个坐标系统使得 f 的4个已知点坐标分别为(0,0)、(0,1)、(1,1)、 0), x, (1,那么在这4个点中插入一个点(y), 线性内插 x 方向为 f(x,0)=f(0,0)+x[f(1,0)-f(0,0)] 线性内插 y 方向为 f(x,1)=f(0,1)+x[f(1,1)-f(0,1)] (5-9) f(y)=f(0)+y[f(-f(5-10) x,x,x,1)x,0)] ( 可见,双线性插值实际上是用双曲抛物面和4个已知点来拟合,如图5-7所示。 图5-7 双线性插值示意图 双线性插值法计算量大,但缩放后图像质量高,不会出现像素值不连续的情况。由 于双线性插值法具有低通滤波器的性质,会使高频分量受损,所以可能会使图像轮廓在 一定程度上变得模糊,如图5-17(c)所示。 3. 三次卷积插值 三次卷积插值是一种更加复杂的插值方式。该算法利用待采样点周围16 像素点的 灰度值作三次插值,不仅考虑到了4个直接相邻点的灰度影响,而且考虑到了各相邻点 间灰度值变化率的影响。目的像素值f(j+v)可由如下插值公式得到: i+u, f(j+v)[·[B]·[(511) i+u,=A]C] 其中 [A]S(u+0)S(-1)S(-2)] =[u+1)S(uu 1 25 [B]= f(i-1,j-1) f(i-1,j) f(i-1,j+1) f(i-1,j+2) f(i,j-1) f(i,j) f(i,j+1) f(i,j+2) f(i+1,j-1) f(i+1,j) f(i+1,j+1) f(i+1,j+2) f(i+2,j-1) f(i+2,j) f(i+2,j+1) f(i+2,j+2) é . êêêêê ù . úúúúú [C]= S(v +1) S(v) S(v -1) S(v -2) é . êêêêê ù . úúúúú S(ω)= 1-2|ω|2 +|ω|3, 0≤|ω|<1 4-8|ω|+5|ω|2 -|ω|3, 1≤|ω|<2 0, |ω|≥2 ì . í .. .. S(x)是对sin(x×Pi)/x 的逼近(Pi是圆周率π)。 三次卷积插值算法考虑了待插值像素点周围更多已知像素点的相关性,因此计算得 到的待插值像素点的值也会更加接近真实值,图像的效果较双线性插值的效果有了很大 提升,精确度较高,基本没有边缘锯齿和马赛克现象,如图5-17(d)所示。但由于考虑了 多达16个像素点的值且插值函数是三阶函数,所以计算量急剧增加。同时,受限于矩阵 B 的邻域,该算法不能对图像的第一行、第一列、最后两行及最后两列进行插值计算。 5.1.2 图像平移变换 图像平移变换是指将一幅图像中所有的像素都按照指定的平移量在水平方向和垂 直方向上移动,平移后的图像与原图像相同。 假设将图像上某个像素点P0(x0,y0)平移至点P (x,y),其中x 方向的平移量为 Δx,y 方向的平移量为Δy。那么,点P(x,y)的坐标为 x =x0 +Δx y =y0 +Δy { (5-12) 利用齐次坐标,变换前后图像上的点P0(x0,y0)和P (x,y)之间的关系可以用如下 的矩阵变换表示: x y1 é . êêêê ù . úúúú = 1 0 Δx 0 1 Δy 0 0 1 é . êêêê ù . úúúú x0 y0 1 é . êêêê ù . úúúú (5-13) 对变换矩阵求逆,可以得到式(5-13)的逆变换为 x0 y0 1 é . êêêê ù . úúúú = 1 0 -Δx 0 1 -Δy 0 0 1 é . êêêê ù . úúúú x y1 é . êêêê ù . úúúú (5-14) 即 x0=x-Δx y0=y-Δy { 图5-8所示为Δx=2,Δy=1时的图像平移变换示例。 图5-8 图像平移变换示例 5.1.3 图像旋转变换 一般图像的旋转是以图像的中心为原点,将图像上的所有像素都旋转一个相同的角 度来实现。图像的旋转变换就是图像的位置变换,所以旋转后的图像可能会超出显示区 域,如图5-9所示。一般情况下,可以把超出显示区域的图像截去,如图5-9(d)所示;也 可以扩大图像显示范围以显示所有的图像,如图5-9(b)所示。 图5-9 旋转前后的图像关系 (a)旋转前图像;(b)旋转后图像(扩大显示范围后); (c)图像旋转前后的关系;(d)旋转后图像在旋转前图像区域的显示范围 126 1 27 图像的旋转变换也可以用矩阵变换表示。设点P0(x0,y0)旋转θ 度后的对应点为 P(x,y),r 为点P0(P)到原点的长度,如图5-10所示。旋转前点P0(x0,y0)和旋转后 点P(x,y)的坐标分别是 图5-10 图像旋转θ度 x0 =rcosα y0 =rsinα { x =rcos(α -θ)=rcosαcosθ+rsinαsinθ=x0cosθ+y0sinθ y =rsin(α -θ)=rsinαcosθ-rcosαsinθ=-x0sinθ+y0cosθ { (5-15) 写成矩阵表达式为 x y1 é . êêêê ù . úúúú = cosθ sinθ 0 -sinθ cosθ 0 0 0 1 é . êêêê ù . úúúú x0 y0 1 é . êêêê ù . úúúú (5-16) 其逆运算为 x y1 é . êêêê ù . úúúú = cosθ -sinθ 0 sinθ cosθ 0 0 0 1 é . êêêê ù . úúúú x0 y0 1 é . êêêê ù . úúúú (5-17) 图像旋转之后,有些像素不能正好落在整数位置,所以会出现许多空洞点,导致图像 旋转后效果不好。如图5-11所示,要对这些空洞点进行填充处理,此时就需要进行灰度 插值,灰度插值方法参见5.1.1节。 图5-11 旋转后出现空洞点 图5-10表示的旋转是绕坐标轴原点(0,0)进行的,如果是绕某一个指定点(a,b)(如 图像中心)旋转,则首先要将坐标系平移到该点再进行旋转,然后将旋转后的图像再平移 回原坐标系。图像绕任意一点(a,b)的旋转变换公式如式(5-18)所示。图5-12所示为 1 28 图像绕其中心逆时针旋转45°后的原图和效果图。 x y1 é . êêêê ù . úúúú = 1 0 -a 0 1 -b 0 0 1 é . êêêê ù . úúúú cosθ sinθ 0 -sinθ cosθ 0 0 0 1 é . êêêê ù . úúúú 1 0 a 0 1 b 0 0 1 é . êêêê ù . úúúú x0 y0 1 é . êêêê ù . úúúú = cosθ sinθ a(cosθ-1)+bsinθ -sinθ cosθ b(cosθ-1)-asinθ 0 0 1 é . êêêê ù . úúúú x0 y0 1 é . êêêê ù . úúúú (5-18) 图5-12 图像绕图像中心逆时针旋转45°的示例 (a)原图;(b)效果图 5.1.4 图像比例变换 图像比例变换是指对图像按照一定的比例进行放大或缩小操作。设原图像中的点 P0(x0,y0)按比例缩放后,在新图像中的对应点为P(x,y),则P0(x0,y0)和P (x,y)之 间的对应关系用矩阵形式可以表示为 x y1 é . êêêê ù . úúúú = fx 0 0 0 fy 0 0 0 1 é . êêêê ù . úúúú x0 y0 1 é . êêêê ù . úúúú (5-19) 上式的逆运算为 x0 y0 1 é . êêêê ù . úúúú = 1 fx 0 0 0 1 fy 0 0 0 1 é . êêêêêê ê ù . úúúúúú ú x y1 é . êêêê ù . úúúú (5-20) 式(5-19)和式(5-20)中的fx 和fy 分别为图像沿着x 轴和y 轴方向缩放的比例。 fx 和fy 大于1时,表示放大;fx 和fy 小于1时,表示缩小。比例缩放后的图像中的像 素可能在原图像中找不到相应的像素点,这时就必须进行插值处理。下面分别讨论图像 缩小和放大时如何处理相应的像素点。