线性插值基本原理推导

news/2024/4/24 0:57:39/文章来源:https://blog.csdn.net/m0_46926492/article/details/129259857

线性插值基本原理

  • 1. 为什么使用线性插值?
  • 2. 单线性插值
    • 2.1 单线性插值推导
  • 3.多线性插值
    • 3.1 多线性插值推导注意事项
    • 3.2 多线性插值推导
    • 3.3 插入坐标越远权重越大

1. 为什么使用线性插值?

  • 在深度学习对图片进行上采样和下采样的时候会应用到线性插值
    在这里插入图片描述

    • 对图片上采样,原始图片(33)范围红色框中的值,会得到(44)框中红色框的值
    • 假设目标图片红框坐标为(i,j),那么在原始图片位置(i∗34,j∗34)(i*\frac{3}{4},j*\frac{3}{4})(i43,j43),
    • 已知i=2,j=3i=2,j=3i=2,j=3,所以在原始图片位置(1.5,0.75)(1.5,0.75)(1.5,0.75)
      • 不是整数,在找原始图片位置时,会自动取整
      • 即,需要使用线性插值,来降低误差

2. 单线性插值

在这里插入图片描述

2.1 单线性插值推导

  • 如图所示,在p0和p1p_0和p_1p0p1中间插入ppp,求p点位置
  • 根据斜率公式
    y−y0x−x0=y1−y0x1−x0y=y0+(y1−y0)(x−x0)x1−x0y=(x1−x0)y0+(y1−y0)(x−x0)x1−x0y=x1y0−x0y0+xy1−x0y1−xy0+x0y0x1−x0y=(x1−x)y0+(x−x0)y1x1−x0y=(x1−x)x1−x0y0+(x−x0)x1−x0y1\begin{aligned} \frac{y-y_{0}}{x-x_{0}}&=\frac{y_{1}-y_{0}}{x_{1}-x_{0}}\\ y&=y_{0}+\frac{(y_{1}-y_{0})(x-x_{0})}{x_{1}-x_{0}} \\&y=\frac{(x_{1}-x_{0})y_{0}+(y_{1}-y_{0})(x-x_{0})}{x_{1}-x_{0}} \\&y=\frac{x_{1}y_{0}-x_{0}y_{0}+xy_{1}-x_{0}y_{1}-xy_{0}+x_{0}y_{0}}{x_{1}-x_{0}} \\&y=\frac{(x_{1}-x)y_{0}+(x-x_{0})y_{1}}{x_{1}-x_{0}} \\&y=\frac{(x_{1}-x)}{x_{1}-x_{0}}y_{0}+\frac{(x-x_{0})}{x_{1}-x_{0}}y_{1} \end{aligned} xx0yy0y=x1x0y1y0=y0+x1x0(y1y0)(xx0)y=x1x0(x1x0)y0+(y1y0)(xx0)y=x1x0x1y0x0y0+xy1x0y1xy0+x0y0y=x1x0(x1x)y0+(xx0)y1y=x1x0(x1x)y0+x1x0(xx0)y1
  • 假设y对应的值,就是图像中的像素值p,得到
    p=(x1−x)x1−x0p0+(x−x0)x1−x0p1\begin{aligned} p=\frac{(x_{1}-x)}{x_{1}-x_{0}}p_{0}+\frac{(x-x_{0})}{x_{1}-x_{0}}p_{1} \end{aligned} p=x1x0(x1x)p0+x1x0(xx0)p1

3.多线性插值

3.1 多线性插值推导注意事项

  • 双线性插值是三维的,需要从二维计算出某一个坐标轴的差值才可以
    • 如果按照单线性插值,直接按照三位图,那么求p1p_{1}p1
      • 显然不可能会出现y1−y1y_{1}-y_{1}y1y1这个操作
        y−y1x−x2=y1−y1x1−x2\begin{aligned} \frac{y-y_{1}}{x-x_{2}}&=\frac{y_{1}-y_{1}}{x_{1}-x_{2}} \end{aligned} xx2yy1=x1x2y1y1

3.2 多线性插值推导

  • 根据单线性插值公式,得出公式
    • 我们计算像素值,直接将yyy变成ppp即可
      y=(x1−x)x1−x0y0+(x−x0)x1−x0y1\begin{aligned} y=\frac{(x_{1}-x)}{x_{1}-x_{0}}y_{0}+\frac{(x-x_{0})}{x_{1}-x_{0}}y_{1} \end{aligned} y=x1x0(x1x)y0+x1x0(xx0)y1

在这里插入图片描述

  • 由单线性插值,对x轴得到【自己转换维度】
    p1=(x2−x)x2−x1p11+(x−x1)x2−x1p21p2=(x2−x)x2−x1p12+(x−x1)x2−x1p22\begin{aligned} p_{1}=\frac{(x_{2}-x)}{x_{2}-x_{1}}p_{11}+\frac{(x-x_{1})}{x_{2}-x_{1}}p_{21}\\ p_{2}=\frac{(x_{2}-x)}{x_{2}-x_{1}}p_{12}+\frac{(x-x_{1})}{x_{2}-x_{1}}p_{22} \end{aligned} p1=x2x1(x2x)p11+x2x1(xx1)p21p2=x2x1(x2x)p12+x2x1(xx1)p22
  • 由单线性插值,对y轴得到
    p=(y2−y)y2−y1p1+(y−y1)y2−y1p2\begin{aligned} p=\frac{(y_{2}-y)}{y_{2}-y_{1}}p_{1}+\frac{(y-y_{1})}{y_{2}-y_{1}}p_{2} \end{aligned} p=y2y1(y2y)p1+y2y1(yy1)p2
  • p1,p2p_{1},p_{2}p1,p2代入化简ppp
    p=(y2−y)y2−y1((x2−x)x2−x1p11+(x−x1)x2−x1p21)+(y−y1)y2−y1((x2−x)x2−x1p12+(x−x1)x2−x1p22)=(y2−y)(x2−x)(y2−y1)(x2−x1)p11+(y2−y)(x−x1)(y2−y1)(x2−x1)p21+(y−y1)(x2−x)(y2−y1)(x2−x1)p12+(y−y1)(x−x1)(y2−y1)(x2−x1)p22\begin{aligned} p&=\frac{(y_{2}-y)}{y_{2}-y_{1}}(\frac{(x_{2}-x)}{x_{2}-x_{1}}p_{11}+\frac{(x-x_{1})}{x_{2}-x_{1}}p_{21})+\frac{(y-y_{1})}{y_{2}-y_{1}}(\frac{(x_{2}-x)}{x_{2}-x_{1}}p_{12}+\frac{(x-x_{1})}{x_{2}-x_{1}}p_{22}) \\&=\frac{(y_{2}-y)(x_{2}-x)}{(y_{2}-y_{1})(x_{2}-x_{1})}p_{11}+\frac{(y_{2}-y)(x-x_{1})}{(y_{2}-y_{1})(x_{2}-x_{1})}p_{21}+\frac{(y-y_{1})(x_{2}-x)}{(y_{2}-y_{1})(x_{2}-x_{1})}p_{12}+\frac{(y-y_{1})(x-x_{1})}{(y_{2}-y_{1})(x_{2}-x_{1})}p_{22} \end{aligned} p=y2y1(y2y)(x2x1(x2x)p11+x2x1(xx1)p21)+y2y1(yy1)(x2x1(x2x)p12+x2x1(xx1)p22)=(y2y1)(x2x1)(y2y)(x2x)p11+(y2y1)(x2x1)(y2y)(xx1)p21+(y2y1)(x2x1)(yy1)(x2x)p12+(y2y1)(x2x1)(yy1)(xx1)p22
  • 在图像中,相邻像素点坐标差值为1,即
    x2=x1+1y2=y1+1\begin{aligned} x_{2}&=x_{1}+1\\ y_{2}&=y_{1}+1 \end{aligned} x2y2=x1+1=y1+1
    在这里插入图片描述
  • x2,y2x_2,y_2x2,y2关于x1,y1x_1,y_1x1,y1的表达式代入p
    p=(y2−y)(x2−x)(y2−y1)(x2−x1)p11+(y2−y)(x−x1)(y2−y1)(x2−x1)p21+(y−y1)(x2−x)(y2−y1)(x2−x1)p12+(y−y1)(x−x1)(y2−y1)(x2−x1)p22=(y2−y)(x2−x)p11+(y2−y)(x−x1)p21+(y−y1)(x2−x)p12+(y−y1)(x−x1)p22\begin{aligned} p&=\frac{(y_{2}-y)(x_{2}-x)}{(y_{2}-y_{1})(x_{2}-x_{1})}p_{11}+\frac{(y_{2}-y)(x-x_{1})}{(y_{2}-y_{1})(x_{2}-x_{1})}p_{21}+\frac{(y-y_{1})(x_{2}-x)}{(y_{2}-y_{1})(x_{2}-x_{1})}p_{12}+\frac{(y-y_{1})(x-x_{1})}{(y_{2}-y_{1})(x_{2}-x_{1})}p_{22} \\&=(y_{2}-y)(x_{2}-x)p_{11}+(y_{2}-y)(x-x_{1})p_{21}+(y-y_{1})(x_{2}-x)p_{12}+(y-y_{1})(x-x_{1})p_{22} \end{aligned} p=(y2y1)(x2x1)(y2y)(x2x)p11+(y2y1)(x2x1)(y2y)(xx1)p21+(y2y1)(x2x1)(yy1)(x2x)p12+(y2y1)(x2x1)(yy1)(xx1)p22=(y2y)(x2x)p11+(y2y)(xx1)p21+(yy1)(x2x)p12+(yy1)(xx1)p22

