在我正在做的一个课程指导项目中,教官用
from skimage.transform import rescale
image_rescaled = rescale(rescale(image,0.5),2.0)扭曲图像。
在我自己的设备上发生的错误(这个项目的jupyter笔记本上没有出现错误,可能是由于模块和python版本的不同造成的):image_rescaled的频道数量由1增加。
=>,images_normal.shape = (256,256,256,3)和images_with_twice_reshape.shape=(256,256,256,4)
如果我使用rescaled(rescale(image,2.0),0.5),这个问题就不会出现。
这是在python/skimage的新版本中,还是我做错了什么?
对于其他参考资料(没有从源代码中删除任何内容,而是用#s突出显示重要部分):
import os
import re
from scipy import ndimage, misc
from skimage.transform import resize, rescale
from matplotlib import pyplot
import numpy as np
def train_batches(just_load_dataset=False):
batches = 256 # Number of images to have at the same time in a batch
batch = 0 # Number if images in the current batch (grows over time and then resets for each batch)
batch_nb = 0 # Batch current index
ep = 4 # Number of epochs
images = []
x_train_n = []
x_train_down = []
x_train_n2 = [] # Resulting high res dataset
x_train_down2 = [] # Resulting low res dataset
for root, dirnames, filenames in os.walk("data/cars_train.nosync"):
for filename in filenames:
if re.search("\.(jpg|jpeg|JPEG|png|bmp|tiff)$", filename):
filepath = os.path.join(root, filename)
image = pyplot.imread(filepath)
if len(image.shape) > 2:
image_resized = resize(image, (256, 256)) # Resize the image so that every image is the same size
#########################
x_train_n.append(image_resized) # Add this image to the high res dataset
x_train_down.append(rescale(rescale(image_resized, 0.5), 2.0)) # Rescale it 0.5x and 2x so that it is a low res image but still has 256x256 resolution
########################
# >>>> x_train_down.append(rescale(rescale(image_resized, 2.0), 0.5)), this one works and gives the same shape of x_train_down and x_train_n.
########################
batch += 1
if batch == batches:
batch_nb += 1
x_train_n2 = np.array(x_train_n)
x_train_down2 = np.array(x_train_down)
if just_load_dataset:
return x_train_n2, x_train_down2
print('Training batch', batch_nb, '(', batches, ')')
autoencoder.fit(x_train_down2, x_train_n2,
epochs=ep,
batch_size=10,
shuffle=True,
validation_split=0.15)
x_train_n = []
x_train_down = []
batch = 0
return x_train_n2, x_train_down2使用上面的代码,我得到了x_train_n2.shape = (256,256,256,3)和x_train_down2.shape=(256,256,256,4)。
发布于 2020-07-18 05:51:43
我得以将你的问题转载如下:
import numpy as np
from skimage.transform import resize, rescale
image = np.random.random((512, 512, 3))
resized = resize(image, (256, 256))
rescaled2x = rescale(
rescale(resized, 0.5),
2,
)
print(rescaled2x.shape)
# prints (256, 256, 4)问题是resize可以推断出你的最终维度是通道/RGB,因为你给它一个2D的形状。另一方面,rescale将你的数组看作一个形状的三维图像(256,256,3),下降到(128,128,2),沿着颜色进行插值,就好像它们是另一个空间维,然后重采样到(256,256,4)。
如果您查看rescale documentation,您会发现“多通道”参数,描述为:
图像的最后一个轴被解释为多个通道或另一个空间维度。
所以,更新我的代码:
rescaled2x = rescale(
rescale(resized, 0.5, multichannel=True),
2,
multichannel=True,
)
print(rescaled2x.shape)
# prints (256, 256, 3)https://stackoverflow.com/questions/62962032
复制相似问题