Addons TensorFlow Immagine: Operazioni

Visualizza su TensorFlow.org Esegui in Google Colab Visualizza la fonte su GitHub Scarica taccuino

Panoramica

Questo notebook dimostrerà come utilizzare alcune operazioni sulle immagini in TensorFlow Addons.

Ecco l'elenco delle operazioni sulle immagini che tratterai in questo esempio:

Impostare

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

Preparare e ispezionare le immagini

Scarica le immagini

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

Ispeziona le immagini

Icona 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

Crea una versione in bianco e nero

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

Gioca con tfa.image

Filtraggio medio

Il filtraggio medio è una tecnica di filtraggio, spesso utilizzata per rimuovere il rumore da un'immagine o da un segnale. L'idea è di scorrere l'immagine pixel per pixel e sostituirla con i valori medi dei pixel vicini.

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

png

Ruotare

Questa operazione ruota l'immagine data dell'angolo (in radianti) inserito dall'utente.

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

png

Trasformare

Questa operazione trasforma l'immagine data in base al vettore di trasformazione dato dall'utente.

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 casuale in YIQ

Questa operazione cambia la scala dei colori di una data immagine RGB in YIQ, ma qui i valori di tonalità delta e saturazione vengono scelti casualmente dall'intervallo specificato.

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

Regola HSV in YIQ

Questa operazione cambia la scala dei colori di una data immagine RGB in YIQ ma qui invece di scegliere casualmente, i valori di tonalità delta e saturazione sono input dall'utente.

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

Deformazione immagine densa

Questa operazione è per la deformazione non lineare di qualsiasi immagine specificata dal campo di flusso del vettore offset (qui si usano valori casuali per esempio).

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

Trasformata della distanza euclidea

Questa operazione aggiorna il valore del pixel con la distanza euclidea dal pixel in primo piano a quello di sfondo.

  • Nota: richiede solo un'immagine binaria e produce un'immagine trasformata. Se viene fornita un'immagine diversa, risulta in un'immagine con un valore singolo
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