双线性插值(Bilinear interpolation)原理推导

这篇具有很好参考价值的文章主要介绍了双线性插值(Bilinear interpolation)原理推导。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考资料

  • https://en.wikipedia.org/wiki/Bilinear_interpolation

前言

双线性插值,又称为双线性内插。在数学上,双线性插值是对线性插值在二维直角网格上的扩展,用于对双变量函数(例如 x 和 y)进行插值。其核心思想是在x,y两个方向分别进行一次线性插值。

线性插值可以查看 之前的博客文章。

推导

假如我们想得到未知函数 f f f 在点 P = ( x , y ) P=(x, y) P=(x,y) 的值,假设我们已知函数 f f f Q 11 = ( x 1 , y 1 ) , Q 12 = ( x 1 , y 2 ) , Q 21 = ( x 2 , y 1 ) Q_{11}=\left(x_1, y_1\right) , Q_{12}=\left(x_1, y_2\right) , Q_{21}=\left(x_2, y_1\right) Q11=(x1,y1)Q12=(x1,y2)Q21=(x2,y1) Q 22 = ( x 2 , y 2 ) Q_{22}=\left(x_2, y_2\right) Q22=(x2,y2) 四个点的值。

双线性插值(Bilinear interpolation)原理推导,数学,算法,机器学习,概率论,双线性插值

先x方向,后y方向

首先在 x x x 方向进行线性插值 (即 x x x变, y y y不变),得到
f ( x , y 1 ) ≈ x 2 − x x 2 − x 1 f ( Q 11 ) + x − x 1 x 2 − x 1 f ( Q 21 ) , f ( x , y 2 ) ≈ x 2 − x x 2 − x 1 f ( Q 12 ) + x − x 1 x 2 − x 1 f ( Q 22 ) . \begin{aligned} & f\left(x, y_1\right) \approx \frac{x_2-x}{x_2-x_1} f\left(Q_{11}\right)+\frac{x-x_1}{x_2-x_1} f\left(Q_{21}\right), \\ & f\left(x, y_2\right) \approx \frac{x_2-x}{x_2-x_1} f\left(Q_{12}\right)+\frac{x-x_1}{x_2-x_1} f\left(Q_{22}\right) . \end{aligned} f(x,y1)x2x1x2xf(Q11)+x2x1xx1f(Q21),f(x,y2)x2x1x2xf(Q12)+x2x1xx1f(Q22).
然后在 y y y 方向进行线性插值,得到
f ( x , y ) ≈ y 2 − y y 2 − y 1 f ( x , y 1 ) + y − y 1 y 2 − y 1 f ( x , y 2 ) = y 2 − y y 2 − y 1 ( x 2 − x x 2 − x 1 f ( Q 11 ) + x − x 1 x 2 − x 1 f ( Q 21 ) ) + y − y 1 y 2 − y 1 ( x 2 − x x 2 − x 1 f ( Q 12 ) + x − x 1 x 2 − x 1 f ( Q 22 ) ) = 1 ( x 2 − x 1 ) ( y 2 − y 1 ) ( f ( Q 11 ) ( x 2 − x ) ( y 2 − y ) + f ( Q 21 ) ( x − x 1 ) ( y 2 − y ) + f ( Q 12 ) ( x 2 − x ) ( y − y 1 ) + f ( Q 22 ) ( x − x 1 ) ( y − y 1 ) ) = 1 ( x 2 − x 1 ) ( y 2 − y 1 ) [ x 2 − x x − x 1 ] [ f ( Q 11 ) f ( Q 12 ) f ( Q 21 ) f ( Q 22 ) ] [ y 2 − y y − y 1 ] . \begin{aligned} f(x, y) & \approx \frac{y_2-y}{y_2-y_1} f\left(x, y_1\right)+\frac{y-y_1}{y_2-y_1} f\left(x, y_2\right) \\ & =\frac{y_2-y}{y_2-y_1}\left(\frac{x_2-x}{x_2-x_1} f\left(Q_{11}\right)+\frac{x-x_1}{x_2-x_1} f\left(Q_{21}\right)\right)+\frac{y-y_1}{y_2-y_1}\left(\frac{x_2-x}{x_2-x_1} f\left(Q_{12}\right)+\frac{x-x_1}{x_2-x_1} f\left(Q_{22}\right)\right) \\ & =\frac{1}{\left(x_2-x_1\right)\left(y_2-y_1\right)}\left(f\left(Q_{11}\right)\left(x_2-x\right)\left(y_2-y\right)+f\left(Q_{21}\right)\left(x-x_1\right)\left(y_2-y\right)+f\left(Q_{12}\right)\left(x_2-x\right)\left(y-y_1\right)+f\left(Q_{22}\right)\left(x-x_1\right)\left(y-y_1\right)\right) \\ & =\frac{1}{\left(x_2-x_1\right)\left(y_2-y_1\right)}\left[x_2-x \quad x-x_1\right]\left[\begin{array}{ll} f\left(Q_{11}\right) & f\left(Q_{12}\right) \\ f\left(Q_{21}\right) & f\left(Q_{22}\right) \end{array}\right]\left[\begin{array}{l} y_2-y \\ y-y_1 \end{array}\right] . \end{aligned} f(x,y)y2y1y2yf(x,y1)+y2y1yy1f(x,y2)=y2y1y2y(x2x1x2xf(Q11)+x2x1xx1f(Q21))+y2y1yy1(x2x1x2xf(Q12)+x2x1xx1f(Q22))=(x2x1)(y2y1)1(f(Q11)(x2x)(y2y)+f(Q21)(xx1)(y2y)+f(Q12)(x2x)(yy1)+f(Q22)(xx1)(yy1))=(x2x1)(y2y1)1[x2xxx1][f(Q11)f(Q21)f(Q12)f(Q22)][y2yyy1].

