插值算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

如何进行线性插值

假设我们已知坐标 (x0, y0) 与

(x1, y1),要得到 [x0, x1] 区间内

某一位置x在直线上的值。根据

图中所示,我们得到

假设方程两边的值为α,那么这

个值就是插值系数—从x0到x

的距离与从x0到x1距离的比值。

由于x值已知,所以可以从公式

得到α的值

同样,

这样,在代数上就可以表示为:

或者,

这样通过α就可以直接得到y。实际上,即使x不在x0到x1之间并且α也不是介于 0 到 1 之间,这个公式也是成立的。在这种情况下,这种方法叫作线性外插—参见外插值。

已知y求x的过程与以上过程相同,只是x与y要进行交换。

[编辑] 线性插值近似法

线性插值经常用于已知函数f在两点的值要近似获得其它点数值的方法,这种近似方法的误差定义为

其中p表示上面定义的线性插值多项式

根据罗尔定理,我们可以证明:如果f有两个连续导数,那么误差范围是

正如所看到的,函数上两点之间的近似随着所近似的函数的二阶导数的增大而逐渐变差。从直观上来看也是这样:函数的曲率越大,简单线性插值近似的误差也越大。

[编辑] 应用

线性插值经常用于补充表格中的间隔部分。假设一个表格列出了一个国家1970年、1980年、1990年以及2000年的人口,那么如果需要估计1994年的人口的话,线性插值就是一种简便的方法。

两值之间的线性插值基本运算在计算机图形学中的应用非常普遍,以至于在计算机图形学领域的行话中人们将它称为lerp。所有当今计算机图形处理器的硬件中都集成了线性插值运算,并且经常用来组成更为复杂的运算:例如,可以通过三步线性插值完成一次双线性插值运算。由于这种运算成本较低,所以对于没有足够数量条目的光滑函数来说,它是实现精确快速查找表的一种非常好的方法。

[编辑] 历史

线性插值从远古以来就一直用于补充表格中的间隔,它经常用于天文学数据。人们相信公元前最後三个世纪的塞琉西王朝、公元前2世纪的希腊天文学家与数学家喜帕恰斯就曾经使用了这种方法。在托勒密于公元2世纪所作的《天文学大成》(Almagest)中亦可以见到对于线性插值的描述。

[编辑] 其它

在一些要求较高的场合,线性插值经常无法满足要求。在这种场合,可以使用多项式插值或者样条插值来代替。

线性插值可以扩展到有两个变量的函数的双线性插值。双线性插值经常作为一种粗略的抗混叠滤波器使用,三线性插值用于三个变量的函数的插值。线性插值的其它扩展形势可以用于三角形与四面体等其它类型的网格运算。

[编辑] 参考文献

E. Meijering (2002). 插值年表:从古代天文学到现代信号与图像处理. Proceedings of

the IEEE9 (3), 319–342.

对高速二次线性插值算法的讨论

(by Rocks Lee - ) 原理

线性插值并不难理解。以图像处理领域为例,我们的理想图像是均匀的分布在二维平面直角坐标系中的,任意给出一对坐标,就应该能够得到一个对应的颜色值,然而现实是残酷的,我们只能够用离散的点阵信息来近似表现图像。

现在假设给定一对坐标(2.2, 4.0),想要得到这个坐标对应的颜色,那么比较简单的方法是用四舍五入方法来得到距离该点最近的像素,即像素(2, 4)的值来代替,这显然并不十分的精确,如果用这个方法进行图像放大,那么在比例较大的情况下就会出现明显的“马赛克”现象。

对于上面的例子,更好的办法是把像素(2, 4)和像素(3, 4)的值按照一定的比例混合。比例如何选取呢?很简单,离哪个像素近,哪个像素的比例就大些。那么(简单起见,后面均假设是灰度图),若设像素(2, 4)的值是V_24,像素(3, 4)的值是V_34,就可以得到:

坐标(2.2, 4.0)的颜色值 V(2.2, 4.0) = V_24*(1-0.2)+V_34*0.2

好,现在你已经懂得什么叫线性插值了!

二次线性插值也就不难理解了。这次我们给的坐标不再是那么体贴了——求坐标(2.2, 4.6)的颜色值。那么可以想到:可以先分别求出坐标(2.2, 4.0)和坐标(2.2, 5.0)的颜色值,然后用一次纵向的线型插值,就得到了:

坐标(2.2, 4.0)的颜色值 V(2.2, 4.0) = V_24*(1-0.2)+V_34*0.2

坐标(2.2, 5.0)的颜色值 V(2.2, 5.0) = V_25*(1-0.2)+V_35*0.2

坐标(2.2, 4.6)的颜色值 = V(2.2, 4.0)*(1-0.6)+V(2.2, 5.0)*0.6

到这里,实际上我们已经得到了二次线性插值的计算公式,表述方便起见下面用符号来表示。

设坐标(x, y)的相邻四个像素值分别为p00, p01, p10, p11, 水平方向的比例系数为h0, h1, 垂直方向的比例系数v0, v1(其中h0+h1=1, v0+v1=1),那么用bilinear interpolation得到:

v(x, y) = (p00*h0+p01*h1)*v0 + (p10*h0+p11*h1)*v1 ................(1.1)

有了这个公式,已经可以编写出算法了,但是这个公式里有六次浮点乘法,如果是真彩图的话,则对每一像素都要有18次浮点乘法!这还不算生成浮点坐标值的时间(比如在旋转算法当中,每得到一对浮点坐标还要有若干次浮点运算)。

优化

学过一些线性代数知识的朋友可能已经注意到,公式(1.1)其实可以写成矩阵连乘的形式:

|p00 p01| |h0|

v(x, y) = |v0 v1|*| |*| | ................................(1.2)

|p10 p11| |h1|

相关文档
最新文档