转-双线性差值

Posted on 2010-05-06 15:57 小火球 阅读(821) 评论(0)  编辑 收藏 引用 所属分类: C/C++
简单比方,原来的数值序列010203040
线性插值一次为:0510152025303540
即认为其变化(增减)是线形的,可以在坐标图上画出一条直线
在数码相机技术中,这些数值可以代表组成一张照片的不同像素点的色彩、色度等指标。

为了方便理解,先考虑一维情况下的线性插值
对于一个数列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)
这就是双线性插值。

posts - 28, comments - 3, trackbacks - 0, articles - 0

Copyright © 小火球