Python样条插值和坐标映射

news2024/9/28 17:36:17

文章目录

    • 样条插值基本原理
    • scipy实现
    • 坐标映射

样条插值基本原理

由于数组本身是格点化了的,所以对数组的旋转、平移和缩放,并不像实数空间中那么简单。以一维的平移为例,现有三个点,坐标为0,1,2,值对应为a,b,c,现在将这个数轴向右平移0.5,则这a,b,c三个点的坐标就变成了0.5, 1.5, 2.5,但数组中不允许出现非整数的坐标,所以显示的仍然是0,1,2位置处的值,所以就需要通过0.5, 1.5, 2.5位置处的值,来插值得到0,1,2位置处的值。

几何变换中所用到的插值方法,是样条插值。

所谓样条插值,简单来说,就是根据插值次数,每 N N N个点确定一个分段函数,每个分段函数都是一个样条。将所有的样条组合起来,就是样条插值。最简单的样条插值函数是线性样条插值,可表示为

S i ( x ) = y i + y i + 1 − y i x i + 1 − x i ( x − x i ) S_i(x)=y_i+\frac{y_{i+1}-y_i}{x_{i+1}-x_i}(x-x_i) Si(x)=yi+xi+1xiyi+1yi(xxi)

scipy实现

scipy.ndimage中,提供了一维样条插值和多维样条插值函数,分别是spline_filter1dspline_filter,二者参数如下,其中order, output, mode均与几何变换中的定义相同

spline_filter1d(input, order=3, axis=-1, output=np.float64, mode='mirror')
spline_filter(input, order=3, output=np.float64, mode='mirror')

由于插值本身

import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import *
ori = np.eye(20)  # create an image
ori[10, :] = 1.0

fDct = {
    "ori" : ori,
    "axis_0" : spline_filter1d(ori, axis=0),
    "axis_1" : spline_filter1d(ori, axis=1),
    "multi axis, order=3" : spline_filter(ori, order=3),
    "multi axis, order=4" : spline_filter(ori, order=4),
    "multi axis, order=5" : spline_filter(ori, order=5)
}

fig = plt.figure()
for i, key in enumerate(fDct):
    fig.add_subplot(2, 3, i+1)
    plt.imshow(fDct[key], cmap='gray_r')
    plt.title(key)

plt.show()

效果如下

在这里插入图片描述

坐标映射

坐标映射的逻辑是,将输入的数组,通过插值的方式,映射到新的坐标中。例如现在有一个矩阵数组

[ 0 1 2 3 4 5 6 7 8 9 10 11 ] \begin{bmatrix} 0 & 1 & 2 \\ 3 & 4 & 5 \\ 6 & 7 & 8 \\ 9 &10 &11 \end{bmatrix} 03691471025811

python中坐标原点从0开始,所以(0,0)处的值是0(1,1)处的值是4,那么(0.5,2)这个点并不在矩阵的格点上,需要通过插值得到

import numpy as np
from scipy.ndimage import *
a = np.arange(12.).reshape((4, 3))
map_coordinates(a, [[0.5, 2], [0.5, 1]], order=1)
# 返回array([ 2.,  7.])

其中函数map_coordinates极为坐标映射函数,除了输入的数组a,以及要提取的坐标位置之外,还支持output, order, mode, cval以及prefilter这5个参数,参数作用与旋转平移等函数相同。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小黑子—多媒体技术与运用基础知识二:数字音频处理技术

多媒体技术与运用2.0多媒体系列第二章1. 音频处理概述1.1 什么是声音1.2 声音的基本参数1.3 人的听觉特性1.4 音频信号处理过程2.音频的数字化2.1 音频的采样2.2 音频的量化2.3 声道数2.3 音频的编码与压缩2.4 数字音频的质量3.音频文件格式及标准3.1 波形文件格式3.2 MPEG音频…

打造高效Android应用,从Hilt注入框架开始

概述 在 Android 开发中,注入解耦是一种设计模式,用于解决代码耦合的问题。通过使用注入技术,可以将应用程序中的不同部分解耦,从而使得代码更加灵活、易于维护和升级。 在 Android 中,注入解耦通常使用依赖注入&…

R -- 如何处理缺失数据

brief 识别缺失值 当传入向量,返回的是包含逻辑向量的等长向量。complete.cases()用来识别矩阵或者数据框有没有包含缺失值的行,若整行数据完整则返回TRUE,若行数据包含缺失值,不管几个缺失值则返回FALSE。 探索缺失值模式 列表图…

高速存储器

由于CPU和主存储器之间的速度上的不匹配限制了计算机系统的工作速度,为了提高CPU和主存之间的数据传输率,可以采用并行技术的存储器: 双端口存储器多模块交叉存储器 双端口存储器 同一个存储器具有两组相互独立的读写控制线路,…

Direct3D 12——灯光——聚光灯光

