繁体   English   中英

在TensorFlow中将张量保存为图像

[英]Save tensors as images in TensorFlow

这可能是一个简单的问题。 我只是想对图像进行radon转换并使用TensorFlow中的函数保存它。 但是结果不对。 我知道我可以使用plt.imsave()正确保存图像,但是我想知道如何在TensorFlow中进行操作。

我是TensorFlow的新手,感谢您的帮助。

这是我使用的shepp-logan.jpg图片。 它是尺寸为64 * 64的灰度图像

这是保存的图像

这是我的代码。

from skimage.transform import radon,iradon
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np

sess = tf.Session()
img = plt.imread('shepp-logan.jpg')
theta = np.linspace(0., 180., max(img.shape), endpoint=False)
sinogram = radon(img, theta=theta, circle=True)
sinogram = tf.cast(sinogram, tf.uint8)
sinogram = tf.expand_dims(sinogram, -1)
sinogram = tf.image.encode_jpeg(sinogram, quality=100, format='grayscale')
writer = tf.write_file('test_sinogram.jpg', sinogram)
sess.run(writer)

问题在于函数radon对于tensorflow返回的值太高了。 Tensorflow希望每个通道的值在0到255( uint8 )之间。

我没想到为什么,但是在查看了sinogram中的值之后,我进行了快速测试,并决定除以np.max(sinogram) ,结果看起来更接近您的预期:)

from skimage.transform import radon,iradon
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np

sess = tf.Session()
img = plt.imread('shepp-logan.jpg')
theta = np.linspace(0., 180., max(img.shape), endpoint=False)
sinogram = radon(img, theta=theta, circle=True)

# scaling the values here
sinogram = 255*sinogram/np.max(sinogram)

sinogram = tf.cast(sinogram, tf.uint8)
sinogram = tf.expand_dims(sinogram, -1)
sinogram = tf.image.encode_jpeg(sinogram, quality=100, format='grayscale')
writer = tf.write_file('test_sinogram.jpg', sinogram)
sess.run(writer)

至于我建议您使用的张量板,您必须使用tf.summary.image: https ://www.tensorflow.org/api_docs/python/tf/summary/image

这是张量板的指南: https ://www.tensorflow.org/programmers_guide/summaries_and_tensorboard

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM