matlab中interp2双线性插值算法的实现原理及使用python简单实现双线性插值interp2算法

2023-05-16

双线性插值算法基本原理

双线性插值算法的基本原理:
红色的数据点与待插值得到的绿色点

图1 双线性插值示意图

图中绿色的点P为待插值得到的点,对点P进行插值需要用到Q11(x1,y1), Q12(x1,y2), Q21(x2, y1), Q22(x2, y2)的值,需要先在x方向线性插值得到R1(x,y1)与R2(x,y2):

公式1

公式1

再进一步再y方向上进行线性插值得到P(x,y):

公式2

公式2

这里不做详细讲述,提供几篇参考资料:

  1. 双线性插值
  2. 一篇文章为你讲透双线性插值
  3. 双线性插值算法以及python实现

matlab中interp2双线性插值算法的实现原理

matlab中提供的interp2算法为一种二维的插值算法,在插值方式上可以选择最邻近插值、双线性插值(默认插值方式)、样条插值、双三次插值等。这里仅考虑双线性插值。

Vq = interp2(X, Y, V, Xq, Yq)
X, Y 为原始坐标, 且X, Y 是必须是单调的
V为坐标X, Y对于的数据矩阵
Xq,Yq是用于插值的坐标
若Xq与Yq中有在X与Y范围之外的点,则相应地返回nan(Not a Number)

matlab中的interp2为基于网格的插值,不需要考虑参考资料3中的情况,所以直接按公式2计算即可。
不同于图1所画,matlab插值时是以坐标(1,1)的位置为原点,列方向为x方向,行方向为y方向。

python下简单实现双线性插值interp2算法

直接上代码:

