Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

TensorFlow Addons Image: Operations

Visualizza su TensorFlow.org Esegui in Google Colab Visualizza sorgente su GitHub Scarica notebook

Panoramica

Questo blocco note mostrerà come utilizzare alcune operazioni sulle immagini in TensorFlow Addons.

Ecco l'elenco delle operazioni sulle immagini che tratteremo 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

Prepara e controlla 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 2us/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 è quella 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 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 di colore di una data immagine RGB in YIQ, ma qui i valori di tonalità e saturazione delta 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)
/tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_addons/utils/resource_loader.py:103: UserWarning: You are currently using TensorFlow 2.3.0 and trying to load a custom op (custom_ops/image/_distort_image_ops.so).
TensorFlow Addons has compiled its custom ops against TensorFlow 2.2.0, and there are no compatibility guarantees between the two versions. 
This means that you might get segfaults when loading the custom op, or other kind of low-level errors.
 If you do, do not file an issue on Github. This is a known limitation.

It might help you to fallback to pure Python ops with TF_ADDONS_PY_OPS . To do that, see https://github.com/tensorflow/addons#gpucpu-custom-ops 

You can also change the TensorFlow version installed on your system. You would need a TensorFlow version equal to or above 2.2.0 and strictly below 2.3.0.
 Note that nightly versions of TensorFlow, as well as non-pip TensorFlow like `conda install tensorflow` or compiled from source are not supported.

The last solution is to find the TensorFlow Addons version that has custom ops compatible with the TensorFlow installed on your system. To do that, refer to the readme: https://github.com/tensorflow/addons
  UserWarning,

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

Dense Image Warp

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