一个与聚光灯光源(spotlight)相近的现实实例是手电筒。从本质上来说,聚光灯由位置Q向方向d 照射出范围呈圆锥体的光。 一个聚光灯以位置Q向方向d发射出半顶角为Φmax 的圆锥体范围的光 其中,P为被照点的位置,Q是聚光…

基于html+css的盒子展示8

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

一文4000字使用JavaScript+Selenium玩转Web应用自动化测试

自动化测试 在软件开发过程中, 测试是功能验收的必要过程, 这个过程往往有测试人员参与, 提前编写测试用例, 然后再手动对测试用例进行测试, 测试用例都通过之后则可以认为该功能通过验收. 但是软件中多个功能之间往往存在关联或依赖关系, 某一个功能的新增或修改可能或影响到…

手把手教你搭建ROS阿克曼转向小车之(霍尔编码器数据读取与速度计算)

上一篇文章已经介绍了如何驱动直流有刷电机转动起来,这篇文章讲解如何获取编码器的计数值,并且计算出速度信息。在实际的运行中,随着机器的重量不一样,电机受到的阻力就会不一样,给定同样的PWM在不同载重的情况下速度会…

Alien Skin ExposureX8最新ps中文版调色滤镜插件

Exposure是用于创意照片编辑的最佳图像编辑器。Exposure结合了专业级照片调整,庞大的华丽照片外观库以及高效的设计,使其使用起来很愉悦。新的自动调整功能可简化您的工作流程,并使您进入创意区。 Alien Skin Exposure 拥有超过500种预设效果…

基于线性支持向量机的词嵌入文本分类torch案例

一、前言 简介线性支持向量机,并使用线性支持向量机实现文本分类, 输入文本通过词嵌入方法转换成浮点张量,给出torch案例 线性支持向量机(Linear Support Vector Machine,简称Linear SVM)是一种常用的分类算法,它通过一个超平面来…

TiDB实战篇-TiDB Cluster部署

简介 部署TiDB Cluster部署,熟系集群的基础操作。 集群规划 机器拓扑 3pd,3tikv,1tidb_server.1tiflash,监控。 192.168.66.10192.168.66.20192.168.66.21 pd_servers tikv_servers tidb_servers tiflash_servers pd_servers tikv_servers monitoring_servers…

MySQL中使用IN()查询到底走不走索引?

MySQL中使用IN()查询到底走不走索引? 看数据量 EXPLAIN SELECT * from users WHERE is_doctor in (0,1); 很明显没走索引,下面再看一个sql。 EXPLAIN SELECT * from users WHERE is_doctor in (2,1);又走索引了,所以…

Yolov5一些知识

1 Yolov5四种网络模型 Yolov5官方代码中,给出的目标检测网络中一共有4个版本,分别是Yolov5s、Yolov5m、Yolov5l、Yolov5x四个模型。 1.1Yolov5网络结构图 eg:Yolov5s 2.1 Yolov3&Yolov4网络结构图 2.1.1 Yolov3网络结构图 Yolov3的网络结构是…

Matlab论文插图绘制模板第86期—带置信区间的折线图

在之前的文章中,分享了很多Matlab折线图的绘制模板: 进一步,分享一种特殊的折线图:带置信区间的折线图。 先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中,加群的朋友请自行…

【C++技能树】快速文本匹配 --正则表达式介绍与C++正则表达式使用

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法…感兴趣就关注我吧!你定不会失望。 0.正则表达式存在必要性 在日常生活,或者刷题过程中我们难免需要检测一段字符是否需要是否符合规定,或在一大段字符中寻找自己想要的信息…

Mysql 数据库介绍

数据库介绍 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,每个数据库都有一个或多个不同的API接口用于创建,访问,管理,搜索和复制所保存的数据。 我们也可以将数据存储在文件中&#xff0…

支持m2的主板换m2硬盘无法识别的问题,主板:七彩虹H410-T

记录一下我的电脑换m2硬盘遇到无法读取的问题,也给有同样问题的人留个参考,特别是七彩虹主板 主板:七彩虹H410-T 遇到的问题: m2 硬盘插上主板后,开机无法识别,打开我的电脑没有相应的盘,设备…

代码随想录---142. 环形链表 II

给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整…

【C++】vector的实现

模拟实现vector类前言一、迭代器二、重载 [ ]三、构造函数相关(重点)(1)构造函数(2)构造并使用n个值为value的元素初始化(3)区间构造(4)拷贝构造三、析构函数…

什么是科学

人人都是价值观-思辨专家_个人渣记录仅为自己搜索用的博客-CSDN博客 相关文章 人人都是中医爱好者 科学定义 关于“科学”这个词的定义,历史上曾出现过多种版本,但是目前为止还没有一个是世人公认的定义。 历史上达尔文(Charles Robert Darwin&#xff…