在图像缩放,旋转等一些图像处理中,对图像进行插值是不可缺少的一个步骤,下面对一些常用的插值算法进行介绍:
http://www.chinaai.org/ip/image-transform/interpolation.html soeasy!
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个点的像素值计算得到,计算公式如下:
三次插值放大后的图像如下:
4.分形算法
分形算法(Fractal Interpolation)是Altamira Group提出的一种算法,这种算法得到的图像跟其他算法相比更清晰、锐利(见图5)。
现在有许多数码相机 厂商将插值算法用在了数码相机上,并将通过算法得到的分辨率值大肆宣传,固然他们的算法比双三次插值算法等算法先进很多,但是事实是图像的细节不能凭空造出来的。因为插值分辨率是数码相机通过自身的内置软件来增加图像的像素,从而达到增大分辨率的效果。
5.代码实现
http://blog.csdn.net/liyuan02/article/details/6765442
http://blog.csdn.net/liyuan02/article/details/6750410
http://blog.csdn.net/cui134/article/details/23684321