我正在寻找有关如何从输入图像中减去平均图像的代码段。我的图像意味着一个numpy数组:
IMG_MEAN = np.array((104.00698793,116.66876762,122.67891434), dtype=np.float32)
我猜减法部分就像是
img = tf.subtract(img, mean_img)
但是如何创建与img具有相同形状的mean_image
答案 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 Glossary和numpy Broadcasting以获取更多信息。
如何创建与img相同形状的mean_image?
您可以尝试:
tf.reshape(tf.tile(m, [tf.reduce_prod(tf.shape(img)[:-1])]),
tf.shape(img)).eval()