4х повышение разрешения изображения с использованием ESRGAN

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

В данной статье хочу разобрать применение предобученной нейронной сети ESRGAN для увеличения разрешения изображения в четыре раза c использованием tensorflow hub.

Инструменты

Буду пользоваться языком программирования python 3.10, среда разработки - jupyter notebook.

Проведем импорт необходимых библиотек. Для работы с нейронными сетями воспользуемся tensorflow. Для работы с уже обученной моделью ESRGAN будем пользовать tensorflow hub. Также нам потребуется библиотека для работы с изображениями, возьмем PILLOW.

from PIL import Image
import tensorflow as tf
import tensorflow_hub as hub

Предподготовка изображения

Для работы с преобученной нейронной сетью входное изображение должно соответствовать критериям:

  • Картинка должна быть с плавающей запятой, преобразованной с использованием tf.cast(image, tf.float32).

  • 4-х мерные входные параметры, [batch_size, height, width, 3]. Чтобы применить сверхвысокое разрешение к одному изображению, воспользуемся tf.expand_dims(image, 0) чтобы добавить пакетное измерение.

  • Для отображения изображения, необходимо преобразовать его обратно в uint8с использованием tf.cast(tf.clip_by_value(image[index_of_image_to_display], 0, 255), tf.uint8)

Входное изображение. Размер 640х480 пикселей. (изображено ультразвуковое исследование сердца )

# определим путь к входному изображению
image_path = './result_images/frame6.jpg'

# преобразуем входное изображения согласно условиям
hr_image = tf.image.decode_image(tf.io.read_file(image_path))
image = tf.expand_dims(hr_image, 0)
image = tf.cast(image, tf.float32)
  • Изображение должно быть изображением с плавающей запятой, преобразованным с использованием tf.cast(image, tf.float32).

  • Изображение должно быть изображением с плавающей запятой, преобразованным с использованием tf.cast(image, tf.float32).

  • Изображение должно быть изображением с плавающей запятой, преобразованным с использованием tf.cast(image, tf.float32).

Работа с ESRGAN

Модель располагается в хранилище tensorflow hub.

# проведем загрузку модели
model = hub.load("https://tfhub.dev/captain-pool/esrgan-tf2/1")

# выполним 4x увеличения изображения
super_resolution = model(image)

Постобработка изображения

Преобразуем 4х картинку обратно в uint8 и сохраним в папку.

image = np.asarray(super_resolution)
image = tf.clip_by_value(image, 0, 255)
image = Image.fromarray(tf.cast(image[0], tf.uint8).numpy())
image.save('./SR.jpg'% count)

Выходное изображение. Разрешение 2560 * 1920 пикселей.

Заключение

В данной статье рассмотрено как с использованием предобученной нейронной сети ESRGAN можно увеличить изображение в четыре раза с использованием минимального количества кода.

  • Изображение должно быть изображением с плавающей запятой, преобразованным с использованием tf.cast(image, tf.float32).

  • Изображение должно быть изображением с плавающей запятой, преобразованным с использованием tf.cast(image, tf.float32).

  • Изображение должно быть изображением с плавающей запятой, преобразованным с использованием tf.cast(image, tf.float32).

  • Изображение должно быть 4-х мерным, [batch_size, height, width, 3]. Чтобы применить сверхвысокое разрешение к одному изображению, используйте tf.expand_dims(image, 0)добавить пакетное измерение.

  • Чтобы отобразить изображение, не забудьте преобразовать его обратно в uint8с использованием Изображение должно быть изображением с плавающей запятой, преобразованным с использованием tf.cast(image, tf.float32).

  • Изображение должно быть 4-х мерным, [batch_size, height, width, 3]. Чтобы применить сверхвысокое разрешение к одному изображению, используйте tf.expand_dims(image, 0)добавить пакетное измерение.

  • Чтобы отобразить изображение, не забудьте преобразовать его обратно в uint8с использованием

  • Изображение должно быть изображением с плавающей запятой, преобразованным с использованием tf.cast(image, tf.float32).

  • Изображение должно быть 4-х мерным, [batch_size, height, width, 3]. Чтобы применить сверхвысокое разрешение к одному изображению, используйте tf.expand_dims(image, 0)добавить пакетное измерение.

  • Чтобы отобразить изображение, не забудьте преобразовать его обратно в uint8с использованием

Источник: https://habr.com/ru/post/681404/


Интересные статьи

Интересные статьи

В нашем блоге Q# мы часто сосредотачиваемся на инструментах, включенных в Quantum Development Kit, новых функциях или конкретных приложениях. На этот раз давайте сделаем шаг назад и посмотрим на рабоч...
Часть 1. Часть 2. Всем привет! В этой части мы рассмотрим использование класса EventWriter и библиотеки ghcjs-dom. Читать дальше →
В этой статье я хочу продемонстрировать использование DispmanX API одноплатных компьютеров Raspberry. DispmanX API предоставляет возможность создавать на десктопе Raspberry новые отображаемые с...
Данная статья позволит тем, кто еще только начинает свою разработку или уже применяет технологию NB-IoT, составить представление о том, как можно удаленно взаимодействовать с NB-IoT устройством. ...
Как обновить ядро 1С-Битрикс без единой секунды простоя и с гарантией работоспособности платформы? Если вы не можете закрыть сайт на техобслуживание, и не хотите экстренно разворачивать сайт из бэкапа...