Posted on 2010-05-06 15:57
小火球 阅读(821)
评论(0) 编辑 收藏 引用 所属分类:
C/C++
简单比方,原来的数值序列:0,10,20,30,40
线性插值一次为:0,5,10,15,20,25,30,35,40
即认为其变化(增减)是线形的,可以在坐标图上画出一条直线
在数码相机技术中,这些数值可以代表组成一张照片的不同像素点的色彩、色度等指标。
为了方便理解,先考虑一维情况下的线性插值
对于一个数列c,我们假设c[a]到c[a+1]之间是线性变化的
那么对于浮点数x(a<=x<a+1),c(x)=c[a+1]*(x-a)+c[a]*(1+a-x);
把这种插值方式扩展到二维情况
对于一个二维数组c,我们假设对于任意一个浮点数i,c(a,i)到c(a+1,i)之间是线性变化的,c(i,b)到c(i,b+1)之间也是线性变化的(a,b都是整数)
那么对于浮点数的坐标(x,y)满足(a<=x<a+1,b<=y<b+1),我们可以先分别求出c(x,b)和c(x,b+1):
c(x,b) = c[a+1]*(x-a)+c[a]*(1+a-x);
c(x,b+1) = c[a+1][b+1]*(x-a)+c[a][b+1]*(1+a-x);
好,现在已经知道c(x,b)和c(x,b+1)了,而根据假设c(x,b)到c(x,b+1)也是线性变化的,所以:
c(x,y) = c(x,b+1)*(y-b)+c(x,b)*(1+b-y)
这就是双线性插值。