双线性插值推理及其应用

线性插值函数其实就是一次多项式的插值方式,其几何意义就是用来拟合两点之间的一些点的数值;具体意义可以查阅百度
现在首先要理解线性插值的具体计算过程,对于单线性插值,求解其线性插值函数

单线性插值函数在这里插入图片描述

如上图所示,就是最简单的一种线性插值函数,就是求两点之间的直线方程,与初中的直线方程函数一样,首先知道A(x0,y0),C(x_1,y_1)两点的坐标,然后设B点坐标为(x,y)(x,y);从而得出:
在这里插入图片描述
上面得出的函数即为AC两点的线性插值函数,B点的值可由插值函数得出,其本质就是在x方向进行了一次线性插值。

双线性插值

双线性插值,又称为双线性内插。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。双线性插值广泛应用在数值图像处理领域;其具体过程如下图所示:
在这里插入图片描述
过求插值函数来求出P点的具体数值,知道Q_{11}=(x_{1},y_{1}),Q_{12}=(x_{1},y_{2}), Q_{21}=(x_{2},y_{1}),Q_{22}=(x_{2},y_{2})四点的坐标,设R_{1}=(x,y_{1}),R_{2}=(x,y_{2}),首先通过四点在x方向进行线性插值,可得出:
在这里插入图片描述
然后再在y方向上进行一次线性插值
在这里插入图片描述
整理可得
在这里插入图片描述

因为双线性插值只会使用相邻的4个点,因此分母总是为1,故可以约去;原式可化为:
在这里插入图片描述

代码实现

C语言实现双线性插值如下:

//双线性插值
//202108
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
double my_bilinear(double a, double b, double c, double d, double m, double n)
{
	double my_bi;
	my_bi = (1 - m)*(1 - n)*a + m*(1 - n)*b + n*(1 - m)*c + m*n*d;
 
	return my_bi;
}
int main(void)
 
{
	double E00=2.2l, E01=3.3l, E10=4.4l, E11=5.5l;
	double p=0.2l, q=0.3l;
	double result;
	printf("Input E00 E01 E10 E11:\n");
	//scanf("%f %f %f %f", &E00, &E01, &E10, &E11);
 
	printf("Input P and q:\n");
	//scanf("%f %f", &p, &q);
	
	result=my_bilinear(E00, E01, E10, E11, p, q);
	printf("the interpolation result is %f\n", result);
	getchar();
	return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值