scipy 在特定坐标处插入图像

x8goxv8g  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(142)

给定一个图像(数组),如何对特定的像素位置进行插值?下面的代码生成20x30网格,每个像素填充一个值(zg)。然后代码用scipy的interp2d方法构造一个插值器。我想要得到特定坐标处的插值。在给出的示例中,在x = [1.5, 2.4, 5.8], y = [0.5, 7.2, 2.2]处,所以总共有3个位置。2然而,由于某种原因,函数返回了一个3x3数组。3为什么?4我该如何修改代码,以便只计算这三个坐标呢?

import numpy as np
from scipy.interpolate import interp2d

# Rectangular grid

x = np.arange(20)
y = np.arange(30)
xg, yg = np.meshgrid(x, y)
zg = np.exp(-(2*xg)**2 - (yg/2)**2)

# Define interpolator

interp = interp2d(yg, xg, zg)

# Interpolate pixel value

zi = interp([1.5, 2.4, 5.8], [0.5, 7.2, 2.2])

print(zi.shape) # = (3, 3)
hwamh0ep

hwamh0ep1#

你的代码很好。interp插值函数计算所有可能的坐标组合,即3 × 3 = 9。例如:

>>> interp(1.5, 0.5)
array([0.04635516])

>>> interp(1.5, 7.2)
array([0.02152198])

>>> interp(5.8, 2.2)
array([0.03073694])

>>> interp(2.4, 2.2)
array([0.03810408])

实际上,您可以在返回的矩阵中找到这些值:

>>> interp([1.5, 2.4, 5.8], [0.5, 7.2, 2.2])
array([[0.04635516, 0.04409826, 0.03557219],
       [0.0400542 , 0.03810408, 0.03073694],
       [0.02152198, 0.02047414, 0.01651562]])

文档说明返回值是
具有形状(透镜(y),透镜(x))二维阵列
如果只需要所需的坐标,可以执行以下操作:

xe = [1.5, 2.4, 5.8]
ye = [0.5, 7.2, 2.2]

>>> [interp(x, y)[0] for x, y in zip(xe, ye)]
[0.04635515780224686, 0.020474138863349815, 0.030736938802464715]

相关问题