Imagen de complementos de TensorFlow: Operaciones

Ver en TensorFlow.org Ejecutar en Google Colab Ver fuente en GitHub Descargar cuaderno

Visión general

Este cuaderno demostrará cómo usar algunas operaciones de imagen en los complementos de TensorFlow.

Aquí está la lista de operaciones de imágenes que cubrirá en este ejemplo:

Configuración

pip install -q -U tensorflow-addons
import tensorflow as tf
import numpy as np
import tensorflow_addons as tfa
import matplotlib.pyplot as plt

Preparar e inspeccionar imágenes

Descarga las imagenes

img_path = tf.keras.utils.get_file('tensorflow.png','https://tensorflow.org/images/tf_logo.png')
Downloading data from https://tensorflow.org/images/tf_logo.png
40960/39781 [==============================] - 0s 3us/step

Inspecciona las imágenes

Icono de TensorFlow

img_raw = tf.io.read_file(img_path)
img = tf.io.decode_image(img_raw)
img = tf.image.convert_image_dtype(img, tf.float32)
img = tf.image.resize(img, [500,500])

plt.title("TensorFlow Logo with shape {}".format(img.shape))
_ = plt.imshow(img)

png

Haz una versión en blanco y negro

bw_img = 1.0 - tf.image.rgb_to_grayscale(img)

plt.title("Mask image with shape {}".format(bw_img.shape))
_ = plt.imshow(bw_img[...,0], cmap='gray')

png

Juega con tfa.image

Filtrado medio

El filtrado medio es una técnica de filtrado que se utiliza a menudo para eliminar el ruido de una imagen o señal. La idea es recorrer la imagen píxel a píxel y reemplazarla con los valores medios de los píxeles vecinos.

mean = tfa.image.mean_filter2d(img, filter_shape=11)
_ = plt.imshow(mean)

png

Girar

Esta operación rota la imagen dada por el ángulo (en radianes) introducido por el usuario.

rotate = tfa.image.rotate(img, tf.constant(np.pi/8))
_ = plt.imshow(rotate)

png

Transformar

Esta operación transforma la imagen dada sobre la base del vector de transformación proporcionado por el usuario.

transform = tfa.image.transform(img, [1.0, 1.0, -250, 0.0, 1.0, 0.0, 0.0, 0.0])
_ = plt.imshow(transform)

png

HSV aleatorio en YIQ

Esta operación cambia la escala de color de una imagen RGB dada a YIQ, pero aquí los valores de saturación y tonalidad delta se seleccionan aleatoriamente del rango dado.

delta = 0.5
lower_saturation = 0.1
upper_saturation = 0.9
lower_value = 0.2
upper_value = 0.8
rand_hsvinyiq = tfa.image.random_hsv_in_yiq(img, delta, lower_saturation, upper_saturation, lower_value, upper_value)
_ = plt.imshow(rand_hsvinyiq)

png

Ajustar HSV en YIQ

Esta operación cambia la escala de color de una imagen RGB dada a YIQ, pero aquí, en lugar de elegir aleatoriamente, los valores de saturación y tonalidad delta son entradas del usuario.

delta = 0.5
saturation = 0.3
value = 0.6
adj_hsvinyiq = tfa.image.adjust_hsv_in_yiq(img, delta, saturation, value)
_ = plt.imshow(adj_hsvinyiq)

png

Deformación de imagen densa

Esta operación es para la deformación no lineal de cualquier imagen especificada por el campo de flujo del vector de compensación (aquí se utilizan valores aleatorios, por ejemplo).

input_img = tf.image.convert_image_dtype(tf.expand_dims(img, 0), tf.dtypes.float32)

flow_shape = [1, input_img.shape[1], input_img.shape[2], 2]
init_flows = np.float32(np.random.normal(size=flow_shape) * 2.0)
dense_img_warp = tfa.image.dense_image_warp(input_img, init_flows)
dense_img_warp = tf.squeeze(dense_img_warp, 0)
_ = plt.imshow(dense_img_warp)

png

Transformada de distancia euclidiana

Esta operación actualiza el valor de píxel con la distancia euclidiana desde el píxel de primer plano hasta el de fondo.

  • Nota: Solo toma una imagen binaria y da como resultado una imagen transformada. Si se proporciona una imagen diferente, el resultado es una imagen con un solo valor.
gray = tf.image.convert_image_dtype(bw_img,tf.uint8)
# The op expects a batch of images, so add a batch dimension
gray = tf.expand_dims(gray, 0)
eucid = tfa.image.euclidean_dist_transform(gray)
eucid = tf.squeeze(eucid, (0, -1))
_ = plt.imshow(eucid, cmap='gray')

png