skimage.transform.rescale为输入图像添加了额外的尺寸

问题描述

使用<webview src="https://mail.google.com/" useragent="Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko"></webview> 时,当我的输入图像仅为2维时,我得到一个输出图像数组,该数组具有3维。

skimage.transform.rescale()

为此,我得到的输出为:

from skimage import io,color,transform

image = io.imread(r'C:\Users\ParthD\PycharmProjects\pythonProject\test_images\6.png')
image_bw = color.rgb2gray(color.rgba2rgb(image))
image_rescaled = transform.rescale(image,scale=0.5,anti_aliasing=True)

print(image_bw.shape)
print(image_rescaled.shape)

我不确定将值2附加的维度累加在哪里。我检查了重新缩放功能文档,但没有参数有助于增加尺寸。

解决方法

所以问题在于 channel 维度被解释为空间维度。

您应该传递transform.rescale multichannel=True标志,以免影响频道:

image_rescaled = transform.rescale(image,scale=0.5,anti_aliasing=True,multichannel=True)
  • 示例:

    q = np.zeros((397,602,3))
    x1 = transform.rescale(q,anti_aliasing=True)
    x2 = transform.rescale(q,multichannel=True)
    x1.shape  # (198,301,2)
    x2.shape  # (198,3)
    

因此,transform.rescale将数组视为形状为(397、602、3)的3D图像,该图像下降到(198、301、2),并与通道一起插值,就好像它们是另一个空间维度。

如果图像是灰色图像,没有通道尺寸,则不需要传递multichannel=True标志。这会将最后一个轴视为通道,并且会得到不希望的输出。

  • 示例:

    q1 = np.zeros((397,602))
    x3 = transform.rescale(q1,multichannel=True)
    x4 = transform.rescale(q1,anti_aliasing=True)
    x3.shape  # (198,602)
    x4.shape  # (198,301)
    

您可以参考docs