张量调整大小图像改变颜色

时间:2017-01-02 15:31:29

标签: python tensorflow

在我的算法中,resize_images会将图像颜色更改为错误。为什么?我的图像是375行1242 colum 3 channel

# Typical setup to include TensorFlow.
import tensorflow as tf
import matplotlib.pyplot as plt

# Make a queue of file names including all the JPEG images files in the relative
# image directory.
filename_queue = tf.train.string_input_producer(
   tf.train.match_filenames_once("./MNIST_data/*.png"))

reader = tf.WholeFileReader()
key, value = reader.read(filename_queue)

image_f = tf.image.decode_png(value) # use png or jpg decoder based on your files.
image   = tf.image.resize_images(image_f, [375, 1242])

#Generate batch
# num_preprocess_threads = 1
# min_queue_examples = 256
# batch_size=2;
# images = tf.train.shuffle_batch(
    # [image],
    # batch_size=batch_size,
    # num_threads=num_preprocess_threads,
    # capacity=min_queue_examples + 3 * batch_size,
    # min_after_dequeue=min_queue_examples)

init_op = tf.initialize_all_variables()

with tf.Session() as sess:
  sess.run(init_op)

  # Start populating the filename queue.
  coord = tf.train.Coordinator()
  threads = tf.train.start_queue_runners(coord=coord)
  my_image = image.eval() #here is your image Tensor :) 
  print(my_image.shape)
  fig = plt.figure()
  plt.imshow(my_image)
  plt.show()

  coord.request_stop()
  coord.join(threads)

2 个答案:

答案 0 :(得分:1)

引用tf.resize_images的文档,

  

如果原始宽高比与大小不同,则调整大小的图像将会失真。为避免扭曲,请参阅resize_image_with_crop_or_pad

您的宽高比不正确,因此扭曲图像的颜色似乎正在发生变化。如果您不希望这种情况发生,请使用resize_image_with_crop_or_pad

请开始阅读文件。他们会回答你一半以上的问题。

答案 1 :(得分:0)

接受的答案不正确。

tf.image.resize确实会更改纵横比,但这不会影响颜色图。使用tf.image.resize_image_with_crop_or_pad 也无法解决颜色失真。

颜色图由两个规则确定。如果图像值是整数,则它们使用从[0,255]开始的比例。如果类型是浮点型,则从[0.0,1.0]映射。

缩放时,调整大小将隐藏整数以浮点数,但不会重新调整值。这可能会导致[0.0,255.0]中的值将色彩表丢掉。

要进行补救,您可以使用tf.keras.layers.experimental.preprocessing.Rescaling(1./255)将值转换回int或缩放[0.0,1.0]中的值。

无论如何,这通常是一个好主意,因为模型倾向于处理较小的值要比处理较大的值更好,并且您可以缩放其他特征以使它们在相同的范围内。而且,强制转换为整数会损失少量的方差。