在 TensorFlow 中将张量保存为图像
Save tensors as images in TensorFlow
这可能是一个简单的问题。我只是想对图像进行氡变换并使用 TensorFlow 中的函数保存它。但是结果不对。我知道我可以使用 plt.imsave() 正确保存图像,但我想知道如何在 TensorFlow 中执行此操作。
我是 TensorFlow 的新手,感谢您的帮助。
This is the shepp-logan.jpg
image I use. It is a grayscale image with size 64*64
This is the saved image
这是我的代码。
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 returns 的值对于 tensorflow 来说太高了。
Tensorflow 希望每个通道的值介于 0 到 255 (uint8
) 之间。
我没看为什么会这样,但在查看 sinogram
中的值后我做了一个快速测试并决定除以 np.max(sinogram)
结果看起来更接近你的结果expect 我相信 :)
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)
至于tensorboard,我推荐你用,你得用tf.summary.image:https://www.tensorflow.org/api_docs/python/tf/summary/image
这是张量板指南:https://www.tensorflow.org/programmers_guide/summaries_and_tensorboard
这可能是一个简单的问题。我只是想对图像进行氡变换并使用 TensorFlow 中的函数保存它。但是结果不对。我知道我可以使用 plt.imsave() 正确保存图像,但我想知道如何在 TensorFlow 中执行此操作。
我是 TensorFlow 的新手,感谢您的帮助。
This is the shepp-logan.jpg
image I use. It is a grayscale image with size 64*64
This is the saved image
这是我的代码。
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 returns 的值对于 tensorflow 来说太高了。
Tensorflow 希望每个通道的值介于 0 到 255 (uint8
) 之间。
我没看为什么会这样,但在查看 sinogram
中的值后我做了一个快速测试并决定除以 np.max(sinogram)
结果看起来更接近你的结果expect 我相信 :)
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)
至于tensorboard,我推荐你用,你得用tf.summary.image:https://www.tensorflow.org/api_docs/python/tf/summary/image
这是张量板指南:https://www.tensorflow.org/programmers_guide/summaries_and_tensorboard