Tensorflow:如何减去平均图像?

时间:2017-02-10 13:39:43

标签: tensorflow

我正在寻找有关如何从输入图像中减去平均图像的代码段。我的图像意味着一个numpy数组:

IMG_MEAN = np.array((104.00698793,116.66876762,122.67891434), dtype=np.float32)

我猜减法部分就像是

img = tf.subtract(img, mean_img)

但是如何创建与img具有相同形状的mean_image

3 个答案:

答案 0 :(得分:4)

假设img是一个矩阵,大小是(100,100,3) rgb mean是[1,2,3]

img = tf.ones([100, 100, 3], dtype=tf.float32) #(100, 100, 3)
mean = tf.constant([1, 2, 3], dtype=tf.float32) # (3)
mean = tf.reshape(mean, [1, 1, 3])

img_m = img - mean

with tf.Session() as sess:
    a = sess.run(img_m) # shape of a (100, 100, 3)
    # a[:,:,0] = 0
    # a[:,:,1] = -1
    # a[:,:,1] = -2

答案 1 :(得分:1)

最好在https://www.tensorflow.org/api_docs/python/tf/image/per_image_standardization中使用tf.image.per_image_standardization

希望这有帮助。

答案 2 :(得分:0)

只要img = tf.subtract(img, mean_img)img)的最后一维为3,

tf.shape(img)[-1]就是正确的。

您可以查看Broadcasting operation in tensorflow Glossarynumpy Broadcasting以获取更多信息。

  

如何创建与img相同形状的mean_image?

您可以尝试:

tf.reshape(tf.tile(m, [tf.reduce_prod(tf.shape(img)[:-1])]),
           tf.shape(img)).eval()