先y方向,后x方向

首先在 y y y 方向进行线性插值 (即 y y y变, x x x不变),得到
f ( x 1 , y ) ≈ y 2 − y y 2 − y 1 f ( Q 11 ) + y − y 1 y 2 − y 1 f ( Q 12 ) , f ( x 2 , y ) ≈ y 2 − y y 2 − y 1 f ( Q 21 ) + y − y 1 y 2 − y 1 f ( Q 22 ) . \begin{aligned} & f\left(x_1, y\right) \approx \frac{y_2-y}{y_2-y_1} f\left(Q_{11}\right)+\frac{y-y_1}{y_2-y_1} f\left(Q_{12}\right), \\ & f\left(x_2, y\right) \approx \frac{y_2-y}{y_2-y_1} f\left(Q_{21}\right)+\frac{y-y_1}{y_2-y_1} f\left(Q_{22}\right) . \end{aligned} f(x1,y)y2y1y2yf(Q11)+y2y1yy1f(Q12),f(x2,y)y2y1y2yf(Q21)+y2y1yy1f(Q22).
然后在 x x x 方向进行线性插值,得到
f ( x , y ) ≈ x 2 − x x 2 − x 1 f ( x 1 , y ) + x − x 1 x 2 − x 1 f ( x 2 , y ) = x 2 − x x 2 − x 1 ( y 2 − y y 2 − y 1 f ( Q 11 ) + y − y 1 y 2 − y 1 f ( Q 12 ) ) + x − x 1 x 2 − x 1 ( y 2 − y y 2 − y 1 f ( Q 21 ) + y − y 1 y 2 − y 1 f ( Q 22 ) ) = 1 ( x 2 − x 1 ) ( y 2 − y 1 ) ( f ( Q 11 ) ( x 2 − x ) ( y 2 − y ) + f ( Q 21 ) ( x − x 1 ) ( y 2 − y ) + f ( Q 12 ) ( x 2 − x ) ( y − y 1 ) + f ( Q 22 ) ( x − x 1 ) ( y − y 1 ) ) = 1 ( x 2 − x 1 ) ( y 2 − y 1 ) [ x 2 − x x − x 1 ] [ f ( Q 11 ) f ( Q 12 ) f ( Q 21 ) f ( Q 22 ) ] [ y 2 − y y − y 1 ] . \begin{aligned} f(x, y) & \approx \frac{x_2-x}{x_2-x_1} f\left(x_1, y\right)+\frac{x-x_1}{x_2-x_1} f\left(x_2, y\right) \\ & =\frac{x_2-x}{x_2-x_1}\left(\frac{y_2-y}{y_2-y_1} f\left(Q_{11}\right)+\frac{y-y_1}{y_2-y_1} f\left(Q_{12}\right)\right)+\frac{x-x_1}{x_2-x_1}\left(\frac{y_2-y}{y_2-y_1} f\left(Q_{21}\right)+\frac{y-y_1}{y_2-y_1} f\left(Q_{22}\right)\right) \\ & =\frac{1}{\left(x_2-x_1\right)\left(y_2-y_1\right)}\left(f\left(Q_{11}\right)\left(x_2-x\right)\left(y_2-y\right)+f\left(Q_{21}\right)\left(x-x_1\right)\left(y_2-y\right)+f\left(Q_{12}\right)\left(x_2-x\right)\left(y-y_1\right)+f\left(Q_{22}\right)\left(x-x_1\right)\left(y-y_1\right)\right) \\ & =\frac{1}{\left(x_2-x_1\right)\left(y_2-y_1\right)}\left[x_2-x \quad x-x_1\right]\left[\begin{array}{ll} f\left(Q_{11}\right) & f\left(Q_{12}\right) \\ f\left(Q_{21}\right) & f\left(Q_{22}\right) \end{array}\right]\left[\begin{array}{l} y_2-y \\ y-y_1 \end{array}\right] . \end{aligned} f(x,y)x2x1x2xf(x1,y)+x2x1xx1f(x2,y)=x2x1x2x(y2y1y2yf(Q11)+y2y1yy1f(Q12))+x2x1xx1(y2y1y2yf(Q21)+y2y1yy1f(Q22))=(x2x1)(y2y1)1(f(Q11)(x2x)(y2y)+f(Q21)(xx1)(y2y)+f(Q12)(x2x)(yy1)+f(Q22)(xx1)(yy1))=(x2x1)(y2y1)1[x2xxx1][f(Q11)f(Q21)f(Q12)f(Q22)][y2yyy1].

