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)
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')
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)
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)
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)
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)
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)
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)
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')