scipy.interpolate插值

article/2025/8/22 9:08:46

 python  SciPy库依赖于NumPy,提供了便捷且快速的N维数组操作。

可以实现插值,积分,优化,图像处理,特殊函数等等操作。

参考官方文档:

Interpolation (scipy.interpolate) — SciPy v1.7.1 Manualhttps://docs.scipy.org/doc/scipy/reference/tutorial/interpolate.htmlscipy.interpolate中的interp1d类是一种基于固定数据点创建函数的方便方法,可以使用线性插值在给定数据定义的域内的任何位置对其进行计算。该类的实例是通过传递包含数据的一维向量来创建的。这个类的实例定义了一个_调用_方法,因此可以像函数一样处理,在已知数据值之间插值以获得未知值。可以在实例化时指定边界处的行为。

以下示例演示了其在线性和三次样条插值中的使用:

from scipy.interpolate import interp1d
x = np.linspace(0, 10, num=11, endpoint=True)
y = np.cos(-x**2/9.0)
f = interp1d(x, y)
f2 = interp1d(x, y, kind='cubic')
xnew = np.linspace(0, 10, num=41, endpoint=True)
import matplotlib.pyplot as plt
plt.plot(x, y, 'o', xnew, f(xnew), '-', xnew, f2(xnew), '--')
plt.legend(['data', 'linear', 'cubic'], loc='best')
plt.show()

假设我们有多维数据,例如,对于底层函数f(x,y),我们只知道不形成规则网格的点(x[i],y[i])处的值。假设我们要插值二维函数,这就像是聚类算法一样。

def func(x, y):return x*(1-x)*np.cos(4*np.pi*x) * np.sin(4*np.pi*y**2)**2
# np.mgrid的用法
# 功能:返回多维结构,常见的如2D图形,3D图形
# np.mgrid[ 第1维,第2维 ,第3维 , …] 
grid_x, grid_y = np.mgrid[0:1:100j, 0:1:200j]
rng = np.random.default_rng()
points = rng.random((1000, 2))
values = func(points[:,0], points[:,1])
from scipy.interpolate import griddata
grid_z0 = griddata(points, values, (grid_x, grid_y), method='nearest')
grid_z1 = griddata(points, values, (grid_x, grid_y), method='linear')
grid_z2 = griddata(points, values, (grid_x, grid_y), method='cubic')
import matplotlib.pyplot as plt
plt.subplot(221)
plt.imshow(func(grid_x, grid_y).T, extent=(0,1,0,1), origin='lower')
plt.plot(points[:,0], points[:,1], 'k.', ms=1)
plt.title('Original')
plt.subplot(222)
plt.imshow(grid_z0.T, extent=(0,1,0,1), origin='lower')
plt.title('Nearest')
plt.subplot(223)
plt.imshow(grid_z1.T, extent=(0,1,0,1), origin='lower')
plt.title('Linear')
plt.subplot(224)
plt.imshow(grid_z2.T, extent=(0,1,0,1), origin='lower')
plt.title('Cubic')
plt.gcf().set_size_inches(6, 6)
plt.show()

接下来我们通过一张图得到它的长宽,然后我们定义points,values两组矩阵,分别表示坐标点的坐标信息,以及对应的像素点权重。最后来生成一张权重插值图

import cv2
import numpy as np
from scipy.interpolate import griddata
from scipy.interpolate import griddata
import matplotlib.pyplot as pltdef create_priority(width, height, points, values):# points = np.array([[0,0],[128,30],[255,0],[128, 170], [0,255],[255,0],[255,255]])# values = np.array([0, 255, 0, 200, 0, 0, 0])grid_x, grid_y = np.mgrid[0:width, 0:height]points = np.array(points)values = np.array(values)grid_z1 = griddata(points, values, (grid_x, grid_y), method='linear')# 如果是subplot (2 ,2 ,1),那么这个figure就是个2*2的矩阵图,也就是总共有4个图,1就代表了第一幅图plt.subplot(111)plt.imshow(grid_z1.T, extent=(0, 1, 0, 1), origin='lower')plt.title('use scipy.interpolate to show pic ')# cv2.imwrite('./0_weight.jpg', grid_z1.T)plt.show()mask = grid_z1.T.astype(np.uint8)cv2.imwrite('./0_weight.jpg', mask)print(mask)return maskif __name__ == '__main__':img_path = './0.jpg'img = cv2.imread(img_path)width, height, _ = img.shapepoints = np.array([[0,0],[128,30],[255,0],[128, 170], [0,255],[255,0],[255,255]])values = np.array([0, 255, 0, 200, 0, 0, 0])create_priority(width, height, points, values)


http://chatgpt.dhexx.cn/article/VODZJD7O.shtml

相关文章

Scipy系列目录

Python科学计算和数据分析库系列目录 Scipy简介 Scipy是基于Numpy的科学计算工具库,方便、易于使用、专为科学和工程设计,是一个用于数学、科学、工程领域的常用软件包。 Scipy提供了许多用户友好和高效的高阶方法,如插值,积分&…

scipy笔记:FFT

数学笔记;离散傅里叶变化 DFT_UQI-LIUWJ的博客-CSDN博客 数学笔记:FFT(快速傅里叶变换)_快速傅里叶变换矩阵_UQI-LIUWJ的博客-CSDN博客 【个人理解:FFT是DFT的一种优化,DFT需要N个谱域信号来表示N个时域信…

