插值算法是图像缩放中的一项基本且重要的算法;在图像缩放中,输出图像像素点坐标可能对应输入图像上几个像素点之间的位置,这个时候就需要通过灰度插值处理来计算出该输出点的灰度值。图像插值是图像超分辨率的重要环节,不同的插值算法有不同的进度,插值算法的好坏也直接影像着图像的失真程度。常用的插值算法有以下三种:最近邻插值算法、双线性插值算法以及双三次插值算法。
最近邻插值算法是最简单的插值算法,同时也叫零阶插值法。即选择里它所映射位置最近的输入像素的灰度值为结果。对二维图像,是去待采样点周围4个相邻像素点中距离最近的1个点的灰度值作为待采样点的像素值。
双线性插值素算法又叫一阶插值法,它对经过三次插值才能得到最终结果,是对最邻插值算法的一种改进,先对水平x方向进行一阶线性插值(需要两次一阶线性插值),然后在在垂直y方向进行一阶线性插值(只需要一次一阶线性插值)。
假设上图中, Q 11 , Q 12 , Q 21 , Q 22 Q_{11},Q_{12},Q_{21},Q_{22} Q11,Q12,Q21,Q22四个红色点的坐标点信息及灰度值是已知,分别为 Q 11 = ( x 1 , y 1 ) , Q 12 = ( x 1 , y 2 ) , Q 21 = ( x 2 , y 1 ) , Q 22 = ( x 2 , y 2 ) Q_{11}=(x_1,y_1),Q_{12}=(x_1,y_2),Q_{21}=(x_2,y_1),Q_{22}=(x_2,y_2) Q11=(x1,y1),Q12=(x1,y2),Q21=(x2,y1),Q22=(x2,y2),通过双线性插值计算出P点的灰度值。
首先进行x方向的线性插值,得去 R 1 , R 2 R_1,R_2 R1,R2两点的灰度值,然后再进行y方向的线性插值,最终获取 P P P点的灰度值。计算过程如下所示:
1. 计算x方向的线性插值
f ( R 1 ) = x 2 − x x 2 − x 1 f ( Q 11 ) + x − x 1 x 2 − x 1 f ( Q 21 ) W h e r e R 1 = ( x , y 1 ) f(R1) = \frac{x_2 - x}{x_2-x_1}f(Q_{11}) + \frac{x - x_1}{x_2-x_1}f(Q_{21}) \quad Where \quad R_1 =(x,y_1) f(R1)=x2−x1x2−xf(Q11)+x2−x1x−x1f(Q21)WhereR1=(x,y1)
f ( R 2 ) = x 2 − x x 2 − x 1 f ( Q 12 ) + x − x 1 x 2 − x 1 f ( Q 22 ) W h e r e R 1 = ( x , y 2 ) f(R2) = \frac{x_2 - x}{x_2-x_1}f(Q_{12}) + \frac{x - x_1}{x_2-x_1}f(Q_{22}) \quad Where \quad R_1 =(x,y_2) f(R2)=x2−x1x2−xf(Q12)+x2−x1x−x1f(Q22)WhereR1=(x,y2)
2.计算y方向的线性插值
f ( P ) = y 2 − y y 2 − y 1 f ( R 1 ) + y − y 1 y 2 − y 1 f ( R 2 ) f(P)= \frac {y_2 - y}{y_2 - y_1}f(R1) + \frac{y - y_1}{y_2 - y_1}f(R2) f(P)=y2−y1y2−yf(R1)+y2−y1y−y1f(R2)
3.合并1和2两步计算过程
f ( P ) = ( x 2 − x ) ( y 2 − y ) ( x 2 − x 1 ) ( y 2 − y 1 ) f ( Q 11 ) + ( x − x 1 ) ( y 2 − y ) ( x 2 − x 1 ) ( ( y 2 − y 1 ) ) ( f ( Q 21 ) ) + ( x 2 − x ) ( y − y 1 ) ( x 2 − x 1 ) ( y 2 − y 1 ) f ( Q 12 ) + ( x − x 1 ) ( y − y 1 ) ( x 2 − x 1 ) ( y 2 − y 1 ) f ( Q 22 ) f(P)=\frac{(x_2 - x)(y_2 - y)}{(x_2-x_1)(y_2 - y_1)}f(Q_{11}) + \frac{(x - x_1)(y_2 - y)}{(x_2-x_1)((y_2 - y_1))}(f(Q_{21})) + \frac{(x_2 - x)(y - y_1)}{(x_2-x_1)(y_2 - y_1)}f(Q_{12}) + \frac{(x - x_1)(y - y_1)}{(x_2-x_1)(y_2 - y_1)}f(Q_{22}) f(P)=(x2−x1)(y2−y1)(x2−x)(y2−y)f(Q11)+(x2−x1)((y2−y1))(x−x1)(y2−y)(f(Q21))+(x2−x1)(y2−y1)(x2−x)(y−y1)f(Q12)+(x2−x1)(y2−y1)(x−x1)(y−y1)f(Q22)
双三次插值算法(Bicubic interpolation)又称立方卷积插值算法,是对双线性插值的改进,是一种比较复杂的插值方式,它不仅考虑到周围4个像素点灰度值的影像,还考虑到它们灰度值变化率的影像。该算法需要利用待采样附近16个像素点的灰度值作三次插值进行计算。
如上图所示,函数 f f f在点 ( x , y ) (x,y) (x,y)的值可以通过矩形网络中最近的十六个采样点的甲醛平均得到的,在这里需要使用两个多项式三次插值函数,每个方向使用一个,其函数形式如下:
f ( x , y ) = { ( a + 2 ) ∣ x ∣ 3 − ( a + 3 ) ∣ x ∣ 2 + 1 f o r ∣ x ∣ < = 1 a ∣ x ∣ 3 − 5 a ∣ x ∣ 2 + 8 a ∣ x ∣ − 4 a f o r 1 < ∣ x ∣ < = 2 0 f(x,y) = \begin{cases} (a+2)|x|^3 - (a+3)|x|^2 + 1 \quad for \quad |x| <= 1 \\ a|x|^3 - 5a|x|^2 + 8a|x| -4a \quad for \quad 1 < |x| <= 2 \\ 0 \end{cases} f(x,y)=⎩⎪⎨⎪⎧(a+2)∣x∣3−(a+3)∣x∣2+1for∣x∣<=1a∣x∣3−5a∣x∣2+8a∣x∣−4afor1<∣x∣<=20
说明:
当 a = − 1 a = -1 a=−1时,如下:
f ( x , y ) = { ∣ x ∣ 3 − 2 ∣ x ∣ 2 + 1 f o r ∣ x ∣ < = 1 − ∣ x ∣ 3 + 5 ∣ x ∣ 2 − 8 ∣ x ∣ + 4 f o r 1 < ∣ x ∣ < = 2 0 f(x,y) = \begin{cases} |x|^3 - 2|x|^2 + 1 \quad for \quad |x| <= 1 \\ -|x|^3 + 5|x|^2 - 8|x| + 4 \quad for \quad 1 < |x| <= 2 \\ 0 \end{cases} f(x,y)=⎩⎪⎨⎪⎧∣x∣3−2∣x∣2+1for∣x∣<=1−∣x∣3+5∣x∣2−8∣x∣+4for1<∣x∣<=20
此时,逼近的函数为 y = s i n ( x ∗ P I ) ( x ∗ P I ) y=\frac{sin(x*PI)}{(x*PI)} y=(x∗PI)sin(x∗PI),如下所示:
当 a = − 0.5 a=-0.5 a=−0.5时,如下:
f ( x , y ) = { 1.5 ∣ x ∣ 3 − 2.5 ∣ x ∣ 2 + 1 f o r ∣ x ∣ < = 1 − 0.5 ∣ x ∣ 3 + 2.5 ∣ x ∣ 2 − 4 ∣ x ∣ + 2 f o r 1 < ∣ x ∣ < = 2 0 f(x,y) = \begin{cases} 1.5|x|^3 - 2.5|x|^2 + 1 \quad for \quad |x| <= 1 \\ -0.5|x|^3 + 2.5|x|^2 - 4|x| + 2 \quad for \quad 1 < |x| <= 2 \\ 0 \end{cases} f(x,y)=⎩⎪⎨⎪⎧1.5∣x∣3−2.5∣x∣2+1for∣x∣<=1−0.5∣x∣3+2.5∣x∣2−4∣x∣+2for1<∣x∣<=20
此时对应为三次Hermite样条,如下所示:
最近邻插值算法
最近邻插值算法 | 双线性插值算法 | 双三次插值算法 | |
---|---|---|---|
采样方式 | 用距离采样点最近的像素值最为采样点的灰度值 | 用双线性方式计算采样点周围的4个点,计算其灰度值 | 根据采样点的周围16个像素值的双线性关系以及像素变化率,计算出采样点的灰度值 |
计算性能 | 计算量最小、最快 | 计算量比较大,速度居中 | 计算量最大,性能最慢 |
效果 | 未考虑周围像素点的影像,采样后的灰度值有明显的不连续性,图像质量损失较大,会产生马赛克或者锯齿现象 | 克服最近邻插值算法的灰度不连续性,未考虑各邻点的灰度值的相互影响,故具有低通滤波的性质,从而导致缩放后的图像的高频分量收到损失、图像边缘在一定程度上变得较为模糊 | 克服了前两种方法的不足之处,能够产生比双线性茶壶中算法更为平滑的边缘,计算精度很高,处理后的图像质量损失最少,效果最佳的 |
注:在进行图像缩放时应根据实际情况对三种算法做出选择,既要考虑时间方面的可行性,也要考虑对变化后图像质量可用性,这样才能达到较为理想结果。