如何将图像序列读作3d张量?

时间:2016-07-25 13:54:21

标签: python tensorflow

作为我正在研究的CNN的输入,我想使用一系列图像(在转换层中使用3D卷积)。

但是,我已经无法将图像读取为可以用于计算的3D张量。

这是我的原始尝试:

def get_sequence_as_tensor(folder):
    images = [folder + "/depth-%i.png" for i in range(15)]

    tensor = tf.zeros(shape=(480, 640, 15), dtype=tf.float32)
    for i, image in enumerate(images):
        img = tf.image.decode_png(image)
        img_float = tf.cast(img, tf.float32)
        img_float = tf.reshape(img_float, (480, 640))
        tensor[:, :, i] = img_float

    return tensor

哪个已经失败,因为我无法使用带有张量的索引表示法,正如我对numpy数组所期望的那样。

TypeError: 'Tensor' object does not support item assignment

在一系列图像中读取3d张量的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

我建议将图像组合成张量流之外的numpy数组,然后将它们传递给占位符。

这样的事情应该有效。

filename = tf.placeholder("string")
png_string = tf.read_file(filename)
img = tf.image.decode_png(png_string)
img_float = tf.cast(img, tf.float32)
img_float = tf.reshape(img_float, (480, 640))

images = tf.placeholder("float", (480, 640, 15))
output = some_operation(images)

sess = tf.Session()

images_array = np.zeros((480, 640, 15), np.float32)
for i, image in enumerate(filenames):
    images_array[:,:,i] = sess.run(img_float, feed_dict{filename: image})

out = sess.run(output, feed_dict={images: images_array})

我希望这会有所帮助。