Skimage - 调整大小功能的奇怪结果

时间:2017-05-30 09:06:36

标签: python image image-resizing scikit-image

我正在尝试使用.jpg调整skimage.transform.resize function图片的大小。函数返回奇怪的结果(见下图)。我不确定这是一个错误还是错误使用该功能。

import numpy as np
from skimage import io, color
from skimage.transform import resize

rgb = io.imread("../../small_dataset/" + file)
# show original image
img = Image.fromarray(rgb, 'RGB')
img.show()

rgb = resize(rgb, (256, 256))
# show resized image
img = Image.fromarray(rgb, 'RGB')
img.show()

原始图片:

original

调整图片大小:

resized

我已经检查了skimage resize giving weird output,但我认为我的错误有不同的特点。

更新:rgb2lab功能也有类似的bug。

1 个答案:

答案 0 :(得分:10)

问题是 skimage 在调整图像大小后转换数组的像素数据类型。原始图像的每像素为8位,类型为UNICODE,调整大小的像素为numpy.uint8个变量。

调整大小操作正确,但结果未正确显示。为了解决这个问题,我提出了两种不同的方法:

  1. 更改生成图像的数据结构。在更改为uint8值之前,像素必须转换为0-255比例,因为它们是0-1标准化比例:

    numpy.float64
  2. 使用其他库显示图像。看一下Image library documentation,没有任何支持3xfloat64像素图像的模式。但是,scipy.misc库具有用于转换数组格式的正确工具,以便正确显示它:

    # ...
    # Do the OP operations ...
    resized_image = resize(rgb, (256, 256))
    # Convert the image to a 0-255 scale.
    rescaled_image = 255 * resized_image
    # Convert to integer data type pixels.
    final_image = rescaled_image.astype(np.uint8)
    # show resized image
    img = Image.fromarray(final_image, 'RGB')
    img.show()