【问题标题】:Interpolate image at specific coordinates在特定坐标处插入图像
【发布时间】:2022-09-19 06:40:01
【问题描述】:

给定一个矩形形式的图像(数组),我如何插入特定的像素位置?以下代码生成 20x30 网格,每个像素填充一个值 (zg)。然后代码使用 scipy 的 interp2d 方法构造一个插值器。我想要的是在特定坐标处获得插值。在给定的示例中,x = [1.5, 2.4, 5.8], y = [0.5, 7.2, 2.2],因此总共有 3 个位置。但是,由于某种原因,该函数返回一个 3x3 数组。为什么?我将如何更改代码以便只评估这三个坐标?

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)

    标签: python scipy


    【解决方案1】:

    你的代码很好。 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]])
    

    documentation 声明返回值为

    具有形状 (len(y), len(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]
    

    【讨论】:

    • 好的,谢谢,我想我需要遍历各个位置。幸运的是,即使对于数千个坐标,这也相当快 ? 同时,我通过使用 scipy 的 RBF 实现找到了另一个解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 2019-10-23
    • 2019-09-23
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多