减去图像'对于Tensorflow中的一批图像来说,它本身就意味着什么

时间:2017-06-15 20:07:19

标签: image tensorflow normalization

我想在给出一批图像的情况下从图像中减去图像的平均值。

显然,tf.image.per_image_standardization不是我想要的,因为我不想除以标准偏差。

并且frames_normalized = tf.map_fn(lambda frame: tf.reduce_mean(frame, axis=[2]), frames_contrast_adjust)不是我想要的,因为这会减少原始图像的尺寸。也就是说,如果单个图像的尺寸是[112,112,3],则tf.reduce_mean图像的结果将具有[112,112]的形状。因此,当frame_normalized是一批大小为[?,112,112,3]的图像时,frames_contrast_adjust的大小将变为:[?,?,112,3]。

请注意,我确实想要使用队列。

非常感谢任何帮助!!

2 个答案:

答案 0 :(得分:1)

如果您希望op的行为几乎与per_image_standadization相似但没有差异,您可以看看tf.image.per_image_standadization是如何实现的,并删除与方差相关的所有内容(我对其进行了评论):

image = ops.convert_to_tensor(image, name='image')
image = control_flow_ops.with_dependencies(_Check3DImage(image, require_static=False), image)
num_pixels = math_ops.reduce_prod(array_ops.shape(image))

image = math_ops.cast(image, dtype=dtypes.float32)
image_mean = math_ops.reduce_mean(image)

#variance = (math_ops.reduce_mean(math_ops.square(image)) -math_ops.square(image_mean))
#variance = gen_nn_ops.relu(variance)
#stddev = math_ops.sqrt(variance)

# Apply a minimum normalization that protects us against uniform images.
#min_stddev = math_ops.rsqrt(math_ops.cast(num_pixels, dtypes.float32))
#pixel_value_scale = math_ops.maximum(stddev, min_stddev)
pixel_value_offset = image_mean

image = math_ops.subtract(image, pixel_value_offset)
#image = math_ops.div(image, pixel_value_scale)
return image

答案 1 :(得分:0)

通过将keep_dims中的tf.reduce_mean参数设置为true,可以解决问题。现在: tf.map_fn(lambda frame: tf.reduce_mean(frame, axis=[2], keep_dims=True), frames_contrast_adjust)

为了从图像本身中减去图像的平均值,我做了以下几点:

frames_normalized = tf.map_fn(lambda frame: frame - tf.reduce_mean(frame, axis=[2], keep_dims=True), input_frames)