3.3 插入坐标越远权重越大

  • 由于p是由p1p_{1}p1p2p_{2}p2得到的
    P1≈(y2−y)(x2−x)p11+(y2−y)(x−x1)p21P2≈(y−y1)(x2−x)p12+(y−y1)(x−x1)p22\begin{aligned} P_{1}&\approx(y_{2}-y)(x_{2}-x)p_{11}+(y_{2}-y)(x-x_{1})p_{21}\\ P_{2}&\approx(y-y_{1})(x_{2}-x)p_{12}+(y-y_{1})(x-x_{1})p_{22} \end{aligned} P1P2(y2y)(x2x)p11+(y2y)(xx1)p21(yy1)(x2x)p12+(yy1)(xx1)p22
    • 根据p1p_{1}p1,都有系数(y2−y)(y_{2}-y)(y2y),如果p1p_{1}p1向的值比较大,那么(x2−x)(x_{2}-x)(x2x)的值就要大,所以当插入的点离哪一个坐标远,那个坐标的权重越大【插入值的权重越大】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_75517.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TypeScript 使用 ES6 解构骚操作

TypeScript 使用 ES6 解构骚操作 文章目录TypeScript 使用 ES6 解构骚操作一、TypeScript 对象解构二、TypeScript 函数参数解构四、参考资料💘五、推荐博文🍗一、TypeScript 对象解构 我们都知道 ES6 的数据解构功能很强大,一行命令就能够声…

TypeScript 常用知识

「 推荐一个学习 ts 基础的专栏,满满的干货:typeScript 」 1、为什么推荐使用 TypeScript 【】ts 是 js 的超集,包含 js 的所有元素 【】ts 通过对代码进行类型检查,可以帮助我们避免在编写 js 时经常遇到令人痛苦的错误 【】强…

云端IDE系列教程7:解决 WeTTY 在 Ubuntu 非 root 用户不能运行的问题

原文作者:行云创新技术总监 邓冰寒 概述 上一期在使用官方容器镜像快速成功地在 TitanIDE 运行起来了 WeTTY,但是不适合开发人员使用,而我自己编译构建出来的容器镜像无法直接运行指定的应用(/bin/bash 或 /bin/zsh)&…

GO中sync 包的 RWMutex 读写互斥锁

文章目录背景RWMutex 简介代码验证多个协程请求读锁 RLock() 和 RLock()读写交错 RLock() 和 Lock()写入的时候读取读取的时候写入请求多个写Lock() 和 Lock()背景 Mutex 互斥锁是严格锁定读和写,如果我们需要单独对读或者写添加锁需要使用 sync包的RWMutex 针对读…

PHP使用chilkat入门教程

前言: 我们需要先确认自己的版本,在PHP中,可以利用phpinfo()函数来查看php是ts版本还是nts版本,该方法可以展示出当前phpinfo信息,若“Thread Safety”项的信息是“enabled”,一般来说就表示ts版本&#xf…

备战英语6级——记录复习进度

开始记录—— 学习:如何记录笔记? 1:首先我认为:电脑打字比较适合我! 2:先记笔记,再“填笔记”! 记笔记就是一个框架,记录一个大概的东西。后面需要在笔记中&#xff0…

实例10:四足机器人运动学逆解可视化与实践

实例10: 四足机器人运动学逆解单腿可视化 实验目的 了解逆运动学的有无解、有无多解情况。了解运动学逆解的求解。熟悉逆运动学中求解的几何法和代数法。熟悉单腿舵机的简单校准。掌握可视化逆向运动学计算结果的方法。 实验要求 拼装一条mini pupper的腿部。运…

