tf.image.random_flip_left_right()一起显示多个图像

时间:2018-10-14 10:56:42

标签: python tensorflow

我想在输入管道中随机翻转几个不同大小的输入图像。 翻转需要针对不同的图像保持一致-要么全部翻转,要么全部不翻转。 由于使用tf.image.random_flip_left_right()不足以解决此问题,因此我改为这样做:

images = [img1, img2]
def fliplr(*args):
    return [tf.image.flip_left_right(t) for t in args]
def id(*args):
    return args
img1, img2 = tf.cond(tf.random_uniform([1]) > 0.5, fliplr(images), id(images), name='fliplr')

这是tf.Dataset.map()与我的输入数据集对象一起调用的函数的一部分。

但是我从flip_left_right行中收到此错误:

  

ValueError:两个形状的尺寸1必须相等,但分别为3和1。   形状为[240,320,3]和[240,320,1]。

     

将形状0与其他形状合并。用于输入形状为[240,320,3],[240,320,1]的“ flip_left_right / image”(操作:“ Pack”)。

我认为这是因为我的图像大小不同(240x320,1或3通道),但我不明白为什么这很重要。

如何解决此错误?或者,是否有更好的方法来获取我想要的内容,从而避免出现此错误?

我正在使用TensorFlow-1.8(但可以根据需要进行升级)。

1 个答案:

答案 0 :(得分:2)

就这样吗?

do_flip = tf.random_uniform([]) > 0.5
img1 = tf.cond(do_flip, lambda: tf.image.flip_left_right(img1), lambda: img1)
img2 = tf.cond(do_flip, lambda: tf.image.flip_left_right(img2), lambda: img2)