TensorFlow Addons Image: Operations

Visualizza su TensorFlow.org Esegui in Google Colab Visualizza sorgente 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 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) immesso dall'utente.

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

png

Trasformare

Questa operazione trasforma l'immagine data sulla base del vettore di trasformazione fornito 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 dato.

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 in modo casuale, i valori di tonalità delta e saturazione sono input dell'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

Alterazione immagine densa

Questa operazione è per la deformazione non lineare di qualsiasi immagine specificata dal campo di flusso del vettore di offset (qui vengono usati 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 di distanza euclidea

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

  • Nota: richiede solo un'immagine binaria e produce un'immagine trasformata. Se viene fornita un'immagine diversa, si ottiene 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