简短回答。虽然不是最佳解决方案,但您可以使用 preserve_range=True 解决这个“问题”。
skimage.transform.resize(a, a.shape, preserve_range=True)
长答案。 skimage 需要在调整图像大小之前将图像转换为浮动,因为会发生所有插值数学。现在,用于此转换的方法将取决于数组的数据类型。在您的示例中,它可能是 int32(如果我在我的机器上运行您的代码,我会得到 int64)。因此,最大值为 2^31-1。你从调整大小函数中得到的矩阵大约是 1/(2^31-1)。因此转换是正确的。那么,解决您的问题的最佳方法是什么?
最佳解决方案使用 skimage 支持的数据类型创建一个数组,调整其大小,并(如有必要)将其恢复为原始数据类型。
a = np.array([[1,1],[1,1]], dtype=np.uint8)
b = skimage.transform.resize(a, a.shape)
c = skimage.img_as_ubyte(b)
>>> a
array([[1, 1],
[1, 1]], dtype=uint8)
>>> b
array([[0.00392157, 0.00392157],
[0.00392157, 0.00392157]])
>>> c
array([[1, 1],
[1, 1]], dtype=uint8)