Сохраняйте тензоры как изображения в TensorFlow

Это может быть простой вопрос. Я просто пытаюсь сделать радоновое преобразование изображения и сохранить его с помощью функций в 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)

1 ответ

Решение

Проблема в том, что функция радон возвращает значения, слишком высокие для тензорного потока. 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

Другие вопросы по тегам