缩放算法
图像的缩放定义
图像的缩小和放大的定义为:将图像中的某点(x,y)经缩小放大后其位置变为(x^',y^'),则两者之间的关系是
x^'=ax , y^'=by (2.8)
a,b分别是x方向和y方向的放大率。a,b比1大时放大;比1小时缩小。当a=-1,b=1时,会产生一个关于y轴对称的镜像;当a=1,b=-1时,会产生一个关于x轴轴对称的镜像。用矩阵形式表示为:
(2.9)
其逆运算如下:
(2.10)
例如,当a=b=0.5时,图像被缩小到一半。此时图像缩小后图像中的(0,0)像素对应于原图像中的(0,0)像素;(0,1)像素对应于原图中的(0,2)像素;(1,0)像素对应于原图中的(2,0)像素,以此类推。在原图基础上,每行隔一个像素取一点,每隔一行进行操作。同理,当a=b=2时,图像放大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)像素,以此类推。其实,就是将原图每行中的像素重复取值一遍,然后每行重复一次。
灰度插值法
插值算法主要用于处理在几何变换中出现的浮点坐标像素,它可以通过一系列算法获得浮点坐标像素的近似值。由于浮点数坐标是“插入”在整数坐标之间,所以这种算法被称为“插值算法”。
图像中的像素有可能找不到相应的像素点,因为数字图像中的坐标总是整数。这样就必须进行近似值处理,一般是应用灰度插值法。它包括最近邻插值和双线性插值。
最近邻插值也称零阶插值,是最简单的插值方法。其做法是令输出像素的灰度值等于离它所映射到的位置最近的输入像素的灰度值。最近邻插值计算虽然十分简单,然而当图像中包含像素之间灰度级有变化的细微结构时,最近邻插值法会在图形中产生人为加工的痕迹,图像中也会出现孔洞和重叠。
双线性插值也称二阶插值,它的效果比最近邻插值法要好很多,但是也慢不少。双线性插值法的主要思想就是计算出浮点坐标像素的近似值。该方法是求到相领的4个方格上点的距离之比,用这个比率和4个邻点像素的灰度值进行灰度插值,具体方法如下。
对于一个目的像素,设置坐标通过反向变换得到浮点坐标为(i+u,j+v),其中i、j均为非负整数,p、q为[0,1)区间的浮点数,则这个像素的值f(i+p,j+q)可由原图像中坐标为(i,j)、(i+1,j)、(i,j+1)、(i+1,j+1)所对应的周围4个像素的值决定,即:
F(i+p,j+q)=(1-p)(1-q)f(i,j)+(1-q)qf(I,j+1)+p(1-q)f(i+1,j)+pqf(i+1,j+1) (2.11)
其中f(i,j)表示源图像(i,j)处的像素值。
双线性插值法计算量大,但缩放后图像质量高,不会出现像素值不连续的情况。由于双线性插值具有低通滤波器的性质,使高频分量受损,所以可能会使图像轮廓在一定程度上变得模糊。
图像旋转
图像的旋转,根据最近邻插值与双线性插值的优缺点,旋转首选双线性插值法,该方式不容易出现锯齿等现象。
旋转原理
将图像旋转一定角度的几何变换,图像的旋转是以图像的中心为原点坐标,以此为参考点进行旋转的,方向可以顺时针,也可以逆时针。图像旋转后不会变形,但是其垂直对称轴和水平对称轴都会改变,旋转后像素的坐标已不能通过简单加减法获得,而需要经过比较复杂的数学运算。而且图像在经过旋转变换后,其宽度和高度都要发生改变,所以原始图像中心点和输出图像中心点的坐标是不相同的。 C#图像的缩放与旋转处理程序设计(10):http://www.youerw.com/jisuanji/lunwen_7214.html