相关疑难解决方法(0)

重新采样表示图像的numpy数组

我正在寻找如何重新采样以新尺寸表示图像数据的numpy数组,最好选择插值方法(最近,双线性等).我知道有

scipy.misc.imresize
Run Code Online (Sandbox Code Playgroud)

这通过包装PIL的调整大小功能来完成这一点.唯一的问题是,因为它使用PIL,numpy数组必须符合图像格式,给我最多4个"颜色"通道.

我希望能够使用任意数量的"颜色"通道调整任意图像的大小.我想知道是否有一种简单的方法可以在scipy/numpy中执行此操作,或者如果我需要自己滚动.

关于如何自己编造一个我有两个想法:

  • 一个scipy.misc.imresize分别在每个通道上运行的函数
  • 创建我自己的使用 scipy.ndimage.interpolation.affine_transform

对于大数据,第一个可能会很慢,而第二个似乎不提供除样条之外的任何其他插值方法.

python numpy image-processing scipy python-imaging-library

70
推荐指数
4
解决办法
8万
查看次数

在x,y和z中以不同间隔快速插值定期采样的3D数据

我有一些体积成像数据,包括在x,y,z的规则网格上采样的值,但具有非立方体素形状(z中相邻点之间的空间大于x,y).我最终希望能够在通过卷的任意2D平面上插值,如下所示:

在此输入图像描述

我知道scipy.ndimage.map_coordinates,但在我的情况下使用它不那么简单,因为它隐含地假设输入数组中元素的间距在维度上是相等的.我可以首先根据最小的体素尺寸对我的输入数组进行重新采样(这样我的所有体素都可以是立方体),然后map_coordinates用来在我的平面上进行插值,但是插入我的数据两次似乎不是一个好主意.

我也知道,scipy有不规则隔开的ND数据(不同的内插LinearNDInterpolator, NearestNDInterpolator等等),但这些都是非常缓慢和内存密集型,我的目的.在我知道值在每个维度内规律间隔的情况下,插入数据的最佳方法是什么?

python interpolation numpy scipy volume-rendering

19
推荐指数
3
解决办法
6508
查看次数

Python中的快速二维插值与SciPy常规网格进行分散/不规则评估

我有一个常规的训练值网格(向量x和y,各自的网格xmesh和ymesh以及zmesh的已知值),但是要插值的散乱/不规则/不规则值组(向量xI和yI,我们对zI感兴趣) [0] = f(xI [0],yI [0])... zI [N-1] = f(xI [N-1],yI [N-1]).这种插值将被称为数百万时间作为优化问题的一部分,因此性能太重要,不能简单地使用制作网格并获取跟踪的方法.

到目前为止,我已经能够找到一个接近我想要的scipy.interpolate函数,即Bpf函数.然而,因为它传达了一个分散的输入,我认为它没有良好的性能,我想测试它对样条线性,线性和最近邻插值方法,我理解得更好,我希望会更快.实现这些的所有方法,我可以找到将常规网格作为训练数据(如RectBivariateSpline)似乎也需要常规网格来插值的值.

这段代码有希望弄清楚我在问什么.

import numpy as np
import scipy as sp
import scipy.interpolate as interp

x = np.arange(0,2*np.pi,.1)
y = x
xmesh,ymesh = np.meshgrid(x,y)
zmesh = np.sin(xmesh)+np.cos(ymesh)
rbf = interp.Rbf(xmesh, ymesh, zmesh, epsilon=2)
xI = np.arange(0,np.pi,.05)
yI = xI
XI, YI = np.meshgrid(xI,yI)
# Notice how this is happy to take a vector or grid as input   
zI = rbf(xI, yI)
ZI = rbf(XI,YI) # equiv. to zImesh
myspline …
Run Code Online (Sandbox Code Playgroud)

python interpolation numpy mesh scipy

9
推荐指数
1
解决办法
7635
查看次数

使用 `scipy.interpolate.griddata` 进行非常慢的插值

scipy.interpolate.griddata在尝试将“几乎”有规律的网格数据插入到地图坐标中时遇到了极其缓慢的性能,以便可以绘制地图和数据,matplotlib.pyplot.imshow因为matplotlib.pyplot.pcolormesh它花费的时间太长并且alpha在其他方面表现不佳。

最好展示一个例子(输入文件可以在这里下载):

import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import griddata

map_extent = (34.4, 36.2, 30.6, 33.4)
# data corners:
lon = np.array([[34.5,        34.83806236],
                [35.74547079, 36.1173923]])
lat = np.array([[30.8,        33.29936152],
                [30.67890411, 33.17826563]])

# load saved files
topo = np.load('topo.npy')
lons = np.load('lons.npy')
lats = np.load('lats.npy')
data = np.load('data.npy')

# get max res of data
dlon = abs(np.array(np.gradient(lons))).max()
dlat = abs(np.array(np.gradient(lats))).max()

# interpolate the data to the extent …
Run Code Online (Sandbox Code Playgroud)

python numpy matplotlib scipy

7
推荐指数
1
解决办法
5100
查看次数