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