tf.image.decode_jpeg()
對於jpg
圖像,Tensorflow的功能與scipy.misc.imread()
不同。雖然圖像看起來相似,但像素值不同。tensorflow爲什麼解碼jpeg圖像與scipy imread不同?
import numpy as np
import scipy
import tensorflow as tf
import matplotlib.pyplot as plt
def minimal_example():
def _bytes_feature(value):
return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))
tffilename = 'astronaut.tfrecords'
writer = tf.python_io.TFRecordWriter(tffilename)
#image_source = 'https://upload.wikimedia.org/wikipedia/commons/8/88/Astronaut-EVA.jpg'
image_path = 'astronaut.jpg'
image_file = open(image_path,'rb')
image = image_file.read()
image_scipy = scipy.misc.imread(image_path)
example = tf.train.Example(features=tf.train.Features(feature={'image':_bytes_feature(image)}))
writer.write(example.SerializeToString())
writer.close()
record_iterator = tf.python_io.tf_record_iterator(path=tffilename)
example = tf.train.Example()
example.ParseFromString(next(record_iterator))
image = example.features.feature['image'].bytes_list.value[0]
image_tf = tf.image.decode_jpeg(image).eval(session=tf.Session())
fig = plt.figure()
ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122)
ax1.imshow(image_scipy)
ax2.imshow(image_tf)
print('Reconstruction Error', np.sum(np.abs(image_tf - image_scipy)))
plt.show()
結果:
Reconstruction Error 3420883624
這是一個錯誤還是我做錯了什麼?
第一次聽到。很有意思! scipy似乎使用libjpeg-dev(通過PIL/Pillow),而tensorflow可能使用[libjpeg-turbo](https://github.com/tensorflow/tensorflow/issues/4807)。 – sascha