可见,无论哪个方向先进行插值,双线性插值的结果是一样的。

简化后的双线性插值

如果选择一个坐标系统使得 f f f 的四个已知点坐标分别为 ( x 1 , y 1 ) = ( 0 , 0 ) 、 ( x 1 , y 2 ) = ( 0 , 1 ) 、 ( x 2 , y 1 ) = ( 1 , 0 ) (x_1,y_1)=(0,0) 、(x_1,y_2)=(0,1) 、(x_2,y_1)=(1,0) (x1,y1)=(0,0)(x1,y2)=(0,1)(x2,y1)=(1,0) ( x 2 , y 2 ) = ( 1 , 1 ) (x_2,y_2)=(1,1) (x2,y2)=(1,1) ,那么插值公式就可以化简为
f ( x , y ) ≈ f ( 0 , 0 ) ( 1 − x ) ( 1 − y ) + f ( 1 , 0 ) x ( 1 − y ) + f ( 0 , 1 ) ( 1 − x ) y + f ( 1 , 1 ) x y ≈ [ 1 − x x ] [ f ( 0 , 0 ) f ( 0 , 1 ) f ( 1 , 0 ) f ( 1 , 1 ) ] [ 1 − y y ] \begin{aligned} f(x, y) &\approx f(0,0)(1-x)(1-y)+f(1,0) x(1-y)+f(0,1)(1-x) y+f(1,1) x y \\ & \approx\left[\begin{array}{ll} 1-x & x \end{array}\right]\left[\begin{array}{ll} f(0,0) & f(0,1) \\ f(1,0) & f(1,1) \end{array}\right]\left[\begin{array}{c} 1-y \\ y \end{array}\right] \end{aligned} f(x,y)f(0,0)(1x)(1y)+f(1,0)x(1y)+f(0,1)(1x)y+f(1,1)xy[1xx][f(0,0)f(1,0)f(0,1)f(1,1)][1yy]