def interp2(x,y,img,xi,yi):
    """
    x, y: 初始坐标
    img: 待插值图像
    xi, yi: 插值图像坐标

    使用双线性插值实现:
    -----------------------------
    | q11(x1, y1) | q12(x1, y2) |
    -----------------------------
    | q21(x2, y1) | q22(x2, y2) |
    -----------------------------
    f(x, y) = 1/(x2-x1)(y2-y1) * [f(x1,y1)*(x2-x)(y2-y)) + f(x1, y2)*(x2-x)(y-y1) + f(x2, y1)*(x-x1)(y2-y)
                + f(x2, y2)*(x-x1)(y-y1)]
    """

    img_itp = np.ones([len(xi), len(yi)])

    for i in range(len(x)-1):
        for j in range(len(y)-1) :
            y2_y1 = y[j+1] - y[j]
            x2_x1 = x[i+1] - x[i]
            for m in range(int(x[i]), int(x[i+1])):
                for n in range(int(y[j]), int(y[j+1])):
                    # x2 - x, x - x1, ...
                    x2_x = x[i+1] - xi[m]
                    x_x1 = xi[m] - x[i]
                    y2_y = y[j+1] - yi[n]
                    y_y1 = yi[n] - y[j]

                    # q11: img[j, i], q12: img[j, i+1], q21: img[j+1, i], q22: img[j+1, i+1]
                    img_itp[n, m] = (img[j, i] * y2_y * x2_x + \
                                img[j, i+1] * y2_y * x_x1 + \
                                img[j+1, i] * y_y1 * x2_x + \
                                img[j+1, i+1] * y_y1 * x_x1 ) / y2_y1 / x2_x1
 
    return img_itp
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matlab中interp2双线性插值算法的实现原理及使用python简单实现双线性插值interp2算法 的相关文章

  • Unity 使用 Microphone 采集麦克风声音

    1 获取麦克风 xff0c Microphone devices 2 开始录音 xff0c Microphone Start 3 结束录音 xff0c Microphone End 1 MicrophoneWrapper 1 2 3 4 5
  • VR体验设计怎样做最有效?你需要知道这10点

    技术行业一直在努力简化与数字产品的交互过程 xff0c 在不远的将来 xff0c 我们将拥有自然逼真的用户界面 届时交互界面与我们现实发生的行为一致 虚拟现实技术 xff08 VR xff09 更加速了这一局面的到来 谷歌 Facebook
  • unity c# 录音并保存为 mp3 或 wav 文件

    private int Frequency 61 16000 录音频率 private int BitRate 61 16 比特率 private int MicSecond 61 2 每隔2秒 xff0c 保存一下录音数据 public
  • Unity c# Application类 文件路径

    Application dataPath Assets资源文件夹的绝对路径 Application persistentDataPath 持久性的数据存储路径 xff0c 在不同平台路径不同 xff0c 但都存在 xff0c 绝对路径 Ap
  • c++ 图像RGB24旋转90度和YUV420旋转90度

    逆时针旋转90度 void RGBRotate90 anticlockwise BYTE des BYTE src int width int height if des src return int n 61 0 int linesize
  • ubuntu x86搭建 麒麟arm QT6交叉编译

    ubuntu搭建QT6交叉编译 使用QT6搭建arm交叉编译平台 编译环境准备 交叉编译器 qt源码准备 开始编译QT 使用QT6搭建arm交叉编译平台 近期项目需求开发平台是unbuntu x86 目标机器是UOS arm架构 由于需要在
  • java分解质因数

    一个数的因数就是能与别的数相乘得到这个数的数 比如30 xff0c 它的因数就是1 xff0c 2 xff0c 3 xff0c 5 xff0c 6 xff0c 10 xff0c 15 xff0c 30 质因数 xff0c 首先 xff0c
  • Mac上pip/pip3设置国内源

    pip3 config set global index url https pypi tuna tsinghua edu cn simple
  • WSL基本使用配置

    前提 相信很多同学已经体验了wsl的强大 能让win电脑上少装一个虚拟机软件 xff0c 但是原生的wsl操作窗口复制粘贴很不方便 xff0c 对于使用习惯ssh的人来说用原生的确实有些难受 xff0c 故需要配置下使用ssh进行连接操作
  • 创建ECS服务器

    阿里云服务器 作业一 xff1a ECS之初体验 xff08 Linux xff09 任务一 xff1a 创建弹性云服务器 任务二 xff1a 登录云服务器 分别使用vnc Workbench和xshell登录云服务器 任务三 xff1a
  • Python报错:ModuleNotFoundError: No module named ‘xxx‘可能的解决方案大全

    Python报错 xff1a 34 ModuleNotFoundError No module named 39 xxx 39 34 这个报错是个非常常见的报错 xff0c 几乎每个python程序员都遇到过 xff0c 导致这个报错的原因
  • 反证法证明:为什么KMP算法不会跳过(漏掉)正确的答案

    KMP算法用于在母串中查找子串的出现位置 KMP算法 xff1a 字符串匹配问题 有详细的引入过程 xff0c 很容易理解掌握 首先我们都知道 xff0c KMP算法的next数组可以指导匹配失败情况下 xff0c 子串 xff08 模式串
  • 详解介绍Selenium常用API的使用--Java语言(完整版)

    参考 xff1a http www testclass net selenium java 一共分为二十个部分 xff1a 环境安装之Java 环境安装之IntelliJ IDEA 环境安装之selenium selenium3浏览器驱动
  • 华为OD2023机试真题【字符串重新排序】

    华为OD2023机试真题 全题库点这里 题目名称 字符串重新排序 知识点 排序数组 时间限制 1s 空间限制 256M 题目描述 给定一个字符串s s包含以空格分隔的若干单词 请对s进行如下处理后输出 span class token nu
  • 解决WSL2中Vmmem内存占用过大问题

    一 问题描述 在 Windows 系统中 xff0c 感觉卡顿得厉害 查看任务管理器 xff0c 内存占用 98 而名为 Vmmem 的进程占用内存高达 2 1 GB 如图 xff1a 二 Vmmem介绍 Vmmem 进程是系统合成的一个虚
  • 5款最佳Linux桌面环境的优缺点比较

    如果你刚接触Linux xff0c 那么我确信你准花了大量的时间为你的Linux发行版选择桌面环境 你可能在想每一种桌面环境都试一下 xff0c 不过这很耗费时间 外头有好多优秀的桌面环境 这就是为什么我测评了5款最佳Linux桌面环境 x
  • vue3.2中setup语法糖<script lang=“ts“ setup>

    推荐阅读 xff1a 怎样使用 Vue 3 的 xff1c script setup xff1e 语法糖功能 南北极之间的博客 CSDN博客 在 Vue 3 中 xff0c 它引入了一个 功能 它是编译时语法糖 xff0c 用于在单个文件组
  • libc++abi.dylib`__cxa_throw:毫无预兆崩溃

    最近在接一款第三方直播api 一开始很正常 xff0c 从来调试的时候意外的出现了一下崩溃 经过一段时间的摸索 xff0c 各种找资料 xff0c 发觉是由于xcode中设置了当所有异常出现时的断点 解决办法是将all改为Objective
  • UOS安装最新 向日葵(ubuntu20.04也试用)

    下载依赖 libicu57 57 1 6 43 deb9u4 amd64 deb xff08 http mirrors aliyun com debian pool main i icu libicu57 57 1 6 43 deb9u4
  • UOS 安装 vscode

    商店安装版同官网冲突 官网下载缓慢 Selecting previously unselected package code An error occurred while applying changes An error occurre

随机推荐