Scipy简介

Scipy简介 Scipy依赖于NumpyScipy包含的功能:最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理、图像处理、常微分方程求解器等应用场景:Scipy是高端科学计算工具包,用于数学、科学、工程学等领域Scipy由一些特定功能的子模块组…

系统工程--011详细设计 伪码 程序流程图 PAD图 N-S图 判断表和判断树

详细设计 三种控制结构:顺序、选择、循环 一个程序的代码块仅仅通过顺序、选择和循环,3种基本控制结构进行连接,并每个代码块只有一个入口和一个出口伪码 程序流程图 PAD图 N-S图 判断表和判断树

程序流程图、N-S图、PAD图

在需求分阶段经常使用3种方法去剖析我们所面对的业务。 程序流程图 任何复杂的程序图都应由5种基本控制结构组成或嵌套而成。 盒图(N-S图) Nassi和Scheiderman提出了一种符合结构化程序设计原则的图形描述工具,叫作盒图,也叫做N…

PAD图初认识

程序流程图&N-S图&PAD图 程序流程图 任何复杂的程序图都应由5种基本控制结构组成或嵌套而成。 盒图(N-S图) Nassi和Scheiderman提出了一种符合结构化程序设计原则的图形描述工具,叫作盒图,也叫做N-S图。任何一个N-S图&a…

python numpy 图片 pad 参数详解

python numpy 图片 pad 参数详解 ‘constant’, ‘edge’, ‘linear_ramp’, ‘maximum’, ‘mean’, ‘median’, ‘minimum’, ‘reflect’, ‘symmetric’, ‘wrap’, ‘empty’ 光看文档不太好理解,因为在网上找不到详细的例子,所以我就自己动手做了…

E-R图、N-S图、PAD图、程序流程图

E-R图: E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。 矩形框:表示实体,在框中记入实体名。 菱形框:表示联系,在框…

np.pad()用于卷积网络中对图片进行填充

有一张RGB的图像,我们要在这个图像的周围加上填充元素,使得这个图像不会再卷积操作后导致边缘信息丢失和图像尺寸的减小。 为此,我们需要padding操作,numpy库中对这个进行了封装numpy.pad()函数: 对一个一维数组来说…

numpy.pad对图片进行填充

一、接口 pad(array, pad_width, mode, **kwargs) 其中,第一个参数是输入数组; 第二个参数是需要pad的值,参数输入方式为:((before_1, after_1), … (before_N, after_N)),其中(before_1, af…

第六章:详细设计。盒图、问题分析图即PAD图、过程设计语言PDL伪码

第六章:详细设计 盒图 PAD图 PAD图即:问题分析图。使用表示结构化控制结构的PAD符号设计出来的程序必然是结构化程序。 PAD图所描绘的程序结构十分清晰。PAD图表现程序逻辑易读、易懂、易记。 例题: 过程设计语言(PDL&#xff…

分别画出程序的软件流程图、NS图、PAD图; 程序

1、分别画出程序的软件流程图、NS图、PAD图&#xff1b; 程序 #include<stdio.h> #include<stdlib.h> int main(int argc, char *argv[]) {int Edge_a,Edge_b,Edge_c;printf("Input three int type data between space:\n");scanf("%d %d %d"…

程序流程图 分别用N-S图和PAD图、伪码表示。n阶乘(软件工程)

例题&#xff1a;某程序流程图如右图所示&#xff0c;请分别用 N-S图和PAD图表示。 PAD图&#xff1a; N-S&#xff1a;盒图 2.计算n阶乘的程序N-S图&#xff0c;PAD图

PAD图

地址链接&#xff1a;http://star.aust.edu.cn/~jjguan/guanjj/rjgc/chapter4/cha4_11_3_c1.htm

N-S图、PAD图(例题)

&#xff08;做完这些N-S图、PAD图例题&#xff0c;这两个图也基本就掌握了&#xff09; 1、记录StudentRecord给出即将大学毕业的学生的姓名和平均分&#xff08;GPA&#xff09;。我们的目的是建立一个参加毕业典礼的学生表。候选毕业的学生表从文件”StudRecs”读入。因为学…

软件程序设计中的N-S图、PAD图、程序流程图、E-R图

在软件程序设计中&#xff0c;我们通常会用到以下几种图&#xff0c;来帮助我们&#xff0c;分析问题&#xff0c;整理逻辑。 我将介绍这四种图的特性&#xff0c;以及区分它们的方法。 1.N-S图&#xff1a; 也叫盒图&#xff0c;由美国学者I.Nassi 和 B.Shneiderman提出&…

软件工程——NS图,PAD图

一、实验目的 (1) 熟悉常用的详细设计表达工具 (2) 掌握利用visio等CASE工具设计程序流程图&#xff0c;NS图&#xff0c;PAD图的画法 (3) 掌握利用visual studio 等IDE完成实现代码的编写和调试 二、实验内容 从以下几个程序要求中任选其中的一个进行详细设计和编码实现。 …

详细设计的工具——PAD图

目录 一、PAD图的概念 二、PAD图的基本符号 三、PAD图的优点 四、PAD图的应用 一、PAD图的概念 PAD图&#xff08;Problem Analysis Diagram&#xff09;&#xff0c;由日本日立公司1973年发明以后&#xff0c;已得到一定程度的推广。它用二维树形结构的图来表示程序的控制…