【问题标题】:skimage.transform.resize() to the original sizeskimage.transform.resize() 到原始大小
【发布时间】:2022-01-17 22:06:30
【问题描述】:
a = np.array([[1,1],[1,1]])
skimage.transform.resize(a, (a.shape))

返回

array([[6.98491931e-10, 6.98491931e-10],
       [6.98491931e-10, 6.98491931e-10]])

我期望输出与原始矩阵相同,因为我没有缩小尺寸。是用零填充矩阵吗?

【问题讨论】:

    标签: resize scikit-image


    【解决方案1】:

    简短回答。虽然不是最佳解决方案,但您可以使用 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-14
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 2017-03-09
      • 2015-01-25
      • 1970-01-01
      相关资源
      最近更新 更多