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

时间:2018-06-18 07:32:36

标签: python image-processing interpolation scikit-image

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

对于非整数位置,例如在两个像素之间,这不是那么简单。然而,它是一个常见的问题(例如)只要您对线性插值感到满意,GPU就会将此功能烘焙到硬件中。我无法在skimage中找到任何这方面的功能,但它似乎对图像处理非常重要,我觉得我必须遗漏一些东西。

我希望有类似的东西:

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

1 个答案:

答案 0 :(得分:1)

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

让我们从一个示例图像开始(随机灰度来保持简单,colormap来自matplotlib,我用它进行绘图):

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

enter image description here

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

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)

enter image description here

你也可以用它来取样任意点

f(0.192321, 5.99927371)

给予

array([99.04826046])

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