在图像缩放,旋转等一些图像处理中,对图像进行插值是不可缺少的一个步骤,下面对一些常用的插值算法进行介绍:
1.最近邻插值
这种插值方法是最简单的一种插值算法,图像输出的像素值的大小直接设为与其最邻近的点的大小即可,这个算法最简单,不需要多说,可以表示为
f(x,y) = g( round(x) , round(y) )
原图 放大后的图
从图中可以看出,通过最近邻插值进行放大后,图像边缘出能够明显的看到大块的像素点,与我们希望得到的结果有很大的差异。
2.双线性插值
双线性插值又称为一阶插值,它是线性插值扩展到二维的一种应用,将周围四个点的像素值进行处理而作为该点的值。假设我们要得到点f(x,y)的像素值(x,y非整数,周围点的坐标为(0,0)(1,0)(0,1)(1,1)),那么双线性插值的公式如下:
f(x,0) = f(0,0)+ x[ f(1,0)- f(0,0) ]
f(x,1) = f(0,1)+ x[ f(1,1)- f(0,1) ]
f(x,y) = f(x,0)+ y[ f(x,1)- f(x,0) ]
如图所示,同样对原图放大了四倍,但双线性插值的效果明显高于最近邻插值,但仍然有不足之处,经过放大的图像的细节变得模糊了起来,这是因为双线性插值对图像具有平滑的作用。
3.三次插值
三次插值用了如下的三次多项式来逼近理论上的最佳插值函数sin(x)/x,
s(x) = 1 - 2|x|^2+|x|^3 0<=|x|,<1
4 - 8|x|+5|x|^2-|x|^3 1<=|x|,<2
0 |x|>=2
带求像素(x,y)的灰度值由周围16个点的像素值计算得到,计算公式如下:
三次插值放大后的图像如下: