我们可以从图像中的整数位置进行采样,因为图像被构造为2d数组,我们只需要处理数组位置中的任何数据。
对于非整数位置,例如在两个像素之间,这不是那么简单。然而,它是一个常见的问题(例如)只要您对线性插值感到满意,GPU就会将此功能烘焙到硬件中。我无法在skimage中找到任何这方面的功能,但它似乎对图像处理非常重要,我觉得我必须遗漏一些东西。
我希望有类似的东西:
sample(img, (64.5, 120.37), interpolation='linear')
答案 0 :(得分:1)
Scipy有interp2d可以成功用于图像插值。
让我们从一个示例图像开始(随机灰度来保持简单,colormap来自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
你可以获得类似的重新缩放和重新采样,但这种方法对我来说看起来更方便。