1、第七章 图像的几何变换,图像处理时,往往会遇到需要对图像进行放大、缩小、旋转等操作。因为像素是离散的,所以经过坐标变换之后,如果不进行处理,就会产生畸变。 数字图像的坐标是整数,经过变换后坐标不一定是整数,因此要对变换后的整数坐标位置的像素值进行估计。,1、 图像的缩小,图像的大小减半:2M*2N的图像缩小为:M*N的图像。处理方法是:取偶数行和偶数列构成新的图像。,图像的任意比例缩小:M*N大小的图像缩小为:L*S大小。 其中:M/N=L/S=k. 1.计算c=M/L (c 1) 2.设旧图像是F(x,y),新图像是I(x,y)则:I(x,y)=F(int(c*x), int(c*y),例:
2、,取:1,3,4,6列;1,3行,图像的任意不成比例缩小这种操作一定带来图像的几何畸变。 M*N大小的图像缩小为:L*S大小。 其中:M/L=k1, N/S=k2. 1.计算c1=k1,c2=k2 (c1,c21) 2.设旧图像是F(x,y),新图像是I(x,y)则:I(x,y)=F(int(c1*x),int(c2*y),例:,取:1,3,4,6列;2,4行,2、 图像的放大,图像的缩小操作中,是在现有的信息里如何挑选所需要的有用信息。图像的放大操作中,则需对尺寸放大后所多出来的空格填入适当的值,这是信息的估计问题,所以较图像的缩小要难一些。,图像放大1倍:常用的方法是:原来的一个点的值填到
3、一个2*2的小块中去。,图像的按比例放大:方法一:将一点的值用一个小块来代替。即:,方法二:M*N大小的图像放大为:L*S大小。 其中:M/N=L/S=k. 1.计算c=M/L (c1) 2.设旧图像是F(x,y),新图像是I(x,y)则:I(x,y)=F(int(c*x),int(c*y)如果比例太大,两种方法都会出现马赛克效应。,图像的任意不成比例放大这种操作一定带来图像的几何畸变。M*N大小的图像放大为:L*S大小。 其中:M/L=k1, N/S=k2. 1.计算c1=k1,c2=k2 (c1,c21) 2.设旧图像是F(x,y),新图像是I(x,y)则:I(x,y)=F(int(c1*
4、x),int(c2*y),例:,3、图像的旋转,下图给出了图像旋转的原理示意图。,为了尽量不扩大画布,所以是以画面的中心点为坐标原点进行旋转的。所以有:设图像大小为M*N,作新图像的画布为M1*N1.,例:,因为像素的坐标都是整数,所以当用前面的方法旋转时,会出现画面上有许多的空点,(即白点)这就影响了旋转图像的效果。为此我们还需要进行图像的空点的插值。,最简单的方法是行插值或是列插值方法: 1. 找出当前行的最小和最大的非白点的坐 标,记作:(i,k1)、(i,k2)。 2. 在 (k1,k2) 范围内进行插值,插值的方法是:空点的像素值等于前一点的像素值。 3. 同样的操作重复M1行。,插
5、值处理示意图:,图像的减半缩小效果,图像的按比例缩小效果,图像的不按比例任意缩小,图像的成倍放大效果,图像大比例放大时的马赛克效应,放大10倍,图像的不按比例放大,图像的旋转效果,图像旋转中的插值处理效果,4、 MATLAB中的图像几何操作4.1 图像的插值插值是常用的数学运算,通常利用曲线拟合的方法。通过离散的采样点建立一个连续函数来逼近真实曲线,用这个重建的函数便可求出任意位置的函数值。,设已知函数值为w1,w2,wL,则未知点x的函数值通过插值可以表示为:其中,h()为插值核函数。插值算法的数值精度与计算量与插值核函数有关,因此核函数的设计是插值算法的核心。,MATLAB提供了三种插值方
6、法:最近邻插值(nearnest neighbor interpolation)双线性插值(bilinear interpolation)双三次插值(bicubic interpolation),1. 最近邻插值法最近邻插值法的数学表示:最近邻插值是工具箱默认的插值方法。这种方法简单,计算量小。但当图像含有精细内容时,用这种方法实现倍数放大处理,在图像中可以明显看出块状效应。,2. 双线性插值双线性插值法的输出像素值是它在输入图像中22邻域采样点的平均值,它根据某像素周围4个像素的灰度值在水平和垂直两个方向上对其插值。3. 双三次插值双三次插值核为三次函数,其插值邻域的大小为44 。它的插值效
7、果比较好,但相应的计算量也较大。,4.2 图像的插值缩放 MATLAB图像处理工具箱中的函数imresize可以用上述三种方法对图像进行插值缩放。imresize函数的语法格式:B=imresize(A, m, method)B=imresize(A, mrows, ncols, method)B=imresize(, m, method, n)B=imresize(, method, h)参数method用于指定插值的方法,可选值为nearest,bilinear及bicubic,默认值为nearest。m为放缩的倍数,m1,放大图像,m1,缩小图像。mrows,ncols是新图像的大小。,
8、4.3 图像的插值旋转在MATLAB中,函数imrotate实现对图像的插值旋转。格式如下:B=imrotate(A,angle,method)B=imrotate(A,angle,method,crop)angle代表旋转的角度。带参数crop,则对旋转后的图像做裁剪。使返回的图像与原图像大小相同。,4.4 图像的剪切在MATLAB中,函数imcrop实现图像的剪切操作。该操作剪切的是图像中的一个矩形子图,用户可以通过参数指定这个矩形四个顶点的坐标,也可以交互地用鼠标选取这个矩形。函数的调用格式如下:I2=imcrop(I)X2=imcrop(X,map)RGB2=imcrop(RGB),I2=imcrop(I, rect)X2=imcrop(X,map, rect)RGB2=imcrop(RGB, rect)按照指定的矩形rect剪切图像,rect是一个四元向量xmin,ymin,width,height; =imcrop(x,y,)在指定的坐标系(x,y)中剪切图像;A,rect=imcrop()x,y,A,rect=imcrop()在剪切图像的同时返回剪切框的参数rect。,