1、多媒体通信,北京科技大学 杨 扬,第6章 图像的几何变换,几何变换基础 图像比例缩放 图像平移 图像镜像 图像旋转 灰度插值,1、几何变换基础,图像的几何变换,是指使用户获得或设计的原始图像,按照需要产生大小、形状和位置的变化。 从图像类型来分,图像的几何变换有:二维平面图像的几何变换;三维图像的几何变换;三维向二维平面投影变换等。 从图像的性质分,图像的几何变换有:平移、比例缩放、旋转、反射和错切等基本变换;透视变换和复合变换;插值运算等。,1、几何变换基础,图像的几何变换是通过改变图像中物体(像素)之间的空间关系的过程。图像的几何变换可以看成将各像素在图像内移动的过程。其定义为 :其中,f
2、(x,y)表示输入图像,g(x,y)表示输出图像,a(x,y)和b(x,y)表示空间变换。几何变换改变的是图像中各物体之间的空间关系。其效果正如在一块橡皮板上画图,拉伸该橡皮板,并在不同的点固定该橡皮板。,1、几何变换基础,一个几何变换需要两个独立的算法: 1. 需要一个算法来定义空间变换本身,用它描述每个像素如何从其初始位置“移动”到终止位置,即每个像素的“运动”,如平移、缩放、旋转等。2. 还需要一个用于灰度插值的算法,这是因为,在一般情况下,输入图像的位置坐标(x,y)为整数,而输出图像的位置坐标为非整数,反过来也是如此。,1、几何变换基础,几何变换常用于摄象机的几何校正过程,这对于利用
3、图像进行几何测量的工作是十分重要的。如:仿射变换(Affine Transformation),它属于射影几何变换,多用于图像配准(Image Registration)作为比较或匹配的预处理过程; 图像卷绕(Image Warping),即用控制点控制变换过程,通过插值运算,将一幅图像逐渐变化到另一幅图像的图像变形(Morphing)过程是其典型的应用,多见于影视特技及广告的制作。,1.1齐次坐标,设点P0(x0,y0)进行平移后,移到P(x,y),其中x方向的平移量为x,y方向的平移量为y。那么,点P(x,y)的坐标为:这个变换用矩阵的形式可以表示为:,1.1齐次坐标,点的平移,1.1齐次
4、坐标,而平面上点的变换矩阵中没有引入平移常量,无论a、b、c、d取什么值,都不能实现上述的平移变换。因此,需要使用23阶变换矩阵,取其形式为:,1.1齐次坐标,为了运算方便,通常将23阶矩阵扩充为33阶矩阵,以拓宽功能。P(x,y)按照3X3的变换矩阵T平移结果为:,1.1齐次坐标,这种用n1维向量表示n维向量的方法称为齐次坐标表示法。 因此,2D图像中的点坐标(x, y)通常表示成齐次坐标(Hx, Hy, H),其中H表示非零的任意实数,当H1时,则(x, y, 1)就称为点(x, y)的规范化齐次坐标。由点的齐次坐标(Hx, Hy, H)求点的规范化齐次坐标(x, y, 1),可按如下公式
5、进行:,1.2二维图像几何变换的矩阵,利用齐次坐标及改成33阶形式的变换矩阵,实现2D图像几何变换的基本变换的一般过程是:将2n阶的二维点集矩阵表示成齐次坐标 的形式,然后乘以相应的变换矩阵即可完成。,1.2二维图像几何变换的矩阵,引入齐次坐标后,表示2D图像几何变换的33矩阵的功能就完善了,可以用它完成2D图像的各种几何变换。下面讨论33阶变换矩阵中各元素在变换中的功能。几何变换的33矩阵的一般形式为:,1.2二维图像几何变换的矩阵,其中, 这一子矩阵可使图像实现恒等比例、 反射(或镜像)、 错切和旋转变换。l m 这一行矩阵可以使图像实现透视变换,但当l=0,m=0时它无透视作用。p qT
6、 这一列矩阵可以使图像实现平移变换,s这一元素可以使图像实现全比例变换。,2、图像比例缩放,比例缩放前后两点P0(x0, y0)、P(x, y)之间的关系用矩阵形式可以表示为:其中fx,fy1为放大, fx,fy1 为缩小。,2、图像比例缩放,2、图像比例缩放,比例缩放所产生的图像中的像素可能在原图像中找不到相应的像素点,这样就必须进行插值处理。 插值处理常用的方法有两种, 一种是直接赋值为和它最相近的像素值;另一种是通过一些插值算法来计算相应的像素值。 前一种方法计算简单, 但会出现马赛克现象;后者处理效果要好些,但是运算量也相应增加。 在下面的算法中直接采用了前一种做法。实际上,这也是一种
7、插值算法, 称为最邻近插值法(Nearest Neighbor Interpolation)。,2、图像比例缩放,最简单的比例缩小是当 fx=fy=12时,图像被缩到一半大小,此时缩小后图像中的(0, 0)像素对应于原图像中的(0, 0)像素; (0, 1)像素对应于原图像中的(0, 2)像素; (1, 0)像素对应于原图像中的(2, 0)像素, 依此类推。 图像缩小之后,因为承载的信息量小了,所以画布可相应缩小。此时, 只需在原图像基础上,每行隔一个像素取一点,每隔一行进行操作,即取原图的偶(奇)数行和偶(奇)数列构成新的图像,如下图所示。如果图像按任意比例缩小, 则需要计算选择的行和列。,
8、2、图像比例缩放,图像缩小一半,2、图像比例缩放,如果MN大小的原图像F(x,y)缩小为 kMkN大小(k1)的新图像I(x,y)时,则I(x, y)=F(int(cx), int(cy)其中, c=1k。由此公式可以构造出新图像,如下图所示。,2、图像比例缩放,当fxfy(fx, fy0)时,图像不按比例缩小,这种操作因为在x方向和y方向的缩小比例不同,一定会带来图像的几何畸变。图像不按比例缩小的方法是: 如果MN大小的旧图F(x,y)缩小为k1Mk2N(k11,k21)大小的新图像I(x,y)时,则 I(x, y)=F(int(c1x), int(c2y),2、图像比例缩放,在图像的放大操
9、作中,需要对尺寸放大后所多出来的空格填入适当的像素值,这是信息的估计问题,所以较图像的缩小要难一些。 当fxfy2时,图像被按全比例放大2倍, 放大后图像中的(0,0)像素对应于原图中的(0,0)像素;(0,1)像素对应于原图中的(0,0.5)像素,该像素不存在,可以近似为(0,0)也可以近似 (0,1); (0,2)像素对应于原图像中的(0,1)像素;(1,0)像素对应于原图中的(0.5,0),它的像素值近似于(0, 0)或(1,0)像素; (2,0)像素对应于原图中的(1,0)像素,依此类推。其实这是将原图像每行中的像素重复取值一遍,然后每行重复一次。,2、图像比例缩放,放大前的图像 按最
10、近邻域法放大两倍 按插值法放大两倍,2、图像比例缩放,一般地,按比例将原图像放大k倍时,如果按照最近邻域法则需要将一个像素值添在新图像的kk的子块中。显然,如果放大倍数太大, 按照这种方法处理会出现马赛克效应。 当fxfy(fx, fy0)时,图像在x方向和y方向不按比例放大, 此时, 这种操作由于x方向和y方向的放大倍数不同,一定带来图像的几何畸变。 为了提高几何变换后的图像质量,常采用线性插值法。该方法的原理是,当求出的分数地址与像素点不一致时,求出周围四个像素点的距离比,根据该比率, 由四个邻域的像素灰度值进行线性插值, 如下图所示。,2、图像比例缩放,线性插值法示意图,2、图像比例缩放
11、,简化后的灰度值计算式如下: g(x,y)=(1-q)(1-p)g(x,y)+pg(x+1,y) +q(1-p)g(x,y+1)+pg(x+1,y+1),式中:g(x,y)为坐标(x,y)处的灰度值,x、y 分别为不大于x,y的整数。关于这个问题的详细算法及其实现可以参考有关的参考文献。,3、图像平移,设点P0(x0, y0)进行平移后,移到P(x, y),其中x方向的平移量为x,y方向的平移量为y。那么,点P(x, y)的坐标为:利用齐次坐标,变换前后图像上的点P0(x0, y0)和P(x, y)之间的关系可以用如下的矩阵变换表示为:,3、图像平移,图像平移,4、图像镜像,图像的镜像变换也可
12、以用矩阵变换表示。设点P0(x0, y0)进行镜像后的对应点为P(x, y),图像高度为fHeight,宽度为fWidth,原图像中P0(x0, y0)经过水平镜像后坐标将变为(fWidth-x0,y0),垂直镜像后坐标将变为(x0,fHeight-y0)矩阵表达式为:,水平镜像,垂直镜像,4、图像镜像,图像的镜像,5、图像旋转,设点P0(x0, y0)旋转角后的对应点为P(x, y), 如下图所示:,5、图像旋转,写成矩阵形式,如下:,5、图像旋转,旋转前后点P0(x0, y0)、 P(x, y)的坐标分别是:矩阵形式:,5、图像旋转,进行图像旋转时需要注意如下两点:(1)图像旋转之前, 为
13、了避免信息的丢失, 一定要有坐标平移;(2)图像旋转之后,会出现许多空洞点。对这些空洞点必须进行填充处理,否则画面效果不好,一般也称这种操作为插值处理。最简单的方法是行插值方法或列插值方法。,6、灰度插值向前映射法,当把输入图像的灰度一个一个像素地转移到输出图像中时,如果一个输入像素被映射到四个输出像素之间的位置,则其灰度值就按插值算法在四个输出像素之间进行分配。我们称之为像素移交(Pixel carry-over)或称为向前映射法。,6、灰度插值向后映射法,另一种更有效地达到目的的方法是像素填充(Pixel filling)或称为向后映射算法:在这里输出像素一次一个地映射回到输入图像中,以便
14、确定其灰度级。如果个输出像素被映射到四个输出像素之间。则其灰度值由灰度级插值决定。向后空间变换是向前变换的逆变换。,6、灰度插值,由于许多输入像素可能映射到输出图像的边界之外,故向前映射算法有些浪费。而且,每个输出像素的灰度值可能要由许多输入像素的灰度值来决定,因而要涉及多次计算。如果空间变换中包括缩小处理,则会有四个以上的输入像素来决定一输出像素的灰度值。如果含有放大处理,则一些输出像素可能被漏掉(如果没有输入像素被映射到它们附近位置的话)。 而向后映射算法是逐像素、逐行地产出输出图像。每个像素的灰度级由最多四个像素参与的插值所唯一确定。当然,这种算法需按空间变换所定义的方式随机访问输入图像
15、,因而可能有些复杂。虽然如此,像素填充法对一般的应用更为切实可行。,6、灰度插值,1、最近邻插值(Nearest Neighborhood Interpolation. NNI),问题:有失真(放大时只重复复制,缩小时只是扔掉一些象素),6、灰度插值,2、线性插值(Linear Interpolation),已知x1,x2 处灰度g1,g2,求x3处灰度g3。,6、灰度插值,3、双线性插值(Linear Interpolation),已知正方形网格上四点灰度,求P点灰度。,7、透视投影,把三维物体或对象转变为二维图形表示的过程称为投影变换。根据视点(投影中心)与投影平面之间距离的不同,投影可分
16、为平行投影和透视投影,透视投影即透视变换。平行投影的视点与投影平面之间的距离为无穷大,而对透视投影(变换),该距离是有限的。这个距离决定着透视投影的特性透视缩小效应,即三维物体或对象透视投影的大小与形体到视点的距离成反比。,7、透视投影,对于透视投影,一束平行于投影面的平行线的投影可保持平行,而不平行于投影面的平行线的投影会聚集到一个点,这个点称为灭点 (Vanishing Point)。灭点可以看作是无限远处的一点在投影面上的投影。 透视投影的灭点可以有无限多个,不同方向的平行线在投影面上就能形成不同的灭点,坐标轴方向的平行线在投影面上形成的灭点又称作主灭点。因为有x,y和z三个坐标轴,所以
17、主灭点最多有3个。 透视投影是按主灭点的个数来分类的,即按投影面与坐标轴的夹角来分类的,可分为一点透视、二点透视和三点透视。,7、透视投影,透视变换 (a)一点透视; (b) 二点透视; (c) 三点透视,7、透视投影,一点透视只有一个主灭点,即投影面与一个坐标轴正交,与另外两个坐标轴平行,如前图(a)所示。进行一点透视投影变换,要很好地考虑图面布局,以避免三维形体或对象的平面域积聚成直线或直线积聚成点而影响直观性。具体地说,就是要考虑下列几点: 三维形体或对象与画面 (投影面)的相对位置; 视距, 即视点与画面的距离;视点的高度。,7、透视投影,假设视点在坐标原点, z坐标轴方向与观察方向重合一致, 三维形体或对象上某一点为P(x, y, z),一点透视变换后在投影面(观察平面)UOV上的对应点为P(x, y, z), 投影面与z轴垂直,且与视点的距离为d, z轴过投影面窗口的中心,窗口是边长为2S的正方形,如下图所示。 根据相似三角形对应边成比例的关系,有:,7、透视投影,利用齐次坐标,与二维几何变换类似,将该过程写成变换矩阵形式为:,7、透视投影,一点透视变换,