当前位置:网站首页>双线性插值公式推导及Matlab实现
双线性插值公式推导及Matlab实现
2022-08-03 20:07:00 【泡泡怡】
一、引言
双线性插值作为一种比较简单的二维插值方法,常用于曲面插值或者图像插值。双线性插值需要已知四个角点坐标(xi,yi,zi),i=1,2,3,4,然后以此构建一张曲面片,即插值曲面。根据这四个已知角点,利用双线性插值函数,就可以计算该插值曲面片内部各点处的函数值,也可以用来预测该插值曲面片外部邻近区域的函数值。
二、双线性插值公式推导
如下图所示曲面片,四个角点坐标已知,对应的xoy平面矩形区域。
1)根据点A和点B建立直线AB方程,坐标是(x’,y1,z’):
2)根据点C和点D建立直线CD方程,坐标是(x’’,y1,z’’):
3)以直线AB和直线CD为端点,建立同时垂直于AB与CD的直线:
4)将式(1)和式(2)代入式(3)得:
该函数就是双线性插值函数。(虽然该公式看着稍微有点烦,但是你不能不说它很简单)
当四个角点分别是图像相邻的四个角点时,且假设其中一个角点(x1,y1)位于原点,由于相邻的像素距离是1,所以上式中的分母都是1,则可以得到图像上相邻四个像素构成的曲面片的插值函数为:
此公式即为图像的双线性插值公式。(图像的双线性插值原来如此简单)
二、曲面片的双线性插值实例(纯纯的手工,非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
运行结果如下:
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
运行结果:
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
运行结果:
边栏推荐
- 自定义form表单验证
- 染料修饰核酸RNA|[email protected] 610/[email protected] 594/Alexa 56
- ARMuseum
- charles配置客户端请求全部不走缓存
- tRNA-m5C转运RNA(tRNA)修饰5-甲基胞嘧啶(m5C)|tRNA修饰m1Am2A (2-methyladenosine)
- 若依集成easyexcel实现excel表格增强
- 【leetcode】剑指 Offer II 008. 和大于等于 target 的最短子数组(滑动窗口,双指针)
- MapReduce介绍及执行过程
- php根据两点经纬度计算距离
- ECCV2022 | 用于视频问题回答的视频图Transformer
猜你喜欢
RNA核糖核酸修饰RNA-HiLyte FluorTM 405荧光染料|RNA-HiLyte FluorTM 405
Detailed demonstration pytorch framework implementations old photo repair (GPU)
- [email protected] 610/[email protected] 594/Alexa 56"/>
染料修饰核酸RNA|[email protected] 610/[email protected] 594/Alexa 56
转运RNA(tRNA)甲基化修饰7-甲基胞嘧啶(m7C)|tRNA-m7G
边缘盒子+时序数据库,美的数字化平台 iBuilding 背后的技术选型
深入理解JVM-内存结构
调用EasyCVR云台控制接口时,因网络延迟导致云台操作异常该如何解决?
xss.haozi练习通关详解
Edge box + time series database, technology selection behind Midea's digital platform iBuilding
华为设备配置VRRP负载分担
随机推荐
力扣206-反转链表——链表
从文本匹配到语义相关——新闻相似度计算的一般思路
收藏-即时通讯(IM)开源项目OpenIM-功能手册
ThreadLocal详解
2022 年值得尝试的 7 个 MQTT 客户端工具
数学之美 第六章——信息的度量和作用
算法--交错字符串(Kotlin)
开源生态研究与实践| ChinaOSC
1161 最大层内元素和——Leetcode天天刷【BFS】(2022.7.31)
tensorflow-gpu2.4.1安装配置详细步骤
揭秘5名运维如何轻松管理数亿级流量系统
JS 内置构造函数 扩展 prototype 继承 借用构造函数 组合式 原型式creat 寄生式 寄生组合式 call apply instanceof
xss.haozi练习通关详解
那些年我写过的语言
【飞控开发高级教程4】疯壳·开源编队无人机-360 度翻滚
Solidity智能合约开发 — 4.1-合约创建和函数修饰器
Detailed steps for tensorflow-gpu2.4.1 installation and configuration
Statistical machine learning 】 【 linear regression model
力扣707-设计链表——链表
谁的孙子最多II