skimage.transform.rescale 为输入图像添加一个额外的维度
skimage.transform.rescale adds an extra dimension to input image
当使用 skimage.transform.rescale()
时,当我的输入图像只有 2 维时,我得到了一个具有 3 维的输出图像数组。
from skimage import io, color, transform
image = io.imread(r'C:\Users\ParthD\PycharmProjects\pythonProject\test_images.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)
对此我得到的输出为:
(397, 602)
(198, 301, 2)
值 2 的附加维度在哪里被加起来,我不确定。我检查了 rescale 函数文档,但没有任何参数有助于这个额外的维度。
所以问题是通道维度被解释为空间维度。
您应该传递 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, scale=0.5, anti_aliasing=True)
x2 = transform.rescale(q, scale=0.5, anti_aliasing=True, multichannel=True)
x1.shape # (198, 301, 2)
x2.shape # (198, 301, 3)
所以 transform.rescale
将您的阵列视为形状为 (397, 602, 3) 的 3D 图像,它向下延伸到 (198, 301, 2),也与通道一起插值,就好像它们是另一个空间维度。
如果您的图像是灰度图像,没有通道维度,则不需要传递 multichannel=True
标志。这将导致最后一个轴被视为通道,并且您会得到不需要的输出。
示例:
q1 = np.zeros((397, 602))
x3 = transform.rescale(q1, scale=0.5, anti_aliasing=True, multichannel=True)
x4 = transform.rescale(q1, scale=0.5, anti_aliasing=True)
x3.shape # (198, 602)
x4.shape # (198, 301)
可以参考docs
当使用 skimage.transform.rescale()
时,当我的输入图像只有 2 维时,我得到了一个具有 3 维的输出图像数组。
from skimage import io, color, transform
image = io.imread(r'C:\Users\ParthD\PycharmProjects\pythonProject\test_images.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)
对此我得到的输出为:
(397, 602)
(198, 301, 2)
值 2 的附加维度在哪里被加起来,我不确定。我检查了 rescale 函数文档,但没有任何参数有助于这个额外的维度。
所以问题是通道维度被解释为空间维度。
您应该传递 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, scale=0.5, anti_aliasing=True) x2 = transform.rescale(q, scale=0.5, anti_aliasing=True, multichannel=True) x1.shape # (198, 301, 2) x2.shape # (198, 301, 3)
所以 transform.rescale
将您的阵列视为形状为 (397, 602, 3) 的 3D 图像,它向下延伸到 (198, 301, 2),也与通道一起插值,就好像它们是另一个空间维度。
如果您的图像是灰度图像,没有通道维度,则不需要传递 multichannel=True
标志。这将导致最后一个轴被视为通道,并且您会得到不需要的输出。
示例:
q1 = np.zeros((397, 602)) x3 = transform.rescale(q1, scale=0.5, anti_aliasing=True, multichannel=True) x4 = transform.rescale(q1, scale=0.5, anti_aliasing=True) x3.shape # (198, 602) x4.shape # (198, 301)
可以参考docs