Qt 事件机制

【1】事件 事件是可以被控件识别的操作。如按下确定按钮、选择某个单选按钮或复选框。 每种控件有自己可识别的事件,如窗体的加载、单击、双击等事件,编辑框(文本框)的文本改变事件等等。 事件就是用户对窗口上各种组件的操作。…

LibAFL的安装及基本使用

本教程安装LibAFL使用的是Ubuntu 22.04 操作系统 1. 安装 1.1 Rust 安装 Rust的安装,参照Rust官网:https://www.rust-lang.org/tools/install curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh1.2 LLVM安装 直接apt安装,安…

表格形式的Sarsa与Q_learning算法

环境如下: 这是一个简单的环境,绿色方块代表终点,白色方块代表可行点,灰色方块代表陷阱 用Sarsa算法和Q_learning算法训练得到value表格 代码如下: (jupyter notebook上的代码,所以顺序看起来有点儿奇怪) …

Java8 新特性强大的Stream API

一、Stream API 说明 Java8中有两大最为重要的改变。第一个是 Lambda 表达式;另外一个则是 Stream API。 Stream API ( java.util.stream) 把真正的函数式编程风格引入到Java中。这是目前为止对Java类库最好的补充,因为Stream API可以极大提供Ja…

【博学谷学习记录】超强总结,用心分享丨人工智能 特征工程 特征变换 分箱学习总结

目录概念分箱的作用等频分箱等距分箱*卡方分箱公式例子概念 特征构造的过程中,对特征做分箱处理时必不可少的过程分箱就是将连续变量离散化,合并成较少的状态 分箱的作用 离散特征的增加和减少都很容易,易于模型的快速迭代;稀疏…

基于自定义训练函数的BP神经网络回归分析

目录 背影 BP神经网络的原理 BP神经网络的定义 BP神经网络的神经元 BP神经网络的激活函数 BP神经网络的传递函数 基于自定义训练函数的BP神经网络回归分析 背影 BP神经网络是一种成熟的神经网络,拥有很多训练函数,传递函数,激活函数&#x…

数学小课堂:无穷小(用动态和极限的眼光看世界)

文章目录 引言I 极限1.1 柯西对极限的认知1.2 极限准确的定义1.3 数列极限的定义1.4 函数极限的定义1.5 无穷小(特殊的极限)1.6 定量和逆向思维1.7 认知升级的过程引言 身处于渐变世界的人类,难以理解瞬间突变。 老师的作用,就是用大白话,把数学语言所写的知识,翻译成大…

腾讯安全与锐捷网络战略合作,威胁情报能力“被集成”

2月28日,腾讯安全和锐捷网络在北京联合举办“威胁情报”战略合作发布会。双方发布了一款集成了腾讯安全威胁情报的新一代防火墙,并举办战略合作签约仪式。会上,锐捷网络安全产品事业部总经理项小升、腾讯安全总经理陈龙代表双方签署战略合作协…

Python可视化界面编程入门

Python可视化界面编程入门具体实现代码如所示: (1)普通可视化界面编程代码入门: import sys from PyQt5.QtWidgets import QWidget,QApplication #导入两个类来进行程序界面编程if __name__"__main__":#创建一个Appl…

k8s学习之路 | Day17 k8s 工作负载

文章目录工作负载的定义工作负载资源分类工作负载的定义 官方参考链接:https://kubernetes.io/docs/concepts/workloads/ A workload is an application running on Kubernetes. Whether your workload is a single component or several that work together, on K…

《C++ Primer Plus》(第6版)第6章编程练习

《C Primer Plus》(第6版)第6章编程练习《C Primer Plus》(第6版)第6章编程练习1. 大小写转换2. 平均值3. 菜单4. 成员5. 收入所得税6. 捐款7. 统计单词8. 统计文件字符数9. 重写编程练习6《C Primer Plus》(第6版&…

创建对象的方式和对属性的操作

javaScript支持多种编程范式,包括函数式编程和面向对象编程,javaScript的对象被设计成一组属性的无序集合,由key和value组成。 创建对象的两种方式 早期使用创建对象方式最多的是使用Object类,使用new关键字来创建一个对象&…

docker-compose安装kafka和php简单测试

docker-compose.yml内容: version: 3.1 services: zookeeper: container_name: zookeeper image: zookeeper:3.6 ports: - 2181:2181 kafka: image: wurstmeister/kafka container_name: kafka depends_on: - zookeeper …