来自图像中非整数位置的skimage样本?

skimage sample from non-integer locations in image?

我们可以从图像中的整数位置进行采样,因为图像被构造为二维数组,我们只需要数组位置中的任何数据。

对于非整数位置,比如两个像素之间的位置,这就不是那么简单了。然而,这是一个如此普遍的问题,以至于(例如)GPU 将此功能嵌入到硬件中,只要您对线性插值感到满意。我在 skimage 中找不到这方面的任何功能,但它似乎是图像处理的基础,我觉得我一定遗漏了一些东西。

我希望是这样的:

sample(img, (64.5, 120.37), interpolation='linear')

Scipy有interp2d可以成功用于图像插值

让我们从示例图像开始(随机灰度以保持简单,颜色图来自我用于绘图的 matplotlib):

np.random.seed(42)
np.random.randint(255, (10, 10))

现在我们可以初始化我们的插值器

from scipy.interpolate import interp2d
x = np.arange(10)
y = np.arange(10)
f = interp2d(x, y, img, kind="cubic")

并在新网格上对其进行评估

xdense = np.linspace(0, 9, 100)
ydense = np.linspace(0, 9, 100)
newimg = f(xdense, ydense)

而且你还可以用它来采样任意点

f(0.192321, 5.99927371)

给予

array([99.04826046])

使用 skimage 你可能会得到类似的重新缩放和重新采样的东西,但这种方法对我来说看起来更方便。