双线性插值的一阶导

在进行code reading 时,发现有时候会需要计算插值后的结果在x,y方向上的一阶导,因此,这里也给出双线性插值的一阶导。

f ( x , y ) f(x,y) f(x,y) x x x方向上的一阶导:
∂ f ∂ x = 1 ( x 2 − x 1 ) ( y 2 − y 1 ) [ − 1 1 ] [ f ( Q 11 ) f ( Q 12 ) f ( Q 21 ) f ( Q 22 ) ] [ y 2 − y y − y 1 ] . \frac{\partial f}{\partial x}=\frac{1}{\left(x_2-x_1\right)\left(y_2-y_1\right)}\left[-1 \quad 1\right]\left[\begin{array}{ll} f\left(Q_{11}\right) & f\left(Q_{12}\right) \\ f\left(Q_{21}\right) & f\left(Q_{22}\right) \end{array}\right]\left[\begin{array}{l} y_2-y \\ y-y_1 \end{array}\right] . xf=(x2x1)(y2y1)1[11][f(Q11)f(Q21)f(Q12)f(Q22)][y2yyy1].

f ( x , y ) f(x,y) f(x,y) y y y方向上的一阶导:

∂ f ∂ y = 1 ( x 2 − x 1 ) ( y 2 − y 1 ) [ x 2 − x x − x 1 ] [ f ( Q 11 ) f ( Q 12 ) f ( Q 21 ) f ( Q 22 ) ] [ − 1 1 ] . \frac{\partial f}{\partial y}=\frac{1}{\left(x_2-x_1\right)\left(y_2-y_1\right)}\left[x_2-x \quad x-x_1\right]\left[\begin{array}{ll} f\left(Q_{11}\right) & f\left(Q_{12}\right) \\ f\left(Q_{21}\right) & f\left(Q_{22}\right) \end{array}\right]\left[\begin{array}{l} -1 \\ 1 \end{array}\right] . yf=(x2x1)(y2y1)1[x2xxx1][f(Q11)f(Q21)f(Q12)f(Q22)][11].

简化后:

∂ f ∂ x = [ − 1 , 1 ] [ f ( 0 , 0 ) f ( 0 , 1 ) f ( 1 , 0 ) f ( 1 , 1 ) ] [ 1 − y y ] \frac{\partial f}{\partial x}=[-1,1]\left[\begin{array}{ll} f(0,0) & f(0,1) \\ f(1,0) & f(1,1) \end{array}\right]\left[\begin{array}{c} 1-y \\ y \end{array}\right] xf=[1,1][f(0,0)f(1,0)f(0,1)f(1,1)][1yy]

∂ f ∂ y = [ 1 − x , x ] [ f ( 0 , 0 ) f ( 0 , 1 ) f ( 1 , 0 ) f ( 1 , 1 ) ] [ − 1 1 ] \frac{\partial f}{\partial y}=[1-x, x]\left[\begin{array}{ll} f(0,0) & f(0,1) \\ f(1,0) & f(1,1) \end{array}\right]\left[\begin{array}{c} -1 \\ 1 \end{array}\right] yf=[1x,x][f(0,0)f(1,0)f(0,1)f(1,1)][11]

c++实现参考如下:

双线性插值(Bilinear interpolation)原理推导,数学,算法,机器学习,概率论,双线性插值文章来源地址https://www.toymoban.com/news/detail-596807.html

