tensorflow image_resize搞乱未知图像大小的图像

时间:2016-05-04 15:35:36

标签: python tensorflow

我有一个可变大小的图像列表,并希望将它们标准化为256x256大小。我使用了以下代码

import tensorflow as tf
import matplotlib.pyplot as plt

file_contents = tf.read_file('image.jpg')
im = tf.image.decode_jpeg(file_contents)
im = tf.image.resize_images(im, 256, 256)

sess = tf.Session()
sess.run(tf.initialize_all_variables())

img = sess.run(im)

plt.imshow(img)
plt.show()

然而,tf.resize_images()往往会弄乱图像。但是,使用tf.reshape()似乎允许resize_image()正常运行

Tensorflow版本:0.8.0

原始图片: enter image description here

调整后的图片: enter image description here

我知道skimage包可以处理我需要的东西,但我希望享受tf.train.shuffle_batch()的功能。我试图避免维护2个相同的数据集(具有1个固定的图像大小),因为Caffe似乎没有处理它们的问题。

1 个答案:

答案 0 :(得分:3)

这是因为image_resize()正在相邻像素之间执行插值,并返回浮点数而不是0-255范围内的整数。这就是为什么NEAREST_NEIGHBOR可以工作的原因:它可以获取其中一个近像素的值,而无需进行进一步的数学运算。 假设您有一些值为240,241的相邻像素.NEAREST_NEIGHBOR将返回240或241.使用任何其他方法,该值可能类似于240.5,并且在不舍入的情况下返回,我有意识地假设您可以决定什么是更好的为你(地板,向上等)。 另一方面,当面向浮点值时,plt.imshow()仅解释小数部分,就好像它们是0.0到1.0之间的完整比例的像素值。 为了使上述代码有效,可能的解决方案之一是:

import numpy as np
plt.imshow(img.astype(np.uint8))