双线性插值公式推导及Matlab实现

一、引言

双线性插值作为一种比较简单的二维插值方法,常用于曲面插值或者图像插值。双线性插值需要已知四个角点坐标(xi,yi,zi),i=1,2,3,4,然后以此构建一张曲面片,即插值曲面。根据这四个已知角点,利用双线性插值函数,就可以计算该插值曲面片内部各点处的函数值,也可以用来预测该插值曲面片外部邻近区域的函数值。

二、双线性插值公式推导

如下图所示曲面片,四个角点坐标已知,对应的xoy平面矩形区域。

c1fa42a66d1b4e079e5c8f774fa6b764.png

 

1)根据点A和点B建立直线AB方程,坐标是(x’,y1,z’):

f5323d86f97a4a89b30077d17e3df4e5.png

2)根据点C和点D建立直线CD方程,坐标是(x’’,y2,z’’):

6b9cd0b875fe4b23816eb4ec243f29b8.png

3)以直线AB和直线CD为端点,建立同时垂直于AB与CD的直线:

a6ab4112bbbb4ddaa9effd0ff9841266.png

4)将式(1)和式(2)代入式(3)得:

46c44a2991794788b270efd979e39f63.png

该函数就是双线性插值函数。(虽然该公式看着稍微有点烦,但是你不能不说它很简单)

当四个角点分别是图像相邻的四个角点时,且假设其中一个角点(x1,y1)位于原点,由于相邻的像素距离是1,所以上式中的分母都是1,则可以得到图像上相邻四个像素构成的曲面片的插值函数为:

31a0027ac80e4ecea5574d230e64a8f8.png

此公式即为图像的双线性插值公式。(图像的双线性插值原来如此简单

二、曲面片的双线性插值实例(纯纯的手工,非interp1)

例1. 已知某曲面的四个角点坐标分别为( 0.1, 0.1 ), ( 0.1, 1.2 ), ( 1.1, 0.1 ), ( 1.1, 1.2 ),利用双线性插值完成该曲面插值,绘制插值插值之后的曲面片。

1)绘制四个角点构成曲面网格图:

参考代码:

clear all

clc

x = [ 0.1, 0.1; 1.1, 1.1 ];

y = [ 0.1, 1.2; 0.1, 1.2 ];

z = [ 1, 0.3; 1.9, 0.6 ];

plot3( x, y, z, 'ro' )

hold on

mesh( x, y, z )

colormap winter

colorbar

axis( [ -0.1, 1.2, -0.1, 1.2, 0, 2 ] )

hidden off

运行结果如下:

6a5434ebc3fc4d04baf694cf2cca12fe.png

2)绘制利用曲面片内部插值点生成的网格曲面片

[ xi, yi ] = meshgrid( [ 0.1 : 0.1 : 1 ] );

x1 = x(1, 1);

x2 = x(2, 1);

y1 = y(1, 1);

y2 = y(1, 2);

z1 = z(1, 1);

z2 = z(2, 1);

z3 = z(1, 2);

z4 = z(2, 2);

x2_1 = x2 - x1;

y2_1 = y2 - y1;

yi_1 = yi - y1;

xi_1 = xi - x1;

zi = ( yi_1 .* xi_1 * ( z1 - z2 - z3 + z4 ) ) / ( x2_1 .* y2_1 ) ...

    + ( yi_1 .* ( z3 - z1 ) ) / y2_1 + ( xi_1 .* ( z2 - z1 ) ) / x2_1 + z1;

mesh( xi , yi, zi )

colormap spring

axis( [ -0.1, 1.2, -0.1, 1.2, 0, 2 ] )

colorbar

运行结果:

2bb3b082af9f45ea8ee2c4c2e70bbb0c.png

3)增加外部插值点之后得到的插值曲面

参考代码:(只需要修改横坐标和纵坐标取值范围即可)

[ xi, yi ] = meshgrid( [ -0.5 : 0.1 : 1.5 ] );

x1 = x(1, 1);

x2 = x(2, 1);

y1 = y(1, 1);

y2 = y(1, 2);

z1 = z(1, 1);

z2 = z(2, 1);

z3 = z(1, 2);

z4 = z(2, 2);

x2_1 = x2 - x1;

y2_1 = y2 - y1;

yi_1 = yi - y1;

xi_1 = xi - x1;zi = ( yi_1 .* xi_1 * ( z1 - z2 - z3 + z4 ) ) / ( x2_1 .* y2_1 ) ...

    + ( yi_1 .* ( z3 - z1 ) ) / y2_1 + ( xi_1 .* ( z2 - z1 ) ) / x2_1 + z1;

mesh( xi , yi, zi )

colormap spring

axis( [ -0.5, 1.6, -0.5, 1.6, -1, 3 ] )

colorbar

运行结果:

41ffee3238f745ca8790d43c7de9cf19.png

 

 

  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
双线性插值是一种常用的二维插值方法,常用于曲面插值或图像插值。在Matlab中,可以使用interp2函数来实现双线性插值。 要使用interp2函数进行双线性插值,需要提供四个角点的坐标和对应的函数值。假设已知四个角点的坐标分别为(0.1, 0.1), (0.1, 1.2), (1.1, 0.1), (1.1, 1.2),对应的函数值为f(0.1, 0.1), f(0.1, 1.2), f(1.1, 0.1), f(1.1, 1.2)。 根据双线性插值公式推导,可以得到最终的插值公式为: f(x, y) = \[f(1, 0) - f(0, 0)\]x + \[f(0, 1) - f(0, 0)\]y + \[f(1, 1) + f(0, 0) - f(0, 1) - f(1, 0)\]xy + f(0, 0) \[3\] 在Matlab中,可以使用以下代码进行双线性插值: ```matlab % 定义四个角点的坐标和对应的函数值 x = \[0.1, 0.1, 1.1, 1.1\]; y = \[0.1, 1.2, 0.1, 1.2\]; z = \[f(0.1, 0.1), f(0.1, 1.2), f(1.1, 0.1), f(1.1, 1.2)\]; % 定义插值点的坐标 xi = 0.5; yi = 0.5; % 进行双线性插值 zi = interp2(x, y, z, xi, yi, 'linear'); % 输出插值结果 disp(zi); ``` 这段代码中,x和y分别是四个角点的横纵坐标,z是对应的函数值。xi和yi是要进行插值的点的坐标。interp2函数的最后一个参数'linear'表示使用线性插值方法。 通过运行这段代码,可以得到插值点(xi, yi)处的函数值zi。 #### 引用[.reference_title] - *1* *2* [双线性插值公式推导Matlab实现](https://blog.csdn.net/m0_72662900/article/details/126147304)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [使用 matlab 数字图像处理(五)—— 双线性插值(Bilinear Interpolation)](https://blog.csdn.net/lanchunhui/article/details/51172583)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值