tensorflow image_resize 在未知图像大小上弄乱了图像

24h*_*urs 1 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()
Run Code Online (Sandbox Code Playgroud)

但是,tf.resize_images()往往会弄乱图像。但是,使用tf.reshape()似乎可以resize_image()正确运行

Tensorflow 版本:0.8.0

原图: 在此处输入图片说明

调整大小的图像: 在此处输入图片说明

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

小智 5

发生这种情况是因为 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))
Run Code Online (Sandbox Code Playgroud)