到了这里,关于双线性插值(Bilinear interpolation)原理推导的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 九.图像处理与光学之图像几何变换算法(双线性插值)

    ​ 图像几何变换是图像处理中非常基础实用的技能,主要包括图片位移、缩放、镜像、剪切、放射变换等,在对图像进行空间变换的过程中,典型的情况是在对图像进行放大,旋转处理的时候,图像会出现失真的现象。这是由于在变换之后的图像中,存在着一些变换之前的图

    2024年02月13日
    浏览(49)
  • MUSIC算法相关原理知识(物理解读+数学推导+Matlab代码实现)

    部分来自于网络教程,如有侵权请联系本人删除  教程链接:MUSIC算法的直观解释:1,MUSIC算法的背景和基础知识_哔哩哔哩_bilibili  MUSIC算法的直观解释:2,我对于MUSIC算法的理解_哔哩哔哩_bilibili https://blog.csdn.net/zhangziju/article/details/100730081  一、MUSIC算法作用 MUSIC (Multiple

    2024年02月02日
    浏览(41)
  • 【ViT 微调时关于position embedding如何插值(interpolate)的详解】

    本文适合对Vision Transformer有一定了解(知道内部结构和一些实现细节,最好是精读过ViT这篇论文)的读者阅读,这篇博客不会详细说明ViT的结构和前向推断过程。 符号 含义 b b b batch size N N N patch size H H H W W W 低分辨率图像的高和宽 H ′ H\\\' H ′ W ′ W\\\' W ′ 高分辨率图像的高和

    2024年02月05日
    浏览(36)
  • 基于python实现最近邻插值双线性插值径向基函数插值(代码实现详细教程)

    三种插值方法都是使用Python自己实现的。 寻找每个中心点周围的八个点中有无未丢失的点,如果有的话就赋值为第一个找到的点,如果没有就扩大范围再次寻找,在最大范围内都找不到的话就跳过。 使用解方程的方法求解,整体思路类似colorization作业的实现,每个点用周围

    2024年02月07日
    浏览(41)
  • 上采样(最近邻插值、双线性插值法、反池化、转置卷积)

    一般图像分割的时候,需要对图像进行像素级别的分类,因此在卷积提取到抽象特征后需要通过上采样将feature map还原到原图大小,在FCN和U-net等网络中都提到了上采样的操作,这里会一些上采样的方法进行总结。 最简单的图像缩放算法就是最近邻插值,也称作零阶插值,就

    2024年02月05日
    浏览(66)
  • 双线性插值简介及C++代码实现

    双线性插值是指现在某个方向进行两次线性插值,之后在另外一个方向对插值的结果再进行一次线性插值。以下图为例,已知 Q 11 Q_{11} Q 11 ​ , Q 12 Q_{12} Q 12 ​ , Q 21 Q_{21} Q 21 ​ , Q 22 Q_{22} Q 22 ​ 四个点的坐标和像素值、 P P P 点的坐标,求 P P P 点的像素值。双线性插值的

    2024年02月07日
    浏览(42)
  • 在 FPGA 上如何实现双线性插值的计算?

    作者 | 殷庆瑜  责编 | 胡巍巍 目录 一、概述 二、What?什么是双线性插值? 二、Why?为什么需要双线性插值? 三、How?怎么实现双线性插值? 关键点1 像素点选择 关键点2 权重计算 升级1 通过查表减少计算量 升级2 通过数据锁存减少取数周期 升级3 通过换数信号兼容更多分

    2024年02月08日
    浏览(40)
  • 数学建模——插值算法

    概念:数模比赛中,常常需要根据有已知的函数点进行数、模型处理和分析,而有时候现有的数据是极少的,不足以支撑分析的进行,这时就需要使用一些数学的方法,“模拟产生“一些新的但又比较靠谱的值来满足需求,这就是插值的作用。 一维插值问题: 通过已有的点

    2024年02月16日
    浏览(39)
  • 数学建模 插值算法

    有问题 牛顿差值也有问题 它们都有龙格现象,一般用分段插值。 插值预测要比灰色关联预测更加准确,灰色预测只有2次 拟合样本点要非常多,样本点少差值合适

    2024年02月16日
    浏览(37)
  • 数学建模之插值算法

    注:本文面向应用,参考了清风大大的资料以及司守奎老师的《数学建模算法与应用》,属作者的个人学习总结。 当已知函数点非常少的时候,我们经常要 模拟产生一些新的函数值 来支撑后续数据分析。这就是插值算法的应用目的。*插值算法还可以用来实现短期预测,但我

    2024年01月24日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包